#ubuntu #centos #terraform #terraform-provider-aws #terraform-provider-azure
#ubuntu #centos #terraform #terraform-provider-aws #terraform-provider-azure
Вопрос:
У меня есть куча сценариев terraform для создания одной или нескольких виртуальных машин вместе с соответствующими ресурсами (сетевой адаптер, 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:
используйте map()
Используйте первую переменную os_publisher
в качестве образца.
variable "os" {}
variable "os_publisher" {
type = "map"
default = {
ubuntu = "Canonical"
centos = "OpenLogic"
}
}
Таким образом, вы можете легко ссылаться на значение, зависящее от того, какая ОС используется.
storage_image_reference {
publisher = "${var.os_publisher[var.os]}"
...
}
Комментарии:
1. Спасибо BMW. Это работает как шарм. Я ценю ваш быстрый ответ.