我正在使用带有AZURE的开源Terraform,我被困在以下任务中。请告知您是否有更好的解决方案。
我在列表中有Azure策略的ID
variable "existing_policy_ids" {
"policy-id1",
"policy-id2",
"policy-id3",
......
}
我需要将所有这些策略动态分配给Azure中的资源组。资源组具有如下计数元参数:
resource "azurerm_resource_group" "my-rg" {
count = var.environment == "dev" ? 1 : 2
name = "my-rg-${count.index}"
location = var.rg_location
}
现在的问题是-策略分配应该是什么样子,因为有多个策略(10(,而资源组可以是1或2,具体取决于环境。意味着我不能使用标准的计数方式或for_each?!
resource "azurerm_resource_group_policy_assignment" "assign-policy" {
count = length(azurerm_resource_group.my-rg.id)
name = "${azurerm_resource_group.my-rg[count.index].name}"
policy_definition_id = var.existing_policy_id[count.index] # ISSUE
resource_group_id = azurerm_resource_group.my-rg[count.index].id # ISSUE
}
现在政策分配块的最后两行是我被卡住的地方。如果我使用count.index
,那么计数器将只运行一次或最多运行2次。而政策是超过2。
现在,我如何编码每个创建的resource_group
都被分配给变量existing_policy_ids.
中的所有策略
提前感谢大家!
您已经迭代了existing_policy_ids
和azurerm_resource_group
的数量的累积列表。在您的情况下,可以使用setproduct。
locals {
cummulative_list = setproduct(
range(length(azurerm_resource_group.my-rg)),
var.existing_policy_ids)
}
resource "azurerm_resource_group_policy_assignment" "assign-policy" {
count = length(local.cummulative_list)
name = azurerm_resource_group.my-rg[local.cummulative_list[count.index][0]].name
policy_definition_id = local.cummulative_list[count.index][1]
resource_group_id = azurerm_resource_group.my-rg[local.cummulative_list[count.index][0]].id
}