【问题标题】:Concat strings and list variable in terraformterraform中的Concat字符串和列表变量
【发布时间】:2020-10-23 09:00:44
【问题描述】:

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

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

cidr_blocks = [data.aws_subnet.subnet1.id,data.aws_subnet.subnet2.id]

我还有一个变量,根据环境的不同,有一个具体的cidr_blocks列表要传入,以设置为例:

custom_cidrs = [""0.0.0.0/23","0.0.0.1/23","0.0.0.2/23"]

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

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

custom_cidrs = []

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

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

我使用的是 terraform 版本 0.12.28

【问题讨论】:

  • 请您编辑问题以显示您尝试了什么以及每次尝试时遇到的错误? concat 应该没问题,但你提到它不起作用,如果没有看到你尝试了什么以及你得到的错误,很难理解为什么。

标签: terraform terraform-provider-aws


【解决方案1】:

如果我对您的理解正确,您希望将数据源和自定义列表中的 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
        }

输出如下所示。

        [PS][7.0.2] tst > terraform apply --auto-approve -var "region=us-west-2"
        data.aws_subnet.public: Refreshing state...
        data.aws_subnet.private: Refreshing state...
        
        Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
        
        Outputs:
        
        all_cidrs = [
          "0.0.0.0/23",    # Custom CIDR block from var
          "0.0.0.1/23",    # Custom CIDR block from var
          "0.0.0.2/22",    # Custom CIDR block from var
          "xxx.xx.x.x/24", # Private subnet CIDR block
          "xxx.xx.x.x/24", # Public subnet CIDR block
        ]

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

【讨论】:

  • 这对我有用,我学到了一些新东西。非常感谢:)
猜你喜欢
  • 2021-04-21
  • 1970-01-01
  • 2020-11-08
  • 1970-01-01
  • 2019-01-08
  • 2019-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多