k8s_openapi/v1_30/api/core/v1/
node_spec.rs1#[derive(Clone, Debug, Default, PartialEq)]
5pub struct NodeSpec {
6 pub config_source: Option<crate::api::core::v1::NodeConfigSource>,
8
9 pub external_id: Option<std::string::String>,
11
12 pub pod_cidr: Option<std::string::String>,
14
15 pub pod_cidrs: Option<std::vec::Vec<std::string::String>>,
17
18 pub provider_id: Option<std::string::String>,
20
21 pub taints: Option<std::vec::Vec<crate::api::core::v1::Taint>>,
23
24 pub unschedulable: Option<bool>,
26}
27
28impl crate::DeepMerge for NodeSpec {
29 fn merge_from(&mut self, other: Self) {
30 crate::DeepMerge::merge_from(&mut self.config_source, other.config_source);
31 crate::DeepMerge::merge_from(&mut self.external_id, other.external_id);
32 crate::DeepMerge::merge_from(&mut self.pod_cidr, other.pod_cidr);
33 crate::merge_strategies::list::set(&mut self.pod_cidrs, other.pod_cidrs);
34 crate::DeepMerge::merge_from(&mut self.provider_id, other.provider_id);
35 crate::merge_strategies::list::atomic(&mut self.taints, other.taints);
36 crate::DeepMerge::merge_from(&mut self.unschedulable, other.unschedulable);
37 }
38}
39
40impl<'de> crate::serde::Deserialize<'de> for NodeSpec {
41 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
42 #[allow(non_camel_case_types)]
43 enum Field {
44 Key_config_source,
45 Key_external_id,
46 Key_pod_cidr,
47 Key_pod_cidrs,
48 Key_provider_id,
49 Key_taints,
50 Key_unschedulable,
51 Other,
52 }
53
54 impl<'de> crate::serde::Deserialize<'de> for Field {
55 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
56 struct Visitor;
57
58 impl crate::serde::de::Visitor<'_> for Visitor {
59 type Value = Field;
60
61 fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
62 f.write_str("field identifier")
63 }
64
65 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
66 Ok(match v {
67 "configSource" => Field::Key_config_source,
68 "externalID" => Field::Key_external_id,
69 "podCIDR" => Field::Key_pod_cidr,
70 "podCIDRs" => Field::Key_pod_cidrs,
71 "providerID" => Field::Key_provider_id,
72 "taints" => Field::Key_taints,
73 "unschedulable" => Field::Key_unschedulable,
74 _ => Field::Other,
75 })
76 }
77 }
78
79 deserializer.deserialize_identifier(Visitor)
80 }
81 }
82
83 struct Visitor;
84
85 impl<'de> crate::serde::de::Visitor<'de> for Visitor {
86 type Value = NodeSpec;
87
88 fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
89 f.write_str("NodeSpec")
90 }
91
92 fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
93 let mut value_config_source: Option<crate::api::core::v1::NodeConfigSource> = None;
94 let mut value_external_id: Option<std::string::String> = None;
95 let mut value_pod_cidr: Option<std::string::String> = None;
96 let mut value_pod_cidrs: Option<std::vec::Vec<std::string::String>> = None;
97 let mut value_provider_id: Option<std::string::String> = None;
98 let mut value_taints: Option<std::vec::Vec<crate::api::core::v1::Taint>> = None;
99 let mut value_unschedulable: Option<bool> = None;
100
101 while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
102 match key {
103 Field::Key_config_source => value_config_source = crate::serde::de::MapAccess::next_value(&mut map)?,
104 Field::Key_external_id => value_external_id = crate::serde::de::MapAccess::next_value(&mut map)?,
105 Field::Key_pod_cidr => value_pod_cidr = crate::serde::de::MapAccess::next_value(&mut map)?,
106 Field::Key_pod_cidrs => value_pod_cidrs = crate::serde::de::MapAccess::next_value(&mut map)?,
107 Field::Key_provider_id => value_provider_id = crate::serde::de::MapAccess::next_value(&mut map)?,
108 Field::Key_taints => value_taints = crate::serde::de::MapAccess::next_value(&mut map)?,
109 Field::Key_unschedulable => value_unschedulable = crate::serde::de::MapAccess::next_value(&mut map)?,
110 Field::Other => { let _: crate::serde::de::IgnoredAny = crate::serde::de::MapAccess::next_value(&mut map)?; },
111 }
112 }
113
114 Ok(NodeSpec {
115 config_source: value_config_source,
116 external_id: value_external_id,
117 pod_cidr: value_pod_cidr,
118 pod_cidrs: value_pod_cidrs,
119 provider_id: value_provider_id,
120 taints: value_taints,
121 unschedulable: value_unschedulable,
122 })
123 }
124 }
125
126 deserializer.deserialize_struct(
127 "NodeSpec",
128 &[
129 "configSource",
130 "externalID",
131 "podCIDR",
132 "podCIDRs",
133 "providerID",
134 "taints",
135 "unschedulable",
136 ],
137 Visitor,
138 )
139 }
140}
141
142impl crate::serde::Serialize for NodeSpec {
143 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
144 let mut state = serializer.serialize_struct(
145 "NodeSpec",
146 self.config_source.as_ref().map_or(0, |_| 1) +
147 self.external_id.as_ref().map_or(0, |_| 1) +
148 self.pod_cidr.as_ref().map_or(0, |_| 1) +
149 self.pod_cidrs.as_ref().map_or(0, |_| 1) +
150 self.provider_id.as_ref().map_or(0, |_| 1) +
151 self.taints.as_ref().map_or(0, |_| 1) +
152 self.unschedulable.as_ref().map_or(0, |_| 1),
153 )?;
154 if let Some(value) = &self.config_source {
155 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "configSource", value)?;
156 }
157 if let Some(value) = &self.external_id {
158 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "externalID", value)?;
159 }
160 if let Some(value) = &self.pod_cidr {
161 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "podCIDR", value)?;
162 }
163 if let Some(value) = &self.pod_cidrs {
164 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "podCIDRs", value)?;
165 }
166 if let Some(value) = &self.provider_id {
167 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "providerID", value)?;
168 }
169 if let Some(value) = &self.taints {
170 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "taints", value)?;
171 }
172 if let Some(value) = &self.unschedulable {
173 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "unschedulable", value)?;
174 }
175 crate::serde::ser::SerializeStruct::end(state)
176 }
177}
178
179#[cfg(feature = "schemars")]
180impl crate::schemars::JsonSchema for NodeSpec {
181 fn schema_name() -> std::borrow::Cow<'static, str> {
182 "io.k8s.api.core.v1.NodeSpec".into()
183 }
184
185 fn json_schema(__gen: &mut crate::schemars::SchemaGenerator) -> crate::schemars::Schema {
186 crate::schemars::json_schema!({
187 "description": "NodeSpec describes the attributes that a node is created with.",
188 "type": "object",
189 "properties": {
190 "configSource": ({
191 let mut schema_obj = __gen.subschema_for::<crate::api::core::v1::NodeConfigSource>();
192 schema_obj.ensure_object().insert("description".into(), "Deprecated: Previously used to specify the source of the node's configuration for the DynamicKubeletConfig feature. This feature is removed.".into());
193 schema_obj
194 }),
195 "externalID": {
196 "description": "Deprecated. Not all kubelets will set this field. Remove field after 1.13. see: https://issues.k8s.io/61966",
197 "type": "string",
198 },
199 "podCIDR": {
200 "description": "PodCIDR represents the pod IP range assigned to the node.",
201 "type": "string",
202 },
203 "podCIDRs": {
204 "description": "podCIDRs represents the IP ranges assigned to the node for usage by Pods on that node. If this field is specified, the 0th entry must match the podCIDR field. It may contain at most 1 value for each of IPv4 and IPv6.",
205 "type": "array",
206 "items": {
207 "type": "string",
208 },
209 },
210 "providerID": {
211 "description": "ID of the node assigned by the cloud provider in the format: <ProviderName>://<ProviderSpecificNodeID>",
212 "type": "string",
213 },
214 "taints": {
215 "description": "If specified, the node's taints.",
216 "type": "array",
217 "items": (__gen.subschema_for::<crate::api::core::v1::Taint>()),
218 },
219 "unschedulable": {
220 "description": "Unschedulable controls node schedulability of new pods. By default, node is schedulable. More info: https://kubernetes.io/docs/concepts/nodes/node/#manual-node-administration",
221 "type": "boolean",
222 },
223 },
224 })
225 }
226}