【问题标题】:convert list to strings by iterating resource with variable通过使用变量迭代资源将列表转换为字符串
【发布时间】:2022-12-19 11:14:11
【问题描述】:

尝试通过使用 if 条件迭代带有变量的资源来将列表转换为字符串

如何使用资源的 if 条件迭代 for_each 中的变量(列表)

locals {

  new_out = flatten([
    for opi, clsan in var.module_cl_list : {

      opic_R_P = reverse(split("@", "${opi}"))[1]
      #op_R = ["WRITE"]
      op_R = ["READ","DESCRIBE"]
      

    }
  ])  

}

对于“写入”,它正在工作,因为资源一次为每个变量取一个值

resource "something" "some" {


for_each  = {for opi1, clsa1 in local.new_out: opi1 => clsa1}

name = local.new_out_opic_R_P
op_R = join(", ", each.value.op_R)
permission = "ALLOW"
}

对于资源,如果我们想迭代 op_R 变量,["READ","DESCRIBE"],如何迭代地将列表转换为字符串?

输入

如果输入变量是只写的,变量应该被分配为写 如果输入变量是只读的,则应使用“READ”和“Describe”迭代地分配变量

注意:TO = WRITE,RO = READ 和 DESCRIBE例子:-

west = {
   name = "random1"
   operation = "WRITE"
   permission = "ALLOW"
},
west2 = {
   name = "random2"
   operation = "READ"
   permission = "ALLOW"
},
west2 = {
   name = "random2"
   operation = "DESCRIBE"
   permission = "ALLOW"
}

当前代码适用于此变量 op_R = [“写入”]

如果在变量下方给出,它无法处理我需要以迭代方式执行此操作

op_R = [“阅读”,“描述”]

输入

module_cl_list = {

"west@WO" = {appid = "456"},
"west2@RO" = {appid = "123"}

}

错误

当前代码取值为“Read, Describe”,资源每次只取一个值给每个变量

【问题讨论】:

  • 你忘了解释当前代码有什么问题?有什么错误吗?意外的输出?
  • 可悲的是,它不清楚你想做什么。什么是var.module_cl_list?
  • @Marcin 抱歉,我混淆了我的问题,在描述中提到了输入,我只是想迭代地将列表转换为字符串,目前它抛出错误“需要字符串”

标签: terraform


【解决方案1】:

您需要使用双 for 循环:


  new_out = flatten([
    for opi, clsan in var.module_cl_list : [
      for op in (split("@", "${opi}")[1] == "RO" ? ["READ","DESCRIBE"] : ["WRITE"]): {
      opic_R_P = reverse(split("@", "${opi}"))[1]
      op_R = op
     } 
    ]
  ])

这将产生:

[
  {
    "op_R" = "READ"
    "opic_R_P" = "west2"
  },
  {
    "op_R" = "DESCRIBE"
    "opic_R_P" = "west2"
  },
  {
    "op_R" = "WRITE"
    "opic_R_P" = "west"
  },
]

【讨论】:

  • 太棒了,它有效。 @Marcin 你很有魅力。
猜你喜欢
  • 2021-10-02
  • 1970-01-01
  • 2013-02-14
  • 2023-01-02
  • 1970-01-01
  • 2020-12-13
  • 1970-01-01
  • 1970-01-01
  • 2019-04-11
相关资源
最近更新 更多