diff --git a/charts/marklogic-operator-kubernetes/templates/manager-rbac.yaml b/charts/marklogic-operator-kubernetes/templates/manager-rbac.yaml index 4468f86..5a113d4 100644 --- a/charts/marklogic-operator-kubernetes/templates/manager-rbac.yaml +++ b/charts/marklogic-operator-kubernetes/templates/manager-rbac.yaml @@ -85,6 +85,23 @@ rules: - patch - update - watch +- apiGroups: + - "" + - events.k8s.io + resources: + - events + verbs: + - create + - patch + - update +- apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - list + - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -216,6 +233,15 @@ rules: - patch - update - watch +- apiGroups: + - "" + - events.k8s.io + resources: + - events + verbs: + - create + - patch + - update --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding @@ -236,4 +262,40 @@ subjects: name: '{{ include "marklogic-operator-kubernetes.serviceAccountName" $ }}' namespace: '{{ $.Release.Namespace }}' {{- end }} +{{- /* +storageclass is a cluster-scoped resource; a namespaced Role cannot grant access +to it. A dedicated ClusterRole + ClusterRoleBinding is required in namespace mode +so the operator can read allowVolumeExpansion and perform PVC resize operations. +*/}} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: {{ printf "%s-storageclass-reader" (include "marklogic-operator-kubernetes.fullname" .) | trunc 63 | trimSuffix "-" }} + labels: + {{- include "marklogic-operator-kubernetes.labels" . | nindent 4 }} +rules: +- apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: {{ printf "%s-storageclass-reader" (include "marklogic-operator-kubernetes.fullname" .) | trunc 63 | trimSuffix "-" }} + labels: + {{- include "marklogic-operator-kubernetes.labels" . | nindent 4 }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: {{ printf "%s-storageclass-reader" (include "marklogic-operator-kubernetes.fullname" .) | trunc 63 | trimSuffix "-" }} +subjects: +- kind: ServiceAccount + name: '{{ include "marklogic-operator-kubernetes.serviceAccountName" . }}' + namespace: '{{ .Release.Namespace }}' {{- end }} diff --git a/hack/helmify-post-process.sh b/hack/helmify-post-process.sh index 802b884..077f82e 100755 --- a/hack/helmify-post-process.sh +++ b/hack/helmify-post-process.sh @@ -247,6 +247,31 @@ rules: - patch - update - watch +- apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get + - list + - patch + - update + - watch +- apiGroups: + - "" + resources: + - persistentvolumeclaims/status + verbs: + - get +- apiGroups: + - "" + - events.k8s.io + resources: + - events + verbs: + - create + - patch + - update - apiGroups: - apps resources: @@ -303,6 +328,14 @@ rules: - patch - update - watch +- apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - list + - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -371,6 +404,31 @@ rules: - patch - update - watch +- apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get + - list + - patch + - update + - watch +- apiGroups: + - "" + resources: + - persistentvolumeclaims/status + verbs: + - get +- apiGroups: + - "" + - events.k8s.io + resources: + - events + verbs: + - create + - patch + - update - apiGroups: - apps resources: @@ -447,6 +505,42 @@ subjects: name: '{{ include "marklogic-operator-kubernetes.serviceAccountName" $ }}' namespace: '{{ $.Release.Namespace }}' {{- end }} +{{- /* +storageclass is a cluster-scoped resource; a namespaced Role cannot grant access +to it. A dedicated ClusterRole + ClusterRoleBinding is required in namespace mode +so the operator can read allowVolumeExpansion and perform PVC resize operations. +*/}} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: {{ printf "%s-storageclass-reader" (include "marklogic-operator-kubernetes.fullname" .) | trunc 63 | trimSuffix "-" }} + labels: + {{- include "marklogic-operator-kubernetes.labels" . | nindent 4 }} +rules: +- apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: {{ printf "%s-storageclass-reader" (include "marklogic-operator-kubernetes.fullname" .) | trunc 63 | trimSuffix "-" }} + labels: + {{- include "marklogic-operator-kubernetes.labels" . | nindent 4 }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: {{ printf "%s-storageclass-reader" (include "marklogic-operator-kubernetes.fullname" .) | trunc 63 | trimSuffix "-" }} +subjects: +- kind: ServiceAccount + name: '{{ include "marklogic-operator-kubernetes.serviceAccountName" . }}' + namespace: '{{ .Release.Namespace }}' {{- end }} TMPL_EOF echo " [manager-rbac.yaml] Done."