Files
domain/apps/okd/rbac.tf
2024-05-29 17:16:33 +02:00

108 lines
3.1 KiB
HCL

locals {
sorted-namespaces = reverse(distinct(sort(concat(var.namespaces,var.detected.namespaces))))
}
resource "kubectl_manifest" "okd_sa" {
yaml_body = <<-EOF
apiVersion: v1
kind: ServiceAccount
metadata:
name: "${var.instance}-${var.component}"
namespace: "${var.namespace}"
labels: ${jsonencode(local.common_labels)}
EOF
}
resource "kubectl_manifest" "okd_crb_admin" {
count = var.cluster-admin ? 1 : 0
yaml_body = <<-EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: "${var.namespace}-${var.instance}-${var.component}"
labels: ${jsonencode(local.common_labels)}
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: "${var.instance}-${var.component}"
namespace: "${var.namespace}"
EOF
}
resource "kubectl_manifest" "okd_roles" {
count = length(local.sorted-namespaces)
yaml_body = <<-EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: "${var.namespace}-${var.instance}-${var.component}"
namespace: "${local.sorted-namespaces[count.index]}"
labels: ${jsonencode(local.common_labels)}
rules:
- apiGroups: ["*"]
resources: ["*"]
verbs: ["*"]
EOF
}
resource "kubectl_manifest" "okd_role_bindings" {
count = length(local.sorted-namespaces)
yaml_body = <<-EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: "${var.namespace}-${var.instance}-${var.component}"
namespace: "${local.sorted-namespaces[count.index]}"
labels: ${jsonencode(local.common_labels)}
subjects:
- kind: ServiceAccount
name: "${var.instance}-${var.component}"
namespace: "${var.namespace}"
roleRef:
kind: Role
name: "${var.namespace}-${var.instance}-${var.component}"
apiGroup: rbac.authorization.k8s.io
EOF
}
resource "kubectl_manifest" "okd_clusterrole" {
count = length(local.sorted-namespaces)>0 ? 1 : 0
yaml_body = <<-EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: "${var.namespace}-${var.instance}-${var.component}-list"
labels: ${jsonencode(local.common_labels)}
rules:
- apiGroups: [""]
resources: ["namespaces"]
resourceNames: ${jsonencode(local.sorted-namespaces)}
verbs: ["get"]
- apiGroups: [""]
resources: ["namespaces"]
verbs: ["list"]
EOF
}
resource "kubectl_manifest" "okd_clusterrole_bindings" {
count = length(local.sorted-namespaces)>0 ? 1 : 0
yaml_body = <<-EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: "${var.namespace}-${var.instance}-${var.component}-list"
namespace: "${local.sorted-namespaces[count.index]}"
labels: ${jsonencode(local.common_labels)}
subjects:
- kind: ServiceAccount
name: "${var.instance}-${var.component}"
namespace: "${var.namespace}"
roleRef:
kind: ClusterRole
name: "${var.namespace}-${var.instance}-${var.component}-list"
apiGroup: rbac.authorization.k8s.io
EOF
}