From ff4ad75930adf3cdf77b178b37d190bc747e9d7b Mon Sep 17 00:00:00 2001 From: Arnav Singh Date: Wed, 11 Sep 2024 23:41:04 -0700 Subject: [PATCH] Backport fixes from v1.30.5 / v1.31.1 to make `HostIP::ip` and `PodIP::ip` required fields. Just like with 158e80d1c3eaff154ce48f6dcd73d43b928ecdfe , upstream found more fields that should be required, but only marked them as such in v1.30 and v1.31. This commit adds a fixup to all older releases to do that. --- .../src/fixups/upstream_bugs.rs | 38 +++++++++++++++++++ k8s-openapi-codegen/src/supported_version.rs | 8 ++++ src/v1_24/api/core/v1/pod_ip.rs | 13 ++++--- src/v1_25/api/core/v1/pod_ip.rs | 13 ++++--- src/v1_26/api/core/v1/pod_ip.rs | 13 ++++--- src/v1_27/api/core/v1/pod_ip.rs | 13 ++++--- src/v1_28/api/core/v1/host_ip.rs | 13 ++++--- src/v1_28/api/core/v1/pod_ip.rs | 13 ++++--- src/v1_29/api/core/v1/host_ip.rs | 13 ++++--- src/v1_29/api/core/v1/pod_ip.rs | 13 ++++--- 10 files changed, 102 insertions(+), 48 deletions(-) diff --git a/k8s-openapi-codegen/src/fixups/upstream_bugs.rs b/k8s-openapi-codegen/src/fixups/upstream_bugs.rs index 91615e92d..79dab93da 100644 --- a/k8s-openapi-codegen/src/fixups/upstream_bugs.rs +++ b/k8s-openapi-codegen/src/fixups/upstream_bugs.rs @@ -187,6 +187,25 @@ pub(crate) mod required_properties { Err("never applied HostAlias required properties override".into()) } + // `HostIP::ip` + // + // Ref: https://github.com/kubernetes/kubernetes/pull/126057 + pub(crate) fn host_ip(spec: &mut crate::swagger20::Spec) -> Result<(), crate::Error> { + let definition_path = crate::swagger20::DefinitionPath("io.k8s.api.core.v1.HostIP".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("ip") { + if !property.1 { + property.1 = true; + return Ok(()); + } + } + } + } + + Err("never applied HostIP required properties override".into()) + } + // `LocalObjectReference::name` // // Ref: https://github.com/kubernetes/kubernetes/pull/124694 @@ -206,6 +225,25 @@ pub(crate) mod required_properties { Err("never applied LocalObjectReference required properties override".into()) } + // `PodIP::ip` + // + // Ref: https://github.com/kubernetes/kubernetes/pull/126057 + pub(crate) fn pod_ip(spec: &mut crate::swagger20::Spec) -> Result<(), crate::Error> { + let definition_path = crate::swagger20::DefinitionPath("io.k8s.api.core.v1.PodIP".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("ip") { + if !property.1 { + property.1 = true; + return Ok(()); + } + } + } + } + + Err("never applied PodIP required properties override".into()) + } + // `SecretEnvSource::name` // // Ref: https://github.com/kubernetes/kubernetes/pull/124694 diff --git a/k8s-openapi-codegen/src/supported_version.rs b/k8s-openapi-codegen/src/supported_version.rs index 641f1fb86..e857d05e9 100644 --- a/k8s-openapi-codegen/src/supported_version.rs +++ b/k8s-openapi-codegen/src/supported_version.rs @@ -74,6 +74,7 @@ impl SupportedVersion { crate::fixups::upstream_bugs::required_properties::config_map_volume_source, crate::fixups::upstream_bugs::required_properties::host_alias, crate::fixups::upstream_bugs::required_properties::local_object_reference, + crate::fixups::upstream_bugs::required_properties::pod_ip, crate::fixups::upstream_bugs::required_properties::secret_env_source, crate::fixups::upstream_bugs::required_properties::secret_key_selector, crate::fixups::upstream_bugs::required_properties::secret_projection, @@ -83,6 +84,7 @@ impl SupportedVersion { crate::fixups::upstream_bugs::connect_options_gvk, crate::fixups::upstream_bugs::optional_properties::eventsv1_event, crate::fixups::upstream_bugs::required_properties::local_object_reference, + crate::fixups::upstream_bugs::required_properties::pod_ip, ], SupportedVersion::V1_26 => &[ @@ -96,6 +98,7 @@ impl SupportedVersion { crate::fixups::upstream_bugs::required_properties::config_map_volume_source, crate::fixups::upstream_bugs::required_properties::host_alias, crate::fixups::upstream_bugs::required_properties::local_object_reference, + crate::fixups::upstream_bugs::required_properties::pod_ip, crate::fixups::upstream_bugs::required_properties::secret_env_source, crate::fixups::upstream_bugs::required_properties::secret_key_selector, crate::fixups::upstream_bugs::required_properties::secret_projection, @@ -114,6 +117,7 @@ impl SupportedVersion { crate::fixups::upstream_bugs::required_properties::config_map_volume_source, crate::fixups::upstream_bugs::required_properties::host_alias, crate::fixups::upstream_bugs::required_properties::local_object_reference, + crate::fixups::upstream_bugs::required_properties::pod_ip, crate::fixups::upstream_bugs::required_properties::secret_env_source, crate::fixups::upstream_bugs::required_properties::secret_key_selector, crate::fixups::upstream_bugs::required_properties::secret_projection, @@ -130,7 +134,9 @@ impl SupportedVersion { crate::fixups::upstream_bugs::required_properties::config_map_projection, crate::fixups::upstream_bugs::required_properties::config_map_volume_source, crate::fixups::upstream_bugs::required_properties::host_alias, + crate::fixups::upstream_bugs::required_properties::host_ip, crate::fixups::upstream_bugs::required_properties::local_object_reference, + crate::fixups::upstream_bugs::required_properties::pod_ip, crate::fixups::upstream_bugs::required_properties::secret_env_source, crate::fixups::upstream_bugs::required_properties::secret_key_selector, crate::fixups::upstream_bugs::required_properties::secret_projection, @@ -147,7 +153,9 @@ impl SupportedVersion { crate::fixups::upstream_bugs::required_properties::config_map_projection, crate::fixups::upstream_bugs::required_properties::config_map_volume_source, crate::fixups::upstream_bugs::required_properties::host_alias, + crate::fixups::upstream_bugs::required_properties::host_ip, crate::fixups::upstream_bugs::required_properties::local_object_reference, + crate::fixups::upstream_bugs::required_properties::pod_ip, crate::fixups::upstream_bugs::required_properties::secret_env_source, crate::fixups::upstream_bugs::required_properties::secret_key_selector, crate::fixups::upstream_bugs::required_properties::secret_projection, diff --git a/src/v1_24/api/core/v1/pod_ip.rs b/src/v1_24/api/core/v1/pod_ip.rs index 1ea9bb438..6451ee45d 100644 --- a/src/v1_24/api/core/v1/pod_ip.rs +++ b/src/v1_24/api/core/v1/pod_ip.rs @@ -6,7 +6,7 @@ #[derive(Clone, Debug, Default, PartialEq)] pub struct PodIP { /// ip is an IP address (IPv4 or IPv6) assigned to the pod - pub ip: Option, + pub ip: String, } impl crate::DeepMerge for PodIP { @@ -66,7 +66,7 @@ impl<'de> crate::serde::Deserialize<'de> for PodIP { } Ok(PodIP { - ip: value_ip, + ip: value_ip.unwrap_or_default(), }) } } @@ -85,11 +85,9 @@ impl crate::serde::Serialize for PodIP { fn serialize(&self, serializer: S) -> Result where S: crate::serde::Serializer { let mut state = serializer.serialize_struct( "PodIP", - self.ip.as_ref().map_or(0, |_| 1), + 1, )?; - if let Some(value) = &self.ip { - crate::serde::ser::SerializeStruct::serialize_field(&mut state, "ip", value)?; - } + crate::serde::ser::SerializeStruct::serialize_field(&mut state, "ip", &self.ip)?; crate::serde::ser::SerializeStruct::end(state) } } @@ -121,6 +119,9 @@ impl crate::schemars::JsonSchema for PodIP { }), ), ].into(), + required: [ + "ip".to_owned(), + ].into(), ..Default::default() })), ..Default::default() diff --git a/src/v1_25/api/core/v1/pod_ip.rs b/src/v1_25/api/core/v1/pod_ip.rs index 1ea9bb438..6451ee45d 100644 --- a/src/v1_25/api/core/v1/pod_ip.rs +++ b/src/v1_25/api/core/v1/pod_ip.rs @@ -6,7 +6,7 @@ #[derive(Clone, Debug, Default, PartialEq)] pub struct PodIP { /// ip is an IP address (IPv4 or IPv6) assigned to the pod - pub ip: Option, + pub ip: String, } impl crate::DeepMerge for PodIP { @@ -66,7 +66,7 @@ impl<'de> crate::serde::Deserialize<'de> for PodIP { } Ok(PodIP { - ip: value_ip, + ip: value_ip.unwrap_or_default(), }) } } @@ -85,11 +85,9 @@ impl crate::serde::Serialize for PodIP { fn serialize(&self, serializer: S) -> Result where S: crate::serde::Serializer { let mut state = serializer.serialize_struct( "PodIP", - self.ip.as_ref().map_or(0, |_| 1), + 1, )?; - if let Some(value) = &self.ip { - crate::serde::ser::SerializeStruct::serialize_field(&mut state, "ip", value)?; - } + crate::serde::ser::SerializeStruct::serialize_field(&mut state, "ip", &self.ip)?; crate::serde::ser::SerializeStruct::end(state) } } @@ -121,6 +119,9 @@ impl crate::schemars::JsonSchema for PodIP { }), ), ].into(), + required: [ + "ip".to_owned(), + ].into(), ..Default::default() })), ..Default::default() diff --git a/src/v1_26/api/core/v1/pod_ip.rs b/src/v1_26/api/core/v1/pod_ip.rs index 1ea9bb438..6451ee45d 100644 --- a/src/v1_26/api/core/v1/pod_ip.rs +++ b/src/v1_26/api/core/v1/pod_ip.rs @@ -6,7 +6,7 @@ #[derive(Clone, Debug, Default, PartialEq)] pub struct PodIP { /// ip is an IP address (IPv4 or IPv6) assigned to the pod - pub ip: Option, + pub ip: String, } impl crate::DeepMerge for PodIP { @@ -66,7 +66,7 @@ impl<'de> crate::serde::Deserialize<'de> for PodIP { } Ok(PodIP { - ip: value_ip, + ip: value_ip.unwrap_or_default(), }) } } @@ -85,11 +85,9 @@ impl crate::serde::Serialize for PodIP { fn serialize(&self, serializer: S) -> Result where S: crate::serde::Serializer { let mut state = serializer.serialize_struct( "PodIP", - self.ip.as_ref().map_or(0, |_| 1), + 1, )?; - if let Some(value) = &self.ip { - crate::serde::ser::SerializeStruct::serialize_field(&mut state, "ip", value)?; - } + crate::serde::ser::SerializeStruct::serialize_field(&mut state, "ip", &self.ip)?; crate::serde::ser::SerializeStruct::end(state) } } @@ -121,6 +119,9 @@ impl crate::schemars::JsonSchema for PodIP { }), ), ].into(), + required: [ + "ip".to_owned(), + ].into(), ..Default::default() })), ..Default::default() diff --git a/src/v1_27/api/core/v1/pod_ip.rs b/src/v1_27/api/core/v1/pod_ip.rs index 1ea9bb438..6451ee45d 100644 --- a/src/v1_27/api/core/v1/pod_ip.rs +++ b/src/v1_27/api/core/v1/pod_ip.rs @@ -6,7 +6,7 @@ #[derive(Clone, Debug, Default, PartialEq)] pub struct PodIP { /// ip is an IP address (IPv4 or IPv6) assigned to the pod - pub ip: Option, + pub ip: String, } impl crate::DeepMerge for PodIP { @@ -66,7 +66,7 @@ impl<'de> crate::serde::Deserialize<'de> for PodIP { } Ok(PodIP { - ip: value_ip, + ip: value_ip.unwrap_or_default(), }) } } @@ -85,11 +85,9 @@ impl crate::serde::Serialize for PodIP { fn serialize(&self, serializer: S) -> Result where S: crate::serde::Serializer { let mut state = serializer.serialize_struct( "PodIP", - self.ip.as_ref().map_or(0, |_| 1), + 1, )?; - if let Some(value) = &self.ip { - crate::serde::ser::SerializeStruct::serialize_field(&mut state, "ip", value)?; - } + crate::serde::ser::SerializeStruct::serialize_field(&mut state, "ip", &self.ip)?; crate::serde::ser::SerializeStruct::end(state) } } @@ -121,6 +119,9 @@ impl crate::schemars::JsonSchema for PodIP { }), ), ].into(), + required: [ + "ip".to_owned(), + ].into(), ..Default::default() })), ..Default::default() diff --git a/src/v1_28/api/core/v1/host_ip.rs b/src/v1_28/api/core/v1/host_ip.rs index 037cae73d..cea2a7305 100644 --- a/src/v1_28/api/core/v1/host_ip.rs +++ b/src/v1_28/api/core/v1/host_ip.rs @@ -4,7 +4,7 @@ #[derive(Clone, Debug, Default, PartialEq)] pub struct HostIP { /// IP is the IP address assigned to the host - pub ip: Option, + pub ip: String, } impl crate::DeepMerge for HostIP { @@ -64,7 +64,7 @@ impl<'de> crate::serde::Deserialize<'de> for HostIP { } Ok(HostIP { - ip: value_ip, + ip: value_ip.unwrap_or_default(), }) } } @@ -83,11 +83,9 @@ impl crate::serde::Serialize for HostIP { fn serialize(&self, serializer: S) -> Result where S: crate::serde::Serializer { let mut state = serializer.serialize_struct( "HostIP", - self.ip.as_ref().map_or(0, |_| 1), + 1, )?; - if let Some(value) = &self.ip { - crate::serde::ser::SerializeStruct::serialize_field(&mut state, "ip", value)?; - } + crate::serde::ser::SerializeStruct::serialize_field(&mut state, "ip", &self.ip)?; crate::serde::ser::SerializeStruct::end(state) } } @@ -119,6 +117,9 @@ impl crate::schemars::JsonSchema for HostIP { }), ), ].into(), + required: [ + "ip".to_owned(), + ].into(), ..Default::default() })), ..Default::default() diff --git a/src/v1_28/api/core/v1/pod_ip.rs b/src/v1_28/api/core/v1/pod_ip.rs index 6b007178c..026c3a221 100644 --- a/src/v1_28/api/core/v1/pod_ip.rs +++ b/src/v1_28/api/core/v1/pod_ip.rs @@ -4,7 +4,7 @@ #[derive(Clone, Debug, Default, PartialEq)] pub struct PodIP { /// IP is the IP address assigned to the pod - pub ip: Option, + pub ip: String, } impl crate::DeepMerge for PodIP { @@ -64,7 +64,7 @@ impl<'de> crate::serde::Deserialize<'de> for PodIP { } Ok(PodIP { - ip: value_ip, + ip: value_ip.unwrap_or_default(), }) } } @@ -83,11 +83,9 @@ impl crate::serde::Serialize for PodIP { fn serialize(&self, serializer: S) -> Result where S: crate::serde::Serializer { let mut state = serializer.serialize_struct( "PodIP", - self.ip.as_ref().map_or(0, |_| 1), + 1, )?; - if let Some(value) = &self.ip { - crate::serde::ser::SerializeStruct::serialize_field(&mut state, "ip", value)?; - } + crate::serde::ser::SerializeStruct::serialize_field(&mut state, "ip", &self.ip)?; crate::serde::ser::SerializeStruct::end(state) } } @@ -119,6 +117,9 @@ impl crate::schemars::JsonSchema for PodIP { }), ), ].into(), + required: [ + "ip".to_owned(), + ].into(), ..Default::default() })), ..Default::default() diff --git a/src/v1_29/api/core/v1/host_ip.rs b/src/v1_29/api/core/v1/host_ip.rs index 037cae73d..cea2a7305 100644 --- a/src/v1_29/api/core/v1/host_ip.rs +++ b/src/v1_29/api/core/v1/host_ip.rs @@ -4,7 +4,7 @@ #[derive(Clone, Debug, Default, PartialEq)] pub struct HostIP { /// IP is the IP address assigned to the host - pub ip: Option, + pub ip: String, } impl crate::DeepMerge for HostIP { @@ -64,7 +64,7 @@ impl<'de> crate::serde::Deserialize<'de> for HostIP { } Ok(HostIP { - ip: value_ip, + ip: value_ip.unwrap_or_default(), }) } } @@ -83,11 +83,9 @@ impl crate::serde::Serialize for HostIP { fn serialize(&self, serializer: S) -> Result where S: crate::serde::Serializer { let mut state = serializer.serialize_struct( "HostIP", - self.ip.as_ref().map_or(0, |_| 1), + 1, )?; - if let Some(value) = &self.ip { - crate::serde::ser::SerializeStruct::serialize_field(&mut state, "ip", value)?; - } + crate::serde::ser::SerializeStruct::serialize_field(&mut state, "ip", &self.ip)?; crate::serde::ser::SerializeStruct::end(state) } } @@ -119,6 +117,9 @@ impl crate::schemars::JsonSchema for HostIP { }), ), ].into(), + required: [ + "ip".to_owned(), + ].into(), ..Default::default() })), ..Default::default() diff --git a/src/v1_29/api/core/v1/pod_ip.rs b/src/v1_29/api/core/v1/pod_ip.rs index 6b007178c..026c3a221 100644 --- a/src/v1_29/api/core/v1/pod_ip.rs +++ b/src/v1_29/api/core/v1/pod_ip.rs @@ -4,7 +4,7 @@ #[derive(Clone, Debug, Default, PartialEq)] pub struct PodIP { /// IP is the IP address assigned to the pod - pub ip: Option, + pub ip: String, } impl crate::DeepMerge for PodIP { @@ -64,7 +64,7 @@ impl<'de> crate::serde::Deserialize<'de> for PodIP { } Ok(PodIP { - ip: value_ip, + ip: value_ip.unwrap_or_default(), }) } } @@ -83,11 +83,9 @@ impl crate::serde::Serialize for PodIP { fn serialize(&self, serializer: S) -> Result where S: crate::serde::Serializer { let mut state = serializer.serialize_struct( "PodIP", - self.ip.as_ref().map_or(0, |_| 1), + 1, )?; - if let Some(value) = &self.ip { - crate::serde::ser::SerializeStruct::serialize_field(&mut state, "ip", value)?; - } + crate::serde::ser::SerializeStruct::serialize_field(&mut state, "ip", &self.ip)?; crate::serde::ser::SerializeStruct::end(state) } } @@ -119,6 +117,9 @@ impl crate::schemars::JsonSchema for PodIP { }), ), ].into(), + required: [ + "ip".to_owned(), + ].into(), ..Default::default() })), ..Default::default()