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}