Skip to content

Commit

Permalink
feat: Support podOverrides
Browse files Browse the repository at this point in the history
  • Loading branch information
sbernauer committed Jul 3, 2023
1 parent 9ba6ce9 commit a33fbca
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 2 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ All notable changes to this project will be documented in this file.
- Generate OLM bundle for Release 23.4.0 ([#350]).
- Missing CRD defaults for `status.conditions` field ([#354]).
- Set explicit resources on all containers ([#359]).
- Support podOverrides ([#368]).

### Changed

Expand All @@ -27,6 +28,7 @@ All notable changes to this project will be documented in this file.
[#354]: https://github.com/stackabletech/hdfs-operator/pull/354
[#359]: https://github.com/stackabletech/hdfs-operator/pull/359
[#364]: https://github.com/stackabletech/hdfs-operator/pull/364
[#368]: https://github.com/stackabletech/hdfs-operator/pull/368

## [23.4.0] - 2023-04-17

Expand Down
43 changes: 42 additions & 1 deletion rust/crd/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,10 @@ use stackable_operator::{
fragment::{Fragment, ValidationError},
merge::Merge,
},
k8s_openapi::apimachinery::pkg::{api::resource::Quantity, apis::meta::v1::LabelSelector},
k8s_openapi::{
api::core::v1::PodTemplateSpec,
apimachinery::pkg::{api::resource::Quantity, apis::meta::v1::LabelSelector},
},
kube::{runtime::reflector::ObjectRef, CustomResource, ResourceExt},
labels::role_group_selector_labels,
product_config::types::PropertyNameKind,
Expand Down Expand Up @@ -465,6 +468,44 @@ impl HdfsCluster {
.get(role_group)
}

pub fn pod_overrides_for_role(&self, role: &HdfsRole) -> Option<&PodTemplateSpec> {
match role {
HdfsRole::NameNode => self
.spec
.name_nodes
.as_ref()
.map(|n| &n.config.pod_overrides),
HdfsRole::DataNode => self
.spec
.data_nodes
.as_ref()
.map(|n| &n.config.pod_overrides),
HdfsRole::JournalNode => self
.spec
.journal_nodes
.as_ref()
.map(|n| &n.config.pod_overrides),
}
}

pub fn pod_overrides_for_role_group(
&self,
role: &HdfsRole,
role_group: &str,
) -> Option<&PodTemplateSpec> {
match role {
HdfsRole::NameNode => self
.namenode_rolegroup(role_group)
.map(|r| &r.config.pod_overrides),
HdfsRole::DataNode => self
.datanode_rolegroup(role_group)
.map(|r| &r.config.pod_overrides),
HdfsRole::JournalNode => self
.journalnode_rolegroup(role_group)
.map(|r| &r.config.pod_overrides),
}
}

pub fn rolegroup_ref(
&self,
role_name: impl Into<String>,
Expand Down
12 changes: 11 additions & 1 deletion rust/operator/src/hdfs_controller.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ use stackable_operator::{
core::v1::{ConfigMap, Service, ServicePort, ServiceSpec},
},
apimachinery::pkg::apis::meta::v1::LabelSelector,
DeepMerge,
},
kube::{
api::ObjectMeta,
Expand Down Expand Up @@ -620,6 +621,15 @@ fn rolegroup_statefulset(
)
.context(FailedToCreateContainerAndVolumeConfigurationSnafu)?;

let mut pod_template = pb.build_template();
if let Some(pod_overrides) = hdfs.pod_overrides_for_role(role) {
pod_template.merge_from(pod_overrides.clone());
}
if let Some(pod_overrides) = hdfs.pod_overrides_for_role_group(role, &rolegroup_ref.role_group)
{
pod_template.merge_from(pod_overrides.clone());
}

Ok(StatefulSet {
metadata: ObjectMetaBuilder::new()
.name_and_namespace(hdfs)
Expand Down Expand Up @@ -649,7 +659,7 @@ fn rolegroup_statefulset(
..LabelSelector::default()
},
service_name: object_name,
template: pb.build_template(),
template: pod_template,

volume_claim_templates: ContainerConfig::volume_claim_templates(role, merged_config),
..StatefulSetSpec::default()
Expand Down

0 comments on commit a33fbca

Please sign in to comment.