locals { sorted-namespaces = reverse(distinct(sort(concat(var.namespaces,var.detected.namespaces)))) } resource "kubectl_manifest" "gramo_sa" { yaml_body = <<-EOF apiVersion: v1 kind: ServiceAccount metadata: name: "${var.component}-${var.instance}" namespace: "${var.namespace}" labels: ${jsonencode(local.common_labels)} EOF } resource "kubectl_manifest" "gramo_crb_admin" { count = var.cluster-admin ? 1 : 0 yaml_body = <<-EOF apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: "${var.namespace}-${var.component}-${var.instance}" labels: ${jsonencode(local.common_labels)} roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: "${var.component}-${var.instance}" namespace: "${var.namespace}" EOF } resource "kubectl_manifest" "gramo_roles" { count = length(local.sorted-namespaces) yaml_body = <<-EOF apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: "${var.namespace}-${var.component}-${var.instance}" namespace: "${local.sorted-namespaces[count.index]}" labels: ${jsonencode(local.common_labels)} rules: - apiGroups: ["*"] resources: ["*"] verbs: ["*"] EOF } resource "kubectl_manifest" "gramo_role_bindings" { count = length(local.sorted-namespaces) yaml_body = <<-EOF apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: "${var.namespace}-${var.component}-${var.instance}" namespace: "${local.sorted-namespaces[count.index]}" labels: ${jsonencode(local.common_labels)} subjects: - kind: ServiceAccount name: "${var.component}-${var.instance}" namespace: "${var.namespace}" roleRef: kind: Role name: "${var.namespace}-${var.component}-${var.instance}" apiGroup: rbac.authorization.k8s.io EOF } resource "kubectl_manifest" "gramo_clusterrole" { count = var.cluster-admin ? 0 : 1 yaml_body = <<-EOF apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: "${var.namespace}-${var.component}-${var.instance}-list" labels: ${jsonencode(local.common_labels)} rules: - apiGroups: [""] resources: ["namespaces"] resourceNames: ${jsonencode(local.sorted-namespaces)} verbs: ["get"] - apiGroups: [""] resources: ["namespaces"] verbs: ["list"] - apiGroups: ["apiextensions.k8s.io"] resources: ["customresourcedefinitions"] verbs: ["get","list"] - apiGroups: ["vynil.solidite.fr"] resources: ["distribs", "distribs/status"] verbs: ["get","list"] EOF } resource "kubectl_manifest" "gramo_clusterrole_bindings" { count = var.cluster-admin ? 0 : 1 yaml_body = <<-EOF apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: "${var.namespace}-${var.component}-${var.instance}-list" namespace: "${local.sorted-namespaces[count.index]}" labels: ${jsonencode(local.common_labels)} subjects: - kind: ServiceAccount name: "${var.component}-${var.instance}" namespace: "${var.namespace}" roleRef: kind: ClusterRole name: "${var.namespace}-${var.component}-${var.instance}-list" apiGroup: rbac.authorization.k8s.io EOF }