Terraform:为输出指定特定的 Docker 网络名称
Terraform: Specify specific Docker Network Name for Output
我有一个连接到三个 Docker 网络的容器化网络功能 (CNF):
...
ip_address = "172.17.0.3"
ip_prefix_length = 16
ipc_mode = "private"
log_driver = "json-file"
log_opts = {}
logs = false
max_retry_count = 0
memory = 4096
memory_swap = -1
must_run = true
name = "c-router-52"
network_data = [
{
gateway = "172.17.0.1"
ip_address = "172.17.0.3"
ip_prefix_length = 16
network_name = "bridge"
},
{
gateway = "172.31.0.1"
ip_address = "172.31.0.4"
ip_prefix_length = 16
network_name = "inside-net"
},
{
gateway = "172.30.0.1"
ip_address = "172.30.0.3"
ip_prefix_length = 16
network_name = "outside-net"
},
]
network_mode = "default"
...
我正在尝试获取 'outside-net' IP 地址用作另一个容器的输入。我这样指定:
${docker_container.c-router-52.network_data[2].ip_address}
当它是第三个元素时,它工作正常....但问题是 Terraform(或 Docker,两者之一)并不总是将 'outside-net' 作为第三网络:(
有没有办法指定 [network_name="outside-net"] 而不是索引号?
由于您的代码示例不完整,我不得不在这里进行一些猜测,但看起来您想要的是从网络名称到 IP 地址的映射。您可以使用 for
expression, which you can assign to a local value 从您的资源配置中派生出这样的数据结构,以便在配置的其他地方使用:
locals {
container_ip_addresses = {
for net in docker_container.c-router-52.network_data :
net.network_name => net.ip_address
}
}
在你的模块中有了上面的定义,你可以在你的模块的其他地方引用local.container_ip_addresses
来引用这个映射,比如local.container_ip_addresses["outside-net"]
特别访问outside-net
地址.
使用您在配置中显示的 network_data
结构,local.container_ip_addresses
将具有以下值:
{
bridge = "172.17.0.3"
inside-net = "172.31.0.4"
outside-net = "172.30.0.3"
}
如果您需要访问那些 network_data
对象的其他属性,而不仅仅是 ip_address
,您可以通过使映射的值成为完整的网络对象来概括这一点:
locals {
container_networks = {
for net in docker_container.c-router-52.network_data :
net.network_name => net
}
}
...这将允许您通过网络名称键访问所有属性:
local.container_networks["outside-net"].ip_address
local.container_networks["outside-net"].gateway
local.container_networks["outside-net"].ip_prefix_length
我有一个连接到三个 Docker 网络的容器化网络功能 (CNF):
...
ip_address = "172.17.0.3"
ip_prefix_length = 16
ipc_mode = "private"
log_driver = "json-file"
log_opts = {}
logs = false
max_retry_count = 0
memory = 4096
memory_swap = -1
must_run = true
name = "c-router-52"
network_data = [
{
gateway = "172.17.0.1"
ip_address = "172.17.0.3"
ip_prefix_length = 16
network_name = "bridge"
},
{
gateway = "172.31.0.1"
ip_address = "172.31.0.4"
ip_prefix_length = 16
network_name = "inside-net"
},
{
gateway = "172.30.0.1"
ip_address = "172.30.0.3"
ip_prefix_length = 16
network_name = "outside-net"
},
]
network_mode = "default"
...
我正在尝试获取 'outside-net' IP 地址用作另一个容器的输入。我这样指定:
${docker_container.c-router-52.network_data[2].ip_address}
当它是第三个元素时,它工作正常....但问题是 Terraform(或 Docker,两者之一)并不总是将 'outside-net' 作为第三网络:(
有没有办法指定 [network_name="outside-net"] 而不是索引号?
由于您的代码示例不完整,我不得不在这里进行一些猜测,但看起来您想要的是从网络名称到 IP 地址的映射。您可以使用 for
expression, which you can assign to a local value 从您的资源配置中派生出这样的数据结构,以便在配置的其他地方使用:
locals {
container_ip_addresses = {
for net in docker_container.c-router-52.network_data :
net.network_name => net.ip_address
}
}
在你的模块中有了上面的定义,你可以在你的模块的其他地方引用local.container_ip_addresses
来引用这个映射,比如local.container_ip_addresses["outside-net"]
特别访问outside-net
地址.
使用您在配置中显示的 network_data
结构,local.container_ip_addresses
将具有以下值:
{
bridge = "172.17.0.3"
inside-net = "172.31.0.4"
outside-net = "172.30.0.3"
}
如果您需要访问那些 network_data
对象的其他属性,而不仅仅是 ip_address
,您可以通过使映射的值成为完整的网络对象来概括这一点:
locals {
container_networks = {
for net in docker_container.c-router-52.network_data :
net.network_name => net
}
}
...这将允许您通过网络名称键访问所有属性:
local.container_networks["outside-net"].ip_address
local.container_networks["outside-net"].gateway
local.container_networks["outside-net"].ip_prefix_length