【问题标题】:Terraform combine 2 variables into a new variableTerraform 将 2 个变量组合成一个新变量
【发布时间】:2018-10-23 06:52:28
【问题描述】:

我想在具有大量端口组的环境中自动部署 Vmware 虚拟机。为了能够选择正确的端口组,最好输入 2 个变量租户和环境。这 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}"
}

【问题讨论】:

    标签: variables terraform


    【解决方案1】:

    我突然想到了三种不同的方法来合并变量以用作查找键:

    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}")}"
    }
    

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

    第二个选项使用format function 创建一个包含租户和环境变量的字符串。

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

    【讨论】:

    • 感谢您提供这些示例。我今晚要试试!
    • 将在星期三之前我可以进行另一个代码会话。但是本地人选项正是我所需要的。谢谢
    猜你喜欢
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 2022-08-13
    • 1970-01-01
    • 2013-02-20
    • 1970-01-01
    相关资源
    最近更新 更多