@@ -121,15 +121,30 @@ func pluginComponentReconcilers(plugin *uiv1alpha1.UIPlugin, pluginInfo UIPlugin
121121 monitoringConfig .Incidents != nil &&
122122 monitoringConfig .Incidents .Enabled &&
123123 pluginInfo .HealthAnalyzerImage != ""
124+
125+ healthAnalyzerEnabled := monitoringConfig != nil &&
126+ monitoringConfig .ClusterHealthAnalyzer != nil &&
127+ monitoringConfig .ClusterHealthAnalyzer .Enabled &&
128+ pluginInfo .HealthAnalyzerImage != ""
129+
130+ components = append (components ,
131+ reconciler .NewOptionalUpdater (componentsHealthClusterRole ("components-health-view" ), plugin , healthAnalyzerEnabled ),
132+ reconciler .NewOptionalUpdater (newClusterRoleBinding (namespace , serviceAccountName , "components-health-view" , plugin .Name + "-" + "components-health-view" ), plugin , healthAnalyzerEnabled ),
133+ reconciler .NewOptionalUpdater (newComponentHealthConfig (namespace ), plugin , healthAnalyzerEnabled ),
134+ )
135+
136+ deployHealthAnalyzer := incidentsEnabled || healthAnalyzerEnabled
137+
124138 components = append (components ,
125- reconciler .NewOptionalUpdater (newClusterRoleBinding (namespace , serviceAccountName , monitorClusterroleName , plugin .Name + "-" + monitorClusterroleName ), plugin , incidentsEnabled ),
126- reconciler .NewOptionalUpdater (newClusterRoleBinding (namespace , serviceAccountName , "system:auth-delegator" , serviceAccountName + "-system-auth-delegator" ), plugin , incidentsEnabled ),
127- reconciler .NewOptionalUpdater (newAlertManagerViewRoleBinding (serviceAccountName , namespace ), plugin , incidentsEnabled ),
128- reconciler .NewOptionalUpdater (newHealthAnalyzerPrometheusRole (namespace ), plugin , incidentsEnabled ),
129- reconciler .NewOptionalUpdater (newHealthAnalyzerPrometheusRoleBinding (namespace ), plugin , incidentsEnabled ),
130- reconciler .NewOptionalUpdater (newHealthAnalyzerService (namespace ), plugin , incidentsEnabled ),
131- reconciler .NewOptionalUpdater (newHealthAnalyzerDeployment (namespace , serviceAccountName , pluginInfo ), plugin , incidentsEnabled ),
132- reconciler .NewOptionalUpdater (newHealthAnalyzerServiceMonitor (namespace ), plugin , incidentsEnabled ),
139+ reconciler .NewOptionalUpdater (newClusterRoleBinding (namespace , serviceAccountName , "cluster-monitoring-view" , plugin .Name + "cluster-monitoring-view" ), plugin , deployHealthAnalyzer ),
140+ reconciler .NewOptionalUpdater (newClusterRoleBinding (namespace , serviceAccountName , "system:auth-delegator" , serviceAccountName + "-system-auth-delegator" ), plugin , deployHealthAnalyzer ),
141+ reconciler .NewOptionalUpdater (newAlertManagerViewRoleBinding (serviceAccountName , namespace ), plugin , deployHealthAnalyzer ),
142+ reconciler .NewOptionalUpdater (newHealthAnalyzerPrometheusRole (namespace ), plugin , deployHealthAnalyzer ),
143+ reconciler .NewOptionalUpdater (newHealthAnalyzerPrometheusRoleBinding (namespace ), plugin , deployHealthAnalyzer ),
144+ reconciler .NewOptionalUpdater (newHealthAnalyzerService (namespace ), plugin , deployHealthAnalyzer ),
145+ reconciler .NewOptionalUpdater (newHealthAnalyzerDeployment (namespace , serviceAccountName , pluginInfo .HealthAnalyzerImage , healthAnalyzerEnabled ),
146+ plugin , deployHealthAnalyzer ),
147+ reconciler .NewOptionalUpdater (newHealthAnalyzerServiceMonitor (namespace ), plugin , deployHealthAnalyzer ),
133148 )
134149
135150 persesServiceAccountName := "perses" + serviceAccountSuffix
@@ -436,6 +451,43 @@ func newService(info UIPluginInfo, namespace string) *corev1.Service {
436451 }
437452}
438453
454+ // componentsHealthClusterRole creates a new clusterrole with the provided name.
455+ // The clusterrole has read permissions to the cluster resources and it is required
456+ // for the component health evaluation.
457+ func componentsHealthClusterRole (name string ) * rbacv1.ClusterRole {
458+ return & rbacv1.ClusterRole {
459+ TypeMeta : metav1.TypeMeta {
460+ APIVersion : rbacv1 .SchemeGroupVersion .String (),
461+ Kind : "ClusterRole" ,
462+ },
463+ ObjectMeta : metav1.ObjectMeta {
464+ Name : name ,
465+ },
466+ Rules : []rbacv1.PolicyRule {
467+ {
468+ APIGroups : []string {"" },
469+ Resources : []string {"nodes" },
470+ Verbs : []string {"get" , "list" },
471+ },
472+ {
473+ APIGroups : []string {"config.openshift.io" },
474+ Resources : []string {"clusteroperators" },
475+ Verbs : []string {"get" , "list" },
476+ },
477+ {
478+ APIGroups : []string {"machineconfiguration.openshift.io" },
479+ Resources : []string {"machineconfigpools" },
480+ Verbs : []string {"get" , "list" },
481+ },
482+ {
483+ APIGroups : []string {"kubevirt.io" },
484+ Resources : []string {"kubevirts" },
485+ Verbs : []string {"get" , "list" },
486+ },
487+ },
488+ }
489+ }
490+
439491func newKorrel8rDeployment (name string , namespace string , info UIPluginInfo ) * appsv1.Deployment {
440492 volumes := []corev1.Volume {
441493 {
0 commit comments