如何在terraform资源中创建一个可选字段?

时间:2018-01-17 16:45:41

标签: azure terraform

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

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提供程序的版本。

在这种情况下,有人可以帮助我如何使用条件来处理这两种情况吗?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

尽管@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预计将于今年夏天晚些时候发布。