Terraform Azurerm:根据变量值选择块的值(storage_image_reference)

问题描述 投票:1回答:1

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

Variable definitions for Ubuntu image

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

Variable definitions for CentOS image

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选项,但我不确定要使用哪个以及如何使用。我也对其他解决方案持开放态度。

我很感激回应。

谢谢阿斯加尔

ubuntu centos terraform terraform-provider-aws terraform-provider-azure
1个回答
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]}"
  ...
}
© www.soinside.com 2019 - 2024. All rights reserved.