@@ -3,7 +3,7 @@ use stackable_operator::{
33 builder:: meta:: ObjectMetaBuilder ,
44 commons:: product_image_selection:: ResolvedProductImage ,
55 k8s_openapi:: api:: core:: v1:: { Service , ServicePort , ServiceSpec } ,
6- kvp:: { Label , Labels } ,
6+ kvp:: { Annotations , Labels } ,
77 role_utils:: RoleGroupRef ,
88} ;
99
@@ -39,8 +39,7 @@ pub fn build_rolegroup_headless_service(
3939 let headless_service = Service {
4040 metadata : ObjectMetaBuilder :: new ( )
4141 . name_and_namespace ( hive)
42- // TODO: Use method on RoleGroupRef once op-rs is released
43- . name ( rolegroup_headless_service_name ( rolegroup) )
42+ . name ( rolegroup. rolegroup_headless_service_name ( ) )
4443 . ownerreference_from_resource ( hive, None , Some ( true ) )
4544 . context ( ObjectMissingMetadataForOwnerRefSnafu ) ?
4645 . with_recommended_labels ( build_recommended_labels (
@@ -79,8 +78,7 @@ pub fn build_rolegroup_metrics_service(
7978 let metrics_service = Service {
8079 metadata : ObjectMetaBuilder :: new ( )
8180 . name_and_namespace ( hive)
82- // TODO: Use method on RoleGroupRef once op-rs is released
83- . name ( rolegroup_metrics_service_name ( rolegroup) )
81+ . name ( rolegroup. rolegroup_metrics_service_name ( ) )
8482 . ownerreference_from_resource ( hive, None , Some ( true ) )
8583 . context ( ObjectMissingMetadataForOwnerRefSnafu ) ?
8684 . with_recommended_labels ( build_recommended_labels (
@@ -90,7 +88,8 @@ pub fn build_rolegroup_metrics_service(
9088 & rolegroup. role_group ,
9189 ) )
9290 . context ( MetadataBuildSnafu ) ?
93- . with_label ( Label :: try_from ( ( "prometheus.io/scrape" , "true" ) ) . context ( LabelBuildSnafu ) ?)
91+ . with_labels ( prometheus_labels ( ) )
92+ . with_annotations ( prometheus_annotations ( ) )
9493 . build ( ) ,
9594 spec : Some ( ServiceSpec {
9695 // Internal communication does not need to be exposed
@@ -110,18 +109,6 @@ pub fn build_rolegroup_metrics_service(
110109 Ok ( metrics_service)
111110}
112111
113- /// Headless service for cluster internal purposes only.
114- // TODO: Move to operator-rs
115- pub fn rolegroup_headless_service_name ( rolegroup : & RoleGroupRef < v1alpha1:: HiveCluster > ) -> String {
116- format ! ( "{name}-headless" , name = rolegroup. object_name( ) )
117- }
118-
119- /// Headless metrics service exposes Prometheus endpoint only
120- // TODO: Move to operator-rs
121- pub fn rolegroup_metrics_service_name ( rolegroup : & RoleGroupRef < v1alpha1:: HiveCluster > ) -> String {
122- format ! ( "{name}-metrics" , name = rolegroup. object_name( ) )
123- }
124-
125112fn metrics_ports ( ) -> Vec < ServicePort > {
126113 vec ! [ ServicePort {
127114 name: Some ( METRICS_PORT_NAME . to_string( ) ) ,
@@ -139,3 +126,23 @@ fn service_ports() -> Vec<ServicePort> {
139126 ..ServicePort :: default ( )
140127 } ]
141128}
129+
130+ /// Common labels for Prometheus
131+ fn prometheus_labels ( ) -> Labels {
132+ Labels :: try_from ( [ ( "prometheus.io/scrape" , "true" ) ] ) . expect ( "should be a valid label" )
133+ }
134+
135+ /// Common annotations for Prometheus
136+ ///
137+ /// These annotations can be used in a ServiceMonitor.
138+ ///
139+ /// see also <https://github.com/prometheus-community/helm-charts/blob/prometheus-27.32.0/charts/prometheus/values.yaml#L983-L1036>
140+ fn prometheus_annotations ( ) -> Annotations {
141+ Annotations :: try_from ( [
142+ ( "prometheus.io/path" . to_owned ( ) , "/metrics" . to_owned ( ) ) ,
143+ ( "prometheus.io/port" . to_owned ( ) , METRICS_PORT . to_string ( ) ) ,
144+ ( "prometheus.io/scheme" . to_owned ( ) , "http" . to_owned ( ) ) ,
145+ ( "prometheus.io/scrape" . to_owned ( ) , "true" . to_owned ( ) ) ,
146+ ] )
147+ . expect ( "should be valid annotations" )
148+ }
0 commit comments