Terraform Azurerm:基于变量值为块选择值(storage_image_reference)

时间:2019-03-27 16:54:45

标签: ubuntu centos terraform terraform-provider-aws terraform-provider-azure

我有一堆terraform脚本来构建一个或多个虚拟机以及相关资源(nic,nfg,rg,数据磁盘,扩展,角色等)。我在Ubuntu和CentOS的variables.tf文件中定义了变量;但是,我必须取消注释我计划使用的那些注释。这是代码:

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资源下的以下块填充正确的值: / p>

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选项,但是我不确定要使用哪个以及如何使用。我也欢迎其他解决方案。

感谢您的答复。

谢谢 阿斯哈尔

1 个答案:

答案 0 :(得分:1)

使用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]}"
  ...
}