@@ -16,10 +16,8 @@ use stackable_operator::{
1616 } ,
1717 cli:: OperatorEnvironmentOptions ,
1818 cluster_resources:: { ClusterResourceApplyStrategy , ClusterResources } ,
19- commons:: { product_image_selection :: ResolvedProductImage , rbac:: build_rbac_resources} ,
19+ commons:: rbac:: build_rbac_resources,
2020 constants:: RESTART_CONTROLLER_ENABLED_LABEL ,
21- crd:: s3,
22- database_connections:: drivers:: jdbc:: JdbcDatabaseConnection as _,
2321 k8s_openapi:: {
2422 DeepMerge ,
2523 api:: {
@@ -54,7 +52,6 @@ use stackable_operator::{
5452use strum:: { EnumDiscriminants , IntoStaticStr } ;
5553
5654use crate :: {
57- authentication:: DruidAuthenticationConfig ,
5855 controller:: build:: resource:: {
5956 listener:: {
6057 LISTENER_VOLUME_DIR , LISTENER_VOLUME_NAME , build_group_listener,
@@ -67,15 +64,15 @@ use crate::{
6764 APP_NAME , Container , DRUID_CONFIG_DIRECTORY , DeepStorageSpec , DruidClusterStatus ,
6865 DruidRole , HDFS_CONFIG_DIRECTORY , LOG_CONFIG_DIRECTORY , METRICS_PORT , METRICS_PORT_NAME ,
6966 OPERATOR_NAME , RW_CONFIG_DIRECTORY , STACKABLE_LOG_DIR , ValidatedDruidConfig ,
70- build_recommended_labels, security :: DruidTlsSecurity , v1alpha1,
67+ build_recommended_labels, v1alpha1,
7168 } ,
7269 internal_secret:: create_shared_internal_secret,
7370 operations:: graceful_shutdown:: add_graceful_shutdown_config,
7471} ;
7572
7673mod build;
7774mod dereference;
78- mod validate;
75+ pub ( crate ) mod validate;
7976
8077use build:: {
8178 properties:: product_logging:: MAX_DRUID_LOG_FILES_SIZE ,
@@ -258,11 +255,6 @@ pub enum Error {
258255 BuildConfigMap {
259256 source : build:: resource:: config_map:: Error ,
260257 } ,
261-
262- #[ snafu( display( "invalid metadata database connection" ) ) ]
263- InvalidMetadataDatabaseConnection {
264- source : stackable_operator:: database_connections:: Error ,
265- } ,
266258}
267259
268260type Result < T , E = Error > = std:: result:: Result < T , E > ;
@@ -332,35 +324,12 @@ pub async fn reconcile_druid(
332324 . context ( FailedInternalSecretCreationSnafu ) ?;
333325
334326 for ( rolegroup_name, rg) in groups. iter ( ) {
335- let role_group_service_recommended_labels = build_recommended_labels (
336- druid,
337- DRUID_CONTROLLER_NAME ,
338- & validated_cluster. image . app_version_label_value ,
339- & role_name,
340- rolegroup_name. as_ref ( ) ,
341- ) ;
342-
343- let role_group_service_selector =
344- Labels :: role_group_selector ( druid, APP_NAME , & role_name, rolegroup_name. as_ref ( ) )
345- . context ( LabelBuildSnafu ) ?;
346-
347- let rg_headless_service = build_rolegroup_headless_service (
348- & validated_cluster,
349- & validated_cluster. cluster_config . druid_tls_security ,
350- druid_role,
351- rolegroup_name,
352- role_group_service_recommended_labels. clone ( ) ,
353- role_group_service_selector. clone ( ) . into ( ) ,
354- )
355- . context ( ServiceConfigurationSnafu ) ?;
356- let rg_metrics_service = build_rolegroup_metrics_service (
357- & validated_cluster,
358- druid_role,
359- rolegroup_name,
360- role_group_service_recommended_labels,
361- role_group_service_selector. into ( ) ,
362- )
363- . context ( ServiceConfigurationSnafu ) ?;
327+ let rg_headless_service =
328+ build_rolegroup_headless_service ( & validated_cluster, druid_role, rolegroup_name)
329+ . context ( ServiceConfigurationSnafu ) ?;
330+ let rg_metrics_service =
331+ build_rolegroup_metrics_service ( & validated_cluster, druid_role, rolegroup_name)
332+ . context ( ServiceConfigurationSnafu ) ?;
364333
365334 let rg_configmap = build:: resource:: config_map:: build_rolegroup_config_map (
366335 & validated_cluster,
@@ -370,15 +339,10 @@ pub async fn reconcile_druid(
370339 )
371340 . context ( BuildConfigMapSnafu ) ?;
372341 let rg_statefulset = build_rolegroup_statefulset (
373- druid,
374342 & validated_cluster,
375- & validated_cluster. image ,
376343 druid_role,
377344 rolegroup_name,
378345 rg,
379- validated_cluster. cluster_config . s3_connection . as_ref ( ) ,
380- & validated_cluster. cluster_config . druid_tls_security ,
381- & validated_cluster. cluster_config . druid_auth_config ,
382346 & rbac_sa,
383347 ) ?;
384348
@@ -415,12 +379,12 @@ pub async fn reconcile_druid(
415379 }
416380
417381 if let Some ( listener_class) = druid_role. listener_class_name ( druid)
418- && let Some ( listener_group_name) = group_listener_name ( druid , druid_role)
382+ && let Some ( listener_group_name) = group_listener_name ( & validated_cluster , druid_role)
419383 {
420384 let role_group_listener = build_group_listener (
421- druid ,
385+ & validated_cluster ,
422386 build_recommended_labels (
423- druid ,
387+ & validated_cluster ,
424388 DRUID_CONTROLLER_NAME ,
425389 & validated_cluster. image . app_version_label_value ,
426390 & role_name,
@@ -429,7 +393,6 @@ pub async fn reconcile_druid(
429393 listener_class. to_string ( ) ,
430394 listener_group_name,
431395 druid_role,
432- & validated_cluster. cluster_config . druid_tls_security ,
433396 )
434397 . context ( ListenerConfigurationSnafu ) ?;
435398
@@ -484,26 +447,26 @@ pub async fn reconcile_druid(
484447 Ok ( Action :: await_change ( ) )
485448}
486449
487- #[ allow( clippy:: too_many_arguments) ]
488450/// The rolegroup [`StatefulSet`] runs the rolegroup, as configured by the administrator.
489451///
490452/// The [`Pod`](`stackable_operator::k8s_openapi::api::core::v1::Pod`)s are accessible through the
491453/// corresponding [`stackable_operator::k8s_openapi::api::core::v1::Service`] (from [`build_rolegroup_headless_service`]).
492454fn build_rolegroup_statefulset (
493- druid : & v1alpha1:: DruidCluster ,
494455 cluster : & ValidatedCluster ,
495- resolved_product_image : & ResolvedProductImage ,
496456 role : & DruidRole ,
497457 role_group_name : & RoleGroupName ,
498458 rg : & DruidRoleGroupConfig ,
499- s3_conn : Option < & s3:: v1alpha1:: ConnectionSpec > ,
500- druid_tls_security : & DruidTlsSecurity ,
501- druid_auth_config : & Option < DruidAuthenticationConfig > ,
502459 service_account : & ServiceAccount ,
503460) -> Result < StatefulSet > {
504461 let merged_rolegroup_config = & rg. config ;
505462 let role_name = role. to_string ( ) ;
506463 let resource_names = cluster. resource_names ( role, role_group_name) ;
464+ // Everything below used to be threaded in as separate parameters; it all lives on the
465+ // `ValidatedCluster` now.
466+ let resolved_product_image = & cluster. image ;
467+ let s3_conn = cluster. cluster_config . s3_connection . as_ref ( ) ;
468+ let druid_tls_security = & cluster. cluster_config . druid_tls_security ;
469+ let druid_auth_config = & cluster. cluster_config . druid_auth_config ;
507470 // prepare container builder
508471 let prepare_container_name = Container :: Prepare . to_string ( ) ;
509472 let mut cb_prepare = ContainerBuilder :: new ( & prepare_container_name) . context (
@@ -530,12 +493,7 @@ fn build_rolegroup_statefulset(
530493 )
531494 . context ( GracefulShutdownSnafu ) ?;
532495
533- let metadata_database_connection_details = druid
534- . spec
535- . cluster_config
536- . metadata_database
537- . jdbc_connection_details ( "metadata" )
538- . context ( InvalidMetadataDatabaseConnectionSnafu ) ?;
496+ let metadata_database_connection_details = & cluster. cluster_config . metadata_db_connection ;
539497
540498 let mut main_container_commands = role. main_container_prepare_commands ( s3_conn) ;
541499 let mut prepare_container_commands = vec ! [ ] ;
@@ -589,7 +547,7 @@ fn build_rolegroup_statefulset(
589547 ) ?;
590548 add_log_volume_and_volume_mounts ( & mut cb_druid, & mut cb_prepare, & mut pb) ?;
591549 add_hdfs_cm_volume_and_volume_mounts (
592- & druid . spec . cluster_config . deep_storage ,
550+ & cluster . cluster_config . deep_storage ,
593551 & mut cb_druid,
594552 & mut pb,
595553 ) ?;
@@ -623,7 +581,7 @@ fn build_rolegroup_statefulset(
623581 let mut rest_env: Vec < EnvVar > = rg. env_overrides . clone ( ) . into ( ) ;
624582
625583 if let Some ( auth_config) = druid_auth_config {
626- rest_env. extend ( auth_config. get_env_var_mounts ( druid , role) )
584+ rest_env. extend ( auth_config. get_env_var_mounts ( cluster , role) )
627585 }
628586
629587 // Needed for the `containerdebug` process to log it's tracing information to.
@@ -662,7 +620,7 @@ fn build_rolegroup_statefulset(
662620 // Known roles are MiddleManagers for ingestion and Historicals for deep storage (GCS plugin)
663621 // We may at some time in the future revisit this and limit it again to avoid needlessly
664622 // propagating potentially confidential files throughout the cluster
665- for volume in & druid . spec . cluster_config . extra_volumes {
623+ for volume in & cluster . cluster_config . extra_volumes {
666624 // Extract values into vars so we make it impossible to log something other than
667625 // what we actually use to create the mounts - maybe paranoid, but hey ..
668626 let volume_name = & volume. name ;
@@ -682,14 +640,14 @@ fn build_rolegroup_statefulset(
682640
683641 let mut pvcs: Option < Vec < PersistentVolumeClaim > > = None ;
684642
685- if let Some ( group_listener_name) = group_listener_name ( druid , role) {
643+ if let Some ( group_listener_name) = group_listener_name ( cluster , role) {
686644 cb_druid
687645 . add_volume_mount ( LISTENER_VOLUME_NAME , LISTENER_VOLUME_DIR )
688646 . context ( AddVolumeMountSnafu ) ?;
689647
690648 // Used for PVC templates that cannot be modified once they are deployed
691649 let unversioned_recommended_labels = Labels :: recommended ( & build_recommended_labels (
692- druid ,
650+ cluster ,
693651 DRUID_CONTROLLER_NAME ,
694652 // A version value is required, and we do want to use the "recommended" format for the other desired labels
695653 "none" ,
@@ -706,7 +664,7 @@ fn build_rolegroup_statefulset(
706664
707665 let metadata = ObjectMetaBuilder :: new ( )
708666 . with_recommended_labels ( & build_recommended_labels (
709- druid ,
667+ cluster ,
710668 DRUID_CONTROLLER_NAME ,
711669 & resolved_product_image. app_version_label_value ,
712670 & role_name,
@@ -743,12 +701,12 @@ fn build_rolegroup_statefulset(
743701
744702 Ok ( StatefulSet {
745703 metadata : ObjectMetaBuilder :: new ( )
746- . name_and_namespace ( druid )
704+ . name_and_namespace ( cluster )
747705 . name ( resource_names. stateful_set_name ( ) . to_string ( ) )
748- . ownerreference_from_resource ( druid , None , Some ( true ) )
706+ . ownerreference_from_resource ( cluster , None , Some ( true ) )
749707 . context ( ObjectMissingMetadataForOwnerRefSnafu ) ?
750708 . with_recommended_labels ( & build_recommended_labels (
751- druid ,
709+ cluster ,
752710 DRUID_CONTROLLER_NAME ,
753711 & resolved_product_image. app_version_label_value ,
754712 & role_name,
@@ -763,7 +721,7 @@ fn build_rolegroup_statefulset(
763721 selector : LabelSelector {
764722 match_labels : Some (
765723 Labels :: role_group_selector (
766- druid ,
724+ cluster ,
767725 APP_NAME ,
768726 & role_name,
769727 role_group_name. as_ref ( ) ,
0 commit comments