k8s_openapi/v1_34/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 core::fmt::Formatter<'_>) -> core::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 core::fmt::Formatter<'_>) -> core::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() -> std::borrow::Cow<'static, str> {
191 "io.k8s.api.apps.v1.DeploymentSpec".into()
192 }
193
194 fn json_schema(__gen: &mut crate::schemars::SchemaGenerator) -> crate::schemars::Schema {
195 crate::schemars::json_schema!({
196 "description": "DeploymentSpec is the specification of the desired behavior of the Deployment.",
197 "type": "object",
198 "properties": {
199 "minReadySeconds": {
200 "description": "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)",
201 "type": "integer",
202 "format": "int32",
203 },
204 "paused": {
205 "description": "Indicates that the deployment is paused.",
206 "type": "boolean",
207 },
208 "progressDeadlineSeconds": {
209 "description": "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.",
210 "type": "integer",
211 "format": "int32",
212 },
213 "replicas": {
214 "description": "Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.",
215 "type": "integer",
216 "format": "int32",
217 },
218 "revisionHistoryLimit": {
219 "description": "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.",
220 "type": "integer",
221 "format": "int32",
222 },
223 "selector": ({
224 let mut schema_obj = __gen.subschema_for::<crate::apimachinery::pkg::apis::meta::v1::LabelSelector>();
225 schema_obj.ensure_object().insert("description".into(), "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.".into());
226 schema_obj
227 }),
228 "strategy": ({
229 let mut schema_obj = __gen.subschema_for::<crate::api::apps::v1::DeploymentStrategy>();
230 schema_obj.ensure_object().insert("description".into(), "The deployment strategy to use to replace existing pods with new ones.".into());
231 schema_obj
232 }),
233 "template": ({
234 let mut schema_obj = __gen.subschema_for::<crate::api::core::v1::PodTemplateSpec>();
235 schema_obj.ensure_object().insert("description".into(), "Template describes the pods that will be created. The only allowed template.spec.restartPolicy value is \"Always\".".into());
236 schema_obj
237 }),
238 },
239 "required": [
240 "selector",
241 "template",
242 ],
243 })
244 }
245}