Terraform将2个变量组合成一个新变量

Den*_*nis 4 variables terraform

我想在具有大量端口组的环境中自动部署Vmware VM.为了能够选择正确的端口组,最好输入2个变量租户和环境.这两个变量用于CMDB注册和部署目的.

对于部署,需要将变量组合到1个新变量中以选择正确的端口组.由于插值语法,在查找中似乎不可能使用2个组合变量.

如何在Terraform中将2个变量合并为1?

我还尝试使用正确的字符串创建一个本地文件,但该文件需要在脚本启动之前存在,terraform plan会给出一个错误消息,指出该文件不存在.

variable "tenant" {
  description = "tenant: T1 or T2"
}

variable "environment" {
  description = "environment: PROD or TEST"
}

variable "vm_network" {
  description = "network the VM will be provisioned with"
  type = "map"
  default = {
    T1_PROD = "T1-PROD-network"
    T2_PROD = "T2-PROD-network"
    T1_TEST = "T1-TEST-network"
    T2_TEST = "T2-TEST-network"
  }
}

data "vsphere_network" "network" {
  name          = "${lookup(var.vm_network, tenant_environment)}"
  datacenter_id = "${data.vsphere_datacenter.dc.id}"
}
Run Code Online (Sandbox Code Playgroud)

yda*_*coR 6

在我的脑海中,我可以想到三种不同的方法来合并变量以用作查找键:

variable "tenant" {}
variable "environment" {}

variable "vm_network" {
  default = {
    T1_PROD = "T1-PROD-network"
    T2_PROD = "T2-PROD-network"
    T1_TEST = "T1-TEST-network"
    T2_TEST = "T2-TEST-network"
  }
}

locals {
  tenant_environment = "${var.tenant}_${var.environment}"
}

output "local_network" {
  value = "${lookup(var.vm_network, local.tenant_environment)}"
}

output "format_network" {
  value = "${lookup(var.vm_network, format("%s_%s", var.tenant, var.environment))}"
}

output "lookup_network" {
  value = "${lookup(var.vm_network, "${var.tenant}_${var.environment}")}"
}
Run Code Online (Sandbox Code Playgroud)

第一个选项使用locals来创建一个已经插值的变量,并且可以在多个地方轻松重用,而不能直接使用Terraform/HCL中的变量.这通常是在Terraform的更高版本中进行变量组合/插值的最佳方法(它们在Terraform 0.10.3中引入).

第二个选项使用该format函数创建包含租户和环境变量的字符串.

最后一个看起来有点滑稽但是有效的HCL.如果可能的话,我可能会回避使用该语法.