【发布时间】:2022-01-20 04:43:54
【问题描述】:
我创建了一个与Azure Firewall Network Rule Collection 对应的模块。该模块如下所示:
resource "azurerm_firewall_network_rule_collection" "fwnrc" {
name = "fwnrc-${var.name}"
resource_group_name = var.resource_group_name
azure_firewall_name = var.azure_firewall_name
priority = var.priority
action = var.action
dynamic "rule" {
for_each = var.rule != null ? [true] : []
content {
name = var.rule.name
description = var.rule.description
source_addresses = var.rule.source_addresses
source_ip_groups = var.rule.source_ip_groups
destination_addresses = var.rule.destination_addresses
destination_ip_groups = var.rule.destination_ip_groups
destination_fqdns = var.rule.destination_fqdns
destination_ports = var.rule.destination_ports
protocols = var.rule.protocols
}
}
}
现在感兴趣的部分是dynamic "rule",它有一个对应的变量定义如下:
variable "rule" {
type = object({
name = string
description = string
source_addresses = list(string)
source_ip_groups = list(string)
destination_addresses = list(string)
destination_ip_groups = list(string)
destination_fqdns = list(string)
destination_ports = list(string)
protocols = list(string)
})
}
我知道可以将rule 变量设置为“可选”,方法是将其默认值设置为null。我想更深入一步,使子变量*可选/必需。例如,在资源文档中写道,必须指定 either *_addresses 或 *_ip_groups。文档还说destination_fqdns 是可选的。
* 这些有实际名称吗?
由于我的模块需要rule 变量,因此如果我没有为所有子变量提供显式值,则会出现错误。我现在的解决方案是执行以下操作:
module "firewall_network_rule_collection" {
source = "/path/to/module"
name = "fwrc"
azure_firewall_name = "afw"
resource_group_name = "rg"
priority = 110
action = "Allow"
rule = {
description = "rule"
name = "rule"
source_addresses = ["*"]
source_ip_groups = null
destination_ports = ["*"]
destination_addresses = [
"AzureContainerRegistry",
"MicrosoftContainerRegistry",
"AzureActiveDirectory"
]
destination_fqdns = null
destination_ip_groups = null
protocols = ["Any"]
}
}
注意null 值。我能以某种方式摆脱这些吗?
--
我正在使用以下提供程序设置:
terraform {
required_version = ">=1.0.11"
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = ">=2.90.0"
}
}
}
【问题讨论】:
标签: terraform terraform-provider-azure hcl