Terraform Azurerm:Select 块值 (storage_image_reference) 基于变量值
Terraform Azurerm: Select Values for a Block (storage_image_reference) based on a Variable Value
我有一堆 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 会自动为以下块填充正确的值在 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"
}
}
因此您可以轻松参考 os 所依赖的值。
storage_image_reference {
publisher = "${var.os_publisher[var.os]}"
...
}
我有一堆 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 会自动为以下块填充正确的值在 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"
}
}
因此您可以轻松参考 os 所依赖的值。
storage_image_reference {
publisher = "${var.os_publisher[var.os]}"
...
}