【问题标题】:How do I make a field optional inside a terraform resource?如何在 terraform 资源中使字段可选?
【发布时间】:2018-06-26 15:04:22
【问题描述】:

我正在尝试为集群和单节点部署创建虚拟机。

resource "azurerm_virtual_machine" "app" {
    name   = "${var.name_prefix}-${format("%02d", count.index+1)}"
    location = "${var.location}"
    resource_group_name = "${azurerm_resource_group.resourcegroup.name}"
    availability_set_id   = "${azurerm_availability_set.avset.id}"
    network_interface_ids = ["${element(azurerm_network_interface.networkinterface-app.*.id, count.index+1)}"]
    vm_size = "${var.vm_size}"
    count = "${var.app_nodes}"

该设置适用于配置了availability_set_id 的集群节点部署,但在单个节点中失败,我不需要配置availability_set_id

我目前使用 Terraform v0.11.2* provider.azurerm: version = "~> 1.0" 作为 terraform 和 azurerm 提供程序的版本。

谁能帮我在这种情况下如何使用条件来处理这两种情况?

【问题讨论】:

    标签: azure terraform


    【解决方案1】:

    我认为您需要将其包装在一个模块中,然后拥有两个资源并使用count = "${var.somecond ? 1 : 0}" 确定哪个是活动的。

    【讨论】:

    • 可悲的是,这似乎是目前 0.11.3 实现既定目标的唯一方法
    【解决方案2】:

    虽然@matti 解决方案在某些情况下可能有效,但也有很多无效。

    例如,aws_api_gateway_api_key 有一个可选参数 value,它指定 API 密钥的值。如果省略,AWS 本身将生成一个密钥。但是,不能简单地将空字符串或数字传递给它,因为它会引发错误:

    Error: module.some_api_key.aws_api_gateway_api_key.api_key: expected length of value to be in the range (30 - 128), got

    不幸的是,目前无法在 Terraform 上将值设置为未定义的值 (0.11.8)。 2016年在github上提出了issue

    幸运的是,Terraform 0.12 将有一个 null 值,这会取消设置变量,如 preview post 所示。 Terraform 0.12 预计将于今年夏天晚些时候发布。

    【讨论】:

      猜你喜欢
      • 2021-10-14
      • 1970-01-01
      • 1970-01-01
      • 2021-09-30
      • 1970-01-01
      • 2022-11-08
      • 1970-01-01
      • 2021-05-09
      • 1970-01-01
      相关资源
      最近更新 更多