我正在尝试为群集和单节点部署创建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提供程序的版本。
在这种情况下,有人可以帮助我如何使用条件来处理这两种情况吗?
答案 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预计将于今年夏天晚些时候发布。