【问题标题】:flattening output contents of a composite map展平复合地图的输出内容
【发布时间】:2019-07-26 15:49:21
【问题描述】:

我有两个模块分别输出

output "discovery_service_hostname" { 
  value = "${aws_appmesh_virtual_service.service.name}"
}

output "discovery_service_arn" {
  value = zipmap( aws_service_discovery_service.sd[*].name, aws_service_discovery_service.sd[*].arn)
}

两者都在输出的主脚本中使用

output "services" { 
  value = {    
    "web"             = "${module.web.discovery_service_hostname}"
    "wwb-backend"     = "${module.web_backend.discovery_service_hostname}"
    "wwb-backend-n"     = "${module.web_backend_n.discovery_service_hostname}"
  }
}

在这种情况下,我将第一个模块用于 web 和 web-backend,而我将第二个模块用于 web-backend-n

我需要通过第三个脚本中的查找函数访问服务 arn,但我会避免复制整个代码来处理这两种情况

这样的最终输出

discovery_service = {
  "web" = "arn:xxx1"
  "web-backend" = "arn:xxx2"
  "web-backend-n" = {
    "web-backend-n-1" = "arn:xxx3"
    "web-backend-n-2" = "arn:xxx4
    "web-backend-n-3" = "arn:xxx5"

}

有没有办法输出类似

discovery_service = {
  "web" = "arn:xxx1"
  "web-backend" = "arn:xxx2"
  "web-backend-n-1" = "arn:xxx3"
  "web-backend-n-2" = "arn:xxx4
  "web-backend-n-3" = "arn:xxx5"
}

谢谢!

【问题讨论】:

    标签: terraform


    【解决方案1】:

    我会回答我自己的问题。解决方案是始终像这样输出地图(即使是从具有单个输出的模块):

    output "discovery_service_arn" {
      value = zipmap( [ aws_service_discovery_service.sd.name ], [ aws_service_discovery_service.sd.arn ])
    }
    

    output "discovery_service_arn" {
      value = zipmap( aws_service_discovery_service.sd[*].name, aws_service_discovery_service.sd[*].arn)
    }
    

    然后在最终脚本中使用合并来获得一个类似的地图

    output "discovery_service" {
      value = merge(
        module.web.discovery_service_arn,
        module.web_backend.discovery_service_arn,
        module.web_backend_n.discovery_service_arn
      )
    }
    

    【讨论】:

      猜你喜欢
      • 2021-06-06
      • 2015-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-14
      • 2018-09-02
      • 2014-07-13
      相关资源
      最近更新 更多