从 Terraform 地图变量中提取键/值

Posted

技术标签:

【中文标题】从 Terraform 地图变量中提取键/值【英文标题】:Extract Key/Values from Terraform Map Variable 【发布时间】:2020-05-10 09:59:30 【问题描述】:

我正在尝试从 terraform 地图变量中提取左值和右值,但无法提取左值。下面是我的代码:-

variables.tf
  variable "notebook" 
    type = "map"
    default = 
    "01" = "a@a.com"
    "02" = "b@a.com"
    "03" = "c@a.com"
    "04" = "d@a.com"
    ......
  

下面是我在 main.tf 中的模块

 module "instance" 
   instance_ip = ["1.1.1.x", "1.1.2.y", "1.1.1.z","1.1.2.p"]
   dns         = ["x", "y", "z","p"]
   name        = ["a", "b", "c",  "d"]
 

输出应该如下:-

 module "instance" 
   instance_ip = ["1.1.1.01", "1.1.2.02", "1.1.1.03","1.1.2.04" and so on]
   dns         = ["01", "02", "03","04" and so on]
   name        = ["a@a.com", "b@a.com", "c@a.com", "d@a.com and so on]
 

任何建议。我尝试查找变量,但只得到 a@a.com 而不是密钥。

【问题讨论】:

【参考方案1】:

您可以为此使用keysvalues 函数:

# terraform 0.12
module "instance" 
  instance_ip = ["1.1.1.$keys(var.notebook)[0]", "1.1.1.$keys(var.notebook)[1]", "1.1.1.$keys(var.notebook)[2]"]
  dns         = keys(var.notebook)
  name        = values(var.notebook)


# terraform 0.11
module "instance" 
  instance_ip = ["1.1.1.$keys(var.notebook)[0]", "1.1.1.$keys(var.notebook)[1]", "1.1.1.$keys(var.notebook)[2]"]
  dns         = ["$keys(var.notebook)"]
  name        = ["$values(var.notebook)"]

【讨论】:

感谢@Matt,但在我的情况下,值将超过 10/20+。在那种情况下,我需要在一行中进行替换,而不是为每一行编写。有什么方法可以将其推广到偶数/奇数的许多值。我按照同样的方式更新了我的问题。请检查一次。

以上是关于从 Terraform 地图变量中提取键/值的主要内容,如果未能解决你的问题,请参考以下文章

使用 terraform-config-inspect 从 terraform 中提取原始(非字符串)参数值

将值动态注入 Terraform 中的变量

如何在 terraform 中提取敏感的输出变量?

从字典键中提取值 - 然后组合成一个对象

在模块内的模块之间传递 Terraform 变量?

Terraform:“inputMap”参数的值无效:lookup() 需要地图作为第一个参数