azure - 基于区域在 terraform 中创建角色分配
问题描述
我在 Terraform 上寻找一种解决方案,用于创建角色分配并根据区域选择主体 id。如果我将代码运行到中国,变量应该是“local.principal_ids_cn”,如果是全局的,那么它必须是“local.principal_ids”..我确实有一个环境变量,其中地理将根据集群名称设置..所以“如果 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"
}
是否可以根据地区(中国和全球)切换局部变量?有什么建议可以解决这个问题吗?
解决方案
您可以在 Terraform 中使用条件表达式来实现“如果 geo = cn 使用 local.principal_ids_cn,否则使用 local.principal_ids”的逻辑
资源块的 Terraform 代码:
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])
principal = (var.geo == "cn" ? local.principal_ids_cn : local.principal_ids)
}
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
}
https://www.terraform.io/docs/language/expressions/conditionals.html
推荐阅读
- javascript - 使用来自 XMLHttpRequest 的响应
- .htaccess - 将 /blog/article 重定向到 .htaccess 中的 /articles/article
- javascript - Javascript;html表单;用户输入;显示输入
- java - 如何监控数据库的变化?
- python - 在某些列上合并两个 DataFrame
- dialogflow-es - Google 登录:如何在使用 dialogflow-fulfillment 库而不是 actions-on-google 时轻松解码令牌?
- javascript - 如何阻止 Firebase 函数在每个 Cloud Functions 中执行一次本地函数?
- vue.js - 如何从 Vue-Apollo Store 读取查询()和 writeQuery()?
- r - 将值列表转换为每个值的列表索引列表
- wordpress - Wordpress Jetpack 视频托管