【问题标题】:Terraform 0.12 syntax to convert map of locals into list outputTerraform 0.12 语法将本地地图转换为列表输出
【发布时间】:2020-04-27 16:42:59
【问题描述】:

我有一个 Terraform 模块,其中包含这样的当地人地图...

locals {
  prod_cidrs = {
    xxx = "XX.XX.XX.XX/DV"
    yyy = "YY.YY.YY.YY/DV"
    zzz = "ZZ.ZZ.ZZ.ZZ/DV"
  }
  dev_cidrs = {
    xxx = "XX.XX.XX.XX/PD"
    yyy = "YY.YY.YY.YY/PD"
    zzz = "ZZ.ZZ.ZZ.ZZ/PD"
  }
}

...提供一些输出,例如...

output "prod_cidrs" {
  value = local.prod_cidrs
}

output "dev_cidrs" {
  value = local.dev_cidrs
}

因此消费者可以在其余组合中获取module.my_module.dev_cidrs.xxx(即或"XX.XX.XX.XX/DV")或module.my_module.prod_cidrs.yyy(即或"YY.YY.YY.YY/PD")。

现在我想提供一个额外的output,让我的消费者能够一次获取所有产品或开发 CIDR 作为列表,因此结果将是,例如prod_cidrs

["XX.XX.XX.XX/PD", "YY.YY.YY.YY/PD", "ZZ.ZZ.ZZ.ZZ/PD"]

如何在不修改当前locals 的情况下实现此目的?

【问题讨论】:

    标签: terraform


    【解决方案1】:

    如果您直接查看module.my_module.dev_cidrs 输出,您会发现它是一个映射,允许您选择module.my_module.dev_cidrs.xxx 以使用xxx 键并返回其值。

    如果您想要prod_cidrs 的值列表,那么您可以使用values function

    你的模块的调用者可以自己这样做:

    module "foo" {
      source = "./module"
    }
    
    output "dev_x" {
      value = module.foo.dev_cidrs.xxx
    }
    
    output "all_prod_map" {
      value = module.foo.prod_cidrs
    }
    
    output "all_prod_list" {
      value = values(module.foo.prod_cidrs)
    }
    

    或者你可以为你的模块添加一个额外的输出:

    locals {
      prod_cidrs = {
        xxx = "XX.XX.XX.XX/DV"
        yyy = "YY.YY.YY.YY/DV"
        zzz = "ZZ.ZZ.ZZ.ZZ/DV"
      }
      dev_cidrs = {
        xxx = "XX.XX.XX.XX/PD"
        yyy = "YY.YY.YY.YY/PD"
        zzz = "ZZ.ZZ.ZZ.ZZ/PD"
      }
    }
    
    output "prod_cidrs" {
      value = local.prod_cidrs
    }
    
    output "dev_cidrs" {
      value = local.dev_cidrs
    }
    
    output "all_prod_cidrs" {
      value = values(local.prod_cidrs)
    }
    

    然后他们可以将其用作module.foo.all_prod_cidrs

    【讨论】:

      猜你喜欢
      • 2019-06-09
      • 2020-11-17
      • 2020-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-11
      • 1970-01-01
      • 2020-07-06
      相关资源
      最近更新 更多