【问题标题】:Nested for loop of a definition in terraformterraform 中定义的嵌套 for 循环
【发布时间】:2022-01-11 21:14:09
【问题描述】:

我正在尝试部署一些创建多个 VM 的 terraform,然后定义一些负载平衡器规则,但我正在努力为第二个 for_each 获取正确的字符串格式

这部分

for_each = {for server in local.instances: server.instance_name =>  server}

在 aws_instance 块中工作得很好,但我需要然后迭代 serverconfig 中每个 VM 的 fwd_rules。我可以控制“配置”中的格式,所以如果只是为了能够做到这一点而获得正确的字符串格式,那就太好了。

我应该在这里设置什么?我尝试了很多不同的选项,toset、tolist、tomap、使用带有大括号、方括号等的 fwd_rules 的字符串格式,但我就是做错了。

dynamic "path_pattern" {
      for_each = toset(each.value.fwd_rules) 

地形代码:(简化)

configuration = [
  {
    "application_name" : "myapp",
    "fwd_rules" : "{'/foo/*','/bar/*'}"
  },
  {
    "application_name" : "myapp2",
    "fwd_rules" : "{'/foo2/*','/bar2/*'}"
  }]

locals {
  serverconfig = [
    for srv in var.configuration : [
      for i in range(1, srv.no_of_instances+1) : {
        instance_name = "${srv.application_name}"
        fwd_rules = "${srv.fwd_rules}"
      }
    ]
  ]
}

locals {
  instances = flatten(local.serverconfig)
}

resource "aws_instance" "my-instance" {

    for_each = {for server in local.instances: server.instance_name =>  server}
    instance_name               = each.value.instance_name
    tags = {
      Name = "${each.value.instance_name}"
    }
}

resource "aws_lb_listener_rule" "myrule" {
  for_each = {for server in local.instances: server.instance_name =>  server}

  condition {
    dynamic "path_pattern" {
      for_each = toset(each.value.fwd_rules) 
      content {
        values = [path_pattern.value]
      }
    }
  }
}

【问题讨论】:

    标签: terraform terraform-provider-aws terraform0.12+


    【解决方案1】:

    我通过以下方法解决了这个问题

    configuration = [
      {
        "application_name" : "myapp",
        "fwd_rules" : "'/foo/*','/bar/*'"
      },
      {
        "application_name" : "myapp2",
        "fwd_rules" : "'/foo2/*','/bar2/*'"
      }]
    
    locals {
      serverconfig = [
        for srv in var.configuration : [
          for i in range(1, srv.no_of_instances+1) : {
            instance_name = "${srv.application_name}"
            fwd_rules = split(",", srv.fwd_rules)
          }
        ]
      ]
    }
    
    locals {
      instances = flatten(local.serverconfig)
    }
    
    resource "aws_instance" "my-instance" {
    
        for_each = {for server in local.instances: server.instance_name =>  server}
        instance_name               = each.value.instance_name
        tags = {
          Name = "${each.value.instance_name}"
        }
    }
    
    resource "aws_lb_listener_rule" "myrule" {
      for_each = {for server in local.instances: server.instance_name =>  server}
    
      condition {
        path_pattern {
          values = each.value.fwd_rules 
        }
      }
    }
    

    解锁它的主要是功能

            fwd_rules = split(",", srv.fwd_rules)
    

    【讨论】:

      猜你喜欢
      • 2021-07-08
      • 2019-09-26
      • 2021-12-29
      • 2011-12-05
      • 2020-01-23
      • 2021-01-27
      • 2020-12-03
      • 2013-11-25
      • 1970-01-01
      相关资源
      最近更新 更多