Skip to content

Commit 4c1c0de

Browse files
committed
Merge branch 'main' of https://github.com/stackabletech/hive-operator into chore/add-hive-4.1.0
2 parents 580fe29 + 25566fd commit 4c1c0de

File tree

3 files changed

+29
-24
lines changed

3 files changed

+29
-24
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ All notable changes to this project will be documented in this file.
77
### Added
88

99
- Helm: Allow Pod `priorityClassName` to be configured ([#633]).
10+
- Add `prometheus.io/path|port|scheme` annotations to metrics service ([#641]).
1011

1112
### Fixed
1213

@@ -18,6 +19,7 @@ All notable changes to this project will be documented in this file.
1819

1920
[#633]: https://github.com/stackabletech/hive-operator/pull/633
2021
[#636]: https://github.com/stackabletech/hive-operator/pull/636
22+
[#641]: https://github.com/stackabletech/hive-operator/pull/641
2123

2224
## [25.7.0] - 2025-07-23
2325

rust/operator-binary/src/controller.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,7 @@ use crate::{
103103
listener::{LISTENER_VOLUME_DIR, LISTENER_VOLUME_NAME, build_role_listener},
104104
operations::{graceful_shutdown::add_graceful_shutdown_config, pdb::add_pdbs},
105105
product_logging::extend_role_group_config_map,
106-
service::{
107-
build_rolegroup_headless_service, build_rolegroup_metrics_service,
108-
rolegroup_headless_service_name,
109-
},
106+
service::{build_rolegroup_headless_service, build_rolegroup_metrics_service},
110107
};
111108

112109
pub const HIVE_CONTROLLER_NAME: &str = "hivecluster";
@@ -1085,8 +1082,7 @@ fn build_metastore_rolegroup_statefulset(
10851082
),
10861083
..LabelSelector::default()
10871084
},
1088-
// TODO: Use method on RoleGroupRef once op-rs is released
1089-
service_name: Some(rolegroup_headless_service_name(rolegroup_ref)),
1085+
service_name: Some(rolegroup_ref.rolegroup_headless_service_name()),
10901086
template: pod_template,
10911087
volume_claim_templates: Some(vec![pvc]),
10921088
..StatefulSetSpec::default()

rust/operator-binary/src/service.rs

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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-
125112
fn 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

Comments
 (0)