Создание динамических полей терраформирования для ресурса kubernetes_role

Помогите пожалуйста разобраться, как правильно строить динамические правила для ресурса

На входе я хочу отправить такие вары:

  role_rules = {
    rule01 = {
      "api_groups" = ["apps"]
      "resources"  = ["pods"]
      "resource_names" = ["foo"]
      "verbs"          = ["get", "list", "watch"]
    }
    rule02 = {
      "api_groups" = ["apps2"]
      "resources"  = ["services"]
      "resource_names" = ["foo2"]
      "verbs"          = ["*"]
    }
  }

И в результате есть два правила для моего ресурса. Я пытался сделать это примерно так:

resource "kubernetes_role" "this" {
  metadata {
    name      = var.role_name
    labels    = local.metadata_labels
  }
  dynamic "rule" {
    for_each = local.role_permission_rules
    content {
      api_groups     = try(role.value["api_groups"], "")
      resources      = try(role.value["resources"], "")
      resource_names = try(role.value["resource_names"], "")
      verbs          = try(role.value["verbs"], "")
    }
  }
}
locals {
  role_permission_rules = {
    for rule in keys(var.role_rules):
      rule => lookup(var.role_rules, rule)
  }
}

Но, к сожалению, он не работает с большим количеством ошибок, которые не имеют значения в корневом модуле. Есть идеи, как правильно реализовать такие вещи?


person Manish Iarhovich    schedule 05.02.2021    source источник
comment
Предоставьте минимальный воспроизводимый пример (часто создание такого примера уже решает проблему за вас) и четко укажите ошибку.   -  person luk2302    schedule 05.02.2021


Ответы (1)


Я бы рекомендовал использовать поиск вместо попытки. Однако я думаю, вам просто нужно добавить его в список, заключив элемент в квадратные скобки []. Также я бы рекомендовал ссылаться на rule.value, а не на role.value.

Например:

dynamic "rule" {
   for_each = local.role_permission_rules
   content {
     api_groups     = [lookup(rule.value, "api_groups", null)]
     resources      = [lookup(rule.value, "resources", null)]
     resource_names = [lookup(rule.value, "resource_names", null)]
     verbs          = [lookup(rule.value, "verbs", null)]
   }
} 
person aseb    schedule 05.02.2021
comment
Исправлено на вашем примере, только что добавлено соединение - person Manish Iarhovich; 08.02.2021