Skip to content

Commit

Permalink
Backport v1.29 changes to merge strategy of `PodSchedulingContextSpec…
Browse files Browse the repository at this point in the history
…::potential_nodes` and `ResourceClaimSchedulingStatus::unsuitable_nodes`
  • Loading branch information
Arnavion committed Dec 13, 2023
1 parent 00671dd commit 5670a50
Show file tree
Hide file tree
Showing 7 changed files with 78 additions and 7 deletions.
70 changes: 68 additions & 2 deletions k8s-openapi-codegen/src/fixups/upstream_bugs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -161,8 +161,8 @@ pub(crate) mod required_properties {
}
}

/// `Status` has extra group-version-kind entries than the original `"":v1:Status` that cause it to not be detected as a `Resource`.
/// Remove the extras.
// `Status` has extra group-version-kind entries than the original `"":v1:Status` that cause it to not be detected as a `Resource`.
// Remove the extras.
pub(crate) fn status_extra_gvk(spec: &mut crate::swagger20::Spec) -> Result<(), crate::Error> {
let definition_path = crate::swagger20::DefinitionPath("io.k8s.apimachinery.pkg.apis.meta.v1.Status".to_owned());
if let Some(definition) = spec.definitions.get_mut(&definition_path) {
Expand All @@ -181,3 +181,69 @@ pub(crate) fn status_extra_gvk(spec: &mut crate::swagger20::Spec) -> Result<(),

Err("never applied Status extra group-version-kinds override".into())
}

// `PodSchedulingContextSpec` has `set` merge strategy in versions before v1.29
// but v1.29 decided it would like clients to treat it as `atomic`.
//
// Ref: https://github.com/kubernetes/kubernetes/pull/119962
pub(crate) fn pod_scheduling_context_spec_potential_nodes_merge_strategy(spec: &mut crate::swagger20::Spec) -> Result<(), crate::Error> {
let definition_path = crate::swagger20::DefinitionPath("io.k8s.api.resource.v1alpha2.PodSchedulingContextSpec".to_owned());
if let Some(definition) = spec.definitions.get_mut(&definition_path) {
if let crate::swagger20::SchemaKind::Properties(properties) = &mut definition.kind {
if let Some(property) = properties.get_mut("potentialNodes") {
if let crate::swagger20::MergeType::List { strategy, .. } = &mut property.0.merge_type {
if *strategy == crate::swagger20::KubernetesListType::Set {
*strategy = crate::swagger20::KubernetesListType::Atomic;
return Ok(());
}
}
}
}
}

Err("never applied PodSchedulingContextSpec.potentialNodes merge strategy override".into())
}

// `ResourceClaimSchedulingStatus` has `set` merge strategy in versions before v1.29
// but v1.29 decided it would like clients to treat it as `atomic`.
//
// Ref: https://github.com/kubernetes/kubernetes/pull/119962
pub(crate) fn v1alpha1_resource_claim_scheduling_status_unsuitable_nodes_merge_strategy(spec: &mut crate::swagger20::Spec) -> Result<(), crate::Error> {
let definition_path = crate::swagger20::DefinitionPath("io.k8s.api.resource.v1alpha1.ResourceClaimSchedulingStatus".to_owned());
if let Some(definition) = spec.definitions.get_mut(&definition_path) {
if let crate::swagger20::SchemaKind::Properties(properties) = &mut definition.kind {
if let Some(property) = properties.get_mut("unsuitableNodes") {
if let crate::swagger20::MergeType::List { strategy, .. } = &mut property.0.merge_type {
if *strategy == crate::swagger20::KubernetesListType::Set {
*strategy = crate::swagger20::KubernetesListType::Atomic;
return Ok(());
}
}
}
}
}

Err("never applied ResourceClaimSchedulingStatus.unsuitableNodes merge strategy override".into())
}

// `ResourceClaimSchedulingStatus` has `set` merge strategy in versions before v1.29
// but v1.29 decided it would like clients to treat it as `atomic`.
//
// Ref: https://github.com/kubernetes/kubernetes/pull/119962
pub(crate) fn v1alpha2_resource_claim_scheduling_status_unsuitable_nodes_merge_strategy(spec: &mut crate::swagger20::Spec) -> Result<(), crate::Error> {
let definition_path = crate::swagger20::DefinitionPath("io.k8s.api.resource.v1alpha2.ResourceClaimSchedulingStatus".to_owned());
if let Some(definition) = spec.definitions.get_mut(&definition_path) {
if let crate::swagger20::SchemaKind::Properties(properties) = &mut definition.kind {
if let Some(property) = properties.get_mut("unsuitableNodes") {
if let crate::swagger20::MergeType::List { strategy, .. } = &mut property.0.merge_type {
if *strategy == crate::swagger20::KubernetesListType::Set {
*strategy = crate::swagger20::KubernetesListType::Atomic;
return Ok(());
}
}
}
}
}

Err("never applied ResourceClaimSchedulingStatus.unsuitableNodes merge strategy override".into())
}
5 changes: 5 additions & 0 deletions k8s-openapi-codegen/src/supported_version.rs
Original file line number Diff line number Diff line change
Expand Up @@ -71,14 +71,17 @@ impl SupportedVersion {
crate::fixups::upstream_bugs::required_properties::alpha1_validating_admission_policy_binding_list,
crate::fixups::upstream_bugs::required_properties::alpha1_validating_admission_policy_list,
crate::fixups::upstream_bugs::status_extra_gvk,
crate::fixups::upstream_bugs::v1alpha1_resource_claim_scheduling_status_unsuitable_nodes_merge_strategy,
],

SupportedVersion::V1_27 => &[
crate::fixups::upstream_bugs::connect_options_gvk,
crate::fixups::upstream_bugs::optional_properties::eventsv1_event,
crate::fixups::upstream_bugs::required_properties::alpha1_validating_admission_policy_binding_list,
crate::fixups::upstream_bugs::required_properties::alpha1_validating_admission_policy_list,
crate::fixups::upstream_bugs::pod_scheduling_context_spec_potential_nodes_merge_strategy,
crate::fixups::upstream_bugs::status_extra_gvk,
crate::fixups::upstream_bugs::v1alpha2_resource_claim_scheduling_status_unsuitable_nodes_merge_strategy,
],

SupportedVersion::V1_28 => &[
Expand All @@ -88,7 +91,9 @@ impl SupportedVersion {
crate::fixups::upstream_bugs::required_properties::alpha1_validating_admission_policy_list,
crate::fixups::upstream_bugs::required_properties::beta1_validating_admission_policy_binding_list,
crate::fixups::upstream_bugs::required_properties::beta1_validating_admission_policy_list,
crate::fixups::upstream_bugs::pod_scheduling_context_spec_potential_nodes_merge_strategy,
crate::fixups::upstream_bugs::status_extra_gvk,
crate::fixups::upstream_bugs::v1alpha2_resource_claim_scheduling_status_unsuitable_nodes_merge_strategy,
],

SupportedVersion::V1_29 => &[
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ pub struct ResourceClaimSchedulingStatus {
impl crate::DeepMerge for ResourceClaimSchedulingStatus {
fn merge_from(&mut self, other: Self) {
crate::DeepMerge::merge_from(&mut self.name, other.name);
crate::merge_strategies::list::set(&mut self.unsuitable_nodes, other.unsuitable_nodes);
crate::merge_strategies::list::atomic(&mut self.unsuitable_nodes, other.unsuitable_nodes);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ pub struct PodSchedulingContextSpec {

impl crate::DeepMerge for PodSchedulingContextSpec {
fn merge_from(&mut self, other: Self) {
crate::merge_strategies::list::set(&mut self.potential_nodes, other.potential_nodes);
crate::merge_strategies::list::atomic(&mut self.potential_nodes, other.potential_nodes);
crate::DeepMerge::merge_from(&mut self.selected_node, other.selected_node);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ pub struct ResourceClaimSchedulingStatus {
impl crate::DeepMerge for ResourceClaimSchedulingStatus {
fn merge_from(&mut self, other: Self) {
crate::DeepMerge::merge_from(&mut self.name, other.name);
crate::merge_strategies::list::set(&mut self.unsuitable_nodes, other.unsuitable_nodes);
crate::merge_strategies::list::atomic(&mut self.unsuitable_nodes, other.unsuitable_nodes);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ pub struct PodSchedulingContextSpec {

impl crate::DeepMerge for PodSchedulingContextSpec {
fn merge_from(&mut self, other: Self) {
crate::merge_strategies::list::set(&mut self.potential_nodes, other.potential_nodes);
crate::merge_strategies::list::atomic(&mut self.potential_nodes, other.potential_nodes);
crate::DeepMerge::merge_from(&mut self.selected_node, other.selected_node);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ pub struct ResourceClaimSchedulingStatus {
impl crate::DeepMerge for ResourceClaimSchedulingStatus {
fn merge_from(&mut self, other: Self) {
crate::DeepMerge::merge_from(&mut self.name, other.name);
crate::merge_strategies::list::set(&mut self.unsuitable_nodes, other.unsuitable_nodes);
crate::merge_strategies::list::atomic(&mut self.unsuitable_nodes, other.unsuitable_nodes);
}
}

Expand Down

0 comments on commit 5670a50

Please sign in to comment.