Skip to content

Commit 7747afd

Browse files
committed
refactor: use v2 Port, sa name helper
1 parent d6102f9 commit 7747afd

7 files changed

Lines changed: 49 additions & 25 deletions

File tree

rust/operator-binary/src/crd/mod.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,11 @@ use stackable_operator::{
2626
v2::{
2727
config_overrides::KeyValueConfigOverrides,
2828
role_utils::JavaCommonConfig,
29-
types::kubernetes::{
30-
ConfigMapName, ListenerClassName, ListenerName, NamespaceName, ServiceName,
29+
types::{
30+
common::Port,
31+
kubernetes::{
32+
ConfigMapName, ListenerClassName, ListenerName, NamespaceName, ServiceName,
33+
},
3134
},
3235
},
3336
versioned::versioned,
@@ -57,15 +60,15 @@ pub const FIELD_MANAGER: &str = "zookeeper-operator";
5760

5861
pub const ZOOKEEPER_SERVER_PORT_NAME: &str = "zk";
5962
pub const ZOOKEEPER_LEADER_PORT_NAME: &str = "zk-leader";
60-
pub const ZOOKEEPER_LEADER_PORT: u16 = 2888;
63+
pub const ZOOKEEPER_LEADER_PORT: Port = Port(2888);
6164
pub const ZOOKEEPER_ELECTION_PORT_NAME: &str = "zk-election";
62-
pub const ZOOKEEPER_ELECTION_PORT: u16 = 3888;
65+
pub const ZOOKEEPER_ELECTION_PORT: Port = Port(3888);
6366

6467
pub const JMX_METRICS_PORT_NAME: &str = "jmx-metrics";
65-
pub const JMX_METRICS_PORT: u16 = 9505;
68+
pub const JMX_METRICS_PORT: Port = Port(9505);
6669
pub const METRICS_PROVIDER_HTTP_PORT_KEY: &str = "metricsProvider.httpPort";
6770
pub const METRICS_PROVIDER_HTTP_PORT_NAME: &str = "metrics";
68-
pub const METRICS_PROVIDER_HTTP_PORT: u16 = 7000;
71+
pub const METRICS_PROVIDER_HTTP_PORT: Port = Port(7000);
6972

7073
pub const STACKABLE_DATA_DIR: &str = "/stackable/data";
7174
pub const STACKABLE_CONFIG_DIR: &str = "/stackable/config";

rust/operator-binary/src/crd/security.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,12 @@ pub struct ZookeeperSecurity {
5959

6060
impl ZookeeperSecurity {
6161
// ports
62-
pub const CLIENT_PORT: u16 = 2181;
62+
pub const CLIENT_PORT: Port = Port(2181);
6363
pub const CLIENT_PORT_NAME: &'static str = "clientPort";
6464
// directories
6565
pub const QUORUM_TLS_DIR: &'static str = "/stackable/quorum_tls";
6666
pub const QUORUM_TLS_MOUNT_DIR: &'static str = "/stackable/quorum_tls_mount";
67-
pub const SECURE_CLIENT_PORT: u16 = 2282;
67+
pub const SECURE_CLIENT_PORT: Port = Port(2282);
6868
pub const SECURE_CLIENT_PORT_NAME: &'static str = "secureClientPort";
6969
pub const SERVER_CNXN_FACTORY: &'static str = "serverCnxnFactory";
7070
pub const SERVER_TLS_DIR: &'static str = "/stackable/server_tls";
@@ -133,9 +133,9 @@ impl ZookeeperSecurity {
133133
/// Return the ZooKeeper (secure) client port depending on tls or authentication settings.
134134
pub fn client_port(&self) -> Port {
135135
if self.tls_enabled() {
136-
Port::from(Self::SECURE_CLIENT_PORT)
136+
Self::SECURE_CLIENT_PORT
137137
} else {
138-
Port::from(Self::CLIENT_PORT)
138+
Self::CLIENT_PORT
139139
}
140140
}
141141

rust/operator-binary/src/zk_controller.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,6 @@ pub async fn reconcile_zk(
291291
&validated_cluster,
292292
rolegroup_name,
293293
rolegroup_config,
294-
&rbac_sa,
295294
)
296295
.with_context(|_| BuildRoleGroupStatefulSetSnafu {
297296
rolegroup: rolegroup_name.clone(),

rust/operator-binary/src/zk_controller/build/properties/zoo_cfg.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
88
use std::collections::BTreeMap;
99

10+
use stackable_operator::v2::types::common::Port;
11+
1012
use crate::{
1113
crd::{
1214
METRICS_PROVIDER_HTTP_PORT, METRICS_PROVIDER_HTTP_PORT_KEY, STACKABLE_DATA_DIR,
@@ -113,10 +115,11 @@ impl ValidatedCluster {
113115
/// Defined here (in the build layer) rather than in `validate` so that resolving the port —
114116
/// which renders the full `zoo.cfg` via [`build`] — does not invert the validate → build
115117
/// dependency direction.
116-
pub fn metrics_http_port(&self, rolegroup_config: &ValidatedRoleGroupConfig) -> u16 {
118+
pub fn metrics_http_port(&self, rolegroup_config: &ValidatedRoleGroupConfig) -> Port {
117119
build(self, rolegroup_config)
118120
.get(METRICS_PROVIDER_HTTP_PORT_KEY)
119-
.and_then(|port| port.parse().ok())
121+
.and_then(|port| port.parse::<u16>().ok())
122+
.map(Port::from)
120123
.unwrap_or(METRICS_PROVIDER_HTTP_PORT)
121124
}
122125
}

rust/operator-binary/src/zk_controller/build/resource/service.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@ use stackable_operator::{
22
builder::meta::ObjectMetaBuilder,
33
k8s_openapi::api::core::v1::{Service, ServicePort, ServiceSpec},
44
kvp::{Annotations, Labels},
5-
v2::{builder::meta::ownerreference_from_resource, types::operator::RoleGroupName},
5+
v2::{
6+
builder::meta::ownerreference_from_resource,
7+
types::{common::Port, operator::RoleGroupName},
8+
},
69
};
710

811
use crate::{
@@ -80,7 +83,7 @@ pub(crate) fn build_server_rolegroup_metrics_service(
8083
.ownerreference(ownerreference_from_resource(cluster, None, Some(true)))
8184
.with_labels(cluster.recommended_labels(role_group_name))
8285
.with_labels(prometheus_labels())
83-
.with_annotations(prometheus_annotations(metrics_port))
86+
.with_annotations(prometheus_annotations(metrics_port.clone()))
8487
.build();
8588

8689
let service_spec = ServiceSpec {
@@ -124,7 +127,7 @@ fn prometheus_labels() -> Labels {
124127
/// These annotations can be used in a ServiceMonitor.
125128
///
126129
/// see also <https://github.com/prometheus-community/helm-charts/blob/prometheus-27.32.0/charts/prometheus/values.yaml#L983-L1036>
127-
fn prometheus_annotations(metrics_port: u16) -> Annotations {
130+
fn prometheus_annotations(metrics_port: Port) -> Annotations {
128131
Annotations::try_from([
129132
("prometheus.io/path".to_owned(), "/metrics".to_owned()),
130133
("prometheus.io/port".to_owned(), metrics_port.to_string()),

rust/operator-binary/src/zk_controller/build/resource/statefulset.rs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,11 @@ use stackable_operator::{
2323
core::v1::{
2424
ConfigMapVolumeSource, EmptyDirVolumeSource, EnvVar, EnvVarSource, ExecAction,
2525
ObjectFieldSelector, PersistentVolumeClaim, PodSecurityContext, Probe,
26-
ResourceRequirements, ServiceAccount, Volume,
26+
ResourceRequirements, Volume,
2727
},
2828
},
2929
apimachinery::pkg::apis::meta::v1::LabelSelector,
3030
},
31-
kube::ResourceExt,
3231
kvp::Labels,
3332
memory::{BinaryMultiple, MemoryQuantity},
3433
product_logging::{
@@ -158,7 +157,6 @@ pub fn build_server_rolegroup_statefulset(
158157
cluster: &ValidatedCluster,
159158
role_group_name: &RoleGroupName,
160159
rolegroup_config: &ValidatedRoleGroupConfig,
161-
service_account: &ServiceAccount,
162160
) -> Result<StatefulSet> {
163161
let merged_config = &rolegroup_config.config;
164162
let logging = &merged_config.logging;
@@ -331,9 +329,12 @@ pub fn build_server_rolegroup_statefulset(
331329
ZOOKEEPER_SERVER_PORT_NAME,
332330
i32::from(zookeeper_security.client_port()),
333331
)
334-
.add_container_port(ZOOKEEPER_LEADER_PORT_NAME, ZOOKEEPER_LEADER_PORT as i32)
335-
.add_container_port(ZOOKEEPER_ELECTION_PORT_NAME, ZOOKEEPER_ELECTION_PORT as i32)
336-
.add_container_port(JMX_METRICS_PORT_NAME, JMX_METRICS_PORT as i32)
332+
.add_container_port(ZOOKEEPER_LEADER_PORT_NAME, i32::from(ZOOKEEPER_LEADER_PORT))
333+
.add_container_port(
334+
ZOOKEEPER_ELECTION_PORT_NAME,
335+
i32::from(ZOOKEEPER_ELECTION_PORT),
336+
)
337+
.add_container_port(JMX_METRICS_PORT_NAME, i32::from(JMX_METRICS_PORT))
337338
.add_container_port(METRICS_PROVIDER_HTTP_PORT_NAME, metrics_port.into())
338339
.add_volume_mount(DATA_VOLUME_NAME, STACKABLE_DATA_DIR)
339340
.context(AddVolumeMountSnafu)?
@@ -390,7 +391,7 @@ pub fn build_server_rolegroup_statefulset(
390391
fs_group: Some(1000),
391392
..PodSecurityContext::default()
392393
})
393-
.service_account_name(service_account.name_any());
394+
.service_account_name(cluster.rbac_service_account_name());
394395

395396
// Use the user-provided custom log ConfigMap if one is configured, otherwise fall back to the
396397
// rolegroup's own ConfigMap. This branches on the *validated* logging choice.

rust/operator-binary/src/zk_controller/validate.rs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,11 @@ use stackable_operator::{
3535
validate_logging_configuration_for_container,
3636
},
3737
role_group_utils::ResourceNames,
38-
role_utils::{JavaCommonConfig, with_validated_config},
38+
role_utils::{JavaCommonConfig, ResourceNames as RbacResourceNames, with_validated_config},
3939
types::{
40-
kubernetes::{ConfigMapName, ListenerClassName, NamespaceName, Uid},
40+
kubernetes::{
41+
ConfigMapName, ListenerClassName, NamespaceName, ServiceAccountName, Uid,
42+
},
4143
operator::{
4244
ClusterName, ControllerName, OperatorName, ProductName, ProductVersion,
4345
RoleGroupName, RoleName,
@@ -270,6 +272,19 @@ impl ValidatedCluster {
270272
}
271273
}
272274

275+
/// The RBAC ServiceAccount name for this cluster, `<cluster>-serviceaccount`.
276+
///
277+
/// Matches the name produced by
278+
/// [`build_rbac_resources`](stackable_operator::commons::rbac::build_rbac_resources) so the
279+
/// StatefulSet can reference the ServiceAccount without depending on the built object.
280+
pub(crate) fn rbac_service_account_name(&self) -> ServiceAccountName {
281+
RbacResourceNames {
282+
cluster_name: self.name.clone(),
283+
product_name: product_name(),
284+
}
285+
.service_account_name()
286+
}
287+
273288
/// Recommended labels for a role-group resource, using the given product version.
274289
///
275290
/// Used for PVC templates that cannot be modified once deployed: passing a constant version

0 commit comments

Comments
 (0)