Terraform Azurerm: выбор значений для блока (storage_image_reference) на основе значения переменной - PullRequest
1 голос
/ 27 марта 2019

У меня есть куча скриптов terraform для создания одной или нескольких виртуальных машин вместе с соответствующими ресурсами (nic, nfg, rg, диски данных, расширения, роли и т. Д.).У меня есть переменные, определенные в файле variables.tf как для Ubuntu, так и для CentOS;однако я должен раскомментировать те, которые планирую использовать.Вот код:

Определения переменных для образа Ubuntu

variable os_publisher { default = "Canonical"}
variable os_offer { default = "UbuntuServer" }
variable os_sku { default = "18.04-LTS" }
variable os_version { default = "latest" }

Определения переменных для образа CentOS

variable OS_publisher { default = "OpenLogic" }
variable OS_offer { default = "CentOS" }
variable OS_sku { default = "7.4" }
variable OS_version  { default = "latest" }

Я хотел бы изменить мои настройки, чтобы призначение отдельной переменной (скажем, os_image) установлено в ubuntu, TF автоматически заполняет правильные значения для следующего блока в ресурсе azurerm_virtual_machine в vm.tf:

storage_image_reference {
  publisher = "${var.os_publisher}"
  offer     = "${var.os_offer}"
  sku       = "${var.os_sku}"
  version   = "${var.os_version}"
}

И если значение для os_imageустановлен в centos, он устанавливает CentOS.

Я посмотрел на условное условие if-else, а также на функцию поиска плюс параметры карты / списка, но я не уверен, какой из них использовать и как.Я также открыт для других решений.

Буду признателен за ответ.

Спасибо, Асгар

1 Ответ

1 голос
/ 28 марта 2019

использовать карта ()

Используйте первую переменную os_publisher в качестве образца.

variable "os" {}

variable "os_publisher" {
  type = "map"

  default = {
    ubuntu = "Canonical"
    centos = "OpenLogic"
  }
}

Таким образом, вы можете легко ссылаться на значение в зависимости от того, какой ОС является.

storage_image_reference {
  publisher = "${var.os_publisher[var.os]}"
  ...
}
...