@@ -11,6 +11,7 @@ use std::{collections::BTreeMap, str::FromStr};
1111
1212use snafu:: { OptionExt , ResultExt , Snafu } ;
1313use stackable_operator:: {
14+ builder:: meta:: ObjectMetaBuilder ,
1415 cli:: OperatorEnvironmentOptions ,
1516 commons:: {
1617 cluster_operation:: ClusterOperation ,
@@ -26,7 +27,10 @@ use stackable_operator::{
2627 utils:: cluster_info:: KubernetesClusterInfo ,
2728 v2:: {
2829 HasName , HasUid , NameIsValidLabelValue ,
29- builder:: pod:: container:: { self , EnvVarName , EnvVarSet } ,
30+ builder:: {
31+ meta:: ownerreference_from_resource,
32+ pod:: container:: { self , EnvVarName , EnvVarSet } ,
33+ } ,
3034 controller_utils:: { get_cluster_name, get_namespace, get_uid} ,
3135 jvm_argument_overrides:: JvmArgumentOverrides ,
3236 kvp:: label:: { recommended_labels, role_group_selector} ,
@@ -314,6 +318,25 @@ impl ValidatedCluster {
314318 pub fn role_group_selector ( & self , role_group_name : & RoleGroupName ) -> Labels {
315319 role_group_selector ( self , & product_name ( ) , & Self :: role_name ( ) , role_group_name)
316320 }
321+
322+ /// Returns an [`ObjectMetaBuilder`] pre-filled with the namespace, an owner reference back to
323+ /// this cluster, and the recommended labels for a resource named `name` in `role_group_name`.
324+ ///
325+ /// Consolidates the metadata chain repeated by the child-resource builders. Call sites that
326+ /// need extra labels/annotations chain them onto the returned builder.
327+ pub ( crate ) fn object_meta (
328+ & self ,
329+ name : impl Into < String > ,
330+ role_group_name : & RoleGroupName ,
331+ ) -> ObjectMetaBuilder {
332+ let mut builder = ObjectMetaBuilder :: new ( ) ;
333+ builder
334+ . name_and_namespace ( self )
335+ . name ( name)
336+ . ownerreference ( ownerreference_from_resource ( self , None , Some ( true ) ) )
337+ . with_labels ( self . recommended_labels ( role_group_name) ) ;
338+ builder
339+ }
317340}
318341
319342/// The product name (`zookeeper`) as a type-safe label value.
@@ -327,7 +350,7 @@ pub(crate) fn operator_name() -> OperatorName {
327350}
328351
329352/// The controller name as a type-safe label value.
330- fn controller_name ( ) -> ControllerName {
353+ pub ( crate ) fn controller_name ( ) -> ControllerName {
331354 ControllerName :: from_str ( ZK_CONTROLLER_NAME )
332355 . expect ( "the controller name is a valid label value" )
333356}
0 commit comments