1#[derive(Clone, Debug, Default, PartialEq)]
5pub struct Probe {
6 pub exec: Option<crate::api::core::v1::ExecAction>,
8
9 pub failure_threshold: Option<i32>,
11
12 pub grpc: Option<crate::api::core::v1::GRPCAction>,
14
15 pub http_get: Option<crate::api::core::v1::HTTPGetAction>,
17
18 pub initial_delay_seconds: Option<i32>,
20
21 pub period_seconds: Option<i32>,
23
24 pub success_threshold: Option<i32>,
26
27 pub tcp_socket: Option<crate::api::core::v1::TCPSocketAction>,
29
30 pub termination_grace_period_seconds: Option<i64>,
32
33 pub timeout_seconds: Option<i32>,
35}
36
37impl crate::DeepMerge for Probe {
38 fn merge_from(&mut self, other: Self) {
39 crate::DeepMerge::merge_from(&mut self.exec, other.exec);
40 crate::DeepMerge::merge_from(&mut self.failure_threshold, other.failure_threshold);
41 crate::DeepMerge::merge_from(&mut self.grpc, other.grpc);
42 crate::DeepMerge::merge_from(&mut self.http_get, other.http_get);
43 crate::DeepMerge::merge_from(&mut self.initial_delay_seconds, other.initial_delay_seconds);
44 crate::DeepMerge::merge_from(&mut self.period_seconds, other.period_seconds);
45 crate::DeepMerge::merge_from(&mut self.success_threshold, other.success_threshold);
46 crate::DeepMerge::merge_from(&mut self.tcp_socket, other.tcp_socket);
47 crate::DeepMerge::merge_from(&mut self.termination_grace_period_seconds, other.termination_grace_period_seconds);
48 crate::DeepMerge::merge_from(&mut self.timeout_seconds, other.timeout_seconds);
49 }
50}
51
52impl<'de> crate::serde::Deserialize<'de> for Probe {
53 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
54 #[allow(non_camel_case_types)]
55 enum Field {
56 Key_exec,
57 Key_failure_threshold,
58 Key_grpc,
59 Key_http_get,
60 Key_initial_delay_seconds,
61 Key_period_seconds,
62 Key_success_threshold,
63 Key_tcp_socket,
64 Key_termination_grace_period_seconds,
65 Key_timeout_seconds,
66 Other,
67 }
68
69 impl<'de> crate::serde::Deserialize<'de> for Field {
70 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
71 struct Visitor;
72
73 impl<'de> crate::serde::de::Visitor<'de> for Visitor {
74 type Value = Field;
75
76 fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
77 f.write_str("field identifier")
78 }
79
80 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
81 Ok(match v {
82 "exec" => Field::Key_exec,
83 "failureThreshold" => Field::Key_failure_threshold,
84 "grpc" => Field::Key_grpc,
85 "httpGet" => Field::Key_http_get,
86 "initialDelaySeconds" => Field::Key_initial_delay_seconds,
87 "periodSeconds" => Field::Key_period_seconds,
88 "successThreshold" => Field::Key_success_threshold,
89 "tcpSocket" => Field::Key_tcp_socket,
90 "terminationGracePeriodSeconds" => Field::Key_termination_grace_period_seconds,
91 "timeoutSeconds" => Field::Key_timeout_seconds,
92 _ => Field::Other,
93 })
94 }
95 }
96
97 deserializer.deserialize_identifier(Visitor)
98 }
99 }
100
101 struct Visitor;
102
103 impl<'de> crate::serde::de::Visitor<'de> for Visitor {
104 type Value = Probe;
105
106 fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
107 f.write_str("Probe")
108 }
109
110 fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
111 let mut value_exec: Option<crate::api::core::v1::ExecAction> = None;
112 let mut value_failure_threshold: Option<i32> = None;
113 let mut value_grpc: Option<crate::api::core::v1::GRPCAction> = None;
114 let mut value_http_get: Option<crate::api::core::v1::HTTPGetAction> = None;
115 let mut value_initial_delay_seconds: Option<i32> = None;
116 let mut value_period_seconds: Option<i32> = None;
117 let mut value_success_threshold: Option<i32> = None;
118 let mut value_tcp_socket: Option<crate::api::core::v1::TCPSocketAction> = None;
119 let mut value_termination_grace_period_seconds: Option<i64> = None;
120 let mut value_timeout_seconds: Option<i32> = None;
121
122 while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
123 match key {
124 Field::Key_exec => value_exec = crate::serde::de::MapAccess::next_value(&mut map)?,
125 Field::Key_failure_threshold => value_failure_threshold = crate::serde::de::MapAccess::next_value(&mut map)?,
126 Field::Key_grpc => value_grpc = crate::serde::de::MapAccess::next_value(&mut map)?,
127 Field::Key_http_get => value_http_get = crate::serde::de::MapAccess::next_value(&mut map)?,
128 Field::Key_initial_delay_seconds => value_initial_delay_seconds = crate::serde::de::MapAccess::next_value(&mut map)?,
129 Field::Key_period_seconds => value_period_seconds = crate::serde::de::MapAccess::next_value(&mut map)?,
130 Field::Key_success_threshold => value_success_threshold = crate::serde::de::MapAccess::next_value(&mut map)?,
131 Field::Key_tcp_socket => value_tcp_socket = crate::serde::de::MapAccess::next_value(&mut map)?,
132 Field::Key_termination_grace_period_seconds => value_termination_grace_period_seconds = crate::serde::de::MapAccess::next_value(&mut map)?,
133 Field::Key_timeout_seconds => value_timeout_seconds = crate::serde::de::MapAccess::next_value(&mut map)?,
134 Field::Other => { let _: crate::serde::de::IgnoredAny = crate::serde::de::MapAccess::next_value(&mut map)?; },
135 }
136 }
137
138 Ok(Probe {
139 exec: value_exec,
140 failure_threshold: value_failure_threshold,
141 grpc: value_grpc,
142 http_get: value_http_get,
143 initial_delay_seconds: value_initial_delay_seconds,
144 period_seconds: value_period_seconds,
145 success_threshold: value_success_threshold,
146 tcp_socket: value_tcp_socket,
147 termination_grace_period_seconds: value_termination_grace_period_seconds,
148 timeout_seconds: value_timeout_seconds,
149 })
150 }
151 }
152
153 deserializer.deserialize_struct(
154 "Probe",
155 &[
156 "exec",
157 "failureThreshold",
158 "grpc",
159 "httpGet",
160 "initialDelaySeconds",
161 "periodSeconds",
162 "successThreshold",
163 "tcpSocket",
164 "terminationGracePeriodSeconds",
165 "timeoutSeconds",
166 ],
167 Visitor,
168 )
169 }
170}
171
172impl crate::serde::Serialize for Probe {
173 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
174 let mut state = serializer.serialize_struct(
175 "Probe",
176 self.exec.as_ref().map_or(0, |_| 1) +
177 self.failure_threshold.as_ref().map_or(0, |_| 1) +
178 self.grpc.as_ref().map_or(0, |_| 1) +
179 self.http_get.as_ref().map_or(0, |_| 1) +
180 self.initial_delay_seconds.as_ref().map_or(0, |_| 1) +
181 self.period_seconds.as_ref().map_or(0, |_| 1) +
182 self.success_threshold.as_ref().map_or(0, |_| 1) +
183 self.tcp_socket.as_ref().map_or(0, |_| 1) +
184 self.termination_grace_period_seconds.as_ref().map_or(0, |_| 1) +
185 self.timeout_seconds.as_ref().map_or(0, |_| 1),
186 )?;
187 if let Some(value) = &self.exec {
188 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "exec", value)?;
189 }
190 if let Some(value) = &self.failure_threshold {
191 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "failureThreshold", value)?;
192 }
193 if let Some(value) = &self.grpc {
194 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "grpc", value)?;
195 }
196 if let Some(value) = &self.http_get {
197 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "httpGet", value)?;
198 }
199 if let Some(value) = &self.initial_delay_seconds {
200 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "initialDelaySeconds", value)?;
201 }
202 if let Some(value) = &self.period_seconds {
203 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "periodSeconds", value)?;
204 }
205 if let Some(value) = &self.success_threshold {
206 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "successThreshold", value)?;
207 }
208 if let Some(value) = &self.tcp_socket {
209 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "tcpSocket", value)?;
210 }
211 if let Some(value) = &self.termination_grace_period_seconds {
212 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "terminationGracePeriodSeconds", value)?;
213 }
214 if let Some(value) = &self.timeout_seconds {
215 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "timeoutSeconds", value)?;
216 }
217 crate::serde::ser::SerializeStruct::end(state)
218 }
219}
220
221#[cfg(feature = "schemars")]
222impl crate::schemars::JsonSchema for Probe {
223 fn schema_name() -> String {
224 "io.k8s.api.core.v1.Probe".to_owned()
225 }
226
227 fn json_schema(__gen: &mut crate::schemars::gen::SchemaGenerator) -> crate::schemars::schema::Schema {
228 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
229 metadata: Some(Box::new(crate::schemars::schema::Metadata {
230 description: Some("Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.".to_owned()),
231 ..Default::default()
232 })),
233 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Object))),
234 object: Some(Box::new(crate::schemars::schema::ObjectValidation {
235 properties: [
236 (
237 "exec".to_owned(),
238 {
239 let mut schema_obj = __gen.subschema_for::<crate::api::core::v1::ExecAction>().into_object();
240 schema_obj.metadata = Some(Box::new(crate::schemars::schema::Metadata {
241 description: Some("Exec specifies the action to take.".to_owned()),
242 ..Default::default()
243 }));
244 crate::schemars::schema::Schema::Object(schema_obj)
245 },
246 ),
247 (
248 "failureThreshold".to_owned(),
249 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
250 metadata: Some(Box::new(crate::schemars::schema::Metadata {
251 description: Some("Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.".to_owned()),
252 ..Default::default()
253 })),
254 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Integer))),
255 format: Some("int32".to_owned()),
256 ..Default::default()
257 }),
258 ),
259 (
260 "grpc".to_owned(),
261 {
262 let mut schema_obj = __gen.subschema_for::<crate::api::core::v1::GRPCAction>().into_object();
263 schema_obj.metadata = Some(Box::new(crate::schemars::schema::Metadata {
264 description: Some("GRPC specifies an action involving a GRPC port.".to_owned()),
265 ..Default::default()
266 }));
267 crate::schemars::schema::Schema::Object(schema_obj)
268 },
269 ),
270 (
271 "httpGet".to_owned(),
272 {
273 let mut schema_obj = __gen.subschema_for::<crate::api::core::v1::HTTPGetAction>().into_object();
274 schema_obj.metadata = Some(Box::new(crate::schemars::schema::Metadata {
275 description: Some("HTTPGet specifies the http request to perform.".to_owned()),
276 ..Default::default()
277 }));
278 crate::schemars::schema::Schema::Object(schema_obj)
279 },
280 ),
281 (
282 "initialDelaySeconds".to_owned(),
283 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
284 metadata: Some(Box::new(crate::schemars::schema::Metadata {
285 description: Some("Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes".to_owned()),
286 ..Default::default()
287 })),
288 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Integer))),
289 format: Some("int32".to_owned()),
290 ..Default::default()
291 }),
292 ),
293 (
294 "periodSeconds".to_owned(),
295 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
296 metadata: Some(Box::new(crate::schemars::schema::Metadata {
297 description: Some("How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.".to_owned()),
298 ..Default::default()
299 })),
300 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Integer))),
301 format: Some("int32".to_owned()),
302 ..Default::default()
303 }),
304 ),
305 (
306 "successThreshold".to_owned(),
307 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
308 metadata: Some(Box::new(crate::schemars::schema::Metadata {
309 description: Some("Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1.".to_owned()),
310 ..Default::default()
311 })),
312 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Integer))),
313 format: Some("int32".to_owned()),
314 ..Default::default()
315 }),
316 ),
317 (
318 "tcpSocket".to_owned(),
319 {
320 let mut schema_obj = __gen.subschema_for::<crate::api::core::v1::TCPSocketAction>().into_object();
321 schema_obj.metadata = Some(Box::new(crate::schemars::schema::Metadata {
322 description: Some("TCPSocket specifies an action involving a TCP port.".to_owned()),
323 ..Default::default()
324 }));
325 crate::schemars::schema::Schema::Object(schema_obj)
326 },
327 ),
328 (
329 "terminationGracePeriodSeconds".to_owned(),
330 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
331 metadata: Some(Box::new(crate::schemars::schema::Metadata {
332 description: Some("Optional duration in seconds the pod needs to terminate gracefully upon probe failure. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. If this value is nil, the pod's terminationGracePeriodSeconds will be used. Otherwise, this value overrides the value provided by the pod spec. Value must be non-negative integer. The value zero indicates stop immediately via the kill signal (no opportunity to shut down). This is a beta field and requires enabling ProbeTerminationGracePeriod feature gate. Minimum value is 1. spec.terminationGracePeriodSeconds is used if unset.".to_owned()),
333 ..Default::default()
334 })),
335 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Integer))),
336 format: Some("int64".to_owned()),
337 ..Default::default()
338 }),
339 ),
340 (
341 "timeoutSeconds".to_owned(),
342 crate::schemars::schema::Schema::Object(crate::schemars::schema::SchemaObject {
343 metadata: Some(Box::new(crate::schemars::schema::Metadata {
344 description: Some("Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes".to_owned()),
345 ..Default::default()
346 })),
347 instance_type: Some(crate::schemars::schema::SingleOrVec::Single(Box::new(crate::schemars::schema::InstanceType::Integer))),
348 format: Some("int32".to_owned()),
349 ..Default::default()
350 }),
351 ),
352 ].into(),
353 ..Default::default()
354 })),
355 ..Default::default()
356 })
357 }
358}