【问题标题】:Passing size variable in Terraform在 Terraform 中传递大小变量
【发布时间】:2022-01-13 19:41:22
【问题描述】:

我不太确定该怎么做。

我获得了用于在 Azure 上构建 Linux VM 的 Terraform 代码。尺寸在代码中预先定义。我想知道如何定义 VM 大小,以便用户可以通过 CLI 中的预定义变量传递大小。

当前用户可以在 CLI 中传递的变量只有 Azure 区域:

variable "location" {
    type = string
    description = "Azure location of Terraform deployment"
    default = "canadacentral"
}

例如,用户将传递 terraform apply -var "location=eastus" 的位置,但是我希望允许用户也传递诸如 -var "size=small" 之类的内容

small 代表 Standard_DS1_v2,例如,medium 将使用 Standard_B2ms

【问题讨论】:

    标签: terraform terraform-provider-azure


    【解决方案1】:

    您可以在配置中声明另一个变量:

    variable "vm_size" {
      type        = string
      description = "The size of the Linux virtual machine"
    
      # validation block for restricting inputs to recognized sizes
      validation {
        condition     = contains(["small", "medium"], var.vm_size)
        error_message = "Valid vm_size inputs are 'small' or 'medium'."
      }
    }
    

    然后,用户将能够传递虚拟机大小的字符串。然后我们可以创建一个从用户输入键到 Azure 大小值的映射:

    locals {
      vm_size = {
        "small"  = "Standard_DS1_v2"
        "medium" = "Standard_B2ms"
      }
    }
    

    现在我们可以从local.vm_size[var.vm_size] 等用户变量输入解析 Azure VM 大小。然后我们可以照常在资源中使用它们:

    resource "azurerm_windows_virtual_machine" "this" {
      ...
      size = local.vm_size[var.vm_size]
      ...
    }
    

    如果需要,您还可以使用lookup 函数提供默认值:

    # default to small size
    lookup(local.vm_size, var.vm_size, "Standard_DS1_v2")
    

    【讨论】:

      猜你喜欢
      • 2022-01-02
      • 1970-01-01
      • 2016-10-30
      • 2021-05-14
      • 2022-01-14
      • 2018-09-07
      • 2021-07-25
      • 2020-10-13
      • 2023-03-23
      相关资源
      最近更新 更多