【发布时间】:2021-12-13 10:49:50
【问题描述】:
我正在 Terraform 上寻找一种解决方案,用于创建角色分配并根据区域选择主体 ID。 如果我将代码运行到中国,变量应该是“local.principal_ids_cn”,如果是全局的,那么它必须是“local.principal_ids”.. 我确实有一个环境变量,其中 geo 将根据集群名称设置。所以“如果 geo = cn 使用 local.principal_ids_cn,否则使用 local.principal_ids” 如何将其合并到 terraform 中?
这是我的输入文件:
"applications" : [
{
"principal_id" : "00000000-000000-global-000000000000",
"principal_id_cn" : "00000000-000000-china-000000000000",
}
]
}
我的资源块如下所示:
locals {
# get json
role_data = jsondecode(file(var.inputfile))
principal_ids = distinct([for principal in local.role_data.applications : principal.principal_id])
principal_ids_cn = distinct([for principal_cn in local.role_data.applications : principal.principal_id_cn])
}
data "azurerm_subscription" "primary" {}
resource "azurerm_role_assignment" "custom" {
for_each = toset(local.principal_ids)
scope = data.azurerm_subscription.primary.id
role_definition_name = var.custom_role
principal_id = each.key
}
resource "azurerm_role_assignment" "builtin" {
for_each = toset(local.principal_ids)
scope = data.azurerm_subscription.primary.id
role_definition_name = var.builtin_role
principal_id = each.key
}
变量.tf:
variable "custom_role" {
type = string
description = "custom role"
default = "READER"
}
variable "builtin_role" {
type = string
description = "builtin role"
default = "My_built_in_role"
}
是否可以根据地区(中国和全球)切换局部变量? 有什么建议可以说明如何实现这一目标?
【问题讨论】:
-
“如果我将代码运行到中国” - 这是如何决定的?你有一些变量“which_region_I_am_running_for”吗?
-
是的,我确实有一个环境变量,其中 geo 将根据集群名称设置。所以“如果 geo = cn 使用 local.principal_ids_cn,否则使用 local.principal_ids”
-
您可以使用条件表达式并创建新的变量主体。下面是一个例子:local.principal = (var.geo == "cn" ? local.principal_ids_cn : local.principal_ids) @987654321@
-
@AndriyBilous 那应该是答案。
-
是的..这听起来是一个简单的解决方案..感谢您的提示..会试一试并更新..再次感谢..:)
标签: azure kubernetes terraform