{{- if or (.Values.clusterRole.create) (.Values.presets.kubernetesAttributes.enabled) (.Values.presets.clusterMetrics.enabled) (.Values.presets.kubeletMetrics.enabled) (.Values.presets.kubernetesEvents.enabled) (.Values.presets.kubernetesObjects.enabled) (.Values.presets.annotationDiscovery.logs.enabled) (.Values.presets.annotationDiscovery.metrics.enabled) (and .Values.presets.resourceDetection.enabled .Values.presets.resourceDetection.k8snode.enabled) -}} apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: {{ include "opentelemetry-collector.clusterRoleName" . }} labels: {{- include "opentelemetry-collector.labels" . | nindent 4 }} {{- if .Values.clusterRole.annotations }} annotations: {{- range $key, $value := .Values.clusterRole.annotations }} {{- printf "%s: %s" $key (tpl $value $ | quote) | nindent 4 }} {{- end }} {{- end }} rules: {{- $clusterMetricsEnabled := .Values.presets.clusterMetrics.enabled }} {{- $disableLeaderElectionForClusterMetrics := .Values.presets.clusterMetrics.disableLeaderElection}} {{- $useLeaderElectionForClusterMetrics := and (eq .Values.mode "daemonset") ( $clusterMetricsEnabled ) (not $disableLeaderElectionForClusterMetrics) }} {{- $kubernetesObjectsEnabled := .Values.presets.kubernetesObjects.enabled }} {{- $disableLeaderElectionForKubernetesObjects := .Values.presets.kubernetesObjects.disableLeaderElection }} {{- $useLeaderElectionForKubernetesObjects := and (eq .Values.mode "daemonset") ( $kubernetesObjectsEnabled ) (not $disableLeaderElectionForKubernetesObjects) }} {{- if or $useLeaderElectionForClusterMetrics $useLeaderElectionForKubernetesObjects }} - apiGroups: ["coordination.k8s.io"] resources: ["leases"] verbs: ["get","list","watch","create","update","patch","delete"] {{- end }} {{- if .Values.clusterRole.rules -}} {{ toYaml .Values.clusterRole.rules | nindent 2 -}} {{- end }} {{- if .Values.presets.kubernetesAttributes.enabled}} - apiGroups: [""] resources: ["pods", "namespaces"] verbs: ["get", "watch", "list"] - apiGroups: ["apps"] resources: ["replicasets"] verbs: ["get", "list", "watch"] - apiGroups: ["extensions"] resources: ["replicasets"] verbs: ["get", "list", "watch"] {{- end }} {{- if .Values.presets.clusterMetrics.enabled}} - apiGroups: [""] resources: ["events", "namespaces", "namespaces/status", "nodes", "nodes/spec", "pods", "pods/status", "replicationcontrollers", "replicationcontrollers/status", "resourcequotas", "services" ] verbs: ["get", "list", "watch"] - apiGroups: ["apps"] resources: ["daemonsets", "deployments", "replicasets", "statefulsets"] verbs: ["get", "list", "watch"] - apiGroups: ["extensions"] resources: ["daemonsets", "deployments", "replicasets"] verbs: ["get", "list", "watch"] - apiGroups: ["batch"] resources: ["jobs", "cronjobs"] verbs: ["get", "list", "watch"] - apiGroups: ["autoscaling"] resources: ["horizontalpodautoscalers"] verbs: ["get", "list", "watch"] {{- end}} {{- if .Values.presets.kubeletMetrics.enabled}} - apiGroups: [""] resources: ["nodes/stats"] verbs: ["get", "watch", "list"] {{- end }} {{- if .Values.presets.kubernetesEvents.enabled }} - apiGroups: ["events.k8s.io"] resources: ["events"] verbs: ["watch", "list"] {{- end }} {{- if .Values.presets.kubernetesObjects.enabled }} {{- if .Values.presets.kubernetesObjects.core.enabled }} - apiGroups: [""] resources: ["namespaces", "pods", "nodes", "services", "serviceaccounts"] verbs: ["get", "list", "watch"] - apiGroups: ["apps"] resources: ["deployments", "replicasets", "daemonsets", "statefulsets"] verbs: ["get", "list", "watch"] - apiGroups: ["batch"] resources: ["jobs", "cronjobs"] verbs: ["get", "list", "watch"] {{- end }} {{- if .Values.presets.kubernetesObjects.rbac.enabled }} - apiGroups: ["rbac.authorization.k8s.io"] resources: ["roles", "rolebindings", "clusterroles", "clusterrolebindings"] verbs: ["get", "list", "watch"] {{- end }} {{- if .Values.presets.kubernetesObjects.storage.enabled }} - apiGroups: [""] resources: ["persistentvolumes", "persistentvolumeclaims"] verbs: ["get", "list", "watch"] - apiGroups: ["storage.k8s.io"] resources: ["storageclasses"] verbs: ["get", "list", "watch"] {{- end }} {{- if .Values.presets.kubernetesObjects.networking.enabled }} - apiGroups: ["networking.k8s.io"] resources: ["ingresses", "networkpolicies"] verbs: ["get", "list", "watch"] {{- end }} {{- if .Values.presets.kubernetesObjects.autoscaling.enabled }} - apiGroups: ["autoscaling"] resources: ["horizontalpodautoscalers"] verbs: ["get", "list", "watch"] {{- if .Values.presets.kubernetesObjects.autoscaling.vpa.enabled }} - apiGroups: ["autoscaling.k8s.io"] resources: ["verticalpodautoscalers"] verbs: ["get", "list", "watch"] {{- end }} {{- end }} {{- if .Values.presets.kubernetesObjects.policy.enabled }} - apiGroups: ["policy"] resources: ["poddisruptionbudgets"] verbs: ["get", "list", "watch"] {{- end }} {{- if .Values.presets.kubernetesObjects.apiExtensions.enabled }} - apiGroups: ["apiextensions.k8s.io"] resources: ["customresourcedefinitions"] verbs: ["get", "list", "watch"] {{- end }} {{- end }} {{- if or .Values.presets.annotationDiscovery.logs.enabled .Values.presets.annotationDiscovery.metrics.enabled }} - apiGroups: [""] resources: ["pods"] verbs: ["get", "list", "watch"] {{- end }} {{- if and .Values.presets.resourceDetection.enabled .Values.presets.resourceDetection.k8snode.enabled }} - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list", "watch"] {{- end }} {{- end }}