@@ -9,13 +9,14 @@ use stackable_operator::{
99use strum:: { EnumDiscriminants , IntoStaticStr } ;
1010
1111use super :: {
12- ContextNames , ProductVersion , RoleGroupName , ValidatedCluster , ValidatedOpenSearchConfig ,
12+ ContextNames , OpenSearchRoleGroupConfig , ProductVersion , RoleGroupName , ValidatedCluster ,
13+ ValidatedOpenSearchConfig ,
1314} ;
1415use crate :: {
15- crd:: v1alpha1:: { self , OpenSearchConfig } ,
16+ crd:: v1alpha1:: { self , OpenSearchConfig , OpenSearchConfigFragment } ,
1617 framework:: {
1718 ClusterName ,
18- role_utils:: { RoleGroupConfig , with_validated_config} ,
19+ role_utils:: { GenericProductSpecificCommonConfig , RoleGroupConfig , with_validated_config} ,
1920 } ,
2021} ;
2122
@@ -54,10 +55,9 @@ pub enum Error {
5455
5556type Result < T , E = Error > = std:: result:: Result < T , E > ;
5657
57- // TODO split
5858// no client needed
5959pub fn validate (
60- names : & ContextNames ,
60+ context_names : & ContextNames ,
6161 cluster : & v1alpha1:: OpenSearchCluster ,
6262) -> Result < ValidatedCluster > {
6363 let raw_cluster_name = cluster. meta ( ) . name . clone ( ) . context ( GetClusterNameSnafu ) ?;
@@ -75,43 +75,8 @@ pub fn validate(
7575 let role_group_name =
7676 RoleGroupName :: from_str ( raw_role_group_name) . context ( ParseRoleGroupNameSnafu ) ?;
7777
78- let merged_role_group: RoleGroup < OpenSearchConfig , _ > = with_validated_config (
79- role_group_config,
80- & cluster. spec . nodes ,
81- & v1alpha1:: OpenSearchConfig :: default_config (
82- & names. product_name ,
83- & cluster_name,
84- & ValidatedCluster :: role_name ( ) ,
85- ) ,
86- )
87- . context ( ValidateOpenSearchConfigSnafu ) ?;
88-
89- let graceful_shutdown_timeout = merged_role_group. config . config . graceful_shutdown_timeout ;
90-
91- let termination_grace_period_seconds = graceful_shutdown_timeout
92- . as_secs ( )
93- . try_into ( )
94- . context ( TerminationGracePeriodTooLongSnafu {
95- duration : graceful_shutdown_timeout,
96- } ) ?;
97-
98- let validated_config = ValidatedOpenSearchConfig {
99- affinity : merged_role_group. config . config . affinity ,
100- node_roles : merged_role_group. config . config . node_roles ,
101- resources : merged_role_group. config . config . resources ,
102- termination_grace_period_seconds,
103- } ;
104-
105- let validated_role_group_config = RoleGroupConfig {
106- // Kubernetes defaults to 1 if not set
107- replicas : merged_role_group. replicas . unwrap_or ( 1 ) ,
108- config : validated_config,
109- config_overrides : merged_role_group. config . config_overrides ,
110- env_overrides : merged_role_group. config . env_overrides ,
111- cli_overrides : merged_role_group. config . cli_overrides ,
112- pod_overrides : merged_role_group. config . pod_overrides ,
113- product_specific_common_config : merged_role_group. config . product_specific_common_config ,
114- } ;
78+ let validated_role_group_config =
79+ validate_role_group_config ( context_names, & cluster_name, cluster, role_group_config) ?;
11580
11681 role_group_configs. insert ( role_group_name, validated_role_group_config) ;
11782 }
@@ -127,3 +92,46 @@ pub fn validate(
12792 role_group_configs,
12893 } )
12994}
95+
96+ fn validate_role_group_config (
97+ context_names : & ContextNames ,
98+ cluster_name : & ClusterName ,
99+ cluster : & v1alpha1:: OpenSearchCluster ,
100+ role_group_config : & RoleGroup < OpenSearchConfigFragment , GenericProductSpecificCommonConfig > ,
101+ ) -> Result < OpenSearchRoleGroupConfig > {
102+ let merged_role_group: RoleGroup < OpenSearchConfig , _ > = with_validated_config (
103+ role_group_config,
104+ & cluster. spec . nodes ,
105+ & v1alpha1:: OpenSearchConfig :: default_config (
106+ & context_names. product_name ,
107+ cluster_name,
108+ & ValidatedCluster :: role_name ( ) ,
109+ ) ,
110+ )
111+ . context ( ValidateOpenSearchConfigSnafu ) ?;
112+
113+ let graceful_shutdown_timeout = merged_role_group. config . config . graceful_shutdown_timeout ;
114+ let termination_grace_period_seconds = graceful_shutdown_timeout. as_secs ( ) . try_into ( ) . context (
115+ TerminationGracePeriodTooLongSnafu {
116+ duration : graceful_shutdown_timeout,
117+ } ,
118+ ) ?;
119+
120+ let validated_config = ValidatedOpenSearchConfig {
121+ affinity : merged_role_group. config . config . affinity ,
122+ node_roles : merged_role_group. config . config . node_roles ,
123+ resources : merged_role_group. config . config . resources ,
124+ termination_grace_period_seconds,
125+ } ;
126+
127+ Ok ( RoleGroupConfig {
128+ // Kubernetes defaults to 1 if not set
129+ replicas : merged_role_group. replicas . unwrap_or ( 1 ) ,
130+ config : validated_config,
131+ config_overrides : merged_role_group. config . config_overrides ,
132+ env_overrides : merged_role_group. config . env_overrides ,
133+ cli_overrides : merged_role_group. config . cli_overrides ,
134+ pod_overrides : merged_role_group. config . pod_overrides ,
135+ product_specific_common_config : merged_role_group. config . product_specific_common_config ,
136+ } )
137+ }
0 commit comments