【问题标题】:terraform iterate over loop but not all elements but specific onesterraform 遍历循环,但不是所有元素,而是特定元素
【发布时间】:2020-07-31 07:42:31
【问题描述】:

我有一个对象数组,并且只想对特定对象进行迭代(在资源中的本节上方有 count used fyi)

variable "x" {
  default = [
    first = [
      {
        a = 1
      },
      {
        b = 2
      }
    ]
    second = [
      {
        c = 3
      },
      {
        d = 4
      }
    ]
  ]
}

我将上面的数组作为输入,并希望在资源中仅循环“第二”部分的元素,有什么方法可以做到吗?

for_each = lookup(myvar, second)?

或者在我使用时,计数并循环遍历其他部分中的名称['first', 'second']

count         = length(var.names)
name          = "${element(var.names, count.index)}"

也许我可以参考它以从数组中获取正确的元素?

for_each = lookup(x[lookup(element(var.names, count.index))])

【问题讨论】:

    标签: terraform


    【解决方案1】:

    如果您修复 x 的语法:

    
    variable "x" {
      default = [ 
        {
        first = [
          {
            a = 1
          },
          {
            b = 2
          }
        ]},
        {
         second = [
          {
            c = 3
          },
          {
            d = 4
          }
        ]
      }
      ]
    }
    

    然后你可以找到second如下:

    locals {
      key_to_find = "second"
      index_of_the_key = index(flatten([for v in var.x : keys(v)]), local.key_to_find)
    }
    

    拥有索引后,您可以遍历 second 值:

    flatten([for elem in var.x[local.index_of_the_key]: elem])
    
    # or 
    
    flatten(values(var.x[local.index_of_the_key]))
    

    这将产生以下列表:

    [
      {
        "c" = 3
      },
      {
        "d" = 4
      },
    ]
    

    【讨论】:

    • 字面上的上帝,为了得到它而绞尽脑汁,扁平化是解决方案&_&,谢谢队友
    猜你喜欢
    • 2016-01-26
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    相关资源
    最近更新 更多