【问题标题】:Terraform- read list of objects from yaml fileTerraform- 从 yaml 文件中读取对象列表
【发布时间】:2023-03-03 12:26:02
【问题描述】:

我想通过 terraform 代码从 yaml 文件中读取对象列表并将其映射到局部变量。我还需要使用键搜索对象并从 yaml 文件中获取值。谁能提出合适的解决方案?

我的 yaml 文件如下所示。这里使用将是主键

list_details:
 some_list:
 - use: a
   path: somepath
   description : "some description"

 - use: b
   path: somepath2
   description : "some description 2"

我已经像这样在 Terraform 的变量部分中加载了 yaml 文件

locals {
 list  = yamldecode(file("${path.module}/mylist.yaml"))
}

现在的问题是如何通过将“use”值传递给列表来获取一个对象及其值? "

【问题讨论】:

  • "将“使用”值传递给列表?" - 你是什么意思?你有什么例子吗?
  • 例如:- 我应该能够通过传递值“a”从列表中搜索对象并获取相同的路径和描述。

标签: yaml terraform devops


【解决方案1】:

假设use 值是唯一的,您可以将列表重新组织到地图中:

locals {
  list_as_map = {for val in local.list["list_details"]["some_list"]:
                 val["use"] => val["path"]}
}

list_as_map 设为:

  "a" = "somepath"
  "b" = "somepath2"

然后您根据use 的值访问path

path_for_a = local.list_as_map["a"]

更新

如果你想保留描述,最好这样做:

  list_as_map = {for val in local.list["list_details"]["some_list"]:
                 val["use"] => {
                       path = val["path"]
                       description = val["description"]
                       }  
                 } 

然后您访问pathdescription 为:

local.list_as_map["a"].path
local.list_as_map["a"].description

【讨论】:

  • @marcin- 非常感谢。它运作良好。又一个疑问,因为我是 Terraform 的新手。我们是否需要为描述等其他值创建单独的变量?我们如何获得类似 local.list_as_map["a"].description 的值?
  • @ByteCruncher 我更新了local.list_as_map["a"].description 的答案。
猜你喜欢
  • 2019-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 2019-11-06
相关资源
最近更新 更多