k8s_openapi/v1_32/api/apps/v1/
deployment_spec.rs1#[derive(Clone, Debug, Default, PartialEq)]
5pub struct DeploymentSpec {
6 pub min_ready_seconds: Option<i32>,
8
9 pub paused: Option<bool>,
11
12 pub progress_deadline_seconds: Option<i32>,
14
15 pub replicas: Option<i32>,
17
18 pub revision_history_limit: Option<i32>,
20
21 pub selector: crate::apimachinery::pkg::apis::meta::v1::LabelSelector,
23
24 pub strategy: Option<crate::api::apps::v1::DeploymentStrategy>,
26
27 pub template: crate::api::core::v1::PodTemplateSpec,
29}
30
31impl crate::DeepMerge for DeploymentSpec {
32 fn merge_from(&mut self, other: Self) {
33 crate::DeepMerge::merge_from(&mut self.min_ready_seconds, other.min_ready_seconds);
34 crate::DeepMerge::merge_from(&mut self.paused, other.paused);
35 crate::DeepMerge::merge_from(&mut self.progress_deadline_seconds, other.progress_deadline_seconds);
36 crate::DeepMerge::merge_from(&mut self.replicas, other.replicas);
37 crate::DeepMerge::merge_from(&mut self.revision_history_limit, other.revision_history_limit);
38 crate::DeepMerge::merge_from(&mut self.selector, other.selector);
39 crate::DeepMerge::merge_from(&mut self.strategy, other.strategy);
40 crate::DeepMerge::merge_from(&mut self.template, other.template);
41 }
42}
43
44impl<'de> crate::serde::Deserialize<'de> for DeploymentSpec {
45 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
46 #[allow(non_camel_case_types)]
47 enum Field {
48 Key_min_ready_seconds,
49 Key_paused,
50 Key_progress_deadline_seconds,
51 Key_replicas,
52 Key_revision_history_limit,
53 Key_selector,
54 Key_strategy,
55 Key_template,
56 Other,
57 }
58
59 impl<'de> crate::serde::Deserialize<'de> for Field {
60 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
61 struct Visitor;
62
63 impl crate::serde::de::Visitor<'_> for Visitor {
64 type Value = Field;
65
66 fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
67 f.write_str("field identifier")
68 }
69
70 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
71 Ok(match v {
72 "minReadySeconds" => Field::Key_min_ready_seconds,
73 "paused" => Field::Key_paused,
74 "progressDeadlineSeconds" => Field::Key_progress_deadline_seconds,
75 "replicas" => Field::Key_replicas,
76 "revisionHistoryLimit" => Field::Key_revision_history_limit,
77 "selector" => Field::Key_selector,
78 "strategy" => Field::Key_strategy,
79 "template" => Field::Key_template,
80 _ => Field::Other,
81 })
82 }
83 }
84
85 deserializer.deserialize_identifier(Visitor)
86 }
87 }
88
89 struct Visitor;
90
91 impl<'de> crate::serde::de::Visitor<'de> for Visitor {
92 type Value = DeploymentSpec;
93
94 fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
95 f.write_str("DeploymentSpec")
96 }
97
98 fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
99 let mut value_min_ready_seconds: Option<i32> = None;
100 let mut value_paused: Option<bool> = None;
101 let mut value_progress_deadline_seconds: Option<i32> = None;
102 let mut value_replicas: Option<i32> = None;
103 let mut value_revision_history_limit: Option<i32> = None;
104 let mut value_selector: Option<crate::apimachinery::pkg::apis::meta::v1::LabelSelector> = None;
105 let mut value_strategy: Option<crate::api::apps::v1::DeploymentStrategy> = None;
106 let mut value_template: Option<crate::api::core::v1::PodTemplateSpec> = None;
107
108 while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
109 match key {
110 Field::Key_min_ready_seconds => value_min_ready_seconds = crate::serde::de::MapAccess::next_value(&mut map)?,
111 Field::Key_paused => value_paused = crate::serde::de::MapAccess::next_value(&mut map)?,
112 Field::Key_progress_deadline_seconds => value_progress_deadline_seconds = crate::serde::de::MapAccess::next_value(&mut map)?,
113 Field::Key_replicas => value_replicas = crate::serde::de::MapAccess::next_value(&mut map)?,
114 Field::Key_revision_history_limit => value_revision_history_limit = crate::serde::de::MapAccess::next_value(&mut map)?,
115 Field::Key_selector => value_selector = crate::serde::de::MapAccess::next_value(&mut map)?,
116 Field::Key_strategy => value_strategy = crate::serde::de::MapAccess::next_value(&mut map)?,
117 Field::Key_template => value_template = crate::serde::de::MapAccess::next_value(&mut map)?,
118 Field::Other => { let _: crate::serde::de::IgnoredAny = crate::serde::de::MapAccess::next_value(&mut map)?; },
119 }
120 }
121
122 Ok(DeploymentSpec {
123 min_ready_seconds: value_min_ready_seconds,
124 paused: value_paused,
125 progress_deadline_seconds: value_progress_deadline_seconds,
126 replicas: value_replicas,
127 revision_history_limit: value_revision_history_limit,
128 selector: value_selector.unwrap_or_default(),
129 strategy: value_strategy,
130 template: value_template.unwrap_or_default(),
131 })
132 }
133 }
134
135 deserializer.deserialize_struct(
136 "DeploymentSpec",
137 &[
138 "minReadySeconds",
139 "paused",
140 "progressDeadlineSeconds",
141 "replicas",
142 "revisionHistoryLimit",
143 "selector",
144 "strategy",
145 "template",
146 ],
147 Visitor,
148 )
149 }
150}
151
152impl crate::serde::Serialize for DeploymentSpec {
153 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
154 let mut state = serializer.serialize_struct(
155 "DeploymentSpec",
156 2 +
157 self.min_ready_seconds.as_ref().map_or(0, |_| 1) +
158 self.paused.as_ref().map_or(0, |_| 1) +
159 self.progress_deadline_seconds.as_ref().map_or(0, |_| 1) +
160 self.replicas.as_ref().map_or(0, |_| 1) +
161 self.revision_history_limit.as_ref().map_or(0, |_| 1) +
162 self.strategy.as_ref().map_or(0, |_| 1),
163 )?;
164 if let Some(value) = &self.min_ready_seconds {
165 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "minReadySeconds", value)?;
166 }
167 if let Some(value) = &self.paused {
168 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "paused", value)?;
169 }
170 if let Some(value) = &self.progress_deadline_seconds {
171 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "progressDeadlineSeconds", value)?;
172 }
173 if let Some(value) = &self.replicas {
174 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "replicas", value)?;
175 }
176 if let Some(value) = &self.revision_history_limit {
177 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "revisionHistoryLimit", value)?;
178 }
179 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "selector", &self.selector)?;
180 if let Some(value) = &self.strategy {
181 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "strategy", value)?;
182 }
183 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "template", &self.template)?;
184 crate::serde::ser::SerializeStruct::end(state)
185 }
186}
187
188#[cfg(feature = "schemars")]
189impl crate::schemars::JsonSchema for DeploymentSpec {
190 fn schema_name() -> String {
191 "io.k8s.api.apps.v1.DeploymentSpec".to_owned()
192 }
193
194 fn json_schema(__gen: &mut crate::schemars::gen::SchemaGenerator) -> crate::schemars::schema::Schema {
195 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
196 metadata: Some(Box::new(crate::schemars::schema::Metadata {
197 description: Some("DeploymentSpec is the specification of the desired behavior of the Deployment.".to_owned()),
198 ..Default::default()
199 })),
200 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Object))),
201 object: Some(Box::new(crate::schemars::schema::ObjectValidation {
202 properties: [
203 (
204 "minReadySeconds".to_owned(),
205 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
206 metadata: Some(Box::new(crate::schemars::schema::Metadata {
207 description: Some("Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)".to_owned()),
208 ..Default::default()
209 })),
210 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Integer))),
211 format: Some("int32".to_owned()),
212 ..Default::default()
213 }),
214 ),
215 (
216 "paused".to_owned(),
217 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
218 metadata: Some(Box::new(crate::schemars::schema::Metadata {
219 description: Some("Indicates that the deployment is paused.".to_owned()),
220 ..Default::default()
221 })),
222 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Boolean))),
223 ..Default::default()
224 }),
225 ),
226 (
227 "progressDeadlineSeconds".to_owned(),
228 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
229 metadata: Some(Box::new(crate::schemars::schema::Metadata {
230 description: Some("The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s.".to_owned()),
231 ..Default::default()
232 })),
233 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Integer))),
234 format: Some("int32".to_owned()),
235 ..Default::default()
236 }),
237 ),
238 (
239 "replicas".to_owned(),
240 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
241 metadata: Some(Box::new(crate::schemars::schema::Metadata {
242 description: Some("Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.".to_owned()),
243 ..Default::default()
244 })),
245 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Integer))),
246 format: Some("int32".to_owned()),
247 ..Default::default()
248 }),
249 ),
250 (
251 "revisionHistoryLimit".to_owned(),
252 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
253 metadata: Some(Box::new(crate::schemars::schema::Metadata {
254 description: Some("The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.".to_owned()),
255 ..Default::default()
256 })),
257 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Integer))),
258 format: Some("int32".to_owned()),
259 ..Default::default()
260 }),
261 ),
262 (
263 "selector".to_owned(),
264 {
265 let mut schema_obj = __gen.subschema_for::<crate::apimachinery::pkg::apis::meta::v1::LabelSelector>().into_object();
266 schema_obj.metadata = Some(Box::new(crate::schemars::schema::Metadata {
267 description: Some("Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment. It must match the pod template's labels.".to_owned()),
268 ..Default::default()
269 }));
270 crate::schemars::schema::Schema::Object(schema_obj)
271 },
272 ),
273 (
274 "strategy".to_owned(),
275 {
276 let mut schema_obj = __gen.subschema_for::<crate::api::apps::v1::DeploymentStrategy>().into_object();
277 schema_obj.metadata = Some(Box::new(crate::schemars::schema::Metadata {
278 description: Some("The deployment strategy to use to replace existing pods with new ones.".to_owned()),
279 ..Default::default()
280 }));
281 crate::schemars::schema::Schema::Object(schema_obj)
282 },
283 ),
284 (
285 "template".to_owned(),
286 {
287 let mut schema_obj = __gen.subschema_for::<crate::api::core::v1::PodTemplateSpec>().into_object();
288 schema_obj.metadata = Some(Box::new(crate::schemars::schema::Metadata {
289 description: Some("Template describes the pods that will be created. The only allowed template.spec.restartPolicy value is \"Always\".".to_owned()),
290 ..Default::default()
291 }));
292 crate::schemars::schema::Schema::Object(schema_obj)
293 },
294 ),
295 ].into(),
296 required: [
297 "selector".to_owned(),
298 "template".to_owned(),
299 ].into(),
300 ..Default::default()
301 })),
302 ..Default::default()
303 })
304 }
305}