Ubuntu Terraform Azurerm:基于变量值为块(存储\图像\参考)选择值

Ubuntu Terraform Azurerm:基于变量值为块(存储\图像\参考)选择值,ubuntu,centos,terraform,terraform-provider-aws,terraform-provider-azure,Ubuntu,Centos,Terraform,Terraform Provider Aws,Terraform Provider Azure,我有一堆地形脚本来构建一个或多个虚拟机以及相关资源(nic、nfg、rg、数据磁盘、扩展、角色等)。我在variables.tf文件中为Ubuntu和CentOS定义了变量;但是,我必须取消我计划使用的注释。代码如下: Ubuntu映像的变量定义 CentOS映像的变量定义 我想修改我的设置,这样当单个变量(比如os_image)的值设置为ubuntu时,TF会自动为vm.TF中的azurerm_virtual_machine资源下的以下块填充正确的值: storage_image_refere

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

Ubuntu映像的变量定义 CentOS映像的变量定义 我想修改我的设置,这样当单个变量(比如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条件和lookup函数以及map/list选项,但我不确定使用哪一个以及如何使用。我也愿意接受其他解决方案

如果您能回复我,我将不胜感激

多谢各位 Asghar

使用

使用第一个变量
os\u publisher
作为示例

variable "os" {}

variable "os_publisher" {
  type = "map"

  default = {
    ubuntu = "Canonical"
    centos = "OpenLogic"
  }
}
因此,您可以根据操作系统的不同轻松地引用该值

storage_image_reference {
  publisher = "${var.os_publisher[var.os]}"
  ...
}

谢谢你。它就像一个符咒。我感谢你的迅速反应。
variable "os" {}

variable "os_publisher" {
  type = "map"

  default = {
    ubuntu = "Canonical"
    centos = "OpenLogic"
  }
}
storage_image_reference {
  publisher = "${var.os_publisher[var.os]}"
  ...
}