0

我有一个数据管理问题,我一直在努力解决。我在 Terrafrom 之外管理了一些 Openstack 资源,我需要找到它们的 IP 地址,然后将它们添加到可以通过 Ansible 或 cloud-init 处理的列表中。这些资源有任意数量,而不是固定的列表大小或名称。

我有资源的名称,所以我正在通过 for_each 查找它们:

data "openstack_networking_port_v2" "ports" {
  for_each = toset(var.assigned_ports)
  name = "${each.key}port"
}

这会为每个资源生成一个数据源,如下所示:

data.openstack_networking_port_v2.ports["host1port"]
data.openstack_networking_port_v2.ports["host2port"]
data.openstack_networking_port_v2.ports["host3port"]

其中内容包括我通过字段跟踪的 IP 地址(为简洁起见,以下内容被截断):

data "openstack_networking_port_v2" "ports" {
    admin_state_up         = true
    all_fixed_ips          = [
        "10.1.2.3",
    ]
    all_security_group_ids = [
        "2cccdd5f-dec0-4f2e-80a3-ceefbb3625ff",
    ]
}

我想建立一个本地,它是我可以在某处使用的这些 IP 地址的列表,但我很难去任何地方,特别是因为我所追求的 IP 地址是列表中的元素 0,例如:

data.openstack_networking_port_v2.ports["host3port"].all_fixed_ips[0]

任何帮助将不胜感激。

4

1 回答 1

0

我设法通过创建如下的本地来解决它:

locals {
  ips = [ for ip in data.openstack_networking_port_v2.ports: ip.all_fixed_ips[0]]
}

我之前尝试过类似的东西,但错误地迭代:

data.openstack_networking_port_v2.ports[*]
于 2021-11-16T13:38:19.013 回答