我正在尝试在 Terraform 中编写一个 if 语句来部署或不部署特定资源,并努力使其正常工作。
我想使用 if 语句部署一个名为 AzureFirewallSubnet 的子网。如果条件为true,并且如果条件为false,则不部署,并且目前我无法让它工作。
main.tf
resource "azurerm_virtual_network" "vnet" {
name = var.vnet.name
location = var.rg.location
resource_group_name = var.rg.name
address_space = var.vnet.address_space
subnet {
count = "${var.afw_subnet.enabled == true ? 1 : 0}"
name = var.subnets.subnet1.name
address_prefix = var.subnets.subnet1.address_prefix
}
}
参数.tf
# Virtual Network Paramters
variable "vnet" {
default = {
name = "vnet-uks-prod-hub-01"
address_space = ["10.0.0.0/16"]
}
}
# Azure Firewall
variable "afw_subnet" {
default = {
enabled = true
}
}
# Subnet Parameters
variable "subnets" {
type = map
default = {
subnet1 = {
name = "AzureFirewallSubnet"
address_prefix = "10.0.0.0/26"
}
}
}
错误
Error: Unsupported argument
on vnet-hub/vnet_hub.tf line 15, in resource "azurerm_virtual_network" "vnet":
15: count = "${var.afw_subnet.enabled == true ? 1 : 0}"
An argument named "count" is not expected here.
##[error]Terraform command 'validate' failed with exit code '1'.
如果有更好的方法在不使用计数的情况下做到这一点,如果有人能指出我正确的方向,那就太好了。
最佳答案
看起来像 dynamic block应该可以带你到达那里。
resource "azurerm_virtual_network" "vnet" {
name = var.vnet.name
location = var.rg.location
resource_group_name = var.rg.name
address_space = var.vnet.address_space
dynamic "subnet" {
for_each = var.afw_subnet.enabled ? [1] : []
content {
name = var.subnets.subnet1.name
address_prefix = var.subnets.subnet1.address_prefix
}
}
}
更好的方法是为子网
中给出的每个子网添加一个这样的 block 。像这样:
resource "azurerm_virtual_network" "vnet" {
name = var.vnet.name
location = var.rg.location
resource_group_name = var.rg.name
address_space = var.vnet.address_space
dynamic "subnet" {
for_each = var.subnets
content {
name = subnet.name
address_prefix = subnet.address_prefix
}
}
}
关于azure - 如何在terraform中编写if/else语句来部署特定资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75617141/