无法在 Terraform v0.13 中使用 for_each 迭代安全组
Unable to iterate security group using for_each in Terraform v0.13
我正在尝试使用 for_each 键值对,但收到类似此对象没有名为“destination_address_prefix”的属性的错误。此对象没有名为“source_address_prefix”的属性。
resource "azurerm_network_security_group" "nsg" {
name = "testsg"
location = "east us"
resource_group_name = "test-rg"
dynamic security_rule {
for_each = var.securitygroup
content {
name = security_rule.name
priority = security_rule.priority
direction = security_rule.direction
access = security_rule.access
protocol = security_rule.protocol
source_port_range = security_rule.source_port_range
destination_port_range = security_rule.destination_port_range
source_address_prefix = security_rule.source_address_prefix
destination_address_prefix = security_rule.destination_address_prefix
}
}
}
Var.tf:
variable "securitygroup" {
type = map
default = {
name = "test123"
priority = "100"
direction = "Inbound"
access = "Allow"
protocol = "Tcp"
source_port_range = "*"
destination_port_range = "*"
source_address_prefix = "*"
destination_address_prefix = "*"
}
}
对于您的用例,您不需要动态块,因为您只有一个规则,除了这条规则中的个别项目外,没有什么可以迭代的。因此它应该是:
resource "azurerm_network_security_group" "nsg" {
name = "testsg"
location = "east us"
resource_group_name = "test-rg"
security_rule {
name = var.securitygroup.name
priority = var.securitygroup.priority
direction = var.securitygroup.direction
access = var.securitygroup.access
protocol = var.securitygroup.protocol
source_port_range = var.securitygroup.source_port_range
destination_port_range = var.securitygroup.destination_port_range
source_address_prefix = var.securitygroup.source_address_prefix
destination_address_prefix = var.securitygroup.destination_address_prefix
}
}
}
您的变量不是列表或集合类型的变量,它是单一对象类型的变量,因此您的azurerm_network_security_group
不需要迭代逻辑,示例如下:
resource "azurerm_network_security_group" "nsg" {
name = "testsg"
location = "east us"
resource_group_name = "test-rg"
security_rule = var.securitygroup
}
我正在尝试使用 for_each 键值对,但收到类似此对象没有名为“destination_address_prefix”的属性的错误。此对象没有名为“source_address_prefix”的属性。
resource "azurerm_network_security_group" "nsg" {
name = "testsg"
location = "east us"
resource_group_name = "test-rg"
dynamic security_rule {
for_each = var.securitygroup
content {
name = security_rule.name
priority = security_rule.priority
direction = security_rule.direction
access = security_rule.access
protocol = security_rule.protocol
source_port_range = security_rule.source_port_range
destination_port_range = security_rule.destination_port_range
source_address_prefix = security_rule.source_address_prefix
destination_address_prefix = security_rule.destination_address_prefix
}
}
}
Var.tf:
variable "securitygroup" {
type = map
default = {
name = "test123"
priority = "100"
direction = "Inbound"
access = "Allow"
protocol = "Tcp"
source_port_range = "*"
destination_port_range = "*"
source_address_prefix = "*"
destination_address_prefix = "*"
}
}
对于您的用例,您不需要动态块,因为您只有一个规则,除了这条规则中的个别项目外,没有什么可以迭代的。因此它应该是:
resource "azurerm_network_security_group" "nsg" {
name = "testsg"
location = "east us"
resource_group_name = "test-rg"
security_rule {
name = var.securitygroup.name
priority = var.securitygroup.priority
direction = var.securitygroup.direction
access = var.securitygroup.access
protocol = var.securitygroup.protocol
source_port_range = var.securitygroup.source_port_range
destination_port_range = var.securitygroup.destination_port_range
source_address_prefix = var.securitygroup.source_address_prefix
destination_address_prefix = var.securitygroup.destination_address_prefix
}
}
}
您的变量不是列表或集合类型的变量,它是单一对象类型的变量,因此您的azurerm_network_security_group
不需要迭代逻辑,示例如下:
resource "azurerm_network_security_group" "nsg" {
name = "testsg"
location = "east us"
resource_group_name = "test-rg"
security_rule = var.securitygroup
}