cluster_api_rs/api/
capi_machine.rs

1// WARNING: generated by kopium - manual changes will be overwritten
2// kopium command: kopium --smart-derive-elision -D Default -D PartialEq -A -d -f -
3// kopium version: 0.21.2
4
5#[allow(unused_imports)]
6mod prelude {
7    pub use k8s_openapi::api::core::v1::ObjectReference;
8    pub use k8s_openapi::apimachinery::pkg::apis::meta::v1::Condition;
9    pub use kube::CustomResource;
10    pub use schemars::JsonSchema;
11    pub use serde::{Deserialize, Serialize};
12}
13use self::prelude::*;
14
15/// spec is the desired state of Machine.
16#[derive(CustomResource, Serialize, Deserialize, Clone, Debug, Default, PartialEq, JsonSchema)]
17#[kube(
18    group = "cluster.x-k8s.io",
19    version = "v1beta1",
20    kind = "Machine",
21    plural = "machines"
22)]
23#[kube(namespaced)]
24#[kube(status = "MachineStatus")]
25#[kube(derive = "Default")]
26#[kube(derive = "PartialEq")]
27pub struct MachineSpec {
28    /// bootstrap is a reference to a local struct which encapsulates
29    /// fields to configure the Machine’s bootstrapping mechanism.
30    pub bootstrap: MachineBootstrap,
31    /// clusterName is the name of the Cluster this object belongs to.
32    #[serde(rename = "clusterName")]
33    pub cluster_name: String,
34    /// failureDomain is the failure domain the machine will be created in.
35    /// Must match a key in the FailureDomains map stored on the cluster object.
36    #[serde(
37        default,
38        skip_serializing_if = "Option::is_none",
39        rename = "failureDomain"
40    )]
41    pub failure_domain: Option<String>,
42    /// infrastructureRef is a required reference to a custom resource
43    /// offered by an infrastructure provider.
44    #[serde(rename = "infrastructureRef")]
45    pub infrastructure_ref: ObjectReference,
46    /// nodeDeletionTimeout defines how long the controller will attempt to delete the Node that the Machine
47    /// hosts after the Machine is marked for deletion. A duration of 0 will retry deletion indefinitely.
48    /// Defaults to 10 seconds.
49    #[serde(
50        default,
51        skip_serializing_if = "Option::is_none",
52        rename = "nodeDeletionTimeout"
53    )]
54    pub node_deletion_timeout: Option<String>,
55    /// nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
56    /// The default value is 0, meaning that the node can be drained without any time limitations.
57    /// NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
58    #[serde(
59        default,
60        skip_serializing_if = "Option::is_none",
61        rename = "nodeDrainTimeout"
62    )]
63    pub node_drain_timeout: Option<String>,
64    /// nodeVolumeDetachTimeout is the total amount of time that the controller will spend on waiting for all volumes
65    /// to be detached. The default value is 0, meaning that the volumes can be detached without any time limitations.
66    #[serde(
67        default,
68        skip_serializing_if = "Option::is_none",
69        rename = "nodeVolumeDetachTimeout"
70    )]
71    pub node_volume_detach_timeout: Option<String>,
72    /// providerID is the identification ID of the machine provided by the provider.
73    /// This field must match the provider ID as seen on the node object corresponding to this machine.
74    /// This field is required by higher level consumers of cluster-api. Example use case is cluster autoscaler
75    /// with cluster-api as provider. Clean-up logic in the autoscaler compares machines to nodes to find out
76    /// machines at provider which could not get registered as Kubernetes nodes. With cluster-api as a
77    /// generic out-of-tree provider for autoscaler, this field is required by autoscaler to be
78    /// able to have a provider view of the list of machines. Another list of nodes is queried from the k8s apiserver
79    /// and then a comparison is done to find out unregistered machines and are marked for delete.
80    /// This field will be set by the actuators and consumed by higher level entities like autoscaler that will
81    /// be interfacing with cluster-api as generic provider.
82    #[serde(
83        default,
84        skip_serializing_if = "Option::is_none",
85        rename = "providerID"
86    )]
87    pub provider_id: Option<String>,
88    /// readinessGates specifies additional conditions to include when evaluating Machine Ready condition.
89    ///
90    /// This field can be used e.g. by Cluster API control plane providers to extend the semantic of the
91    /// Ready condition for the Machine they control, like the kubeadm control provider adding ReadinessGates
92    /// for the APIServerPodHealthy, SchedulerPodHealthy conditions, etc.
93    ///
94    /// Another example are external controllers, e.g. responsible to install special software/hardware on the Machines;
95    /// they can include the status of those components with a new condition and add this condition to ReadinessGates.
96    ///
97    /// NOTE: This field is considered only for computing v1beta2 conditions.
98    /// NOTE: In case readinessGates conditions start with the APIServer, ControllerManager, Scheduler prefix, and all those
99    /// readiness gates condition are reporting the same message, when computing the Machine's Ready condition those
100    /// readinessGates will be replaced by a single entry reporting "Control plane components: " + message.
101    /// This helps to improve readability of conditions bubbling up to the Machine's owner resource / to the Cluster).
102    #[serde(
103        default,
104        skip_serializing_if = "Option::is_none",
105        rename = "readinessGates"
106    )]
107    pub readiness_gates: Option<Vec<MachineReadinessGates>>,
108    /// version defines the desired Kubernetes version.
109    /// This field is meant to be optionally used by bootstrap providers.
110    #[serde(default, skip_serializing_if = "Option::is_none")]
111    pub version: Option<String>,
112}
113
114/// bootstrap is a reference to a local struct which encapsulates
115/// fields to configure the Machine’s bootstrapping mechanism.
116#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, JsonSchema)]
117pub struct MachineBootstrap {
118    /// configRef is a reference to a bootstrap provider-specific resource
119    /// that holds configuration details. The reference is optional to
120    /// allow users/operators to specify Bootstrap.DataSecretName without
121    /// the need of a controller.
122    #[serde(default, skip_serializing_if = "Option::is_none", rename = "configRef")]
123    pub config_ref: Option<ObjectReference>,
124    /// dataSecretName is the name of the secret that stores the bootstrap data script.
125    /// If nil, the Machine should remain in the Pending state.
126    #[serde(
127        default,
128        skip_serializing_if = "Option::is_none",
129        rename = "dataSecretName"
130    )]
131    pub data_secret_name: Option<String>,
132}
133
134/// configRef is a reference to a bootstrap provider-specific resource
135/// that holds configuration details. The reference is optional to
136/// allow users/operators to specify Bootstrap.DataSecretName without
137/// the need of a controller.
138#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, JsonSchema)]
139pub struct MachineBootstrapConfigRef {
140    /// API version of the referent.
141    #[serde(
142        default,
143        skip_serializing_if = "Option::is_none",
144        rename = "apiVersion"
145    )]
146    pub api_version: Option<String>,
147    /// If referring to a piece of an object instead of an entire object, this string
148    /// should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
149    /// For example, if the object reference is to a container within a pod, this would take on a value like:
150    /// "spec.containers{name}" (where "name" refers to the name of the container that triggered
151    /// the event) or if no container name is specified "spec.containers[2]" (container with
152    /// index 2 in this pod). This syntax is chosen only to have some well-defined way of
153    /// referencing a part of an object.
154    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldPath")]
155    pub field_path: Option<String>,
156    /// Kind of the referent.
157    /// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
158    #[serde(default, skip_serializing_if = "Option::is_none")]
159    pub kind: Option<String>,
160    /// Name of the referent.
161    /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
162    #[serde(default, skip_serializing_if = "Option::is_none")]
163    pub name: Option<String>,
164    /// Namespace of the referent.
165    /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
166    #[serde(default, skip_serializing_if = "Option::is_none")]
167    pub namespace: Option<String>,
168    /// Specific resourceVersion to which this reference is made, if any.
169    /// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
170    #[serde(
171        default,
172        skip_serializing_if = "Option::is_none",
173        rename = "resourceVersion"
174    )]
175    pub resource_version: Option<String>,
176    /// UID of the referent.
177    /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
178    #[serde(default, skip_serializing_if = "Option::is_none")]
179    pub uid: Option<String>,
180}
181
182/// infrastructureRef is a required reference to a custom resource
183/// offered by an infrastructure provider.
184#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, JsonSchema)]
185pub struct MachineInfrastructureRef {
186    /// API version of the referent.
187    #[serde(
188        default,
189        skip_serializing_if = "Option::is_none",
190        rename = "apiVersion"
191    )]
192    pub api_version: Option<String>,
193    /// If referring to a piece of an object instead of an entire object, this string
194    /// should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
195    /// For example, if the object reference is to a container within a pod, this would take on a value like:
196    /// "spec.containers{name}" (where "name" refers to the name of the container that triggered
197    /// the event) or if no container name is specified "spec.containers[2]" (container with
198    /// index 2 in this pod). This syntax is chosen only to have some well-defined way of
199    /// referencing a part of an object.
200    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldPath")]
201    pub field_path: Option<String>,
202    /// Kind of the referent.
203    /// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
204    #[serde(default, skip_serializing_if = "Option::is_none")]
205    pub kind: Option<String>,
206    /// Name of the referent.
207    /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
208    #[serde(default, skip_serializing_if = "Option::is_none")]
209    pub name: Option<String>,
210    /// Namespace of the referent.
211    /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
212    #[serde(default, skip_serializing_if = "Option::is_none")]
213    pub namespace: Option<String>,
214    /// Specific resourceVersion to which this reference is made, if any.
215    /// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
216    #[serde(
217        default,
218        skip_serializing_if = "Option::is_none",
219        rename = "resourceVersion"
220    )]
221    pub resource_version: Option<String>,
222    /// UID of the referent.
223    /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
224    #[serde(default, skip_serializing_if = "Option::is_none")]
225    pub uid: Option<String>,
226}
227
228/// MachineReadinessGate contains the type of a Machine condition to be used as a readiness gate.
229#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, JsonSchema)]
230pub struct MachineReadinessGates {
231    /// conditionType refers to a condition with matching type in the Machine's condition list.
232    /// If the conditions doesn't exist, it will be treated as unknown.
233    /// Note: Both Cluster API conditions or conditions added by 3rd party controllers can be used as readiness gates.
234    #[serde(rename = "conditionType")]
235    pub condition_type: String,
236    /// polarity of the conditionType specified in this readinessGate.
237    /// Valid values are Positive, Negative and omitted.
238    /// When omitted, the default behaviour will be Positive.
239    /// A positive polarity means that the condition should report a true status under normal conditions.
240    /// A negative polarity means that the condition should report a false status under normal conditions.
241    #[serde(default, skip_serializing_if = "Option::is_none")]
242    pub polarity: Option<MachineReadinessGatesPolarity>,
243}
244
245/// MachineReadinessGate contains the type of a Machine condition to be used as a readiness gate.
246#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
247pub enum MachineReadinessGatesPolarity {
248    Positive,
249    Negative,
250}
251
252/// status is the observed state of Machine.
253#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, JsonSchema)]
254pub struct MachineStatus {
255    /// addresses is a list of addresses assigned to the machine.
256    /// This field is copied from the infrastructure provider reference.
257    #[serde(default, skip_serializing_if = "Option::is_none")]
258    pub addresses: Option<Vec<MachineStatusAddresses>>,
259    /// bootstrapReady is the state of the bootstrap provider.
260    #[serde(
261        default,
262        skip_serializing_if = "Option::is_none",
263        rename = "bootstrapReady"
264    )]
265    pub bootstrap_ready: Option<bool>,
266    /// certificatesExpiryDate is the expiry date of the machine certificates.
267    /// This value is only set for control plane machines.
268    #[serde(
269        default,
270        skip_serializing_if = "Option::is_none",
271        rename = "certificatesExpiryDate"
272    )]
273    pub certificates_expiry_date: Option<String>,
274    /// conditions defines current service state of the Machine.
275    #[serde(default, skip_serializing_if = "Option::is_none")]
276    pub conditions: Option<Vec<Condition>>,
277    /// deletion contains information relating to removal of the Machine.
278    /// Only present when the Machine has a deletionTimestamp and drain or wait for volume detach started.
279    #[serde(default, skip_serializing_if = "Option::is_none")]
280    pub deletion: Option<MachineStatusDeletion>,
281    /// failureMessage will be set in the event that there is a terminal problem
282    /// reconciling the Machine and will contain a more verbose string suitable
283    /// for logging and human consumption.
284    ///
285    /// This field should not be set for transitive errors that a controller
286    /// faces that are expected to be fixed automatically over
287    /// time (like service outages), but instead indicate that something is
288    /// fundamentally wrong with the Machine's spec or the configuration of
289    /// the controller, and that manual intervention is required. Examples
290    /// of terminal errors would be invalid combinations of settings in the
291    /// spec, values that are unsupported by the controller, or the
292    /// responsible controller itself being critically misconfigured.
293    ///
294    /// Any transient errors that occur during the reconciliation of Machines
295    /// can be added as events to the Machine object and/or logged in the
296    /// controller's output.
297    ///
298    /// Deprecated: This field is deprecated and is going to be removed in the next apiVersion. Please see https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20240916-improve-status-in-CAPI-resources.md for more details.
299    #[serde(
300        default,
301        skip_serializing_if = "Option::is_none",
302        rename = "failureMessage"
303    )]
304    pub failure_message: Option<String>,
305    /// failureReason will be set in the event that there is a terminal problem
306    /// reconciling the Machine and will contain a succinct value suitable
307    /// for machine interpretation.
308    ///
309    /// This field should not be set for transitive errors that a controller
310    /// faces that are expected to be fixed automatically over
311    /// time (like service outages), but instead indicate that something is
312    /// fundamentally wrong with the Machine's spec or the configuration of
313    /// the controller, and that manual intervention is required. Examples
314    /// of terminal errors would be invalid combinations of settings in the
315    /// spec, values that are unsupported by the controller, or the
316    /// responsible controller itself being critically misconfigured.
317    ///
318    /// Any transient errors that occur during the reconciliation of Machines
319    /// can be added as events to the Machine object and/or logged in the
320    /// controller's output.
321    ///
322    /// Deprecated: This field is deprecated and is going to be removed in the next apiVersion. Please see https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20240916-improve-status-in-CAPI-resources.md for more details.
323    #[serde(
324        default,
325        skip_serializing_if = "Option::is_none",
326        rename = "failureReason"
327    )]
328    pub failure_reason: Option<String>,
329    /// infrastructureReady is the state of the infrastructure provider.
330    #[serde(
331        default,
332        skip_serializing_if = "Option::is_none",
333        rename = "infrastructureReady"
334    )]
335    pub infrastructure_ready: Option<bool>,
336    /// lastUpdated identifies when the phase of the Machine last transitioned.
337    #[serde(
338        default,
339        skip_serializing_if = "Option::is_none",
340        rename = "lastUpdated"
341    )]
342    pub last_updated: Option<String>,
343    /// nodeInfo is a set of ids/uuids to uniquely identify the node.
344    /// More info: https://kubernetes.io/docs/concepts/nodes/node/#info
345    #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeInfo")]
346    pub node_info: Option<MachineStatusNodeInfo>,
347    /// nodeRef will point to the corresponding Node if it exists.
348    #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeRef")]
349    pub node_ref: Option<ObjectReference>,
350    /// observedGeneration is the latest generation observed by the controller.
351    #[serde(
352        default,
353        skip_serializing_if = "Option::is_none",
354        rename = "observedGeneration"
355    )]
356    pub observed_generation: Option<i64>,
357    /// phase represents the current phase of machine actuation.
358    #[serde(default, skip_serializing_if = "Option::is_none")]
359    pub phase: Option<MachineStatusPhase>,
360    /// v1beta2 groups all the fields that will be added or modified in Machine's status with the V1Beta2 version.
361    #[serde(default, skip_serializing_if = "Option::is_none")]
362    pub v1beta2: Option<MachineStatusV1beta2>,
363}
364
365/// MachineAddress contains information for the node's address.
366#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
367pub struct MachineStatusAddresses {
368    /// address is the machine address.
369    pub address: String,
370    /// type is the machine address type, one of Hostname, ExternalIP, InternalIP, ExternalDNS or InternalDNS.
371    #[serde(rename = "type")]
372    pub r#type: MachineStatusAddressesType,
373}
374
375/// MachineAddress contains information for the node's address.
376#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
377pub enum MachineStatusAddressesType {
378    Hostname,
379    #[serde(rename = "ExternalIP")]
380    ExternalIp,
381    #[serde(rename = "InternalIP")]
382    InternalIp,
383    #[serde(rename = "ExternalDNS")]
384    ExternalDns,
385    #[serde(rename = "InternalDNS")]
386    InternalDns,
387}
388
389/// deletion contains information relating to removal of the Machine.
390/// Only present when the Machine has a deletionTimestamp and drain or wait for volume detach started.
391#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, JsonSchema)]
392pub struct MachineStatusDeletion {
393    /// nodeDrainStartTime is the time when the drain of the node started and is used to determine
394    /// if the NodeDrainTimeout is exceeded.
395    /// Only present when the Machine has a deletionTimestamp and draining the node had been started.
396    #[serde(
397        default,
398        skip_serializing_if = "Option::is_none",
399        rename = "nodeDrainStartTime"
400    )]
401    pub node_drain_start_time: Option<String>,
402    /// waitForNodeVolumeDetachStartTime is the time when waiting for volume detachment started
403    /// and is used to determine if the NodeVolumeDetachTimeout is exceeded.
404    /// Detaching volumes from nodes is usually done by CSI implementations and the current state
405    /// is observed from the node's `.Status.VolumesAttached` field.
406    /// Only present when the Machine has a deletionTimestamp and waiting for volume detachments had been started.
407    #[serde(
408        default,
409        skip_serializing_if = "Option::is_none",
410        rename = "waitForNodeVolumeDetachStartTime"
411    )]
412    pub wait_for_node_volume_detach_start_time: Option<String>,
413}
414
415/// nodeInfo is a set of ids/uuids to uniquely identify the node.
416/// More info: https://kubernetes.io/docs/concepts/nodes/node/#info
417#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, JsonSchema)]
418pub struct MachineStatusNodeInfo {
419    /// The Architecture reported by the node
420    pub architecture: String,
421    /// Boot ID reported by the node.
422    #[serde(rename = "bootID")]
423    pub boot_id: String,
424    /// ContainerRuntime Version reported by the node through runtime remote API (e.g. containerd://1.4.2).
425    #[serde(rename = "containerRuntimeVersion")]
426    pub container_runtime_version: String,
427    /// Kernel Version reported by the node from 'uname -r' (e.g. 3.16.0-0.bpo.4-amd64).
428    #[serde(rename = "kernelVersion")]
429    pub kernel_version: String,
430    /// Deprecated: KubeProxy Version reported by the node.
431    #[serde(rename = "kubeProxyVersion")]
432    pub kube_proxy_version: String,
433    /// Kubelet Version reported by the node.
434    #[serde(rename = "kubeletVersion")]
435    pub kubelet_version: String,
436    /// MachineID reported by the node. For unique machine identification
437    /// in the cluster this field is preferred. Learn more from man(5)
438    /// machine-id: http://man7.org/linux/man-pages/man5/machine-id.5.html
439    #[serde(rename = "machineID")]
440    pub machine_id: String,
441    /// The Operating System reported by the node
442    #[serde(rename = "operatingSystem")]
443    pub operating_system: String,
444    /// OS Image reported by the node from /etc/os-release (e.g. Debian GNU/Linux 7 (wheezy)).
445    #[serde(rename = "osImage")]
446    pub os_image: String,
447    /// SystemUUID reported by the node. For unique machine identification
448    /// MachineID is preferred. This field is specific to Red Hat hosts
449    /// https://access.redhat.com/documentation/en-us/red_hat_subscription_management/1/html/rhsm/uuid
450    #[serde(rename = "systemUUID")]
451    pub system_uuid: String,
452}
453
454/// nodeRef will point to the corresponding Node if it exists.
455#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, JsonSchema)]
456pub struct MachineStatusNodeRef {
457    /// API version of the referent.
458    #[serde(
459        default,
460        skip_serializing_if = "Option::is_none",
461        rename = "apiVersion"
462    )]
463    pub api_version: Option<String>,
464    /// If referring to a piece of an object instead of an entire object, this string
465    /// should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
466    /// For example, if the object reference is to a container within a pod, this would take on a value like:
467    /// "spec.containers{name}" (where "name" refers to the name of the container that triggered
468    /// the event) or if no container name is specified "spec.containers[2]" (container with
469    /// index 2 in this pod). This syntax is chosen only to have some well-defined way of
470    /// referencing a part of an object.
471    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldPath")]
472    pub field_path: Option<String>,
473    /// Kind of the referent.
474    /// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
475    #[serde(default, skip_serializing_if = "Option::is_none")]
476    pub kind: Option<String>,
477    /// Name of the referent.
478    /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
479    #[serde(default, skip_serializing_if = "Option::is_none")]
480    pub name: Option<String>,
481    /// Namespace of the referent.
482    /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
483    #[serde(default, skip_serializing_if = "Option::is_none")]
484    pub namespace: Option<String>,
485    /// Specific resourceVersion to which this reference is made, if any.
486    /// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
487    #[serde(
488        default,
489        skip_serializing_if = "Option::is_none",
490        rename = "resourceVersion"
491    )]
492    pub resource_version: Option<String>,
493    /// UID of the referent.
494    /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
495    #[serde(default, skip_serializing_if = "Option::is_none")]
496    pub uid: Option<String>,
497}
498
499/// status is the observed state of Machine.
500#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
501pub enum MachineStatusPhase {
502    Pending,
503    Provisioning,
504    Provisioned,
505    Running,
506    Deleting,
507    Deleted,
508    Failed,
509    Unknown,
510}
511
512/// v1beta2 groups all the fields that will be added or modified in Machine's status with the V1Beta2 version.
513#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, JsonSchema)]
514pub struct MachineStatusV1beta2 {
515    /// conditions represents the observations of a Machine's current state.
516    /// Known condition types are Available, Ready, UpToDate, BootstrapConfigReady, InfrastructureReady, NodeReady,
517    /// NodeHealthy, Deleting, Paused.
518    /// If a MachineHealthCheck is targeting this machine, also HealthCheckSucceeded, OwnerRemediated conditions are added.
519    /// Additionally control plane Machines controlled by KubeadmControlPlane will have following additional conditions:
520    /// APIServerPodHealthy, ControllerManagerPodHealthy, SchedulerPodHealthy, EtcdPodHealthy, EtcdMemberHealthy.
521    #[serde(default, skip_serializing_if = "Option::is_none")]
522    pub conditions: Option<Vec<Condition>>,
523}