@@ -438,7 +438,7 @@ func (r *MetricStorageReconciler) reconcileNormal(
438438 instance .Status .Conditions .MarkTrue (telemetryv1 .DashboardDefinitionReadyCondition , telemetryv1 .DashboardsNotEnabledMessage )
439439 instance .Status .Conditions .MarkTrue (telemetryv1 .DashboardPluginReadyCondition , telemetryv1 .DashboardsNotEnabledMessage )
440440 } else {
441- if res , err := r .createDashboardObjects (ctx , instance , eventHandler ); err != nil {
441+ if res , err := r .createDashboardObjects (ctx , instance , helper , eventHandler ); err != nil {
442442 return res , err
443443 }
444444 }
@@ -600,7 +600,7 @@ func (r *MetricStorageReconciler) createScrapeConfigs(
600600 return ctrl.Result {}, err
601601 }
602602
603- connectionInfo , err := getComputeNodesConnectionInfo (instance , helper )
603+ connectionInfo , err := getComputeNodesConnectionInfo (instance , helper , telemetry . ServiceName )
604604 if err != nil {
605605 Log .Info (fmt .Sprintf ("Cannot get compute node connection info. Scrape configs not created. Error: %s" , err ))
606606 }
@@ -623,18 +623,26 @@ func (r *MetricStorageReconciler) createScrapeConfigs(
623623 return ctrl.Result {}, err
624624 }
625625
626+ connectionInfo , err = getComputeNodesConnectionInfo (instance , helper , telemetryv1 .TelemetryPowerMonitoring )
627+ if err != nil {
628+ Log .Info (fmt .Sprintf ("Cannot get compute node connection info. Scrape configs not created. Error: %s" , err ))
629+ }
630+
626631 // kepler scrape endpoints
627632 keplerEndpoints , _ := getKeplerTargets (connectionInfo )
628633 if err != nil {
629634 Log .Info (fmt .Sprintf ("Cannot get Kepler targets. Scrape configs not created. Error: %s" , err ))
630635 }
631636
632- // Kepler ScrapeConfig for non-tls nodes
633- keplerServiceName := fmt .Sprintf ("%s-kepler" , telemetry .ServiceName )
634- err = r .createServiceScrapeConfig (ctx , instance , Log , "Kepler" ,
635- keplerServiceName , keplerEndpoints , false ) // Currently Kepler doesn't support TLS so tlsEnabled is set to false
636- if err != nil {
637- return ctrl.Result {}, err
637+ // keplerEndpoint is reported as empty slice when telemetry-power-monitoring service is not enabled
638+ if len (keplerEndpoints ) > 0 {
639+ // Kepler ScrapeConfig for non-tls nodes
640+ keplerServiceName := fmt .Sprintf ("%s-kepler" , telemetry .ServiceName )
641+ err = r .createServiceScrapeConfig (ctx , instance , Log , "Kepler" ,
642+ keplerServiceName , keplerEndpoints , false ) // Currently Kepler doesn't support TLS so tlsEnabled is set to false
643+ if err != nil {
644+ return ctrl.Result {}, err
645+ }
638646 }
639647
640648 instance .Status .Conditions .MarkTrue (telemetryv1 .ScrapeConfigReadyCondition , condition .ReadyMessage )
@@ -672,7 +680,7 @@ func getKeplerTargets(nodes []ConnectionInfo) ([]string, []string) {
672680 return tls , nonTLS
673681}
674682
675- func (r * MetricStorageReconciler ) createDashboardObjects (ctx context.Context , instance * telemetryv1.MetricStorage , eventHandler handler.EventHandler ) (ctrl.Result , error ) {
683+ func (r * MetricStorageReconciler ) createDashboardObjects (ctx context.Context , instance * telemetryv1.MetricStorage , helper * helper. Helper , eventHandler handler.EventHandler ) (ctrl.Result , error ) {
676684 Log := r .GetLogger (ctx )
677685 uiPluginObj := & obsui.UIPlugin {
678686 ObjectMeta : metav1.ObjectMeta {
@@ -765,7 +773,14 @@ func (r *MetricStorageReconciler) createDashboardObjects(ctx context.Context, in
765773 "grafana-dashboard-openstack-node" : dashboards .OpenstackNode (datasourceName ),
766774 "grafana-dashboard-openstack-vm" : dashboards .OpenstackVM (datasourceName ),
767775 "grafana-dashboard-openstack-rabbitmq" : dashboards .OpenstackRabbitmq (datasourceName ),
768- "grafana-dashboard-openstack-kepler" : dashboards .OpenstackKepler (datasourceName ),
776+ }
777+
778+ // atleast one nodeset must have "telemetry-power-monitoring" service enabled for kepler dashboard to be created
779+ connectionInfo , err := getComputeNodesConnectionInfo (instance , helper , telemetryv1 .TelemetryPowerMonitoring )
780+ if err != nil {
781+ Log .Info (fmt .Sprintf ("Cannot get compute node connection info. Power monitoring dashboard not created. Error: %s" , err ))
782+ } else if len (connectionInfo ) > 0 {
783+ dashboardCMs ["grafana-dashboard-openstack-kepler" ] = dashboards .OpenstackKepler (datasourceName )
769784 }
770785
771786 for dashboardName , desiredCM := range dashboardCMs {
@@ -837,6 +852,7 @@ func (r *MetricStorageReconciler) ensureWatches(
837852func getComputeNodesConnectionInfo (
838853 instance * telemetryv1.MetricStorage ,
839854 helper * helper.Helper ,
855+ telemetryServiceName string ,
840856) ([]ConnectionInfo , error ) {
841857 ipSetList , err := getIPSetList (instance , helper )
842858 if err != nil {
@@ -854,24 +870,23 @@ func getComputeNodesConnectionInfo(
854870 return []ConnectionInfo {}, err
855871 }
856872 nodeSetGroup := inventory .Groups [secret .Labels ["openstackdataplanenodeset" ]]
857- containsTelemetry := false
873+ containsTargetService := false
858874 for _ , svc := range nodeSetGroup .Vars ["edpm_services" ].([]interface {}) {
859- if svc .(string ) == "telemetry" {
860- containsTelemetry = true
875+ if svc .(string ) == telemetryServiceName {
876+ containsTargetService = true
861877 }
862878 }
863- if ! containsTelemetry {
864- // Telemetry isn't deployed on this nodeset
865- // there is no reason to include these nodes
866- // for scraping by prometheus
879+ if ! containsTargetService {
880+ // If Telemetry|TelemetryPowerMonitoring isn't
881+ // deployed on this nodeset there is no reason
882+ // to include these nodes for scraping by prometheus
867883 continue
868884 }
869885 for name , item := range nodeSetGroup .Hosts {
870886 namespacedName := & types.NamespacedName {
871887 Name : name ,
872888 Namespace : instance .GetNamespace (),
873889 }
874-
875890 if len (ipSetList .Items ) > 0 {
876891 // if we have IPSets, lets go to search for the IPs there
877892 address , _ = getAddressFromIPSet (instance , & item , namespacedName , helper )
0 commit comments