diff --git a/rust/operator-binary/src/hdfs_controller.rs b/rust/operator-binary/src/hdfs_controller.rs index afe13a74..eadf07ef 100644 --- a/rust/operator-binary/src/hdfs_controller.rs +++ b/rust/operator-binary/src/hdfs_controller.rs @@ -847,11 +847,14 @@ spec: default: replicas: 1 dataNodes: + envOverrides: + COMMON_VAR: role-value # overridden by role group below + ROLE_VAR: role-value # only defined here at role level roleGroups: default: envOverrides: - MY_ENV: my-value - HADOOP_HOME: /not/the/default/path + COMMON_VAR: group-value # overrides role value + GROUP_VAR: group-value # only defined here at group level replicas: 1 "; let product_config = " @@ -903,33 +906,38 @@ properties: [] ) .unwrap(); let containers = pb.build().unwrap().spec.unwrap().containers; - let main_container = containers + let env_vars = containers .iter() .find(|c| c.name == role.to_string()) + .unwrap() + .env + .clone() .unwrap(); assert_eq!( - main_container - .env - .clone() - .unwrap() - .into_iter() - .find(|e| e.name == "MY_ENV") + env_vars + .iter() + .find(|e| e.name == "COMMON_VAR") .unwrap() .value, - Some("my-value".to_string()) + Some("group-value".to_string()) ); assert_eq!( - main_container - .env - .clone() + env_vars + .iter() + .find(|e| e.name == "ROLE_VAR") .unwrap() - .into_iter() - .find(|e| e.name == "HADOOP_HOME") + .value, + Some("role-value".to_string()) + ); + assert_eq!( + env_vars + .iter() + .find(|e| e.name == "GROUP_VAR") .unwrap() .value, - Some("/not/the/default/path".to_string()) + Some("group-value".to_string()) ); } } diff --git a/tests/templates/kuttl/smoke/30-install-hdfs.yaml.j2 b/tests/templates/kuttl/smoke/30-install-hdfs.yaml.j2 index 7506994f..2cdbc57f 100644 --- a/tests/templates/kuttl/smoke/30-install-hdfs.yaml.j2 +++ b/tests/templates/kuttl/smoke/30-install-hdfs.yaml.j2 @@ -20,6 +20,9 @@ spec: vectorAggregatorConfigMapName: vector-aggregator-discovery {% endif %} nameNodes: + envOverrides: + COMMON_VAR: role-value # overridden by role group below + ROLE_VAR: role-value # only defined here at role level config: listenerClass: {{ test_scenario['values']['listener-class'] }} logging: @@ -27,7 +30,13 @@ spec: roleGroups: default: replicas: 2 + envOverrides: + COMMON_VAR: group-value # overrides role value + GROUP_VAR: group-value # only defined here at group level dataNodes: + envOverrides: + COMMON_VAR: role-value # overridden by role group below + ROLE_VAR: role-value # only defined here at role level config: listenerClass: {{ test_scenario['values']['listener-class'] }} logging: @@ -49,13 +58,22 @@ spec: {% endif %} roleGroups: default: + envOverrides: + COMMON_VAR: group-value # overrides role value + GROUP_VAR: group-value # only defined here at group level replicas: {{ test_scenario['values']['number-of-datanodes'] }} journalNodes: + envOverrides: + COMMON_VAR: role-value # overridden by role group below + ROLE_VAR: role-value # only defined here at role level config: logging: enableVectorAgent: {{ lookup('env', 'VECTOR_AGGREGATOR') | length > 0 }} roleGroups: default: + envOverrides: + COMMON_VAR: group-value # overrides role value + GROUP_VAR: group-value # only defined here at group level replicas: 1 podOverrides: spec: diff --git a/tests/templates/kuttl/smoke/31-assert.yaml b/tests/templates/kuttl/smoke/31-assert.yaml new file mode 100644 index 00000000..e07c0f5e --- /dev/null +++ b/tests/templates/kuttl/smoke/31-assert.yaml @@ -0,0 +1,20 @@ +--- +apiVersion: kuttl.dev/v1beta1 +kind: TestAssert +timeout: 600 +commands: + # + # Test envOverrides for all roles + # + - script: | + kubectl -n $NAMESPACE get sts hdfs-datanode-default -o yaml | yq -e '.spec.template.spec.containers[] | select (.name == "datanode") | .env[] | select (.name == "COMMON_VAR" and .value == "group-value")' + kubectl -n $NAMESPACE get sts hdfs-datanode-default -o yaml | yq -e '.spec.template.spec.containers[] | select (.name == "datanode") | .env[] | select (.name == "GROUP_VAR" and .value == "group-value")' + kubectl -n $NAMESPACE get sts hdfs-datanode-default -o yaml | yq -e '.spec.template.spec.containers[] | select (.name == "datanode") | .env[] | select (.name == "ROLE_VAR" and .value == "role-value")' + - script: | + kubectl -n $NAMESPACE get sts hdfs-journalnode-default -o yaml | yq -e '.spec.template.spec.containers[] | select (.name == "journalnode") | .env[] | select (.name == "COMMON_VAR" and .value == "group-value")' + kubectl -n $NAMESPACE get sts hdfs-journalnode-default -o yaml | yq -e '.spec.template.spec.containers[] | select (.name == "journalnode") | .env[] | select (.name == "GROUP_VAR" and .value == "group-value")' + kubectl -n $NAMESPACE get sts hdfs-journalnode-default -o yaml | yq -e '.spec.template.spec.containers[] | select (.name == "journalnode") | .env[] | select (.name == "ROLE_VAR" and .value == "role-value")' + - script: | + kubectl -n $NAMESPACE get sts hdfs-namenode-default -o yaml | yq -e '.spec.template.spec.containers[] | select (.name == "namenode") | .env[] | select (.name == "COMMON_VAR" and .value == "group-value")' + kubectl -n $NAMESPACE get sts hdfs-namenode-default -o yaml | yq -e '.spec.template.spec.containers[] | select (.name == "namenode") | .env[] | select (.name == "GROUP_VAR" and .value == "group-value")' + kubectl -n $NAMESPACE get sts hdfs-namenode-default -o yaml | yq -e '.spec.template.spec.containers[] | select (.name == "namenode") | .env[] | select (.name == "ROLE_VAR" and .value == "role-value")'