Skip to main content

cluster_api_rs/api/
capi_machinepool.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.22.5
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    pub use std::collections::BTreeMap;
13}
14
15use self::prelude::*;
16
17/// spec is the desired state of MachinePool.
18#[derive(CustomResource, Serialize, Deserialize, Clone, Debug, Default, PartialEq, JsonSchema)]
19#[kube(
20    group = "cluster.x-k8s.io",
21    version = "v1beta2",
22    kind = "MachinePool",
23    plural = "machinepools"
24)]
25#[kube(namespaced)]
26#[kube(status = "MachinePoolStatus")]
27#[kube(derive = "Default")]
28#[kube(derive = "PartialEq")]
29pub struct MachinePoolSpec {
30    /// clusterName is the name of the Cluster this object belongs to.
31    #[serde(rename = "clusterName")]
32    pub cluster_name: String,
33    /// failureDomains is the list of failure domains this MachinePool should be attached to.
34    #[serde(
35        default,
36        skip_serializing_if = "Option::is_none",
37        rename = "failureDomains"
38    )]
39    pub failure_domains: Option<Vec<String>>,
40    /// providerIDList are the identification IDs of machine instances provided by the provider.
41    /// This field must match the provider IDs as seen on the node objects corresponding to a machine pool's machine instances.
42    #[serde(
43        default,
44        skip_serializing_if = "Option::is_none",
45        rename = "providerIDList"
46    )]
47    pub provider_id_list: Option<Vec<String>>,
48    /// replicas is the number of desired machines. Defaults to 1.
49    /// This is a pointer to distinguish between explicit zero and not specified.
50    #[serde(default, skip_serializing_if = "Option::is_none")]
51    pub replicas: Option<i32>,
52    /// template describes the machines that will be created.
53    pub template: MachinePoolTemplate,
54}
55
56/// template describes the machines that will be created.
57#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, JsonSchema)]
58pub struct MachinePoolTemplate {
59    /// metadata is the standard object's metadata.
60    /// More info: <https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata>
61    #[serde(default, skip_serializing_if = "Option::is_none")]
62    pub metadata: Option<MachinePoolTemplateMetadata>,
63    /// spec is the specification of the desired behavior of the machine.
64    /// More info: <https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status>
65    pub spec: MachinePoolTemplateSpec,
66}
67
68/// metadata is the standard object's metadata.
69/// More info: <https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata>
70#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, JsonSchema)]
71pub struct MachinePoolTemplateMetadata {
72    /// annotations is an unstructured key value map stored with a resource that may be
73    /// set by external tools to store and retrieve arbitrary metadata. They are not
74    /// queryable and should be preserved when modifying objects.
75    /// More info: <http://kubernetes.io/docs/user-guide/annotations>
76    #[serde(default, skip_serializing_if = "Option::is_none")]
77    pub annotations: Option<BTreeMap<String, String>>,
78    /// labels is a map of string keys and values that can be used to organize and categorize
79    /// (scope and select) objects. May match selectors of replication controllers
80    /// and services.
81    /// More info: <http://kubernetes.io/docs/user-guide/labels>
82    #[serde(default, skip_serializing_if = "Option::is_none")]
83    pub labels: Option<BTreeMap<String, String>>,
84}
85
86/// spec is the specification of the desired behavior of the machine.
87/// More info: <https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status>
88#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, JsonSchema)]
89pub struct MachinePoolTemplateSpec {
90    /// bootstrap is a reference to a local struct which encapsulates
91    /// fields to configure the Machine’s bootstrapping mechanism.
92    pub bootstrap: MachinePoolTemplateSpecBootstrap,
93    /// clusterName is the name of the Cluster this object belongs to.
94    #[serde(rename = "clusterName")]
95    pub cluster_name: String,
96    /// deletion contains configuration options for Machine deletion.
97    #[serde(default, skip_serializing_if = "Option::is_none")]
98    pub deletion: Option<MachinePoolTemplateSpecDeletion>,
99    /// failureDomain is the failure domain the machine will be created in.
100    /// Must match the name of a FailureDomain from the Cluster status.
101    #[serde(
102        default,
103        skip_serializing_if = "Option::is_none",
104        rename = "failureDomain"
105    )]
106    pub failure_domain: Option<String>,
107    /// infrastructureRef is a required reference to a custom resource
108    /// offered by an infrastructure provider.
109    #[serde(rename = "infrastructureRef")]
110    pub infrastructure_ref: MachinePoolTemplateSpecInfrastructureRef,
111    /// minReadySeconds is the minimum number of seconds for which a Machine should be ready before considering it available.
112    /// Defaults to 0 (Machine will be considered available as soon as the Machine is ready)
113    #[serde(
114        default,
115        skip_serializing_if = "Option::is_none",
116        rename = "minReadySeconds"
117    )]
118    pub min_ready_seconds: Option<i32>,
119    /// providerID is the identification ID of the machine provided by the provider.
120    /// This field must match the provider ID as seen on the node object corresponding to this machine.
121    /// This field is required by higher level consumers of cluster-api. Example use case is cluster autoscaler
122    /// with cluster-api as provider. Clean-up logic in the autoscaler compares machines to nodes to find out
123    /// machines at provider which could not get registered as Kubernetes nodes. With cluster-api as a
124    /// generic out-of-tree provider for autoscaler, this field is required by autoscaler to be
125    /// able to have a provider view of the list of machines. Another list of nodes is queried from the k8s apiserver
126    /// and then a comparison is done to find out unregistered machines and are marked for delete.
127    /// This field will be set by the actuators and consumed by higher level entities like autoscaler that will
128    /// be interfacing with cluster-api as generic provider.
129    #[serde(
130        default,
131        skip_serializing_if = "Option::is_none",
132        rename = "providerID"
133    )]
134    pub provider_id: Option<String>,
135    /// readinessGates specifies additional conditions to include when evaluating Machine Ready condition.
136    ///
137    /// This field can be used e.g. by Cluster API control plane providers to extend the semantic of the
138    /// Ready condition for the Machine they control, like the kubeadm control provider adding ReadinessGates
139    /// for the APIServerPodHealthy, SchedulerPodHealthy conditions, etc.
140    ///
141    /// Another example are external controllers, e.g. responsible to install special software/hardware on the Machines;
142    /// they can include the status of those components with a new condition and add this condition to ReadinessGates.
143    ///
144    /// NOTE: In case readinessGates conditions start with the APIServer, ControllerManager, Scheduler prefix, and all those
145    /// readiness gates condition are reporting the same message, when computing the Machine's Ready condition those
146    /// readinessGates will be replaced by a single entry reporting "Control plane components: " + message.
147    /// This helps to improve readability of conditions bubbling up to the Machine's owner resource / to the Cluster).
148    #[serde(
149        default,
150        skip_serializing_if = "Option::is_none",
151        rename = "readinessGates"
152    )]
153    pub readiness_gates: Option<Vec<MachinePoolTemplateSpecReadinessGates>>,
154    /// taints are the node taints that Cluster API will manage.
155    /// This list is not necessarily complete: other Kubernetes components may add or remove other taints from nodes,
156    /// e.g. the node controller might add the node.kubernetes.io/not-ready taint.
157    /// Only those taints defined in this list will be added or removed by core Cluster API controllers.
158    ///
159    /// There can be at most 64 taints.
160    /// A pod would have to tolerate all existing taints to run on the corresponding node.
161    ///
162    /// NOTE: This list is implemented as a "map" type, meaning that individual elements can be managed by different owners.
163    #[serde(default, skip_serializing_if = "Option::is_none")]
164    pub taints: Option<Vec<MachinePoolTemplateSpecTaints>>,
165    /// version defines the desired Kubernetes version.
166    /// This field is meant to be optionally used by bootstrap providers.
167    #[serde(default, skip_serializing_if = "Option::is_none")]
168    pub version: Option<String>,
169}
170
171/// bootstrap is a reference to a local struct which encapsulates
172/// fields to configure the Machine’s bootstrapping mechanism.
173#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, JsonSchema)]
174pub struct MachinePoolTemplateSpecBootstrap {
175    /// configRef is a reference to a bootstrap provider-specific resource
176    /// that holds configuration details. The reference is optional to
177    /// allow users/operators to specify Bootstrap.DataSecretName without
178    /// the need of a controller.
179    #[serde(default, skip_serializing_if = "Option::is_none", rename = "configRef")]
180    pub config_ref: Option<MachinePoolTemplateSpecBootstrapConfigRef>,
181    /// dataSecretName is the name of the secret that stores the bootstrap data script.
182    /// If nil, the Machine should remain in the Pending state.
183    #[serde(
184        default,
185        skip_serializing_if = "Option::is_none",
186        rename = "dataSecretName"
187    )]
188    pub data_secret_name: Option<String>,
189}
190
191/// configRef is a reference to a bootstrap provider-specific resource
192/// that holds configuration details. The reference is optional to
193/// allow users/operators to specify Bootstrap.DataSecretName without
194/// the need of a controller.
195#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, JsonSchema)]
196pub struct MachinePoolTemplateSpecBootstrapConfigRef {
197    /// apiGroup is the group of the resource being referenced.
198    /// apiGroup must be fully qualified domain name.
199    /// The corresponding version for this reference will be looked up from the contract
200    /// labels of the corresponding CRD of the resource being referenced.
201    #[serde(rename = "apiGroup")]
202    pub api_group: String,
203    /// kind of the resource being referenced.
204    /// kind must consist of alphanumeric characters or '-', start with an alphabetic character, and end with an alphanumeric character.
205    pub kind: String,
206    /// name of the resource being referenced.
207    /// name must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character.
208    pub name: String,
209}
210
211/// deletion contains configuration options for Machine deletion.
212#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, JsonSchema)]
213pub struct MachinePoolTemplateSpecDeletion {
214    /// nodeDeletionTimeoutSeconds defines how long the controller will attempt to delete the Node that the Machine
215    /// hosts after the Machine is marked for deletion. A duration of 0 will retry deletion indefinitely.
216    /// Defaults to 10 seconds.
217    #[serde(
218        default,
219        skip_serializing_if = "Option::is_none",
220        rename = "nodeDeletionTimeoutSeconds"
221    )]
222    pub node_deletion_timeout_seconds: Option<i32>,
223    /// nodeDrainTimeoutSeconds is the total amount of time that the controller will spend on draining a node.
224    /// The default value is 0, meaning that the node can be drained without any time limitations.
225    /// NOTE: nodeDrainTimeoutSeconds is different from `kubectl drain --timeout`
226    #[serde(
227        default,
228        skip_serializing_if = "Option::is_none",
229        rename = "nodeDrainTimeoutSeconds"
230    )]
231    pub node_drain_timeout_seconds: Option<i32>,
232    /// nodeVolumeDetachTimeoutSeconds is the total amount of time that the controller will spend on waiting for all volumes
233    /// to be detached. The default value is 0, meaning that the volumes can be detached without any time limitations.
234    #[serde(
235        default,
236        skip_serializing_if = "Option::is_none",
237        rename = "nodeVolumeDetachTimeoutSeconds"
238    )]
239    pub node_volume_detach_timeout_seconds: Option<i32>,
240}
241
242/// infrastructureRef is a required reference to a custom resource
243/// offered by an infrastructure provider.
244#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, JsonSchema)]
245pub struct MachinePoolTemplateSpecInfrastructureRef {
246    /// apiGroup is the group of the resource being referenced.
247    /// apiGroup must be fully qualified domain name.
248    /// The corresponding version for this reference will be looked up from the contract
249    /// labels of the corresponding CRD of the resource being referenced.
250    #[serde(rename = "apiGroup")]
251    pub api_group: String,
252    /// kind of the resource being referenced.
253    /// kind must consist of alphanumeric characters or '-', start with an alphabetic character, and end with an alphanumeric character.
254    pub kind: String,
255    /// name of the resource being referenced.
256    /// name must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character.
257    pub name: String,
258}
259
260/// MachineReadinessGate contains the type of a Machine condition to be used as a readiness gate.
261#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, JsonSchema)]
262pub struct MachinePoolTemplateSpecReadinessGates {
263    /// conditionType refers to a condition with matching type in the Machine's condition list.
264    /// If the conditions doesn't exist, it will be treated as unknown.
265    /// Note: Both Cluster API conditions or conditions added by 3rd party controllers can be used as readiness gates.
266    #[serde(rename = "conditionType")]
267    pub condition_type: String,
268    /// polarity of the conditionType specified in this readinessGate.
269    /// Valid values are Positive, Negative and omitted.
270    /// When omitted, the default behaviour will be Positive.
271    /// A positive polarity means that the condition should report a true status under normal conditions.
272    /// A negative polarity means that the condition should report a false status under normal conditions.
273    #[serde(default, skip_serializing_if = "Option::is_none")]
274    pub polarity: Option<MachinePoolTemplateSpecReadinessGatesPolarity>,
275}
276
277/// MachineReadinessGate contains the type of a Machine condition to be used as a readiness gate.
278#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
279pub enum MachinePoolTemplateSpecReadinessGatesPolarity {
280    Positive,
281    Negative,
282}
283
284/// MachineTaint defines a taint equivalent to corev1.Taint, but additionally having a propagation field.
285#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
286pub struct MachinePoolTemplateSpecTaints {
287    /// effect is the effect for the taint. Valid values are NoSchedule, PreferNoSchedule and NoExecute.
288    pub effect: MachinePoolTemplateSpecTaintsEffect,
289    /// key is the taint key to be applied to a node.
290    /// Must be a valid qualified name of maximum size 63 characters
291    /// with an optional subdomain prefix of maximum size 253 characters,
292    /// separated by a `/`.
293    pub key: String,
294    /// propagation defines how this taint should be propagated to nodes.
295    /// Valid values are 'Always' and 'OnInitialization'.
296    /// Always: The taint will be continuously reconciled. If it is not set for a node, it will be added during reconciliation.
297    /// OnInitialization: The taint will be added during node initialization. If it gets removed from the node later on it will not get added again.
298    pub propagation: MachinePoolTemplateSpecTaintsPropagation,
299    /// value is the taint value corresponding to the taint key.
300    /// It must be a valid label value of maximum size 63 characters.
301    #[serde(default, skip_serializing_if = "Option::is_none")]
302    pub value: Option<String>,
303}
304
305/// MachineTaint defines a taint equivalent to corev1.Taint, but additionally having a propagation field.
306#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
307pub enum MachinePoolTemplateSpecTaintsEffect {
308    NoSchedule,
309    PreferNoSchedule,
310    NoExecute,
311}
312
313/// MachineTaint defines a taint equivalent to corev1.Taint, but additionally having a propagation field.
314#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
315pub enum MachinePoolTemplateSpecTaintsPropagation {
316    Always,
317    OnInitialization,
318}
319
320/// status is the observed state of MachinePool.
321#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, JsonSchema)]
322pub struct MachinePoolStatus {
323    /// availableReplicas is the number of available replicas for this MachinePool. A machine is considered available when Machine's Available condition is true.
324    #[serde(
325        default,
326        skip_serializing_if = "Option::is_none",
327        rename = "availableReplicas"
328    )]
329    pub available_replicas: Option<i32>,
330    /// conditions represents the observations of a MachinePool's current state.
331    /// Known condition types are Available, BootstrapConfigReady, InfrastructureReady, MachinesReady, MachinesUpToDate,
332    /// ScalingUp, ScalingDown, Remediating, Deleting, Paused.
333    #[serde(default, skip_serializing_if = "Option::is_none")]
334    pub conditions: Option<Vec<Condition>>,
335    /// deprecated groups all the status fields that are deprecated and will be removed when all the nested field are removed.
336    #[serde(default, skip_serializing_if = "Option::is_none")]
337    pub deprecated: Option<MachinePoolStatusDeprecated>,
338    /// initialization provides observations of the MachinePool initialization process.
339    /// NOTE: Fields in this struct are part of the Cluster API contract and are used to orchestrate initial MachinePool provisioning.
340    #[serde(default, skip_serializing_if = "Option::is_none")]
341    pub initialization: Option<MachinePoolStatusInitialization>,
342    /// nodeRefs will point to the corresponding Nodes if it they exist.
343    #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeRefs")]
344    pub node_refs: Option<Vec<ObjectReference>>,
345    /// observedGeneration is the latest generation observed by the controller.
346    #[serde(
347        default,
348        skip_serializing_if = "Option::is_none",
349        rename = "observedGeneration"
350    )]
351    pub observed_generation: Option<i64>,
352    /// phase represents the current phase of cluster actuation.
353    #[serde(default, skip_serializing_if = "Option::is_none")]
354    pub phase: Option<MachinePoolStatusPhase>,
355    /// readyReplicas is the number of ready replicas for this MachinePool. A machine is considered ready when Machine's Ready condition is true.
356    #[serde(
357        default,
358        skip_serializing_if = "Option::is_none",
359        rename = "readyReplicas"
360    )]
361    pub ready_replicas: Option<i32>,
362    /// replicas is the most recently observed number of replicas.
363    #[serde(default, skip_serializing_if = "Option::is_none")]
364    pub replicas: Option<i32>,
365    /// upToDateReplicas is the number of up-to-date replicas targeted by this MachinePool. A machine is considered up-to-date when Machine's UpToDate condition is true.
366    #[serde(
367        default,
368        skip_serializing_if = "Option::is_none",
369        rename = "upToDateReplicas"
370    )]
371    pub up_to_date_replicas: Option<i32>,
372}
373
374/// deprecated groups all the status fields that are deprecated and will be removed when all the nested field are removed.
375#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, JsonSchema)]
376pub struct MachinePoolStatusDeprecated {
377    /// v1beta1 groups all the status fields that are deprecated and will be removed when support for v1beta1 will be dropped.
378    #[serde(default, skip_serializing_if = "Option::is_none")]
379    pub v1beta1: Option<MachinePoolStatusDeprecatedV1beta1>,
380}
381
382/// v1beta1 groups all the status fields that are deprecated and will be removed when support for v1beta1 will be dropped.
383#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, JsonSchema)]
384pub struct MachinePoolStatusDeprecatedV1beta1 {
385    /// availableReplicas is the number of available replicas (ready for at least minReadySeconds) for this MachinePool.
386    ///
387    /// Deprecated: This field is deprecated and is going to be removed when support for v1beta1 will be dropped. Please see <https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20240916-improve-status-in-CAPI-resources.md> for more details.
388    #[serde(
389        default,
390        skip_serializing_if = "Option::is_none",
391        rename = "availableReplicas"
392    )]
393    pub available_replicas: Option<i32>,
394    /// conditions define the current service state of the MachinePool.
395    ///
396    /// Deprecated: This field is deprecated and is going to be removed when support for v1beta1 will be dropped. Please see <https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20240916-improve-status-in-CAPI-resources.md> for more details.
397    #[serde(default, skip_serializing_if = "Option::is_none")]
398    pub conditions: Option<Vec<Condition>>,
399    /// failureMessage indicates that there is a problem reconciling the state,
400    /// and will be set to a descriptive error message.
401    ///
402    /// Deprecated: This field is deprecated and is going to be removed when support for v1beta1 will be dropped. Please see <https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20240916-improve-status-in-CAPI-resources.md> for more details.
403    #[serde(
404        default,
405        skip_serializing_if = "Option::is_none",
406        rename = "failureMessage"
407    )]
408    pub failure_message: Option<String>,
409    /// failureReason indicates that there is a problem reconciling the state, and
410    /// will be set to a token value suitable for programmatic interpretation.
411    ///
412    /// Deprecated: This field is deprecated and is going to be removed when support for v1beta1 will be dropped. Please see <https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20240916-improve-status-in-CAPI-resources.md> for more details.
413    #[serde(
414        default,
415        skip_serializing_if = "Option::is_none",
416        rename = "failureReason"
417    )]
418    pub failure_reason: Option<String>,
419    /// readyReplicas is the number of ready replicas for this MachinePool. A machine is considered ready when the node has been created and is "Ready".
420    ///
421    /// Deprecated: This field is deprecated and is going to be removed when support for v1beta1 will be dropped. Please see <https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20240916-improve-status-in-CAPI-resources.md> for more details.
422    #[serde(
423        default,
424        skip_serializing_if = "Option::is_none",
425        rename = "readyReplicas"
426    )]
427    pub ready_replicas: Option<i32>,
428    /// unavailableReplicas is the total number of unavailable machine instances targeted by this machine pool.
429    /// This is the total number of machine instances that are still required for
430    /// the machine pool to have 100% available capacity. They may either
431    /// be machine instances that are running but not yet available or machine instances
432    /// that still have not been created.
433    ///
434    /// Deprecated: This field is deprecated and is going to be removed when support for v1beta1 will be dropped. Please see <https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20240916-improve-status-in-CAPI-resources.md> for more details.
435    #[serde(
436        default,
437        skip_serializing_if = "Option::is_none",
438        rename = "unavailableReplicas"
439    )]
440    pub unavailable_replicas: Option<i32>,
441}
442
443/// initialization provides observations of the MachinePool initialization process.
444/// NOTE: Fields in this struct are part of the Cluster API contract and are used to orchestrate initial MachinePool provisioning.
445#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, JsonSchema)]
446pub struct MachinePoolStatusInitialization {
447    /// bootstrapDataSecretCreated is true when the bootstrap provider reports that the MachinePool's boostrap secret is created.
448    /// NOTE: this field is part of the Cluster API contract, and it is used to orchestrate provisioning.
449    /// The value of this field is never updated after provisioning is completed.
450    #[serde(
451        default,
452        skip_serializing_if = "Option::is_none",
453        rename = "bootstrapDataSecretCreated"
454    )]
455    pub bootstrap_data_secret_created: Option<bool>,
456    /// infrastructureProvisioned is true when the infrastructure provider reports that MachinePool's infrastructure is fully provisioned.
457    /// NOTE: this field is part of the Cluster API contract, and it is used to orchestrate provisioning.
458    /// The value of this field is never updated after provisioning is completed.
459    #[serde(
460        default,
461        skip_serializing_if = "Option::is_none",
462        rename = "infrastructureProvisioned"
463    )]
464    pub infrastructure_provisioned: Option<bool>,
465}
466
467/// status is the observed state of MachinePool.
468#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
469pub enum MachinePoolStatusPhase {
470    Pending,
471    Provisioning,
472    Provisioned,
473    Running,
474    ScalingUp,
475    ScalingDown,
476    Scaling,
477    Deleting,
478    Failed,
479    Unknown,
480}