【问题标题】:Create role assignment in terraform based on region基于区域在 terraform 中创建角色分配
【发布时间】: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


【解决方案1】:

可以在 Terraform 中使用条件表达式来实现“如果 geo = cn 使用 local.principal_ids_cn,否则使用 local.principal_ids”的逻辑

资源块的地形代码:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-15
    • 2023-01-21
    • 2021-06-24
    • 1970-01-01
    • 2017-11-26
    • 2018-07-07
    • 2020-03-05
    • 1970-01-01
    相关资源
    最近更新 更多