我有一堆terraform脚本来构建一个或多个虚拟机以及相关资源(nic,nfg,rg,数据磁盘,扩展,角色等)。我在Ubuntu和CentOS的variables.tf文件中定义了变量;但是,我必须取消我计划使用的那些。这是代码:
variable os_publisher { default = "Canonical"}
variable os_offer { default = "UbuntuServer" }
variable os_sku { default = "18.04-LTS" }
variable os_version { default = "latest" }
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会自动在vm.tf中的azurerm_virtual_machine资源下填充以下块的正确值:
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条件以及查找函数和map / list选项,但我不确定要使用哪个以及如何使用。我也对其他解决方案持开放态度。
我很感激回应。
谢谢阿斯加尔
使用map()
使用第一个变量os_publisher
作为样本。
variable "os" {}
variable "os_publisher" {
type = "map"
default = {
ubuntu = "Canonical"
centos = "OpenLogic"
}
}
因此,您可以轻松地引用取决于操作系统的值。
storage_image_reference {
publisher = "${var.os_publisher[var.os]}"
...
}