Terraform объединяет 2 переменные в новую переменную - PullRequest
0 голосов
/ 13 мая 2018

Я хочу автоматизировать развертывание виртуальных машин Vmware в среде с большим количеством групп портов. Чтобы иметь возможность выбрать правильную группу портов, лучше всего ввести 2 переменные tenant и environment. Эти 2 переменные используются для регистрации и развертывания CMDB.

Для развертывания необходимо объединить переменные в одну новую переменную, чтобы выбрать правильную группу портов. Из-за синтаксиса интерполяции кажется невозможным использование 2 комбинированных переменных в поиске.

Как я могу объединить 2 переменные в 1 в Terraform?

Я также пытался создать локальный файл с правильной строкой, но этот файл должен существовать до запуска скрипта, план terraform выдает сообщение об ошибке, что файл не существует.

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

1 Ответ

0 голосов
/ 14 мая 2018

Сверху головы я могу придумать три разных способа объединения переменных для использования в качестве ключа поиска:

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 для создания строки, содержащей переменные владельца и среды.

Последний выглядит немного забавно, но это действительный HCL. Я бы, вероятно, уклонился от использования этого синтаксиса, если это возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...