在 terraform 中连接字符串和列表变量

Mol*_*pad 6 terraform terraform-provider-aws

我需要以 ["0.0.0.0/23","0.0.0.1/23",...] 等形式将 cidr 块列表传递给模块。

我有两个从子网数据源获取的 cidr 块,我可以将其作为示例引用:

cidr_blocks = [data.aws_subnet.subnet1.id,data.aws_subnet.subnet2.id]
Run Code Online (Sandbox Code Playgroud)

我还有一个变量,根据环境,有一个特定的 cidr_blocks 列表要传入,设置为例:

custom_cidrs = [""0.0.0.0/23","0.0.0.1/23","0.0.0.2/23"]
Run Code Online (Sandbox Code Playgroud)

我想要做的是在模块中,将所有这些 cidr 连接在一起以创建一个列表。我尝试了一些不同的方法,包括 concat 和 list()。我只是无法正确理解语法。

对于某些情况,它们不会设置自定义 cidr 块,只有子网 cidrs,因此在这种情况下,我的自定义 cidr 将设置为:

custom_cidrs = []
Run Code Online (Sandbox Code Playgroud)

任何有关如何将两个输出和自定义列表合并为一个输出的帮助将不胜感激。

我想我可能必须首先从两个输出创建一个列表,然后将两个列表连接在一起,但并不完全确定。我可以用一个命令来完成吗?

我正在使用 terraform 版本 0.12.28

eke*_*ing 10

如果我的理解正确,您希望将数据源和自定义列表中的 CIDR 块连接起来。以下是如何执行此操作的示例。

        variable "custom_cidrs" {
          default = [
            "0.0.0.0/23",
            "0.0.0.1/23",
            "0.0.0.2/22"
          ]
        }
        
        data "aws_subnet" "private" {
          id = "subnet-000000qq"
        }
        
        data "aws_subnet" "public" {
          id = "subnet-000001qq"
        }
        
        locals {
          all_cidrs = setunion(
            [data.aws_subnet.private.cidr_block, data.aws_subnet.public.cidr_block],
            var.custom_cidrs
          )
        }
        
        output "all_cidrs" {
          value = local.all_cidrs
        }
Run Code Online (Sandbox Code Playgroud)

输出看起来像这样。

        variable "custom_cidrs" {
          default = [
            "0.0.0.0/23",
            "0.0.0.1/23",
            "0.0.0.2/22"
          ]
        }
        
        data "aws_subnet" "private" {
          id = "subnet-000000qq"
        }
        
        data "aws_subnet" "public" {
          id = "subnet-000001qq"
        }
        
        locals {
          all_cidrs = setunion(
            [data.aws_subnet.private.cidr_block, data.aws_subnet.public.cidr_block],
            var.custom_cidrs
          )
        }
        
        output "all_cidrs" {
          value = local.all_cidrs
        }
Run Code Online (Sandbox Code Playgroud)

要引用串联列表,请参考local.all_cidrs