Revert "Feature 11049: Addition of CAPI manifests from upstream projects" 00/15300/2
authorgarciadeblas <gerardo.garciadeblas@telefonica.com>
Tue, 22 Jul 2025 13:34:09 +0000 (15:34 +0200)
committergarciadeblas <gerardo.garciadeblas@telefonica.com>
Tue, 22 Jul 2025 16:00:23 +0000 (18:00 +0200)
This reverts commit f686de59d46aa3ebae48edc07830a0371ffb3c03.

Change-Id: If39d951de02917c6db0fa4d421e2e145fac1b306
Signed-off-by: garciadeblas <gerardo.garciadeblas@telefonica.com>
installers/flux/templates/sw-catalogs/cloud-resources/capi/cni/calico/manifests/calico.yaml [deleted file]
installers/flux/templates/sw-catalogs/cloud-resources/capi/openstack-kubeadm/manifests/post-install/cloud-controller-manager-role-bindings.yaml [deleted file]
installers/flux/templates/sw-catalogs/cloud-resources/capi/openstack-kubeadm/manifests/post-install/cloud-controller-manager-roles.yaml [deleted file]
installers/flux/templates/sw-catalogs/cloud-resources/capi/openstack-kubeadm/manifests/post-install/openstack-cloud-controller-manager-ds.yaml [deleted file]
installers/flux/templates/sw-catalogs/infra-controllers/capi/manifests/core-controller/core.yaml [deleted file]
installers/flux/templates/sw-catalogs/infra-controllers/capi/manifests/providers/bootstrap/kubeadm/bootstrap.yaml [deleted file]
installers/flux/templates/sw-catalogs/infra-controllers/capi/manifests/providers/control-plane/kubeadm/control-plane.yaml [deleted file]
installers/flux/templates/sw-catalogs/infra-controllers/capi/manifests/providers/infrastructure/openstack/openstack-resource-controller.yaml [deleted file]
installers/flux/templates/sw-catalogs/infra-controllers/capi/manifests/providers/infrastructure/openstack/openstack.yaml [deleted file]

diff --git a/installers/flux/templates/sw-catalogs/cloud-resources/capi/cni/calico/manifests/calico.yaml b/installers/flux/templates/sw-catalogs/cloud-resources/capi/cni/calico/manifests/calico.yaml
deleted file mode 100644 (file)
index 066b20b..0000000
+++ /dev/null
@@ -1,5143 +0,0 @@
----
-# Source: calico/templates/calico-kube-controllers.yaml
-# This manifest creates a Pod Disruption Budget for Controller to allow K8s Cluster Autoscaler to evict
-
-apiVersion: policy/v1
-kind: PodDisruptionBudget
-metadata:
-  name: calico-kube-controllers
-  namespace: kube-system
-  labels:
-    k8s-app: calico-kube-controllers
-spec:
-  maxUnavailable: 1
-  selector:
-    matchLabels:
-      k8s-app: calico-kube-controllers
----
-# Source: calico/templates/calico-kube-controllers.yaml
-apiVersion: v1
-kind: ServiceAccount
-metadata:
-  name: calico-kube-controllers
-  namespace: kube-system
----
-# Source: calico/templates/calico-node.yaml
-apiVersion: v1
-kind: ServiceAccount
-metadata:
-  name: calico-node
-  namespace: kube-system
----
-# Source: calico/templates/calico-node.yaml
-apiVersion: v1
-kind: ServiceAccount
-metadata:
-  name: calico-cni-plugin
-  namespace: kube-system
----
-# Source: calico/templates/calico-config.yaml
-# This ConfigMap is used to configure a self-hosted Calico installation.
-kind: ConfigMap
-apiVersion: v1
-metadata:
-  name: calico-config
-  namespace: kube-system
-data:
-  # Typha is disabled.
-  typha_service_name: "none"
-  # Configure the backend to use.
-  calico_backend: "bird"
-
-  # Configure the MTU to use for workload interfaces and tunnels.
-  # By default, MTU is auto-detected, and explicitly setting this field should not be required.
-  # You can override auto-detection by providing a non-zero value.
-  veth_mtu: "0"
-
-  # The CNI network configuration to install on each node. The special
-  # values in this config will be automatically populated.
-  cni_network_config: |-
-    {
-      "name": "k8s-pod-network",
-      "cniVersion": "0.3.1",
-      "plugins": [
-        {
-          "type": "calico",
-          "log_level": "info",
-          "log_file_path": "/var/log/calico/cni/cni.log",
-          "datastore_type": "kubernetes",
-          "nodename": "__KUBERNETES_NODE_NAME__",
-          "mtu": __CNI_MTU__,
-          "ipam": {
-              "type": "calico-ipam"
-          },
-          "policy": {
-              "type": "k8s"
-          },
-          "kubernetes": {
-              "kubeconfig": "__KUBECONFIG_FILEPATH__"
-          }
-        },
-        {
-          "type": "portmap",
-          "snat": true,
-          "capabilities": {"portMappings": true}
-        },
-        {
-          "type": "bandwidth",
-          "capabilities": {"bandwidth": true}
-        }
-      ]
-    }
----
-# Source: calico/templates/kdd-crds.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  name: bgpconfigurations.crd.projectcalico.org
-spec:
-  group: crd.projectcalico.org
-  names:
-    kind: BGPConfiguration
-    listKind: BGPConfigurationList
-    plural: bgpconfigurations
-    singular: bgpconfiguration
-  preserveUnknownFields: false
-  scope: Cluster
-  versions:
-  - name: v1
-    schema:
-      openAPIV3Schema:
-        description: BGPConfiguration contains the configuration for any BGP routing.
-        properties:
-          apiVersion:
-            description: 'APIVersion defines the versioned schema of this representation
-              of an object. Servers should convert recognized schemas to the latest
-              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
-            type: string
-          kind:
-            description: 'Kind is a string value representing the REST resource this
-              object represents. Servers may infer this from the endpoint the client
-              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: BGPConfigurationSpec contains the values of the BGP configuration.
-            properties:
-              asNumber:
-                description: 'ASNumber is the default AS number used by a node. [Default:
-                  64512]'
-                format: int32
-                type: integer
-              bindMode:
-                description: BindMode indicates whether to listen for BGP connections
-                  on all addresses (None) or only on the node's canonical IP address
-                  Node.Spec.BGP.IPvXAddress (NodeIP). Default behaviour is to listen
-                  for BGP connections on all addresses.
-                type: string
-              communities:
-                description: Communities is a list of BGP community values and their
-                  arbitrary names for tagging routes.
-                items:
-                  description: Community contains standard or large community value
-                    and its name.
-                  properties:
-                    name:
-                      description: Name given to community value.
-                      type: string
-                    value:
-                      description: Value must be of format `aa:nn` or `aa:nn:mm`.
-                        For standard community use `aa:nn` format, where `aa` and
-                        `nn` are 16 bit number. For large community use `aa:nn:mm`
-                        format, where `aa`, `nn` and `mm` are 32 bit number. Where,
-                        `aa` is an AS Number, `nn` and `mm` are per-AS identifier.
-                      pattern: ^(\d+):(\d+)$|^(\d+):(\d+):(\d+)$
-                      type: string
-                  type: object
-                type: array
-              ignoredInterfaces:
-                description: IgnoredInterfaces indicates the network interfaces that
-                  needs to be excluded when reading device routes.
-                items:
-                  type: string
-                type: array
-              listenPort:
-                description: ListenPort is the port where BGP protocol should listen.
-                  Defaults to 179
-                maximum: 65535
-                minimum: 1
-                type: integer
-              logSeverityScreen:
-                description: 'LogSeverityScreen is the log severity above which logs
-                  are sent to the stdout. [Default: INFO]'
-                type: string
-              nodeMeshMaxRestartTime:
-                description: Time to allow for software restart for node-to-mesh peerings.  When
-                  specified, this is configured as the graceful restart timeout.  When
-                  not specified, the BIRD default of 120s is used. This field can
-                  only be set on the default BGPConfiguration instance and requires
-                  that NodeMesh is enabled
-                type: string
-              nodeMeshPassword:
-                description: Optional BGP password for full node-to-mesh peerings.
-                  This field can only be set on the default BGPConfiguration instance
-                  and requires that NodeMesh is enabled
-                properties:
-                  secretKeyRef:
-                    description: Selects a key of a secret in the node pod's namespace.
-                    properties:
-                      key:
-                        description: The key of the secret to select from.  Must be
-                          a valid secret key.
-                        type: string
-                      name:
-                        description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                          TODO: Add other useful fields. apiVersion, kind, uid?'
-                        type: string
-                      optional:
-                        description: Specify whether the Secret or its key must be
-                          defined
-                        type: boolean
-                    required:
-                    - key
-                    type: object
-                type: object
-              nodeToNodeMeshEnabled:
-                description: 'NodeToNodeMeshEnabled sets whether full node to node
-                  BGP mesh is enabled. [Default: true]'
-                type: boolean
-              prefixAdvertisements:
-                description: PrefixAdvertisements contains per-prefix advertisement
-                  configuration.
-                items:
-                  description: PrefixAdvertisement configures advertisement properties
-                    for the specified CIDR.
-                  properties:
-                    cidr:
-                      description: CIDR for which properties should be advertised.
-                      type: string
-                    communities:
-                      description: Communities can be list of either community names
-                        already defined in `Specs.Communities` or community value
-                        of format `aa:nn` or `aa:nn:mm`. For standard community use
-                        `aa:nn` format, where `aa` and `nn` are 16 bit number. For
-                        large community use `aa:nn:mm` format, where `aa`, `nn` and
-                        `mm` are 32 bit number. Where,`aa` is an AS Number, `nn` and
-                        `mm` are per-AS identifier.
-                      items:
-                        type: string
-                      type: array
-                  type: object
-                type: array
-              serviceClusterIPs:
-                description: ServiceClusterIPs are the CIDR blocks from which service
-                  cluster IPs are allocated. If specified, Calico will advertise these
-                  blocks, as well as any cluster IPs within them.
-                items:
-                  description: ServiceClusterIPBlock represents a single allowed ClusterIP
-                    CIDR block.
-                  properties:
-                    cidr:
-                      type: string
-                  type: object
-                type: array
-              serviceExternalIPs:
-                description: ServiceExternalIPs are the CIDR blocks for Kubernetes
-                  Service External IPs. Kubernetes Service ExternalIPs will only be
-                  advertised if they are within one of these blocks.
-                items:
-                  description: ServiceExternalIPBlock represents a single allowed
-                    External IP CIDR block.
-                  properties:
-                    cidr:
-                      type: string
-                  type: object
-                type: array
-              serviceLoadBalancerIPs:
-                description: ServiceLoadBalancerIPs are the CIDR blocks for Kubernetes
-                  Service LoadBalancer IPs. Kubernetes Service status.LoadBalancer.Ingress
-                  IPs will only be advertised if they are within one of these blocks.
-                items:
-                  description: ServiceLoadBalancerIPBlock represents a single allowed
-                    LoadBalancer IP CIDR block.
-                  properties:
-                    cidr:
-                      type: string
-                  type: object
-                type: array
-            type: object
-        type: object
-    served: true
-    storage: true
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: []
-  storedVersions: []
----
-# Source: calico/templates/kdd-crds.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  annotations:
-    controller-gen.kubebuilder.io/version: (devel)
-  creationTimestamp: null
-  name: bgpfilters.crd.projectcalico.org
-spec:
-  group: crd.projectcalico.org
-  names:
-    kind: BGPFilter
-    listKind: BGPFilterList
-    plural: bgpfilters
-    singular: bgpfilter
-  scope: Cluster
-  versions:
-  - name: v1
-    schema:
-      openAPIV3Schema:
-        properties:
-          apiVersion:
-            description: 'APIVersion defines the versioned schema of this representation
-              of an object. Servers should convert recognized schemas to the latest
-              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
-            type: string
-          kind:
-            description: 'Kind is a string value representing the REST resource this
-              object represents. Servers may infer this from the endpoint the client
-              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: BGPFilterSpec contains the IPv4 and IPv6 filter rules of
-              the BGP Filter.
-            properties:
-              exportV4:
-                description: The ordered set of IPv4 BGPFilter rules acting on exporting
-                  routes to a peer.
-                items:
-                  description: BGPFilterRuleV4 defines a BGP filter rule consisting
-                    a single IPv4 CIDR block and a filter action for this CIDR.
-                  properties:
-                    action:
-                      type: string
-                    cidr:
-                      type: string
-                    interface:
-                      type: string
-                    matchOperator:
-                      type: string
-                    source:
-                      type: string
-                  required:
-                  - action
-                  type: object
-                type: array
-              exportV6:
-                description: The ordered set of IPv6 BGPFilter rules acting on exporting
-                  routes to a peer.
-                items:
-                  description: BGPFilterRuleV6 defines a BGP filter rule consisting
-                    a single IPv6 CIDR block and a filter action for this CIDR.
-                  properties:
-                    action:
-                      type: string
-                    cidr:
-                      type: string
-                    interface:
-                      type: string
-                    matchOperator:
-                      type: string
-                    source:
-                      type: string
-                  required:
-                  - action
-                  type: object
-                type: array
-              importV4:
-                description: The ordered set of IPv4 BGPFilter rules acting on importing
-                  routes from a peer.
-                items:
-                  description: BGPFilterRuleV4 defines a BGP filter rule consisting
-                    a single IPv4 CIDR block and a filter action for this CIDR.
-                  properties:
-                    action:
-                      type: string
-                    cidr:
-                      type: string
-                    interface:
-                      type: string
-                    matchOperator:
-                      type: string
-                    source:
-                      type: string
-                  required:
-                  - action
-                  type: object
-                type: array
-              importV6:
-                description: The ordered set of IPv6 BGPFilter rules acting on importing
-                  routes from a peer.
-                items:
-                  description: BGPFilterRuleV6 defines a BGP filter rule consisting
-                    a single IPv6 CIDR block and a filter action for this CIDR.
-                  properties:
-                    action:
-                      type: string
-                    cidr:
-                      type: string
-                    interface:
-                      type: string
-                    matchOperator:
-                      type: string
-                    source:
-                      type: string
-                  required:
-                  - action
-                  type: object
-                type: array
-            type: object
-        type: object
-    served: true
-    storage: true
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: []
-  storedVersions: []
----
-# Source: calico/templates/kdd-crds.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  name: bgppeers.crd.projectcalico.org
-spec:
-  group: crd.projectcalico.org
-  names:
-    kind: BGPPeer
-    listKind: BGPPeerList
-    plural: bgppeers
-    singular: bgppeer
-  preserveUnknownFields: false
-  scope: Cluster
-  versions:
-  - name: v1
-    schema:
-      openAPIV3Schema:
-        properties:
-          apiVersion:
-            description: 'APIVersion defines the versioned schema of this representation
-              of an object. Servers should convert recognized schemas to the latest
-              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
-            type: string
-          kind:
-            description: 'Kind is a string value representing the REST resource this
-              object represents. Servers may infer this from the endpoint the client
-              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: BGPPeerSpec contains the specification for a BGPPeer resource.
-            properties:
-              asNumber:
-                description: The AS Number of the peer.
-                format: int32
-                type: integer
-              filters:
-                description: The ordered set of BGPFilters applied on this BGP peer.
-                items:
-                  type: string
-                type: array
-              keepOriginalNextHop:
-                description: Option to keep the original nexthop field when routes
-                  are sent to a BGP Peer. Setting "true" configures the selected BGP
-                  Peers node to use the "next hop keep;" instead of "next hop self;"(default)
-                  in the specific branch of the Node on "bird.cfg".
-                type: boolean
-              maxRestartTime:
-                description: Time to allow for software restart.  When specified,
-                  this is configured as the graceful restart timeout.  When not specified,
-                  the BIRD default of 120s is used.
-                type: string
-              node:
-                description: The node name identifying the Calico node instance that
-                  is targeted by this peer. If this is not set, and no nodeSelector
-                  is specified, then this BGP peer selects all nodes in the cluster.
-                type: string
-              nodeSelector:
-                description: Selector for the nodes that should have this peering.  When
-                  this is set, the Node field must be empty.
-                type: string
-              numAllowedLocalASNumbers:
-                description: Maximum number of local AS numbers that are allowed in
-                  the AS path for received routes. This removes BGP loop prevention
-                  and should only be used if absolutely necessary.
-                format: int32
-                type: integer
-              password:
-                description: Optional BGP password for the peerings generated by this
-                  BGPPeer resource.
-                properties:
-                  secretKeyRef:
-                    description: Selects a key of a secret in the node pod's namespace.
-                    properties:
-                      key:
-                        description: The key of the secret to select from.  Must be
-                          a valid secret key.
-                        type: string
-                      name:
-                        description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                          TODO: Add other useful fields. apiVersion, kind, uid?'
-                        type: string
-                      optional:
-                        description: Specify whether the Secret or its key must be
-                          defined
-                        type: boolean
-                    required:
-                    - key
-                    type: object
-                type: object
-              peerIP:
-                description: The IP address of the peer followed by an optional port
-                  number to peer with. If port number is given, format should be `[<IPv6>]:port`
-                  or `<IPv4>:<port>` for IPv4. If optional port number is not set,
-                  and this peer IP and ASNumber belongs to a calico/node with ListenPort
-                  set in BGPConfiguration, then we use that port to peer.
-                type: string
-              peerSelector:
-                description: Selector for the remote nodes to peer with.  When this
-                  is set, the PeerIP and ASNumber fields must be empty.  For each
-                  peering between the local node and selected remote nodes, we configure
-                  an IPv4 peering if both ends have NodeBGPSpec.IPv4Address specified,
-                  and an IPv6 peering if both ends have NodeBGPSpec.IPv6Address specified.  The
-                  remote AS number comes from the remote node's NodeBGPSpec.ASNumber,
-                  or the global default if that is not set.
-                type: string
-              reachableBy:
-                description: Add an exact, i.e. /32, static route toward peer IP in
-                  order to prevent route flapping. ReachableBy contains the address
-                  of the gateway which peer can be reached by.
-                type: string
-              sourceAddress:
-                description: Specifies whether and how to configure a source address
-                  for the peerings generated by this BGPPeer resource.  Default value
-                  "UseNodeIP" means to configure the node IP as the source address.  "None"
-                  means not to configure a source address.
-                type: string
-              ttlSecurity:
-                description: TTLSecurity enables the generalized TTL security mechanism
-                  (GTSM) which protects against spoofed packets by ignoring received
-                  packets with a smaller than expected TTL value. The provided value
-                  is the number of hops (edges) between the peers.
-                type: integer
-            type: object
-        type: object
-    served: true
-    storage: true
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: []
-  storedVersions: []
----
-# Source: calico/templates/kdd-crds.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  name: blockaffinities.crd.projectcalico.org
-spec:
-  group: crd.projectcalico.org
-  names:
-    kind: BlockAffinity
-    listKind: BlockAffinityList
-    plural: blockaffinities
-    singular: blockaffinity
-  preserveUnknownFields: false
-  scope: Cluster
-  versions:
-  - name: v1
-    schema:
-      openAPIV3Schema:
-        properties:
-          apiVersion:
-            description: 'APIVersion defines the versioned schema of this representation
-              of an object. Servers should convert recognized schemas to the latest
-              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
-            type: string
-          kind:
-            description: 'Kind is a string value representing the REST resource this
-              object represents. Servers may infer this from the endpoint the client
-              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: BlockAffinitySpec contains the specification for a BlockAffinity
-              resource.
-            properties:
-              cidr:
-                type: string
-              deleted:
-                description: Deleted indicates that this block affinity is being deleted.
-                  This field is a string for compatibility with older releases that
-                  mistakenly treat this field as a string.
-                type: string
-              node:
-                type: string
-              state:
-                type: string
-            required:
-            - cidr
-            - deleted
-            - node
-            - state
-            type: object
-        type: object
-    served: true
-    storage: true
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: []
-  storedVersions: []
----
-# Source: calico/templates/kdd-crds.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  annotations:
-    controller-gen.kubebuilder.io/version: (devel)
-  creationTimestamp: null
-  name: caliconodestatuses.crd.projectcalico.org
-spec:
-  group: crd.projectcalico.org
-  names:
-    kind: CalicoNodeStatus
-    listKind: CalicoNodeStatusList
-    plural: caliconodestatuses
-    singular: caliconodestatus
-  preserveUnknownFields: false
-  scope: Cluster
-  versions:
-  - name: v1
-    schema:
-      openAPIV3Schema:
-        properties:
-          apiVersion:
-            description: 'APIVersion defines the versioned schema of this representation
-              of an object. Servers should convert recognized schemas to the latest
-              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
-            type: string
-          kind:
-            description: 'Kind is a string value representing the REST resource this
-              object represents. Servers may infer this from the endpoint the client
-              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: CalicoNodeStatusSpec contains the specification for a CalicoNodeStatus
-              resource.
-            properties:
-              classes:
-                description: Classes declares the types of information to monitor
-                  for this calico/node, and allows for selective status reporting
-                  about certain subsets of information.
-                items:
-                  type: string
-                type: array
-              node:
-                description: The node name identifies the Calico node instance for
-                  node status.
-                type: string
-              updatePeriodSeconds:
-                description: UpdatePeriodSeconds is the period at which CalicoNodeStatus
-                  should be updated. Set to 0 to disable CalicoNodeStatus refresh.
-                  Maximum update period is one day.
-                format: int32
-                type: integer
-            type: object
-          status:
-            description: CalicoNodeStatusStatus defines the observed state of CalicoNodeStatus.
-              No validation needed for status since it is updated by Calico.
-            properties:
-              agent:
-                description: Agent holds agent status on the node.
-                properties:
-                  birdV4:
-                    description: BIRDV4 represents the latest observed status of bird4.
-                    properties:
-                      lastBootTime:
-                        description: LastBootTime holds the value of lastBootTime
-                          from bird.ctl output.
-                        type: string
-                      lastReconfigurationTime:
-                        description: LastReconfigurationTime holds the value of lastReconfigTime
-                          from bird.ctl output.
-                        type: string
-                      routerID:
-                        description: Router ID used by bird.
-                        type: string
-                      state:
-                        description: The state of the BGP Daemon.
-                        type: string
-                      version:
-                        description: Version of the BGP daemon
-                        type: string
-                    type: object
-                  birdV6:
-                    description: BIRDV6 represents the latest observed status of bird6.
-                    properties:
-                      lastBootTime:
-                        description: LastBootTime holds the value of lastBootTime
-                          from bird.ctl output.
-                        type: string
-                      lastReconfigurationTime:
-                        description: LastReconfigurationTime holds the value of lastReconfigTime
-                          from bird.ctl output.
-                        type: string
-                      routerID:
-                        description: Router ID used by bird.
-                        type: string
-                      state:
-                        description: The state of the BGP Daemon.
-                        type: string
-                      version:
-                        description: Version of the BGP daemon
-                        type: string
-                    type: object
-                type: object
-              bgp:
-                description: BGP holds node BGP status.
-                properties:
-                  numberEstablishedV4:
-                    description: The total number of IPv4 established bgp sessions.
-                    type: integer
-                  numberEstablishedV6:
-                    description: The total number of IPv6 established bgp sessions.
-                    type: integer
-                  numberNotEstablishedV4:
-                    description: The total number of IPv4 non-established bgp sessions.
-                    type: integer
-                  numberNotEstablishedV6:
-                    description: The total number of IPv6 non-established bgp sessions.
-                    type: integer
-                  peersV4:
-                    description: PeersV4 represents IPv4 BGP peers status on the node.
-                    items:
-                      description: CalicoNodePeer contains the status of BGP peers
-                        on the node.
-                      properties:
-                        peerIP:
-                          description: IP address of the peer whose condition we are
-                            reporting.
-                          type: string
-                        since:
-                          description: Since the state or reason last changed.
-                          type: string
-                        state:
-                          description: State is the BGP session state.
-                          type: string
-                        type:
-                          description: Type indicates whether this peer is configured
-                            via the node-to-node mesh, or via en explicit global or
-                            per-node BGPPeer object.
-                          type: string
-                      type: object
-                    type: array
-                  peersV6:
-                    description: PeersV6 represents IPv6 BGP peers status on the node.
-                    items:
-                      description: CalicoNodePeer contains the status of BGP peers
-                        on the node.
-                      properties:
-                        peerIP:
-                          description: IP address of the peer whose condition we are
-                            reporting.
-                          type: string
-                        since:
-                          description: Since the state or reason last changed.
-                          type: string
-                        state:
-                          description: State is the BGP session state.
-                          type: string
-                        type:
-                          description: Type indicates whether this peer is configured
-                            via the node-to-node mesh, or via en explicit global or
-                            per-node BGPPeer object.
-                          type: string
-                      type: object
-                    type: array
-                required:
-                - numberEstablishedV4
-                - numberEstablishedV6
-                - numberNotEstablishedV4
-                - numberNotEstablishedV6
-                type: object
-              lastUpdated:
-                description: LastUpdated is a timestamp representing the server time
-                  when CalicoNodeStatus object last updated. It is represented in
-                  RFC3339 form and is in UTC.
-                format: date-time
-                nullable: true
-                type: string
-              routes:
-                description: Routes reports routes known to the Calico BGP daemon
-                  on the node.
-                properties:
-                  routesV4:
-                    description: RoutesV4 represents IPv4 routes on the node.
-                    items:
-                      description: CalicoNodeRoute contains the status of BGP routes
-                        on the node.
-                      properties:
-                        destination:
-                          description: Destination of the route.
-                          type: string
-                        gateway:
-                          description: Gateway for the destination.
-                          type: string
-                        interface:
-                          description: Interface for the destination
-                          type: string
-                        learnedFrom:
-                          description: LearnedFrom contains information regarding
-                            where this route originated.
-                          properties:
-                            peerIP:
-                              description: If sourceType is NodeMesh or BGPPeer, IP
-                                address of the router that sent us this route.
-                              type: string
-                            sourceType:
-                              description: Type of the source where a route is learned
-                                from.
-                              type: string
-                          type: object
-                        type:
-                          description: Type indicates if the route is being used for
-                            forwarding or not.
-                          type: string
-                      type: object
-                    type: array
-                  routesV6:
-                    description: RoutesV6 represents IPv6 routes on the node.
-                    items:
-                      description: CalicoNodeRoute contains the status of BGP routes
-                        on the node.
-                      properties:
-                        destination:
-                          description: Destination of the route.
-                          type: string
-                        gateway:
-                          description: Gateway for the destination.
-                          type: string
-                        interface:
-                          description: Interface for the destination
-                          type: string
-                        learnedFrom:
-                          description: LearnedFrom contains information regarding
-                            where this route originated.
-                          properties:
-                            peerIP:
-                              description: If sourceType is NodeMesh or BGPPeer, IP
-                                address of the router that sent us this route.
-                              type: string
-                            sourceType:
-                              description: Type of the source where a route is learned
-                                from.
-                              type: string
-                          type: object
-                        type:
-                          description: Type indicates if the route is being used for
-                            forwarding or not.
-                          type: string
-                      type: object
-                    type: array
-                type: object
-            type: object
-        type: object
-    served: true
-    storage: true
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: []
-  storedVersions: []
----
-# Source: calico/templates/kdd-crds.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  name: clusterinformations.crd.projectcalico.org
-spec:
-  group: crd.projectcalico.org
-  names:
-    kind: ClusterInformation
-    listKind: ClusterInformationList
-    plural: clusterinformations
-    singular: clusterinformation
-  preserveUnknownFields: false
-  scope: Cluster
-  versions:
-  - name: v1
-    schema:
-      openAPIV3Schema:
-        description: ClusterInformation contains the cluster specific information.
-        properties:
-          apiVersion:
-            description: 'APIVersion defines the versioned schema of this representation
-              of an object. Servers should convert recognized schemas to the latest
-              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
-            type: string
-          kind:
-            description: 'Kind is a string value representing the REST resource this
-              object represents. Servers may infer this from the endpoint the client
-              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: ClusterInformationSpec contains the values of describing
-              the cluster.
-            properties:
-              calicoVersion:
-                description: CalicoVersion is the version of Calico that the cluster
-                  is running
-                type: string
-              clusterGUID:
-                description: ClusterGUID is the GUID of the cluster
-                type: string
-              clusterType:
-                description: ClusterType describes the type of the cluster
-                type: string
-              datastoreReady:
-                description: DatastoreReady is used during significant datastore migrations
-                  to signal to components such as Felix that it should wait before
-                  accessing the datastore.
-                type: boolean
-              variant:
-                description: Variant declares which variant of Calico should be active.
-                type: string
-            type: object
-        type: object
-    served: true
-    storage: true
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: []
-  storedVersions: []
----
-# Source: calico/templates/kdd-crds.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  name: felixconfigurations.crd.projectcalico.org
-spec:
-  group: crd.projectcalico.org
-  names:
-    kind: FelixConfiguration
-    listKind: FelixConfigurationList
-    plural: felixconfigurations
-    singular: felixconfiguration
-  preserveUnknownFields: false
-  scope: Cluster
-  versions:
-  - name: v1
-    schema:
-      openAPIV3Schema:
-        description: Felix Configuration contains the configuration for Felix.
-        properties:
-          apiVersion:
-            description: 'APIVersion defines the versioned schema of this representation
-              of an object. Servers should convert recognized schemas to the latest
-              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
-            type: string
-          kind:
-            description: 'Kind is a string value representing the REST resource this
-              object represents. Servers may infer this from the endpoint the client
-              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: FelixConfigurationSpec contains the values of the Felix configuration.
-            properties:
-              allowIPIPPacketsFromWorkloads:
-                description: 'AllowIPIPPacketsFromWorkloads controls whether Felix
-                  will add a rule to drop IPIP encapsulated traffic from workloads
-                  [Default: false]'
-                type: boolean
-              allowVXLANPacketsFromWorkloads:
-                description: 'AllowVXLANPacketsFromWorkloads controls whether Felix
-                  will add a rule to drop VXLAN encapsulated traffic from workloads
-                  [Default: false]'
-                type: boolean
-              awsSrcDstCheck:
-                description: 'Set source-destination-check on AWS EC2 instances. Accepted
-                  value must be one of "DoNothing", "Enable" or "Disable". [Default:
-                  DoNothing]'
-                enum:
-                - DoNothing
-                - Enable
-                - Disable
-                type: string
-              bpfCTLBLogFilter:
-                description: 'BPFCTLBLogFilter specifies, what is logged by connect
-                  time load balancer when BPFLogLevel is debug. Currently has to be
-                  specified as ''all'' when BPFLogFilters is set to see CTLB logs.
-                  [Default: unset - means logs are emitted when BPFLogLevel id debug
-                  and BPFLogFilters not set.]'
-                type: string
-              bpfConnectTimeLoadBalancing:
-                description: 'BPFConnectTimeLoadBalancing when in BPF mode, controls
-                  whether Felix installs the connect-time load balancer. The connect-time
-                  load balancer is required for the host to be able to reach Kubernetes
-                  services and it improves the performance of pod-to-service connections.When
-                  set to TCP, connect time load balancing is available only for services
-                  with TCP ports. [Default: TCP]'
-                enum:
-                - TCP
-                - Enabled
-                - Disabled
-                type: string
-              bpfConnectTimeLoadBalancingEnabled:
-                description: 'BPFConnectTimeLoadBalancingEnabled when in BPF mode,
-                  controls whether Felix installs the connection-time load balancer.  The
-                  connect-time load balancer is required for the host to be able to
-                  reach Kubernetes services and it improves the performance of pod-to-service
-                  connections.  The only reason to disable it is for debugging purposes.
-                  This will be deprecated. Use BPFConnectTimeLoadBalancing [Default:
-                  true]'
-                type: boolean
-              bpfDSROptoutCIDRs:
-                description: BPFDSROptoutCIDRs is a list of CIDRs which are excluded
-                  from DSR. That is, clients in those CIDRs will accesses nodeports
-                  as if BPFExternalServiceMode was set to Tunnel.
-                items:
-                  type: string
-                type: array
-              bpfDataIfacePattern:
-                description: BPFDataIfacePattern is a regular expression that controls
-                  which interfaces Felix should attach BPF programs to in order to
-                  catch traffic to/from the network.  This needs to match the interfaces
-                  that Calico workload traffic flows over as well as any interfaces
-                  that handle incoming traffic to nodeports and services from outside
-                  the cluster.  It should not match the workload interfaces (usually
-                  named cali...).
-                type: string
-              bpfDisableGROForIfaces:
-                description: BPFDisableGROForIfaces is a regular expression that controls
-                  which interfaces Felix should disable the Generic Receive Offload
-                  [GRO] option.  It should not match the workload interfaces (usually
-                  named cali...).
-                type: string
-              bpfDisableUnprivileged:
-                description: 'BPFDisableUnprivileged, if enabled, Felix sets the kernel.unprivileged_bpf_disabled
-                  sysctl to disable unprivileged use of BPF.  This ensures that unprivileged
-                  users cannot access Calico''s BPF maps and cannot insert their own
-                  BPF programs to interfere with Calico''s. [Default: true]'
-                type: boolean
-              bpfEnabled:
-                description: 'BPFEnabled, if enabled Felix will use the BPF dataplane.
-                  [Default: false]'
-                type: boolean
-              bpfEnforceRPF:
-                description: 'BPFEnforceRPF enforce strict RPF on all host interfaces
-                  with BPF programs regardless of what is the per-interfaces or global
-                  setting. Possible values are Disabled, Strict or Loose. [Default:
-                  Loose]'
-                pattern: ^(?i)(Disabled|Strict|Loose)?$
-                type: string
-              bpfExcludeCIDRsFromNAT:
-                description: BPFExcludeCIDRsFromNAT is a list of CIDRs that are to
-                  be excluded from NAT resolution so that host can handle them. A
-                  typical usecase is node local DNS cache.
-                items:
-                  type: string
-                type: array
-              bpfExtToServiceConnmark:
-                description: 'BPFExtToServiceConnmark in BPF mode, control a 32bit
-                  mark that is set on connections from an external client to a local
-                  service. This mark allows us to control how packets of that connection
-                  are routed within the host and how is routing interpreted by RPF
-                  check. [Default: 0]'
-                type: integer
-              bpfExternalServiceMode:
-                description: 'BPFExternalServiceMode in BPF mode, controls how connections
-                  from outside the cluster to services (node ports and cluster IPs)
-                  are forwarded to remote workloads.  If set to "Tunnel" then both
-                  request and response traffic is tunneled to the remote node.  If
-                  set to "DSR", the request traffic is tunneled but the response traffic
-                  is sent directly from the remote node.  In "DSR" mode, the remote
-                  node appears to use the IP of the ingress node; this requires a
-                  permissive L2 network.  [Default: Tunnel]'
-                pattern: ^(?i)(Tunnel|DSR)?$
-                type: string
-              bpfForceTrackPacketsFromIfaces:
-                description: 'BPFForceTrackPacketsFromIfaces in BPF mode, forces traffic
-                  from these interfaces to skip Calico''s iptables NOTRACK rule, allowing
-                  traffic from those interfaces to be tracked by Linux conntrack.  Should
-                  only be used for interfaces that are not used for the Calico fabric.  For
-                  example, a docker bridge device for non-Calico-networked containers.
-                  [Default: docker+]'
-                items:
-                  type: string
-                type: array
-              bpfHostConntrackBypass:
-                description: 'BPFHostConntrackBypass Controls whether to bypass Linux
-                  conntrack in BPF mode for workloads and services. [Default: true
-                  - bypass Linux conntrack]'
-                type: boolean
-              bpfHostNetworkedNATWithoutCTLB:
-                description: 'BPFHostNetworkedNATWithoutCTLB when in BPF mode, controls
-                  whether Felix does a NAT without CTLB. This along with BPFConnectTimeLoadBalancing
-                  determines the CTLB behavior. [Default: Enabled]'
-                enum:
-                - Enabled
-                - Disabled
-                type: string
-              bpfKubeProxyEndpointSlicesEnabled:
-                description: BPFKubeProxyEndpointSlicesEnabled is deprecated and has
-                  no effect. BPF kube-proxy always accepts endpoint slices. This option
-                  will be removed in the next release.
-                type: boolean
-              bpfKubeProxyIptablesCleanupEnabled:
-                description: 'BPFKubeProxyIptablesCleanupEnabled, if enabled in BPF
-                  mode, Felix will proactively clean up the upstream Kubernetes kube-proxy''s
-                  iptables chains.  Should only be enabled if kube-proxy is not running.  [Default:
-                  true]'
-                type: boolean
-              bpfKubeProxyMinSyncPeriod:
-                description: 'BPFKubeProxyMinSyncPeriod, in BPF mode, controls the
-                  minimum time between updates to the dataplane for Felix''s embedded
-                  kube-proxy.  Lower values give reduced set-up latency.  Higher values
-                  reduce Felix CPU usage by batching up more work.  [Default: 1s]'
-                pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
-                type: string
-              bpfL3IfacePattern:
-                description: BPFL3IfacePattern is a regular expression that allows
-                  to list tunnel devices like wireguard or vxlan (i.e., L3 devices)
-                  in addition to BPFDataIfacePattern. That is, tunnel interfaces not
-                  created by Calico, that Calico workload traffic flows over as well
-                  as any interfaces that handle incoming traffic to nodeports and
-                  services from outside the cluster.
-                type: string
-              bpfLogFilters:
-                additionalProperties:
-                  type: string
-                description: "BPFLogFilters is a map of key=values where the value
-                  is a pcap filter expression and the key is an interface name with
-                  'all' denoting all interfaces, 'weps' all workload endpoints and
-                  'heps' all host endpoints. \n When specified as an env var, it accepts
-                  a comma-separated list of key=values. [Default: unset - means all
-                  debug logs are emitted]"
-                type: object
-              bpfLogLevel:
-                description: 'BPFLogLevel controls the log level of the BPF programs
-                  when in BPF dataplane mode.  One of "Off", "Info", or "Debug".  The
-                  logs are emitted to the BPF trace pipe, accessible with the command
-                  `tc exec bpf debug`. [Default: Off].'
-                pattern: ^(?i)(Off|Info|Debug)?$
-                type: string
-              bpfMapSizeConntrack:
-                description: 'BPFMapSizeConntrack sets the size for the conntrack
-                  map.  This map must be large enough to hold an entry for each active
-                  connection.  Warning: changing the size of the conntrack map can
-                  cause disruption.'
-                type: integer
-              bpfMapSizeIPSets:
-                description: BPFMapSizeIPSets sets the size for ipsets map.  The IP
-                  sets map must be large enough to hold an entry for each endpoint
-                  matched by every selector in the source/destination matches in network
-                  policy.  Selectors such as "all()" can result in large numbers of
-                  entries (one entry per endpoint in that case).
-                type: integer
-              bpfMapSizeIfState:
-                description: BPFMapSizeIfState sets the size for ifstate map.  The
-                  ifstate map must be large enough to hold an entry for each device
-                  (host + workloads) on a host.
-                type: integer
-              bpfMapSizeNATAffinity:
-                type: integer
-              bpfMapSizeNATBackend:
-                description: BPFMapSizeNATBackend sets the size for nat back end map.
-                  This is the total number of endpoints. This is mostly more than
-                  the size of the number of services.
-                type: integer
-              bpfMapSizeNATFrontend:
-                description: BPFMapSizeNATFrontend sets the size for nat front end
-                  map. FrontendMap should be large enough to hold an entry for each
-                  nodeport, external IP and each port in each service.
-                type: integer
-              bpfMapSizeRoute:
-                description: BPFMapSizeRoute sets the size for the routes map.  The
-                  routes map should be large enough to hold one entry per workload
-                  and a handful of entries per host (enough to cover its own IPs and
-                  tunnel IPs).
-                type: integer
-              bpfPSNATPorts:
-                anyOf:
-                - type: integer
-                - type: string
-                description: 'BPFPSNATPorts sets the range from which we randomly
-                  pick a port if there is a source port collision. This should be
-                  within the ephemeral range as defined by RFC 6056 (1024–65535) and
-                  preferably outside the  ephemeral ranges used by common operating
-                  systems. Linux uses 32768–60999, while others mostly use the IANA
-                  defined range 49152–65535. It is not necessarily a problem if this
-                  range overlaps with the operating systems. Both ends of the range
-                  are inclusive. [Default: 20000:29999]'
-                pattern: ^.*
-                x-kubernetes-int-or-string: true
-              bpfPolicyDebugEnabled:
-                description: BPFPolicyDebugEnabled when true, Felix records detailed
-                  information about the BPF policy programs, which can be examined
-                  with the calico-bpf command-line tool.
-                type: boolean
-              chainInsertMode:
-                description: 'ChainInsertMode controls whether Felix hooks the kernel''s
-                  top-level iptables chains by inserting a rule at the top of the
-                  chain or by appending a rule at the bottom. insert is the safe default
-                  since it prevents Calico''s rules from being bypassed. If you switch
-                  to append mode, be sure that the other rules in the chains signal
-                  acceptance by falling through to the Calico rules, otherwise the
-                  Calico policy will be bypassed. [Default: insert]'
-                pattern: ^(?i)(insert|append)?$
-                type: string
-              dataplaneDriver:
-                description: DataplaneDriver filename of the external dataplane driver
-                  to use.  Only used if UseInternalDataplaneDriver is set to false.
-                type: string
-              dataplaneWatchdogTimeout:
-                description: "DataplaneWatchdogTimeout is the readiness/liveness timeout
-                  used for Felix's (internal) dataplane driver. Increase this value
-                  if you experience spurious non-ready or non-live events when Felix
-                  is under heavy load. Decrease the value to get felix to report non-live
-                  or non-ready more quickly. [Default: 90s] \n Deprecated: replaced
-                  by the generic HealthTimeoutOverrides."
-                type: string
-              debugDisableLogDropping:
-                type: boolean
-              debugHost:
-                description: DebugHost is the host IP or hostname to bind the debug
-                  port to.  Only used if DebugPort is set. [Default:localhost]
-                type: string
-              debugMemoryProfilePath:
-                type: string
-              debugPort:
-                description: DebugPort if set, enables Felix's debug HTTP port, which
-                  allows memory and CPU profiles to be retrieved.  The debug port
-                  is not secure, it should not be exposed to the internet.
-                type: integer
-              debugSimulateCalcGraphHangAfter:
-                pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
-                type: string
-              debugSimulateDataplaneApplyDelay:
-                pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
-                type: string
-              debugSimulateDataplaneHangAfter:
-                pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
-                type: string
-              defaultEndpointToHostAction:
-                description: 'DefaultEndpointToHostAction controls what happens to
-                  traffic that goes from a workload endpoint to the host itself (after
-                  the traffic hits the endpoint egress policy). By default Calico
-                  blocks traffic from workload endpoints to the host itself with an
-                  iptables "DROP" action. If you want to allow some or all traffic
-                  from endpoint to host, set this parameter to RETURN or ACCEPT. Use
-                  RETURN if you have your own rules in the iptables "INPUT" chain;
-                  Calico will insert its rules at the top of that chain, then "RETURN"
-                  packets to the "INPUT" chain once it has completed processing workload
-                  endpoint egress policy. Use ACCEPT to unconditionally accept packets
-                  from workloads after processing workload endpoint egress policy.
-                  [Default: Drop]'
-                pattern: ^(?i)(Drop|Accept|Return)?$
-                type: string
-              deviceRouteProtocol:
-                description: This defines the route protocol added to programmed device
-                  routes, by default this will be RTPROT_BOOT when left blank.
-                type: integer
-              deviceRouteSourceAddress:
-                description: This is the IPv4 source address to use on programmed
-                  device routes. By default the source address is left blank, leaving
-                  the kernel to choose the source address used.
-                type: string
-              deviceRouteSourceAddressIPv6:
-                description: This is the IPv6 source address to use on programmed
-                  device routes. By default the source address is left blank, leaving
-                  the kernel to choose the source address used.
-                type: string
-              disableConntrackInvalidCheck:
-                type: boolean
-              endpointReportingDelay:
-                pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
-                type: string
-              endpointReportingEnabled:
-                type: boolean
-              endpointStatusPathPrefix:
-                description: "EndpointStatusPathPrefix is the path to the directory
-                  where endpoint status will be written. Endpoint status file reporting
-                  is disabled if field is left empty. \n Chosen directory should match
-                  the directory used by the CNI for PodStartupDelay. [Default: \"\"]"
-                type: string
-              externalNodesList:
-                description: ExternalNodesCIDRList is a list of CIDR's of external-non-calico-nodes
-                  which may source tunnel traffic and have the tunneled traffic be
-                  accepted at calico nodes.
-                items:
-                  type: string
-                type: array
-              failsafeInboundHostPorts:
-                description: 'FailsafeInboundHostPorts is a list of UDP/TCP ports
-                  and CIDRs that Felix will allow incoming traffic to host endpoints
-                  on irrespective of the security policy. This is useful to avoid
-                  accidentally cutting off a host with incorrect configuration. For
-                  back-compatibility, if the protocol is not specified, it defaults
-                  to "tcp". If a CIDR is not specified, it will allow traffic from
-                  all addresses. To disable all inbound host ports, use the value
-                  none. The default value allows ssh access and DHCP. [Default: tcp:22,
-                  udp:68, tcp:179, tcp:2379, tcp:2380, tcp:6443, tcp:6666, tcp:6667]'
-                items:
-                  description: ProtoPort is combination of protocol, port, and CIDR.
-                    Protocol and port must be specified.
-                  properties:
-                    net:
-                      type: string
-                    port:
-                      type: integer
-                    protocol:
-                      type: string
-                  required:
-                  - port
-                  - protocol
-                  type: object
-                type: array
-              failsafeOutboundHostPorts:
-                description: 'FailsafeOutboundHostPorts is a list of UDP/TCP ports
-                  and CIDRs that Felix will allow outgoing traffic from host endpoints
-                  to irrespective of the security policy. This is useful to avoid
-                  accidentally cutting off a host with incorrect configuration. For
-                  back-compatibility, if the protocol is not specified, it defaults
-                  to "tcp". If a CIDR is not specified, it will allow traffic from
-                  all addresses. To disable all outbound host ports, use the value
-                  none. The default value opens etcd''s standard ports to ensure that
-                  Felix does not get cut off from etcd as well as allowing DHCP and
-                  DNS. [Default: tcp:179, tcp:2379, tcp:2380, tcp:6443, tcp:6666,
-                  tcp:6667, udp:53, udp:67]'
-                items:
-                  description: ProtoPort is combination of protocol, port, and CIDR.
-                    Protocol and port must be specified.
-                  properties:
-                    net:
-                      type: string
-                    port:
-                      type: integer
-                    protocol:
-                      type: string
-                  required:
-                  - port
-                  - protocol
-                  type: object
-                type: array
-              featureDetectOverride:
-                description: FeatureDetectOverride is used to override feature detection
-                  based on auto-detected platform capabilities.  Values are specified
-                  in a comma separated list with no spaces, example; "SNATFullyRandom=true,MASQFullyRandom=false,RestoreSupportsLock=".  "true"
-                  or "false" will force the feature, empty or omitted values are auto-detected.
-                pattern: ^([a-zA-Z0-9-_]+=(true|false|),)*([a-zA-Z0-9-_]+=(true|false|))?$
-                type: string
-              featureGates:
-                description: FeatureGates is used to enable or disable tech-preview
-                  Calico features. Values are specified in a comma separated list
-                  with no spaces, example; "BPFConnectTimeLoadBalancingWorkaround=enabled,XyZ=false".
-                  This is used to enable features that are not fully production ready.
-                pattern: ^([a-zA-Z0-9-_]+=([^=]+),)*([a-zA-Z0-9-_]+=([^=]+))?$
-                type: string
-              floatingIPs:
-                description: FloatingIPs configures whether or not Felix will program
-                  non-OpenStack floating IP addresses.  (OpenStack-derived floating
-                  IPs are always programmed, regardless of this setting.)
-                enum:
-                - Enabled
-                - Disabled
-                type: string
-              genericXDPEnabled:
-                description: 'GenericXDPEnabled enables Generic XDP so network cards
-                  that don''t support XDP offload or driver modes can use XDP. This
-                  is not recommended since it doesn''t provide better performance
-                  than iptables. [Default: false]'
-                type: boolean
-              healthEnabled:
-                type: boolean
-              healthHost:
-                type: string
-              healthPort:
-                type: integer
-              healthTimeoutOverrides:
-                description: HealthTimeoutOverrides allows the internal watchdog timeouts
-                  of individual subcomponents to be overridden.  This is useful for
-                  working around "false positive" liveness timeouts that can occur
-                  in particularly stressful workloads or if CPU is constrained.  For
-                  a list of active subcomponents, see Felix's logs.
-                items:
-                  properties:
-                    name:
-                      type: string
-                    timeout:
-                      type: string
-                  required:
-                  - name
-                  - timeout
-                  type: object
-                type: array
-              interfaceExclude:
-                description: 'InterfaceExclude is a comma-separated list of interfaces
-                  that Felix should exclude when monitoring for host endpoints. The
-                  default value ensures that Felix ignores Kubernetes'' IPVS dummy
-                  interface, which is used internally by kube-proxy. If you want to
-                  exclude multiple interface names using a single value, the list
-                  supports regular expressions. For regular expressions you must wrap
-                  the value with ''/''. For example having values ''/^kube/,veth1''
-                  will exclude all interfaces that begin with ''kube'' and also the
-                  interface ''veth1''. [Default: kube-ipvs0]'
-                type: string
-              interfacePrefix:
-                description: 'InterfacePrefix is the interface name prefix that identifies
-                  workload endpoints and so distinguishes them from host endpoint
-                  interfaces. Note: in environments other than bare metal, the orchestrators
-                  configure this appropriately. For example our Kubernetes and Docker
-                  integrations set the ''cali'' value, and our OpenStack integration
-                  sets the ''tap'' value. [Default: cali]'
-                type: string
-              interfaceRefreshInterval:
-                description: InterfaceRefreshInterval is the period at which Felix
-                  rescans local interfaces to verify their state. The rescan can be
-                  disabled by setting the interval to 0.
-                pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
-                type: string
-              ipipEnabled:
-                description: 'IPIPEnabled overrides whether Felix should configure
-                  an IPIP interface on the host. Optional as Felix determines this
-                  based on the existing IP pools. [Default: nil (unset)]'
-                type: boolean
-              ipipMTU:
-                description: 'IPIPMTU is the MTU to set on the tunnel device. See
-                  Configuring MTU [Default: 1440]'
-                type: integer
-              ipsetsRefreshInterval:
-                description: 'IpsetsRefreshInterval is the period at which Felix re-checks
-                  all iptables state to ensure that no other process has accidentally
-                  broken Calico''s rules. Set to 0 to disable iptables refresh. [Default:
-                  90s]'
-                pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
-                type: string
-              iptablesBackend:
-                description: IptablesBackend specifies which backend of iptables will
-                  be used. The default is Auto.
-                pattern: ^(?i)(Auto|FelixConfiguration|FelixConfigurationList|Legacy|NFT)?$
-                type: string
-              iptablesFilterAllowAction:
-                pattern: ^(?i)(Accept|Return)?$
-                type: string
-              iptablesFilterDenyAction:
-                description: IptablesFilterDenyAction controls what happens to traffic
-                  that is denied by network policy. By default Calico blocks traffic
-                  with an iptables "DROP" action. If you want to use "REJECT" action
-                  instead you can configure it in here.
-                pattern: ^(?i)(Drop|Reject)?$
-                type: string
-              iptablesLockFilePath:
-                description: 'IptablesLockFilePath is the location of the iptables
-                  lock file. You may need to change this if the lock file is not in
-                  its standard location (for example if you have mapped it into Felix''s
-                  container at a different path). [Default: /run/xtables.lock]'
-                type: string
-              iptablesLockProbeInterval:
-                description: 'IptablesLockProbeInterval is the time that Felix will
-                  wait between attempts to acquire the iptables lock if it is not
-                  available. Lower values make Felix more responsive when the lock
-                  is contended, but use more CPU. [Default: 50ms]'
-                pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
-                type: string
-              iptablesLockTimeout:
-                description: 'IptablesLockTimeout is the time that Felix will wait
-                  for the iptables lock, or 0, to disable. To use this feature, Felix
-                  must share the iptables lock file with all other processes that
-                  also take the lock. When running Felix inside a container, this
-                  requires the /run directory of the host to be mounted into the calico/node
-                  or calico/felix container. [Default: 0s disabled]'
-                pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
-                type: string
-              iptablesMangleAllowAction:
-                pattern: ^(?i)(Accept|Return)?$
-                type: string
-              iptablesMarkMask:
-                description: 'IptablesMarkMask is the mask that Felix selects its
-                  IPTables Mark bits from. Should be a 32 bit hexadecimal number with
-                  at least 8 bits set, none of which clash with any other mark bits
-                  in use on the system. [Default: 0xff000000]'
-                format: int32
-                type: integer
-              iptablesNATOutgoingInterfaceFilter:
-                type: string
-              iptablesPostWriteCheckInterval:
-                description: 'IptablesPostWriteCheckInterval is the period after Felix
-                  has done a write to the dataplane that it schedules an extra read
-                  back in order to check the write was not clobbered by another process.
-                  This should only occur if another application on the system doesn''t
-                  respect the iptables lock. [Default: 1s]'
-                pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
-                type: string
-              iptablesRefreshInterval:
-                description: 'IptablesRefreshInterval is the period at which Felix
-                  re-checks the IP sets in the dataplane to ensure that no other process
-                  has accidentally broken Calico''s rules. Set to 0 to disable IP
-                  sets refresh. Note: the default for this value is lower than the
-                  other refresh intervals as a workaround for a Linux kernel bug that
-                  was fixed in kernel version 4.11. If you are using v4.11 or greater
-                  you may want to set this to, a higher value to reduce Felix CPU
-                  usage. [Default: 10s]'
-                pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
-                type: string
-              ipv6Support:
-                description: IPv6Support controls whether Felix enables support for
-                  IPv6 (if supported by the in-use dataplane).
-                type: boolean
-              kubeNodePortRanges:
-                description: 'KubeNodePortRanges holds list of port ranges used for
-                  service node ports. Only used if felix detects kube-proxy running
-                  in ipvs mode. Felix uses these ranges to separate host and workload
-                  traffic. [Default: 30000:32767].'
-                items:
-                  anyOf:
-                  - type: integer
-                  - type: string
-                  pattern: ^.*
-                  x-kubernetes-int-or-string: true
-                type: array
-              logDebugFilenameRegex:
-                description: LogDebugFilenameRegex controls which source code files
-                  have their Debug log output included in the logs. Only logs from
-                  files with names that match the given regular expression are included.  The
-                  filter only applies to Debug level logs.
-                type: string
-              logFilePath:
-                description: 'LogFilePath is the full path to the Felix log. Set to
-                  none to disable file logging. [Default: /var/log/calico/felix.log]'
-                type: string
-              logPrefix:
-                description: 'LogPrefix is the log prefix that Felix uses when rendering
-                  LOG rules. [Default: calico-packet]'
-                type: string
-              logSeverityFile:
-                description: 'LogSeverityFile is the log severity above which logs
-                  are sent to the log file. [Default: Info]'
-                pattern: ^(?i)(Debug|Info|Warning|Error|Fatal)?$
-                type: string
-              logSeverityScreen:
-                description: 'LogSeverityScreen is the log severity above which logs
-                  are sent to the stdout. [Default: Info]'
-                pattern: ^(?i)(Debug|Info|Warning|Error|Fatal)?$
-                type: string
-              logSeveritySys:
-                description: 'LogSeveritySys is the log severity above which logs
-                  are sent to the syslog. Set to None for no logging to syslog. [Default:
-                  Info]'
-                pattern: ^(?i)(Debug|Info|Warning|Error|Fatal)?$
-                type: string
-              maxIpsetSize:
-                type: integer
-              metadataAddr:
-                description: 'MetadataAddr is the IP address or domain name of the
-                  server that can answer VM queries for cloud-init metadata. In OpenStack,
-                  this corresponds to the machine running nova-api (or in Ubuntu,
-                  nova-api-metadata). A value of none (case-insensitive) means that
-                  Felix should not set up any NAT rule for the metadata path. [Default:
-                  127.0.0.1]'
-                type: string
-              metadataPort:
-                description: 'MetadataPort is the port of the metadata server. This,
-                  combined with global.MetadataAddr (if not ''None''), is used to
-                  set up a NAT rule, from 169.254.169.254:80 to MetadataAddr:MetadataPort.
-                  In most cases this should not need to be changed [Default: 8775].'
-                type: integer
-              mtuIfacePattern:
-                description: MTUIfacePattern is a regular expression that controls
-                  which interfaces Felix should scan in order to calculate the host's
-                  MTU. This should not match workload interfaces (usually named cali...).
-                type: string
-              natOutgoingAddress:
-                description: NATOutgoingAddress specifies an address to use when performing
-                  source NAT for traffic in a natOutgoing pool that is leaving the
-                  network. By default the address used is an address on the interface
-                  the traffic is leaving on (ie it uses the iptables MASQUERADE target)
-                type: string
-              natPortRange:
-                anyOf:
-                - type: integer
-                - type: string
-                description: NATPortRange specifies the range of ports that is used
-                  for port mapping when doing outgoing NAT. When unset the default
-                  behavior of the network stack is used.
-                pattern: ^.*
-                x-kubernetes-int-or-string: true
-              netlinkTimeout:
-                pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
-                type: string
-              openstackRegion:
-                description: 'OpenstackRegion is the name of the region that a particular
-                  Felix belongs to. In a multi-region Calico/OpenStack deployment,
-                  this must be configured somehow for each Felix (here in the datamodel,
-                  or in felix.cfg or the environment on each compute node), and must
-                  match the [calico] openstack_region value configured in neutron.conf
-                  on each node. [Default: Empty]'
-                type: string
-              policySyncPathPrefix:
-                description: 'PolicySyncPathPrefix is used to by Felix to communicate
-                  policy changes to external services, like Application layer policy.
-                  [Default: Empty]'
-                type: string
-              prometheusGoMetricsEnabled:
-                description: 'PrometheusGoMetricsEnabled disables Go runtime metrics
-                  collection, which the Prometheus client does by default, when set
-                  to false. This reduces the number of metrics reported, reducing
-                  Prometheus load. [Default: true]'
-                type: boolean
-              prometheusMetricsEnabled:
-                description: 'PrometheusMetricsEnabled enables the Prometheus metrics
-                  server in Felix if set to true. [Default: false]'
-                type: boolean
-              prometheusMetricsHost:
-                description: 'PrometheusMetricsHost is the host that the Prometheus
-                  metrics server should bind to. [Default: empty]'
-                type: string
-              prometheusMetricsPort:
-                description: 'PrometheusMetricsPort is the TCP port that the Prometheus
-                  metrics server should bind to. [Default: 9091]'
-                type: integer
-              prometheusProcessMetricsEnabled:
-                description: 'PrometheusProcessMetricsEnabled disables process metrics
-                  collection, which the Prometheus client does by default, when set
-                  to false. This reduces the number of metrics reported, reducing
-                  Prometheus load. [Default: true]'
-                type: boolean
-              prometheusWireGuardMetricsEnabled:
-                description: 'PrometheusWireGuardMetricsEnabled disables wireguard
-                  metrics collection, which the Prometheus client does by default,
-                  when set to false. This reduces the number of metrics reported,
-                  reducing Prometheus load. [Default: true]'
-                type: boolean
-              removeExternalRoutes:
-                description: Whether or not to remove device routes that have not
-                  been programmed by Felix. Disabling this will allow external applications
-                  to also add device routes. This is enabled by default which means
-                  we will remove externally added routes.
-                type: boolean
-              reportingInterval:
-                description: 'ReportingInterval is the interval at which Felix reports
-                  its status into the datastore or 0 to disable. Must be non-zero
-                  in OpenStack deployments. [Default: 30s]'
-                pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
-                type: string
-              reportingTTL:
-                description: 'ReportingTTL is the time-to-live setting for process-wide
-                  status reports. [Default: 90s]'
-                pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
-                type: string
-              routeRefreshInterval:
-                description: 'RouteRefreshInterval is the period at which Felix re-checks
-                  the routes in the dataplane to ensure that no other process has
-                  accidentally broken Calico''s rules. Set to 0 to disable route refresh.
-                  [Default: 90s]'
-                pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
-                type: string
-              routeSource:
-                description: 'RouteSource configures where Felix gets its routing
-                  information. - WorkloadIPs: use workload endpoints to construct
-                  routes. - CalicoIPAM: the default - use IPAM data to construct routes.'
-                pattern: ^(?i)(WorkloadIPs|CalicoIPAM)?$
-                type: string
-              routeSyncDisabled:
-                description: RouteSyncDisabled will disable all operations performed
-                  on the route table. Set to true to run in network-policy mode only.
-                type: boolean
-              routeTableRange:
-                description: Deprecated in favor of RouteTableRanges. Calico programs
-                  additional Linux route tables for various purposes. RouteTableRange
-                  specifies the indices of the route tables that Calico should use.
-                properties:
-                  max:
-                    type: integer
-                  min:
-                    type: integer
-                required:
-                - max
-                - min
-                type: object
-              routeTableRanges:
-                description: Calico programs additional Linux route tables for various
-                  purposes. RouteTableRanges specifies a set of table index ranges
-                  that Calico should use. Deprecates`RouteTableRange`, overrides `RouteTableRange`.
-                items:
-                  properties:
-                    max:
-                      type: integer
-                    min:
-                      type: integer
-                  required:
-                  - max
-                  - min
-                  type: object
-                type: array
-              serviceLoopPrevention:
-                description: 'When service IP advertisement is enabled, prevent routing
-                  loops to service IPs that are not in use, by dropping or rejecting
-                  packets that do not get DNAT''d by kube-proxy. Unless set to "Disabled",
-                  in which case such routing loops continue to be allowed. [Default:
-                  Drop]'
-                pattern: ^(?i)(Drop|Reject|Disabled)?$
-                type: string
-              sidecarAccelerationEnabled:
-                description: 'SidecarAccelerationEnabled enables experimental sidecar
-                  acceleration [Default: false]'
-                type: boolean
-              usageReportingEnabled:
-                description: 'UsageReportingEnabled reports anonymous Calico version
-                  number and cluster size to projectcalico.org. Logs warnings returned
-                  by the usage server. For example, if a significant security vulnerability
-                  has been discovered in the version of Calico being used. [Default:
-                  true]'
-                type: boolean
-              usageReportingInitialDelay:
-                description: 'UsageReportingInitialDelay controls the minimum delay
-                  before Felix makes a report. [Default: 300s]'
-                pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
-                type: string
-              usageReportingInterval:
-                description: 'UsageReportingInterval controls the interval at which
-                  Felix makes reports. [Default: 86400s]'
-                pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
-                type: string
-              useInternalDataplaneDriver:
-                description: UseInternalDataplaneDriver, if true, Felix will use its
-                  internal dataplane programming logic.  If false, it will launch
-                  an external dataplane driver and communicate with it over protobuf.
-                type: boolean
-              vxlanEnabled:
-                description: 'VXLANEnabled overrides whether Felix should create the
-                  VXLAN tunnel device for IPv4 VXLAN networking. Optional as Felix
-                  determines this based on the existing IP pools. [Default: nil (unset)]'
-                type: boolean
-              vxlanMTU:
-                description: 'VXLANMTU is the MTU to set on the IPv4 VXLAN tunnel
-                  device. See Configuring MTU [Default: 1410]'
-                type: integer
-              vxlanMTUV6:
-                description: 'VXLANMTUV6 is the MTU to set on the IPv6 VXLAN tunnel
-                  device. See Configuring MTU [Default: 1390]'
-                type: integer
-              vxlanPort:
-                type: integer
-              vxlanVNI:
-                type: integer
-              windowsManageFirewallRules:
-                description: 'WindowsManageFirewallRules configures whether or not
-                  Felix will program Windows Firewall rules. (to allow inbound access
-                  to its own metrics ports) [Default: Disabled]'
-                enum:
-                - Enabled
-                - Disabled
-                type: string
-              wireguardEnabled:
-                description: 'WireguardEnabled controls whether Wireguard is enabled
-                  for IPv4 (encapsulating IPv4 traffic over an IPv4 underlay network).
-                  [Default: false]'
-                type: boolean
-              wireguardEnabledV6:
-                description: 'WireguardEnabledV6 controls whether Wireguard is enabled
-                  for IPv6 (encapsulating IPv6 traffic over an IPv6 underlay network).
-                  [Default: false]'
-                type: boolean
-              wireguardHostEncryptionEnabled:
-                description: 'WireguardHostEncryptionEnabled controls whether Wireguard
-                  host-to-host encryption is enabled. [Default: false]'
-                type: boolean
-              wireguardInterfaceName:
-                description: 'WireguardInterfaceName specifies the name to use for
-                  the IPv4 Wireguard interface. [Default: wireguard.cali]'
-                type: string
-              wireguardInterfaceNameV6:
-                description: 'WireguardInterfaceNameV6 specifies the name to use for
-                  the IPv6 Wireguard interface. [Default: wg-v6.cali]'
-                type: string
-              wireguardKeepAlive:
-                description: 'WireguardKeepAlive controls Wireguard PersistentKeepalive
-                  option. Set 0 to disable. [Default: 0]'
-                pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
-                type: string
-              wireguardListeningPort:
-                description: 'WireguardListeningPort controls the listening port used
-                  by IPv4 Wireguard. [Default: 51820]'
-                type: integer
-              wireguardListeningPortV6:
-                description: 'WireguardListeningPortV6 controls the listening port
-                  used by IPv6 Wireguard. [Default: 51821]'
-                type: integer
-              wireguardMTU:
-                description: 'WireguardMTU controls the MTU on the IPv4 Wireguard
-                  interface. See Configuring MTU [Default: 1440]'
-                type: integer
-              wireguardMTUV6:
-                description: 'WireguardMTUV6 controls the MTU on the IPv6 Wireguard
-                  interface. See Configuring MTU [Default: 1420]'
-                type: integer
-              wireguardRoutingRulePriority:
-                description: 'WireguardRoutingRulePriority controls the priority value
-                  to use for the Wireguard routing rule. [Default: 99]'
-                type: integer
-              wireguardThreadingEnabled:
-                description: 'WireguardThreadingEnabled controls whether Wireguard
-                  has NAPI threading enabled. [Default: false]'
-                type: boolean
-              workloadSourceSpoofing:
-                description: WorkloadSourceSpoofing controls whether pods can use
-                  the allowedSourcePrefixes annotation to send traffic with a source
-                  IP address that is not theirs. This is disabled by default. When
-                  set to "Any", pods can request any prefix.
-                pattern: ^(?i)(Disabled|Any)?$
-                type: string
-              xdpEnabled:
-                description: 'XDPEnabled enables XDP acceleration for suitable untracked
-                  incoming deny rules. [Default: true]'
-                type: boolean
-              xdpRefreshInterval:
-                description: 'XDPRefreshInterval is the period at which Felix re-checks
-                  all XDP state to ensure that no other process has accidentally broken
-                  Calico''s BPF maps or attached programs. Set to 0 to disable XDP
-                  refresh. [Default: 90s]'
-                pattern: ^([0-9]+(\\.[0-9]+)?(ms|s|m|h))*$
-                type: string
-            type: object
-        type: object
-    served: true
-    storage: true
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: []
-  storedVersions: []
----
-# Source: calico/templates/kdd-crds.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  name: globalnetworkpolicies.crd.projectcalico.org
-spec:
-  group: crd.projectcalico.org
-  names:
-    kind: GlobalNetworkPolicy
-    listKind: GlobalNetworkPolicyList
-    plural: globalnetworkpolicies
-    singular: globalnetworkpolicy
-  preserveUnknownFields: false
-  scope: Cluster
-  versions:
-  - name: v1
-    schema:
-      openAPIV3Schema:
-        properties:
-          apiVersion:
-            description: 'APIVersion defines the versioned schema of this representation
-              of an object. Servers should convert recognized schemas to the latest
-              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
-            type: string
-          kind:
-            description: 'Kind is a string value representing the REST resource this
-              object represents. Servers may infer this from the endpoint the client
-              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
-            type: string
-          metadata:
-            type: object
-          spec:
-            properties:
-              applyOnForward:
-                description: ApplyOnForward indicates to apply the rules in this policy
-                  on forward traffic.
-                type: boolean
-              doNotTrack:
-                description: DoNotTrack indicates whether packets matched by the rules
-                  in this policy should go through the data plane's connection tracking,
-                  such as Linux conntrack.  If True, the rules in this policy are
-                  applied before any data plane connection tracking, and packets allowed
-                  by this policy are marked as not to be tracked.
-                type: boolean
-              egress:
-                description: The ordered set of egress rules.  Each rule contains
-                  a set of packet match criteria and a corresponding action to apply.
-                items:
-                  description: "A Rule encapsulates a set of match criteria and an
-                    action.  Both selector-based security Policy and security Profiles
-                    reference rules - separated out as a list of rules for both ingress
-                    and egress packet matching. \n Each positive match criteria has
-                    a negated version, prefixed with \"Not\". All the match criteria
-                    within a rule must be satisfied for a packet to match. A single
-                    rule can contain the positive and negative version of a match
-                    and both must be satisfied for the rule to match."
-                  properties:
-                    action:
-                      type: string
-                    destination:
-                      description: Destination contains the match criteria that apply
-                        to destination entity.
-                      properties:
-                        namespaceSelector:
-                          description: "NamespaceSelector is an optional field that
-                            contains a selector expression. Only traffic that originates
-                            from (or terminates at) endpoints within the selected
-                            namespaces will be matched. When both NamespaceSelector
-                            and another selector are defined on the same rule, then
-                            only workload endpoints that are matched by both selectors
-                            will be selected by the rule. \n For NetworkPolicy, an
-                            empty NamespaceSelector implies that the Selector is limited
-                            to selecting only workload endpoints in the same namespace
-                            as the NetworkPolicy. \n For NetworkPolicy, `global()`
-                            NamespaceSelector implies that the Selector is limited
-                            to selecting only GlobalNetworkSet or HostEndpoint. \n
-                            For GlobalNetworkPolicy, an empty NamespaceSelector implies
-                            the Selector applies to workload endpoints across all
-                            namespaces."
-                          type: string
-                        nets:
-                          description: Nets is an optional field that restricts the
-                            rule to only apply to traffic that originates from (or
-                            terminates at) IP addresses in any of the given subnets.
-                          items:
-                            type: string
-                          type: array
-                        notNets:
-                          description: NotNets is the negated version of the Nets
-                            field.
-                          items:
-                            type: string
-                          type: array
-                        notPorts:
-                          description: NotPorts is the negated version of the Ports
-                            field. Since only some protocols have ports, if any ports
-                            are specified it requires the Protocol match in the Rule
-                            to be set to "TCP" or "UDP".
-                          items:
-                            anyOf:
-                            - type: integer
-                            - type: string
-                            pattern: ^.*
-                            x-kubernetes-int-or-string: true
-                          type: array
-                        notSelector:
-                          description: NotSelector is the negated version of the Selector
-                            field.  See Selector field for subtleties with negated
-                            selectors.
-                          type: string
-                        ports:
-                          description: "Ports is an optional field that restricts
-                            the rule to only apply to traffic that has a source (destination)
-                            port that matches one of these ranges/values. This value
-                            is a list of integers or strings that represent ranges
-                            of ports. \n Since only some protocols have ports, if
-                            any ports are specified it requires the Protocol match
-                            in the Rule to be set to \"TCP\" or \"UDP\"."
-                          items:
-                            anyOf:
-                            - type: integer
-                            - type: string
-                            pattern: ^.*
-                            x-kubernetes-int-or-string: true
-                          type: array
-                        selector:
-                          description: "Selector is an optional field that contains
-                            a selector expression (see Policy for sample syntax).
-                            \ Only traffic that originates from (terminates at) endpoints
-                            matching the selector will be matched. \n Note that: in
-                            addition to the negated version of the Selector (see NotSelector
-                            below), the selector expression syntax itself supports
-                            negation.  The two types of negation are subtly different.
-                            One negates the set of matched endpoints, the other negates
-                            the whole match: \n \tSelector = \"!has(my_label)\" matches
-                            packets that are from other Calico-controlled \tendpoints
-                            that do not have the label \"my_label\". \n \tNotSelector
-                            = \"has(my_label)\" matches packets that are not from
-                            Calico-controlled \tendpoints that do have the label \"my_label\".
-                            \n The effect is that the latter will accept packets from
-                            non-Calico sources whereas the former is limited to packets
-                            from Calico-controlled endpoints."
-                          type: string
-                        serviceAccounts:
-                          description: ServiceAccounts is an optional field that restricts
-                            the rule to only apply to traffic that originates from
-                            (or terminates at) a pod running as a matching service
-                            account.
-                          properties:
-                            names:
-                              description: Names is an optional field that restricts
-                                the rule to only apply to traffic that originates
-                                from (or terminates at) a pod running as a service
-                                account whose name is in the list.
-                              items:
-                                type: string
-                              type: array
-                            selector:
-                              description: Selector is an optional field that restricts
-                                the rule to only apply to traffic that originates
-                                from (or terminates at) a pod running as a service
-                                account that matches the given label selector. If
-                                both Names and Selector are specified then they are
-                                AND'ed.
-                              type: string
-                          type: object
-                        services:
-                          description: "Services is an optional field that contains
-                            options for matching Kubernetes Services. If specified,
-                            only traffic that originates from or terminates at endpoints
-                            within the selected service(s) will be matched, and only
-                            to/from each endpoint's port. \n Services cannot be specified
-                            on the same rule as Selector, NotSelector, NamespaceSelector,
-                            Nets, NotNets or ServiceAccounts. \n Ports and NotPorts
-                            can only be specified with Services on ingress rules."
-                          properties:
-                            name:
-                              description: Name specifies the name of a Kubernetes
-                                Service to match.
-                              type: string
-                            namespace:
-                              description: Namespace specifies the namespace of the
-                                given Service. If left empty, the rule will match
-                                within this policy's namespace.
-                              type: string
-                          type: object
-                      type: object
-                    http:
-                      description: HTTP contains match criteria that apply to HTTP
-                        requests.
-                      properties:
-                        methods:
-                          description: Methods is an optional field that restricts
-                            the rule to apply only to HTTP requests that use one of
-                            the listed HTTP Methods (e.g. GET, PUT, etc.) Multiple
-                            methods are OR'd together.
-                          items:
-                            type: string
-                          type: array
-                        paths:
-                          description: 'Paths is an optional field that restricts
-                            the rule to apply to HTTP requests that use one of the
-                            listed HTTP Paths. Multiple paths are OR''d together.
-                            e.g: - exact: /foo - prefix: /bar NOTE: Each entry may
-                            ONLY specify either a `exact` or a `prefix` match. The
-                            validator will check for it.'
-                          items:
-                            description: 'HTTPPath specifies an HTTP path to match.
-                              It may be either of the form: exact: <path>: which matches
-                              the path exactly or prefix: <path-prefix>: which matches
-                              the path prefix'
-                            properties:
-                              exact:
-                                type: string
-                              prefix:
-                                type: string
-                            type: object
-                          type: array
-                      type: object
-                    icmp:
-                      description: ICMP is an optional field that restricts the rule
-                        to apply to a specific type and code of ICMP traffic.  This
-                        should only be specified if the Protocol field is set to "ICMP"
-                        or "ICMPv6".
-                      properties:
-                        code:
-                          description: Match on a specific ICMP code.  If specified,
-                            the Type value must also be specified. This is a technical
-                            limitation imposed by the kernel's iptables firewall,
-                            which Calico uses to enforce the rule.
-                          type: integer
-                        type:
-                          description: Match on a specific ICMP type.  For example
-                            a value of 8 refers to ICMP Echo Request (i.e. pings).
-                          type: integer
-                      type: object
-                    ipVersion:
-                      description: IPVersion is an optional field that restricts the
-                        rule to only match a specific IP version.
-                      type: integer
-                    metadata:
-                      description: Metadata contains additional information for this
-                        rule
-                      properties:
-                        annotations:
-                          additionalProperties:
-                            type: string
-                          description: Annotations is a set of key value pairs that
-                            give extra information about the rule
-                          type: object
-                      type: object
-                    notICMP:
-                      description: NotICMP is the negated version of the ICMP field.
-                      properties:
-                        code:
-                          description: Match on a specific ICMP code.  If specified,
-                            the Type value must also be specified. This is a technical
-                            limitation imposed by the kernel's iptables firewall,
-                            which Calico uses to enforce the rule.
-                          type: integer
-                        type:
-                          description: Match on a specific ICMP type.  For example
-                            a value of 8 refers to ICMP Echo Request (i.e. pings).
-                          type: integer
-                      type: object
-                    notProtocol:
-                      anyOf:
-                      - type: integer
-                      - type: string
-                      description: NotProtocol is the negated version of the Protocol
-                        field.
-                      pattern: ^.*
-                      x-kubernetes-int-or-string: true
-                    protocol:
-                      anyOf:
-                      - type: integer
-                      - type: string
-                      description: "Protocol is an optional field that restricts the
-                        rule to only apply to traffic of a specific IP protocol. Required
-                        if any of the EntityRules contain Ports (because ports only
-                        apply to certain protocols). \n Must be one of these string
-                        values: \"TCP\", \"UDP\", \"ICMP\", \"ICMPv6\", \"SCTP\",
-                        \"UDPLite\" or an integer in the range 1-255."
-                      pattern: ^.*
-                      x-kubernetes-int-or-string: true
-                    source:
-                      description: Source contains the match criteria that apply to
-                        source entity.
-                      properties:
-                        namespaceSelector:
-                          description: "NamespaceSelector is an optional field that
-                            contains a selector expression. Only traffic that originates
-                            from (or terminates at) endpoints within the selected
-                            namespaces will be matched. When both NamespaceSelector
-                            and another selector are defined on the same rule, then
-                            only workload endpoints that are matched by both selectors
-                            will be selected by the rule. \n For NetworkPolicy, an
-                            empty NamespaceSelector implies that the Selector is limited
-                            to selecting only workload endpoints in the same namespace
-                            as the NetworkPolicy. \n For NetworkPolicy, `global()`
-                            NamespaceSelector implies that the Selector is limited
-                            to selecting only GlobalNetworkSet or HostEndpoint. \n
-                            For GlobalNetworkPolicy, an empty NamespaceSelector implies
-                            the Selector applies to workload endpoints across all
-                            namespaces."
-                          type: string
-                        nets:
-                          description: Nets is an optional field that restricts the
-                            rule to only apply to traffic that originates from (or
-                            terminates at) IP addresses in any of the given subnets.
-                          items:
-                            type: string
-                          type: array
-                        notNets:
-                          description: NotNets is the negated version of the Nets
-                            field.
-                          items:
-                            type: string
-                          type: array
-                        notPorts:
-                          description: NotPorts is the negated version of the Ports
-                            field. Since only some protocols have ports, if any ports
-                            are specified it requires the Protocol match in the Rule
-                            to be set to "TCP" or "UDP".
-                          items:
-                            anyOf:
-                            - type: integer
-                            - type: string
-                            pattern: ^.*
-                            x-kubernetes-int-or-string: true
-                          type: array
-                        notSelector:
-                          description: NotSelector is the negated version of the Selector
-                            field.  See Selector field for subtleties with negated
-                            selectors.
-                          type: string
-                        ports:
-                          description: "Ports is an optional field that restricts
-                            the rule to only apply to traffic that has a source (destination)
-                            port that matches one of these ranges/values. This value
-                            is a list of integers or strings that represent ranges
-                            of ports. \n Since only some protocols have ports, if
-                            any ports are specified it requires the Protocol match
-                            in the Rule to be set to \"TCP\" or \"UDP\"."
-                          items:
-                            anyOf:
-                            - type: integer
-                            - type: string
-                            pattern: ^.*
-                            x-kubernetes-int-or-string: true
-                          type: array
-                        selector:
-                          description: "Selector is an optional field that contains
-                            a selector expression (see Policy for sample syntax).
-                            \ Only traffic that originates from (terminates at) endpoints
-                            matching the selector will be matched. \n Note that: in
-                            addition to the negated version of the Selector (see NotSelector
-                            below), the selector expression syntax itself supports
-                            negation.  The two types of negation are subtly different.
-                            One negates the set of matched endpoints, the other negates
-                            the whole match: \n \tSelector = \"!has(my_label)\" matches
-                            packets that are from other Calico-controlled \tendpoints
-                            that do not have the label \"my_label\". \n \tNotSelector
-                            = \"has(my_label)\" matches packets that are not from
-                            Calico-controlled \tendpoints that do have the label \"my_label\".
-                            \n The effect is that the latter will accept packets from
-                            non-Calico sources whereas the former is limited to packets
-                            from Calico-controlled endpoints."
-                          type: string
-                        serviceAccounts:
-                          description: ServiceAccounts is an optional field that restricts
-                            the rule to only apply to traffic that originates from
-                            (or terminates at) a pod running as a matching service
-                            account.
-                          properties:
-                            names:
-                              description: Names is an optional field that restricts
-                                the rule to only apply to traffic that originates
-                                from (or terminates at) a pod running as a service
-                                account whose name is in the list.
-                              items:
-                                type: string
-                              type: array
-                            selector:
-                              description: Selector is an optional field that restricts
-                                the rule to only apply to traffic that originates
-                                from (or terminates at) a pod running as a service
-                                account that matches the given label selector. If
-                                both Names and Selector are specified then they are
-                                AND'ed.
-                              type: string
-                          type: object
-                        services:
-                          description: "Services is an optional field that contains
-                            options for matching Kubernetes Services. If specified,
-                            only traffic that originates from or terminates at endpoints
-                            within the selected service(s) will be matched, and only
-                            to/from each endpoint's port. \n Services cannot be specified
-                            on the same rule as Selector, NotSelector, NamespaceSelector,
-                            Nets, NotNets or ServiceAccounts. \n Ports and NotPorts
-                            can only be specified with Services on ingress rules."
-                          properties:
-                            name:
-                              description: Name specifies the name of a Kubernetes
-                                Service to match.
-                              type: string
-                            namespace:
-                              description: Namespace specifies the namespace of the
-                                given Service. If left empty, the rule will match
-                                within this policy's namespace.
-                              type: string
-                          type: object
-                      type: object
-                  required:
-                  - action
-                  type: object
-                type: array
-              ingress:
-                description: The ordered set of ingress rules.  Each rule contains
-                  a set of packet match criteria and a corresponding action to apply.
-                items:
-                  description: "A Rule encapsulates a set of match criteria and an
-                    action.  Both selector-based security Policy and security Profiles
-                    reference rules - separated out as a list of rules for both ingress
-                    and egress packet matching. \n Each positive match criteria has
-                    a negated version, prefixed with \"Not\". All the match criteria
-                    within a rule must be satisfied for a packet to match. A single
-                    rule can contain the positive and negative version of a match
-                    and both must be satisfied for the rule to match."
-                  properties:
-                    action:
-                      type: string
-                    destination:
-                      description: Destination contains the match criteria that apply
-                        to destination entity.
-                      properties:
-                        namespaceSelector:
-                          description: "NamespaceSelector is an optional field that
-                            contains a selector expression. Only traffic that originates
-                            from (or terminates at) endpoints within the selected
-                            namespaces will be matched. When both NamespaceSelector
-                            and another selector are defined on the same rule, then
-                            only workload endpoints that are matched by both selectors
-                            will be selected by the rule. \n For NetworkPolicy, an
-                            empty NamespaceSelector implies that the Selector is limited
-                            to selecting only workload endpoints in the same namespace
-                            as the NetworkPolicy. \n For NetworkPolicy, `global()`
-                            NamespaceSelector implies that the Selector is limited
-                            to selecting only GlobalNetworkSet or HostEndpoint. \n
-                            For GlobalNetworkPolicy, an empty NamespaceSelector implies
-                            the Selector applies to workload endpoints across all
-                            namespaces."
-                          type: string
-                        nets:
-                          description: Nets is an optional field that restricts the
-                            rule to only apply to traffic that originates from (or
-                            terminates at) IP addresses in any of the given subnets.
-                          items:
-                            type: string
-                          type: array
-                        notNets:
-                          description: NotNets is the negated version of the Nets
-                            field.
-                          items:
-                            type: string
-                          type: array
-                        notPorts:
-                          description: NotPorts is the negated version of the Ports
-                            field. Since only some protocols have ports, if any ports
-                            are specified it requires the Protocol match in the Rule
-                            to be set to "TCP" or "UDP".
-                          items:
-                            anyOf:
-                            - type: integer
-                            - type: string
-                            pattern: ^.*
-                            x-kubernetes-int-or-string: true
-                          type: array
-                        notSelector:
-                          description: NotSelector is the negated version of the Selector
-                            field.  See Selector field for subtleties with negated
-                            selectors.
-                          type: string
-                        ports:
-                          description: "Ports is an optional field that restricts
-                            the rule to only apply to traffic that has a source (destination)
-                            port that matches one of these ranges/values. This value
-                            is a list of integers or strings that represent ranges
-                            of ports. \n Since only some protocols have ports, if
-                            any ports are specified it requires the Protocol match
-                            in the Rule to be set to \"TCP\" or \"UDP\"."
-                          items:
-                            anyOf:
-                            - type: integer
-                            - type: string
-                            pattern: ^.*
-                            x-kubernetes-int-or-string: true
-                          type: array
-                        selector:
-                          description: "Selector is an optional field that contains
-                            a selector expression (see Policy for sample syntax).
-                            \ Only traffic that originates from (terminates at) endpoints
-                            matching the selector will be matched. \n Note that: in
-                            addition to the negated version of the Selector (see NotSelector
-                            below), the selector expression syntax itself supports
-                            negation.  The two types of negation are subtly different.
-                            One negates the set of matched endpoints, the other negates
-                            the whole match: \n \tSelector = \"!has(my_label)\" matches
-                            packets that are from other Calico-controlled \tendpoints
-                            that do not have the label \"my_label\". \n \tNotSelector
-                            = \"has(my_label)\" matches packets that are not from
-                            Calico-controlled \tendpoints that do have the label \"my_label\".
-                            \n The effect is that the latter will accept packets from
-                            non-Calico sources whereas the former is limited to packets
-                            from Calico-controlled endpoints."
-                          type: string
-                        serviceAccounts:
-                          description: ServiceAccounts is an optional field that restricts
-                            the rule to only apply to traffic that originates from
-                            (or terminates at) a pod running as a matching service
-                            account.
-                          properties:
-                            names:
-                              description: Names is an optional field that restricts
-                                the rule to only apply to traffic that originates
-                                from (or terminates at) a pod running as a service
-                                account whose name is in the list.
-                              items:
-                                type: string
-                              type: array
-                            selector:
-                              description: Selector is an optional field that restricts
-                                the rule to only apply to traffic that originates
-                                from (or terminates at) a pod running as a service
-                                account that matches the given label selector. If
-                                both Names and Selector are specified then they are
-                                AND'ed.
-                              type: string
-                          type: object
-                        services:
-                          description: "Services is an optional field that contains
-                            options for matching Kubernetes Services. If specified,
-                            only traffic that originates from or terminates at endpoints
-                            within the selected service(s) will be matched, and only
-                            to/from each endpoint's port. \n Services cannot be specified
-                            on the same rule as Selector, NotSelector, NamespaceSelector,
-                            Nets, NotNets or ServiceAccounts. \n Ports and NotPorts
-                            can only be specified with Services on ingress rules."
-                          properties:
-                            name:
-                              description: Name specifies the name of a Kubernetes
-                                Service to match.
-                              type: string
-                            namespace:
-                              description: Namespace specifies the namespace of the
-                                given Service. If left empty, the rule will match
-                                within this policy's namespace.
-                              type: string
-                          type: object
-                      type: object
-                    http:
-                      description: HTTP contains match criteria that apply to HTTP
-                        requests.
-                      properties:
-                        methods:
-                          description: Methods is an optional field that restricts
-                            the rule to apply only to HTTP requests that use one of
-                            the listed HTTP Methods (e.g. GET, PUT, etc.) Multiple
-                            methods are OR'd together.
-                          items:
-                            type: string
-                          type: array
-                        paths:
-                          description: 'Paths is an optional field that restricts
-                            the rule to apply to HTTP requests that use one of the
-                            listed HTTP Paths. Multiple paths are OR''d together.
-                            e.g: - exact: /foo - prefix: /bar NOTE: Each entry may
-                            ONLY specify either a `exact` or a `prefix` match. The
-                            validator will check for it.'
-                          items:
-                            description: 'HTTPPath specifies an HTTP path to match.
-                              It may be either of the form: exact: <path>: which matches
-                              the path exactly or prefix: <path-prefix>: which matches
-                              the path prefix'
-                            properties:
-                              exact:
-                                type: string
-                              prefix:
-                                type: string
-                            type: object
-                          type: array
-                      type: object
-                    icmp:
-                      description: ICMP is an optional field that restricts the rule
-                        to apply to a specific type and code of ICMP traffic.  This
-                        should only be specified if the Protocol field is set to "ICMP"
-                        or "ICMPv6".
-                      properties:
-                        code:
-                          description: Match on a specific ICMP code.  If specified,
-                            the Type value must also be specified. This is a technical
-                            limitation imposed by the kernel's iptables firewall,
-                            which Calico uses to enforce the rule.
-                          type: integer
-                        type:
-                          description: Match on a specific ICMP type.  For example
-                            a value of 8 refers to ICMP Echo Request (i.e. pings).
-                          type: integer
-                      type: object
-                    ipVersion:
-                      description: IPVersion is an optional field that restricts the
-                        rule to only match a specific IP version.
-                      type: integer
-                    metadata:
-                      description: Metadata contains additional information for this
-                        rule
-                      properties:
-                        annotations:
-                          additionalProperties:
-                            type: string
-                          description: Annotations is a set of key value pairs that
-                            give extra information about the rule
-                          type: object
-                      type: object
-                    notICMP:
-                      description: NotICMP is the negated version of the ICMP field.
-                      properties:
-                        code:
-                          description: Match on a specific ICMP code.  If specified,
-                            the Type value must also be specified. This is a technical
-                            limitation imposed by the kernel's iptables firewall,
-                            which Calico uses to enforce the rule.
-                          type: integer
-                        type:
-                          description: Match on a specific ICMP type.  For example
-                            a value of 8 refers to ICMP Echo Request (i.e. pings).
-                          type: integer
-                      type: object
-                    notProtocol:
-                      anyOf:
-                      - type: integer
-                      - type: string
-                      description: NotProtocol is the negated version of the Protocol
-                        field.
-                      pattern: ^.*
-                      x-kubernetes-int-or-string: true
-                    protocol:
-                      anyOf:
-                      - type: integer
-                      - type: string
-                      description: "Protocol is an optional field that restricts the
-                        rule to only apply to traffic of a specific IP protocol. Required
-                        if any of the EntityRules contain Ports (because ports only
-                        apply to certain protocols). \n Must be one of these string
-                        values: \"TCP\", \"UDP\", \"ICMP\", \"ICMPv6\", \"SCTP\",
-                        \"UDPLite\" or an integer in the range 1-255."
-                      pattern: ^.*
-                      x-kubernetes-int-or-string: true
-                    source:
-                      description: Source contains the match criteria that apply to
-                        source entity.
-                      properties:
-                        namespaceSelector:
-                          description: "NamespaceSelector is an optional field that
-                            contains a selector expression. Only traffic that originates
-                            from (or terminates at) endpoints within the selected
-                            namespaces will be matched. When both NamespaceSelector
-                            and another selector are defined on the same rule, then
-                            only workload endpoints that are matched by both selectors
-                            will be selected by the rule. \n For NetworkPolicy, an
-                            empty NamespaceSelector implies that the Selector is limited
-                            to selecting only workload endpoints in the same namespace
-                            as the NetworkPolicy. \n For NetworkPolicy, `global()`
-                            NamespaceSelector implies that the Selector is limited
-                            to selecting only GlobalNetworkSet or HostEndpoint. \n
-                            For GlobalNetworkPolicy, an empty NamespaceSelector implies
-                            the Selector applies to workload endpoints across all
-                            namespaces."
-                          type: string
-                        nets:
-                          description: Nets is an optional field that restricts the
-                            rule to only apply to traffic that originates from (or
-                            terminates at) IP addresses in any of the given subnets.
-                          items:
-                            type: string
-                          type: array
-                        notNets:
-                          description: NotNets is the negated version of the Nets
-                            field.
-                          items:
-                            type: string
-                          type: array
-                        notPorts:
-                          description: NotPorts is the negated version of the Ports
-                            field. Since only some protocols have ports, if any ports
-                            are specified it requires the Protocol match in the Rule
-                            to be set to "TCP" or "UDP".
-                          items:
-                            anyOf:
-                            - type: integer
-                            - type: string
-                            pattern: ^.*
-                            x-kubernetes-int-or-string: true
-                          type: array
-                        notSelector:
-                          description: NotSelector is the negated version of the Selector
-                            field.  See Selector field for subtleties with negated
-                            selectors.
-                          type: string
-                        ports:
-                          description: "Ports is an optional field that restricts
-                            the rule to only apply to traffic that has a source (destination)
-                            port that matches one of these ranges/values. This value
-                            is a list of integers or strings that represent ranges
-                            of ports. \n Since only some protocols have ports, if
-                            any ports are specified it requires the Protocol match
-                            in the Rule to be set to \"TCP\" or \"UDP\"."
-                          items:
-                            anyOf:
-                            - type: integer
-                            - type: string
-                            pattern: ^.*
-                            x-kubernetes-int-or-string: true
-                          type: array
-                        selector:
-                          description: "Selector is an optional field that contains
-                            a selector expression (see Policy for sample syntax).
-                            \ Only traffic that originates from (terminates at) endpoints
-                            matching the selector will be matched. \n Note that: in
-                            addition to the negated version of the Selector (see NotSelector
-                            below), the selector expression syntax itself supports
-                            negation.  The two types of negation are subtly different.
-                            One negates the set of matched endpoints, the other negates
-                            the whole match: \n \tSelector = \"!has(my_label)\" matches
-                            packets that are from other Calico-controlled \tendpoints
-                            that do not have the label \"my_label\". \n \tNotSelector
-                            = \"has(my_label)\" matches packets that are not from
-                            Calico-controlled \tendpoints that do have the label \"my_label\".
-                            \n The effect is that the latter will accept packets from
-                            non-Calico sources whereas the former is limited to packets
-                            from Calico-controlled endpoints."
-                          type: string
-                        serviceAccounts:
-                          description: ServiceAccounts is an optional field that restricts
-                            the rule to only apply to traffic that originates from
-                            (or terminates at) a pod running as a matching service
-                            account.
-                          properties:
-                            names:
-                              description: Names is an optional field that restricts
-                                the rule to only apply to traffic that originates
-                                from (or terminates at) a pod running as a service
-                                account whose name is in the list.
-                              items:
-                                type: string
-                              type: array
-                            selector:
-                              description: Selector is an optional field that restricts
-                                the rule to only apply to traffic that originates
-                                from (or terminates at) a pod running as a service
-                                account that matches the given label selector. If
-                                both Names and Selector are specified then they are
-                                AND'ed.
-                              type: string
-                          type: object
-                        services:
-                          description: "Services is an optional field that contains
-                            options for matching Kubernetes Services. If specified,
-                            only traffic that originates from or terminates at endpoints
-                            within the selected service(s) will be matched, and only
-                            to/from each endpoint's port. \n Services cannot be specified
-                            on the same rule as Selector, NotSelector, NamespaceSelector,
-                            Nets, NotNets or ServiceAccounts. \n Ports and NotPorts
-                            can only be specified with Services on ingress rules."
-                          properties:
-                            name:
-                              description: Name specifies the name of a Kubernetes
-                                Service to match.
-                              type: string
-                            namespace:
-                              description: Namespace specifies the namespace of the
-                                given Service. If left empty, the rule will match
-                                within this policy's namespace.
-                              type: string
-                          type: object
-                      type: object
-                  required:
-                  - action
-                  type: object
-                type: array
-              namespaceSelector:
-                description: NamespaceSelector is an optional field for an expression
-                  used to select a pod based on namespaces.
-                type: string
-              order:
-                description: Order is an optional field that specifies the order in
-                  which the policy is applied. Policies with higher "order" are applied
-                  after those with lower order.  If the order is omitted, it may be
-                  considered to be "infinite" - i.e. the policy will be applied last.  Policies
-                  with identical order will be applied in alphanumerical order based
-                  on the Policy "Name".
-                type: number
-              performanceHints:
-                description: "PerformanceHints contains a list of hints to Calico's
-                  policy engine to help process the policy more efficiently.  Hints
-                  never change the enforcement behaviour of the policy. \n Currently,
-                  the only available hint is \"AssumeNeededOnEveryNode\".  When that
-                  hint is set on a policy, Felix will act as if the policy matches
-                  a local endpoint even if it does not. This is useful for \"preloading\"
-                  any large static policies that are known to be used on every node.
-                  If the policy is _not_ used on a particular node then the work done
-                  to preload the policy (and to maintain it) is wasted."
-                items:
-                  type: string
-                type: array
-              preDNAT:
-                description: PreDNAT indicates to apply the rules in this policy before
-                  any DNAT.
-                type: boolean
-              selector:
-                description: "The selector is an expression used to pick out the endpoints
-                  that the policy should be applied to. \n Selector expressions follow
-                  this syntax: \n \tlabel == \"string_literal\"  ->  comparison, e.g.
-                  my_label == \"foo bar\" \tlabel != \"string_literal\"   ->  not
-                  equal; also matches if label is not present \tlabel in { \"a\",
-                  \"b\", \"c\", ... }  ->  true if the value of label X is one of
-                  \"a\", \"b\", \"c\" \tlabel not in { \"a\", \"b\", \"c\", ... }
-                  \ ->  true if the value of label X is not one of \"a\", \"b\", \"c\"
-                  \thas(label_name)  -> True if that label is present \t! expr ->
-                  negation of expr \texpr && expr  -> Short-circuit and \texpr ||
-                  expr  -> Short-circuit or \t( expr ) -> parens for grouping \tall()
-                  or the empty selector -> matches all endpoints. \n Label names are
-                  allowed to contain alphanumerics, -, _ and /. String literals are
-                  more permissive but they do not support escape characters. \n Examples
-                  (with made-up labels): \n \ttype == \"webserver\" && deployment
-                  == \"prod\" \ttype in {\"frontend\", \"backend\"} \tdeployment !=
-                  \"dev\" \t! has(label_name)"
-                type: string
-              serviceAccountSelector:
-                description: ServiceAccountSelector is an optional field for an expression
-                  used to select a pod based on service accounts.
-                type: string
-              types:
-                description: "Types indicates whether this policy applies to ingress,
-                  or to egress, or to both.  When not explicitly specified (and so
-                  the value on creation is empty or nil), Calico defaults Types according
-                  to what Ingress and Egress rules are present in the policy.  The
-                  default is: \n - [ PolicyTypeIngress ], if there are no Egress rules
-                  (including the case where there are   also no Ingress rules) \n
-                  - [ PolicyTypeEgress ], if there are Egress rules but no Ingress
-                  rules \n - [ PolicyTypeIngress, PolicyTypeEgress ], if there are
-                  both Ingress and Egress rules. \n When the policy is read back again,
-                  Types will always be one of these values, never empty or nil."
-                items:
-                  description: PolicyType enumerates the possible values of the PolicySpec
-                    Types field.
-                  type: string
-                type: array
-            type: object
-        type: object
-    served: true
-    storage: true
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: []
-  storedVersions: []
----
-# Source: calico/templates/kdd-crds.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  name: globalnetworksets.crd.projectcalico.org
-spec:
-  group: crd.projectcalico.org
-  names:
-    kind: GlobalNetworkSet
-    listKind: GlobalNetworkSetList
-    plural: globalnetworksets
-    singular: globalnetworkset
-  preserveUnknownFields: false
-  scope: Cluster
-  versions:
-  - name: v1
-    schema:
-      openAPIV3Schema:
-        description: GlobalNetworkSet contains a set of arbitrary IP sub-networks/CIDRs
-          that share labels to allow rules to refer to them via selectors.  The labels
-          of GlobalNetworkSet are not namespaced.
-        properties:
-          apiVersion:
-            description: 'APIVersion defines the versioned schema of this representation
-              of an object. Servers should convert recognized schemas to the latest
-              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
-            type: string
-          kind:
-            description: 'Kind is a string value representing the REST resource this
-              object represents. Servers may infer this from the endpoint the client
-              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: GlobalNetworkSetSpec contains the specification for a NetworkSet
-              resource.
-            properties:
-              nets:
-                description: The list of IP networks that belong to this set.
-                items:
-                  type: string
-                type: array
-            type: object
-        type: object
-    served: true
-    storage: true
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: []
-  storedVersions: []
----
-# Source: calico/templates/kdd-crds.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  name: hostendpoints.crd.projectcalico.org
-spec:
-  group: crd.projectcalico.org
-  names:
-    kind: HostEndpoint
-    listKind: HostEndpointList
-    plural: hostendpoints
-    singular: hostendpoint
-  preserveUnknownFields: false
-  scope: Cluster
-  versions:
-  - name: v1
-    schema:
-      openAPIV3Schema:
-        properties:
-          apiVersion:
-            description: 'APIVersion defines the versioned schema of this representation
-              of an object. Servers should convert recognized schemas to the latest
-              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
-            type: string
-          kind:
-            description: 'Kind is a string value representing the REST resource this
-              object represents. Servers may infer this from the endpoint the client
-              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: HostEndpointSpec contains the specification for a HostEndpoint
-              resource.
-            properties:
-              expectedIPs:
-                description: "The expected IP addresses (IPv4 and IPv6) of the endpoint.
-                  If \"InterfaceName\" is not present, Calico will look for an interface
-                  matching any of the IPs in the list and apply policy to that. Note:
-                  \tWhen using the selector match criteria in an ingress or egress
-                  security Policy \tor Profile, Calico converts the selector into
-                  a set of IP addresses. For host \tendpoints, the ExpectedIPs field
-                  is used for that purpose. (If only the interface \tname is specified,
-                  Calico does not learn the IPs of the interface for use in match
-                  \tcriteria.)"
-                items:
-                  type: string
-                type: array
-              interfaceName:
-                description: "Either \"*\", or the name of a specific Linux interface
-                  to apply policy to; or empty.  \"*\" indicates that this HostEndpoint
-                  governs all traffic to, from or through the default network namespace
-                  of the host named by the \"Node\" field; entering and leaving that
-                  namespace via any interface, including those from/to non-host-networked
-                  local workloads. \n If InterfaceName is not \"*\", this HostEndpoint
-                  only governs traffic that enters or leaves the host through the
-                  specific interface named by InterfaceName, or - when InterfaceName
-                  is empty - through the specific interface that has one of the IPs
-                  in ExpectedIPs. Therefore, when InterfaceName is empty, at least
-                  one expected IP must be specified.  Only external interfaces (such
-                  as \"eth0\") are supported here; it isn't possible for a HostEndpoint
-                  to protect traffic through a specific local workload interface.
-                  \n Note: Only some kinds of policy are implemented for \"*\" HostEndpoints;
-                  initially just pre-DNAT policy.  Please check Calico documentation
-                  for the latest position."
-                type: string
-              node:
-                description: The node name identifying the Calico node instance.
-                type: string
-              ports:
-                description: Ports contains the endpoint's named ports, which may
-                  be referenced in security policy rules.
-                items:
-                  properties:
-                    name:
-                      type: string
-                    port:
-                      type: integer
-                    protocol:
-                      anyOf:
-                      - type: integer
-                      - type: string
-                      pattern: ^.*
-                      x-kubernetes-int-or-string: true
-                  required:
-                  - name
-                  - port
-                  - protocol
-                  type: object
-                type: array
-              profiles:
-                description: A list of identifiers of security Profile objects that
-                  apply to this endpoint. Each profile is applied in the order that
-                  they appear in this list.  Profile rules are applied after the selector-based
-                  security policy.
-                items:
-                  type: string
-                type: array
-            type: object
-        type: object
-    served: true
-    storage: true
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: []
-  storedVersions: []
----
-# Source: calico/templates/kdd-crds.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  name: ipamblocks.crd.projectcalico.org
-spec:
-  group: crd.projectcalico.org
-  names:
-    kind: IPAMBlock
-    listKind: IPAMBlockList
-    plural: ipamblocks
-    singular: ipamblock
-  preserveUnknownFields: false
-  scope: Cluster
-  versions:
-  - name: v1
-    schema:
-      openAPIV3Schema:
-        properties:
-          apiVersion:
-            description: 'APIVersion defines the versioned schema of this representation
-              of an object. Servers should convert recognized schemas to the latest
-              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
-            type: string
-          kind:
-            description: 'Kind is a string value representing the REST resource this
-              object represents. Servers may infer this from the endpoint the client
-              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: IPAMBlockSpec contains the specification for an IPAMBlock
-              resource.
-            properties:
-              affinity:
-                description: Affinity of the block, if this block has one. If set,
-                  it will be of the form "host:<hostname>". If not set, this block
-                  is not affine to a host.
-                type: string
-              allocations:
-                description: Array of allocations in-use within this block. nil entries
-                  mean the allocation is free. For non-nil entries at index i, the
-                  index is the ordinal of the allocation within this block and the
-                  value is the index of the associated attributes in the Attributes
-                  array.
-                items:
-                  type: integer
-                  # TODO: This nullable is manually added in. We should update controller-gen
-                  # to handle []*int properly itself.
-                  nullable: true
-                type: array
-              attributes:
-                description: Attributes is an array of arbitrary metadata associated
-                  with allocations in the block. To find attributes for a given allocation,
-                  use the value of the allocation's entry in the Allocations array
-                  as the index of the element in this array.
-                items:
-                  properties:
-                    handle_id:
-                      type: string
-                    secondary:
-                      additionalProperties:
-                        type: string
-                      type: object
-                  type: object
-                type: array
-              cidr:
-                description: The block's CIDR.
-                type: string
-              deleted:
-                description: Deleted is an internal boolean used to workaround a limitation
-                  in the Kubernetes API whereby deletion will not return a conflict
-                  error if the block has been updated. It should not be set manually.
-                type: boolean
-              sequenceNumber:
-                default: 0
-                description: We store a sequence number that is updated each time
-                  the block is written. Each allocation will also store the sequence
-                  number of the block at the time of its creation. When releasing
-                  an IP, passing the sequence number associated with the allocation
-                  allows us to protect against a race condition and ensure the IP
-                  hasn't been released and re-allocated since the release request.
-                format: int64
-                type: integer
-              sequenceNumberForAllocation:
-                additionalProperties:
-                  format: int64
-                  type: integer
-                description: Map of allocated ordinal within the block to sequence
-                  number of the block at the time of allocation. Kubernetes does not
-                  allow numerical keys for maps, so the key is cast to a string.
-                type: object
-              strictAffinity:
-                description: StrictAffinity on the IPAMBlock is deprecated and no
-                  longer used by the code. Use IPAMConfig StrictAffinity instead.
-                type: boolean
-              unallocated:
-                description: Unallocated is an ordered list of allocations which are
-                  free in the block.
-                items:
-                  type: integer
-                type: array
-            required:
-            - allocations
-            - attributes
-            - cidr
-            - strictAffinity
-            - unallocated
-            type: object
-        type: object
-    served: true
-    storage: true
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: []
-  storedVersions: []
----
-# Source: calico/templates/kdd-crds.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  name: ipamconfigs.crd.projectcalico.org
-spec:
-  group: crd.projectcalico.org
-  names:
-    kind: IPAMConfig
-    listKind: IPAMConfigList
-    plural: ipamconfigs
-    singular: ipamconfig
-  preserveUnknownFields: false
-  scope: Cluster
-  versions:
-  - name: v1
-    schema:
-      openAPIV3Schema:
-        properties:
-          apiVersion:
-            description: 'APIVersion defines the versioned schema of this representation
-              of an object. Servers should convert recognized schemas to the latest
-              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
-            type: string
-          kind:
-            description: 'Kind is a string value representing the REST resource this
-              object represents. Servers may infer this from the endpoint the client
-              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: IPAMConfigSpec contains the specification for an IPAMConfig
-              resource.
-            properties:
-              autoAllocateBlocks:
-                type: boolean
-              maxBlocksPerHost:
-                description: MaxBlocksPerHost, if non-zero, is the max number of blocks
-                  that can be affine to each host.
-                maximum: 2147483647
-                minimum: 0
-                type: integer
-              strictAffinity:
-                type: boolean
-            required:
-            - autoAllocateBlocks
-            - strictAffinity
-            type: object
-        type: object
-    served: true
-    storage: true
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: []
-  storedVersions: []
----
-# Source: calico/templates/kdd-crds.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  name: ipamhandles.crd.projectcalico.org
-spec:
-  group: crd.projectcalico.org
-  names:
-    kind: IPAMHandle
-    listKind: IPAMHandleList
-    plural: ipamhandles
-    singular: ipamhandle
-  preserveUnknownFields: false
-  scope: Cluster
-  versions:
-  - name: v1
-    schema:
-      openAPIV3Schema:
-        properties:
-          apiVersion:
-            description: 'APIVersion defines the versioned schema of this representation
-              of an object. Servers should convert recognized schemas to the latest
-              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
-            type: string
-          kind:
-            description: 'Kind is a string value representing the REST resource this
-              object represents. Servers may infer this from the endpoint the client
-              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: IPAMHandleSpec contains the specification for an IPAMHandle
-              resource.
-            properties:
-              block:
-                additionalProperties:
-                  type: integer
-                type: object
-              deleted:
-                type: boolean
-              handleID:
-                type: string
-            required:
-            - block
-            - handleID
-            type: object
-        type: object
-    served: true
-    storage: true
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: []
-  storedVersions: []
----
-# Source: calico/templates/kdd-crds.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  name: ippools.crd.projectcalico.org
-spec:
-  group: crd.projectcalico.org
-  names:
-    kind: IPPool
-    listKind: IPPoolList
-    plural: ippools
-    singular: ippool
-  preserveUnknownFields: false
-  scope: Cluster
-  versions:
-  - name: v1
-    schema:
-      openAPIV3Schema:
-        properties:
-          apiVersion:
-            description: 'APIVersion defines the versioned schema of this representation
-              of an object. Servers should convert recognized schemas to the latest
-              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
-            type: string
-          kind:
-            description: 'Kind is a string value representing the REST resource this
-              object represents. Servers may infer this from the endpoint the client
-              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: IPPoolSpec contains the specification for an IPPool resource.
-            properties:
-              allowedUses:
-                description: AllowedUse controls what the IP pool will be used for.  If
-                  not specified or empty, defaults to ["Tunnel", "Workload"] for back-compatibility
-                items:
-                  type: string
-                type: array
-              blockSize:
-                description: The block size to use for IP address assignments from
-                  this pool. Defaults to 26 for IPv4 and 122 for IPv6.
-                type: integer
-              cidr:
-                description: The pool CIDR.
-                type: string
-              disableBGPExport:
-                description: 'Disable exporting routes from this IP Pool''s CIDR over
-                  BGP. [Default: false]'
-                type: boolean
-              disabled:
-                description: When disabled is true, Calico IPAM will not assign addresses
-                  from this pool.
-                type: boolean
-              ipip:
-                description: 'Deprecated: this field is only used for APIv1 backwards
-                  compatibility. Setting this field is not allowed, this field is
-                  for internal use only.'
-                properties:
-                  enabled:
-                    description: When enabled is true, ipip tunneling will be used
-                      to deliver packets to destinations within this pool.
-                    type: boolean
-                  mode:
-                    description: The IPIP mode.  This can be one of "always" or "cross-subnet".  A
-                      mode of "always" will also use IPIP tunneling for routing to
-                      destination IP addresses within this pool.  A mode of "cross-subnet"
-                      will only use IPIP tunneling when the destination node is on
-                      a different subnet to the originating node.  The default value
-                      (if not specified) is "always".
-                    type: string
-                type: object
-              ipipMode:
-                description: Contains configuration for IPIP tunneling for this pool.
-                  If not specified, then this is defaulted to "Never" (i.e. IPIP tunneling
-                  is disabled).
-                type: string
-              nat-outgoing:
-                description: 'Deprecated: this field is only used for APIv1 backwards
-                  compatibility. Setting this field is not allowed, this field is
-                  for internal use only.'
-                type: boolean
-              natOutgoing:
-                description: When natOutgoing is true, packets sent from Calico networked
-                  containers in this pool to destinations outside of this pool will
-                  be masqueraded.
-                type: boolean
-              nodeSelector:
-                description: Allows IPPool to allocate for a specific node by label
-                  selector.
-                type: string
-              vxlanMode:
-                description: Contains configuration for VXLAN tunneling for this pool.
-                  If not specified, then this is defaulted to "Never" (i.e. VXLAN
-                  tunneling is disabled).
-                type: string
-            required:
-            - cidr
-            type: object
-        type: object
-    served: true
-    storage: true
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: []
-  storedVersions: []
----
-# Source: calico/templates/kdd-crds.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  annotations:
-    controller-gen.kubebuilder.io/version: (devel)
-  creationTimestamp: null
-  name: ipreservations.crd.projectcalico.org
-spec:
-  group: crd.projectcalico.org
-  names:
-    kind: IPReservation
-    listKind: IPReservationList
-    plural: ipreservations
-    singular: ipreservation
-  preserveUnknownFields: false
-  scope: Cluster
-  versions:
-  - name: v1
-    schema:
-      openAPIV3Schema:
-        properties:
-          apiVersion:
-            description: 'APIVersion defines the versioned schema of this representation
-              of an object. Servers should convert recognized schemas to the latest
-              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
-            type: string
-          kind:
-            description: 'Kind is a string value representing the REST resource this
-              object represents. Servers may infer this from the endpoint the client
-              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: IPReservationSpec contains the specification for an IPReservation
-              resource.
-            properties:
-              reservedCIDRs:
-                description: ReservedCIDRs is a list of CIDRs and/or IP addresses
-                  that Calico IPAM will exclude from new allocations.
-                items:
-                  type: string
-                type: array
-            type: object
-        type: object
-    served: true
-    storage: true
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: []
-  storedVersions: []
----
-# Source: calico/templates/kdd-crds.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  name: kubecontrollersconfigurations.crd.projectcalico.org
-spec:
-  group: crd.projectcalico.org
-  names:
-    kind: KubeControllersConfiguration
-    listKind: KubeControllersConfigurationList
-    plural: kubecontrollersconfigurations
-    singular: kubecontrollersconfiguration
-  preserveUnknownFields: false
-  scope: Cluster
-  versions:
-  - name: v1
-    schema:
-      openAPIV3Schema:
-        properties:
-          apiVersion:
-            description: 'APIVersion defines the versioned schema of this representation
-              of an object. Servers should convert recognized schemas to the latest
-              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
-            type: string
-          kind:
-            description: 'Kind is a string value representing the REST resource this
-              object represents. Servers may infer this from the endpoint the client
-              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: KubeControllersConfigurationSpec contains the values of the
-              Kubernetes controllers configuration.
-            properties:
-              controllers:
-                description: Controllers enables and configures individual Kubernetes
-                  controllers
-                properties:
-                  namespace:
-                    description: Namespace enables and configures the namespace controller.
-                      Enabled by default, set to nil to disable.
-                    properties:
-                      reconcilerPeriod:
-                        description: 'ReconcilerPeriod is the period to perform reconciliation
-                          with the Calico datastore. [Default: 5m]'
-                        type: string
-                    type: object
-                  node:
-                    description: Node enables and configures the node controller.
-                      Enabled by default, set to nil to disable.
-                    properties:
-                      hostEndpoint:
-                        description: HostEndpoint controls syncing nodes to host endpoints.
-                          Disabled by default, set to nil to disable.
-                        properties:
-                          autoCreate:
-                            description: 'AutoCreate enables automatic creation of
-                              host endpoints for every node. [Default: Disabled]'
-                            type: string
-                        type: object
-                      leakGracePeriod:
-                        description: 'LeakGracePeriod is the period used by the controller
-                          to determine if an IP address has been leaked. Set to 0
-                          to disable IP garbage collection. [Default: 15m]'
-                        type: string
-                      reconcilerPeriod:
-                        description: 'ReconcilerPeriod is the period to perform reconciliation
-                          with the Calico datastore. [Default: 5m]'
-                        type: string
-                      syncLabels:
-                        description: 'SyncLabels controls whether to copy Kubernetes
-                          node labels to Calico nodes. [Default: Enabled]'
-                        type: string
-                    type: object
-                  policy:
-                    description: Policy enables and configures the policy controller.
-                      Enabled by default, set to nil to disable.
-                    properties:
-                      reconcilerPeriod:
-                        description: 'ReconcilerPeriod is the period to perform reconciliation
-                          with the Calico datastore. [Default: 5m]'
-                        type: string
-                    type: object
-                  serviceAccount:
-                    description: ServiceAccount enables and configures the service
-                      account controller. Enabled by default, set to nil to disable.
-                    properties:
-                      reconcilerPeriod:
-                        description: 'ReconcilerPeriod is the period to perform reconciliation
-                          with the Calico datastore. [Default: 5m]'
-                        type: string
-                    type: object
-                  workloadEndpoint:
-                    description: WorkloadEndpoint enables and configures the workload
-                      endpoint controller. Enabled by default, set to nil to disable.
-                    properties:
-                      reconcilerPeriod:
-                        description: 'ReconcilerPeriod is the period to perform reconciliation
-                          with the Calico datastore. [Default: 5m]'
-                        type: string
-                    type: object
-                type: object
-              debugProfilePort:
-                description: DebugProfilePort configures the port to serve memory
-                  and cpu profiles on. If not specified, profiling is disabled.
-                format: int32
-                type: integer
-              etcdV3CompactionPeriod:
-                description: 'EtcdV3CompactionPeriod is the period between etcdv3
-                  compaction requests. Set to 0 to disable. [Default: 10m]'
-                type: string
-              healthChecks:
-                description: 'HealthChecks enables or disables support for health
-                  checks [Default: Enabled]'
-                type: string
-              logSeverityScreen:
-                description: 'LogSeverityScreen is the log severity above which logs
-                  are sent to the stdout. [Default: Info]'
-                type: string
-              prometheusMetricsPort:
-                description: 'PrometheusMetricsPort is the TCP port that the Prometheus
-                  metrics server should bind to. Set to 0 to disable. [Default: 9094]'
-                type: integer
-            required:
-            - controllers
-            type: object
-          status:
-            description: KubeControllersConfigurationStatus represents the status
-              of the configuration. It's useful for admins to be able to see the actual
-              config that was applied, which can be modified by environment variables
-              on the kube-controllers process.
-            properties:
-              environmentVars:
-                additionalProperties:
-                  type: string
-                description: EnvironmentVars contains the environment variables on
-                  the kube-controllers that influenced the RunningConfig.
-                type: object
-              runningConfig:
-                description: RunningConfig contains the effective config that is running
-                  in the kube-controllers pod, after merging the API resource with
-                  any environment variables.
-                properties:
-                  controllers:
-                    description: Controllers enables and configures individual Kubernetes
-                      controllers
-                    properties:
-                      namespace:
-                        description: Namespace enables and configures the namespace
-                          controller. Enabled by default, set to nil to disable.
-                        properties:
-                          reconcilerPeriod:
-                            description: 'ReconcilerPeriod is the period to perform
-                              reconciliation with the Calico datastore. [Default:
-                              5m]'
-                            type: string
-                        type: object
-                      node:
-                        description: Node enables and configures the node controller.
-                          Enabled by default, set to nil to disable.
-                        properties:
-                          hostEndpoint:
-                            description: HostEndpoint controls syncing nodes to host
-                              endpoints. Disabled by default, set to nil to disable.
-                            properties:
-                              autoCreate:
-                                description: 'AutoCreate enables automatic creation
-                                  of host endpoints for every node. [Default: Disabled]'
-                                type: string
-                            type: object
-                          leakGracePeriod:
-                            description: 'LeakGracePeriod is the period used by the
-                              controller to determine if an IP address has been leaked.
-                              Set to 0 to disable IP garbage collection. [Default:
-                              15m]'
-                            type: string
-                          reconcilerPeriod:
-                            description: 'ReconcilerPeriod is the period to perform
-                              reconciliation with the Calico datastore. [Default:
-                              5m]'
-                            type: string
-                          syncLabels:
-                            description: 'SyncLabels controls whether to copy Kubernetes
-                              node labels to Calico nodes. [Default: Enabled]'
-                            type: string
-                        type: object
-                      policy:
-                        description: Policy enables and configures the policy controller.
-                          Enabled by default, set to nil to disable.
-                        properties:
-                          reconcilerPeriod:
-                            description: 'ReconcilerPeriod is the period to perform
-                              reconciliation with the Calico datastore. [Default:
-                              5m]'
-                            type: string
-                        type: object
-                      serviceAccount:
-                        description: ServiceAccount enables and configures the service
-                          account controller. Enabled by default, set to nil to disable.
-                        properties:
-                          reconcilerPeriod:
-                            description: 'ReconcilerPeriod is the period to perform
-                              reconciliation with the Calico datastore. [Default:
-                              5m]'
-                            type: string
-                        type: object
-                      workloadEndpoint:
-                        description: WorkloadEndpoint enables and configures the workload
-                          endpoint controller. Enabled by default, set to nil to disable.
-                        properties:
-                          reconcilerPeriod:
-                            description: 'ReconcilerPeriod is the period to perform
-                              reconciliation with the Calico datastore. [Default:
-                              5m]'
-                            type: string
-                        type: object
-                    type: object
-                  debugProfilePort:
-                    description: DebugProfilePort configures the port to serve memory
-                      and cpu profiles on. If not specified, profiling is disabled.
-                    format: int32
-                    type: integer
-                  etcdV3CompactionPeriod:
-                    description: 'EtcdV3CompactionPeriod is the period between etcdv3
-                      compaction requests. Set to 0 to disable. [Default: 10m]'
-                    type: string
-                  healthChecks:
-                    description: 'HealthChecks enables or disables support for health
-                      checks [Default: Enabled]'
-                    type: string
-                  logSeverityScreen:
-                    description: 'LogSeverityScreen is the log severity above which
-                      logs are sent to the stdout. [Default: Info]'
-                    type: string
-                  prometheusMetricsPort:
-                    description: 'PrometheusMetricsPort is the TCP port that the Prometheus
-                      metrics server should bind to. Set to 0 to disable. [Default:
-                      9094]'
-                    type: integer
-                required:
-                - controllers
-                type: object
-            type: object
-        type: object
-    served: true
-    storage: true
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: []
-  storedVersions: []
----
-# Source: calico/templates/kdd-crds.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  name: networkpolicies.crd.projectcalico.org
-spec:
-  group: crd.projectcalico.org
-  names:
-    kind: NetworkPolicy
-    listKind: NetworkPolicyList
-    plural: networkpolicies
-    singular: networkpolicy
-  preserveUnknownFields: false
-  scope: Namespaced
-  versions:
-  - name: v1
-    schema:
-      openAPIV3Schema:
-        properties:
-          apiVersion:
-            description: 'APIVersion defines the versioned schema of this representation
-              of an object. Servers should convert recognized schemas to the latest
-              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
-            type: string
-          kind:
-            description: 'Kind is a string value representing the REST resource this
-              object represents. Servers may infer this from the endpoint the client
-              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
-            type: string
-          metadata:
-            type: object
-          spec:
-            properties:
-              egress:
-                description: The ordered set of egress rules.  Each rule contains
-                  a set of packet match criteria and a corresponding action to apply.
-                items:
-                  description: "A Rule encapsulates a set of match criteria and an
-                    action.  Both selector-based security Policy and security Profiles
-                    reference rules - separated out as a list of rules for both ingress
-                    and egress packet matching. \n Each positive match criteria has
-                    a negated version, prefixed with \"Not\". All the match criteria
-                    within a rule must be satisfied for a packet to match. A single
-                    rule can contain the positive and negative version of a match
-                    and both must be satisfied for the rule to match."
-                  properties:
-                    action:
-                      type: string
-                    destination:
-                      description: Destination contains the match criteria that apply
-                        to destination entity.
-                      properties:
-                        namespaceSelector:
-                          description: "NamespaceSelector is an optional field that
-                            contains a selector expression. Only traffic that originates
-                            from (or terminates at) endpoints within the selected
-                            namespaces will be matched. When both NamespaceSelector
-                            and another selector are defined on the same rule, then
-                            only workload endpoints that are matched by both selectors
-                            will be selected by the rule. \n For NetworkPolicy, an
-                            empty NamespaceSelector implies that the Selector is limited
-                            to selecting only workload endpoints in the same namespace
-                            as the NetworkPolicy. \n For NetworkPolicy, `global()`
-                            NamespaceSelector implies that the Selector is limited
-                            to selecting only GlobalNetworkSet or HostEndpoint. \n
-                            For GlobalNetworkPolicy, an empty NamespaceSelector implies
-                            the Selector applies to workload endpoints across all
-                            namespaces."
-                          type: string
-                        nets:
-                          description: Nets is an optional field that restricts the
-                            rule to only apply to traffic that originates from (or
-                            terminates at) IP addresses in any of the given subnets.
-                          items:
-                            type: string
-                          type: array
-                        notNets:
-                          description: NotNets is the negated version of the Nets
-                            field.
-                          items:
-                            type: string
-                          type: array
-                        notPorts:
-                          description: NotPorts is the negated version of the Ports
-                            field. Since only some protocols have ports, if any ports
-                            are specified it requires the Protocol match in the Rule
-                            to be set to "TCP" or "UDP".
-                          items:
-                            anyOf:
-                            - type: integer
-                            - type: string
-                            pattern: ^.*
-                            x-kubernetes-int-or-string: true
-                          type: array
-                        notSelector:
-                          description: NotSelector is the negated version of the Selector
-                            field.  See Selector field for subtleties with negated
-                            selectors.
-                          type: string
-                        ports:
-                          description: "Ports is an optional field that restricts
-                            the rule to only apply to traffic that has a source (destination)
-                            port that matches one of these ranges/values. This value
-                            is a list of integers or strings that represent ranges
-                            of ports. \n Since only some protocols have ports, if
-                            any ports are specified it requires the Protocol match
-                            in the Rule to be set to \"TCP\" or \"UDP\"."
-                          items:
-                            anyOf:
-                            - type: integer
-                            - type: string
-                            pattern: ^.*
-                            x-kubernetes-int-or-string: true
-                          type: array
-                        selector:
-                          description: "Selector is an optional field that contains
-                            a selector expression (see Policy for sample syntax).
-                            \ Only traffic that originates from (terminates at) endpoints
-                            matching the selector will be matched. \n Note that: in
-                            addition to the negated version of the Selector (see NotSelector
-                            below), the selector expression syntax itself supports
-                            negation.  The two types of negation are subtly different.
-                            One negates the set of matched endpoints, the other negates
-                            the whole match: \n \tSelector = \"!has(my_label)\" matches
-                            packets that are from other Calico-controlled \tendpoints
-                            that do not have the label \"my_label\". \n \tNotSelector
-                            = \"has(my_label)\" matches packets that are not from
-                            Calico-controlled \tendpoints that do have the label \"my_label\".
-                            \n The effect is that the latter will accept packets from
-                            non-Calico sources whereas the former is limited to packets
-                            from Calico-controlled endpoints."
-                          type: string
-                        serviceAccounts:
-                          description: ServiceAccounts is an optional field that restricts
-                            the rule to only apply to traffic that originates from
-                            (or terminates at) a pod running as a matching service
-                            account.
-                          properties:
-                            names:
-                              description: Names is an optional field that restricts
-                                the rule to only apply to traffic that originates
-                                from (or terminates at) a pod running as a service
-                                account whose name is in the list.
-                              items:
-                                type: string
-                              type: array
-                            selector:
-                              description: Selector is an optional field that restricts
-                                the rule to only apply to traffic that originates
-                                from (or terminates at) a pod running as a service
-                                account that matches the given label selector. If
-                                both Names and Selector are specified then they are
-                                AND'ed.
-                              type: string
-                          type: object
-                        services:
-                          description: "Services is an optional field that contains
-                            options for matching Kubernetes Services. If specified,
-                            only traffic that originates from or terminates at endpoints
-                            within the selected service(s) will be matched, and only
-                            to/from each endpoint's port. \n Services cannot be specified
-                            on the same rule as Selector, NotSelector, NamespaceSelector,
-                            Nets, NotNets or ServiceAccounts. \n Ports and NotPorts
-                            can only be specified with Services on ingress rules."
-                          properties:
-                            name:
-                              description: Name specifies the name of a Kubernetes
-                                Service to match.
-                              type: string
-                            namespace:
-                              description: Namespace specifies the namespace of the
-                                given Service. If left empty, the rule will match
-                                within this policy's namespace.
-                              type: string
-                          type: object
-                      type: object
-                    http:
-                      description: HTTP contains match criteria that apply to HTTP
-                        requests.
-                      properties:
-                        methods:
-                          description: Methods is an optional field that restricts
-                            the rule to apply only to HTTP requests that use one of
-                            the listed HTTP Methods (e.g. GET, PUT, etc.) Multiple
-                            methods are OR'd together.
-                          items:
-                            type: string
-                          type: array
-                        paths:
-                          description: 'Paths is an optional field that restricts
-                            the rule to apply to HTTP requests that use one of the
-                            listed HTTP Paths. Multiple paths are OR''d together.
-                            e.g: - exact: /foo - prefix: /bar NOTE: Each entry may
-                            ONLY specify either a `exact` or a `prefix` match. The
-                            validator will check for it.'
-                          items:
-                            description: 'HTTPPath specifies an HTTP path to match.
-                              It may be either of the form: exact: <path>: which matches
-                              the path exactly or prefix: <path-prefix>: which matches
-                              the path prefix'
-                            properties:
-                              exact:
-                                type: string
-                              prefix:
-                                type: string
-                            type: object
-                          type: array
-                      type: object
-                    icmp:
-                      description: ICMP is an optional field that restricts the rule
-                        to apply to a specific type and code of ICMP traffic.  This
-                        should only be specified if the Protocol field is set to "ICMP"
-                        or "ICMPv6".
-                      properties:
-                        code:
-                          description: Match on a specific ICMP code.  If specified,
-                            the Type value must also be specified. This is a technical
-                            limitation imposed by the kernel's iptables firewall,
-                            which Calico uses to enforce the rule.
-                          type: integer
-                        type:
-                          description: Match on a specific ICMP type.  For example
-                            a value of 8 refers to ICMP Echo Request (i.e. pings).
-                          type: integer
-                      type: object
-                    ipVersion:
-                      description: IPVersion is an optional field that restricts the
-                        rule to only match a specific IP version.
-                      type: integer
-                    metadata:
-                      description: Metadata contains additional information for this
-                        rule
-                      properties:
-                        annotations:
-                          additionalProperties:
-                            type: string
-                          description: Annotations is a set of key value pairs that
-                            give extra information about the rule
-                          type: object
-                      type: object
-                    notICMP:
-                      description: NotICMP is the negated version of the ICMP field.
-                      properties:
-                        code:
-                          description: Match on a specific ICMP code.  If specified,
-                            the Type value must also be specified. This is a technical
-                            limitation imposed by the kernel's iptables firewall,
-                            which Calico uses to enforce the rule.
-                          type: integer
-                        type:
-                          description: Match on a specific ICMP type.  For example
-                            a value of 8 refers to ICMP Echo Request (i.e. pings).
-                          type: integer
-                      type: object
-                    notProtocol:
-                      anyOf:
-                      - type: integer
-                      - type: string
-                      description: NotProtocol is the negated version of the Protocol
-                        field.
-                      pattern: ^.*
-                      x-kubernetes-int-or-string: true
-                    protocol:
-                      anyOf:
-                      - type: integer
-                      - type: string
-                      description: "Protocol is an optional field that restricts the
-                        rule to only apply to traffic of a specific IP protocol. Required
-                        if any of the EntityRules contain Ports (because ports only
-                        apply to certain protocols). \n Must be one of these string
-                        values: \"TCP\", \"UDP\", \"ICMP\", \"ICMPv6\", \"SCTP\",
-                        \"UDPLite\" or an integer in the range 1-255."
-                      pattern: ^.*
-                      x-kubernetes-int-or-string: true
-                    source:
-                      description: Source contains the match criteria that apply to
-                        source entity.
-                      properties:
-                        namespaceSelector:
-                          description: "NamespaceSelector is an optional field that
-                            contains a selector expression. Only traffic that originates
-                            from (or terminates at) endpoints within the selected
-                            namespaces will be matched. When both NamespaceSelector
-                            and another selector are defined on the same rule, then
-                            only workload endpoints that are matched by both selectors
-                            will be selected by the rule. \n For NetworkPolicy, an
-                            empty NamespaceSelector implies that the Selector is limited
-                            to selecting only workload endpoints in the same namespace
-                            as the NetworkPolicy. \n For NetworkPolicy, `global()`
-                            NamespaceSelector implies that the Selector is limited
-                            to selecting only GlobalNetworkSet or HostEndpoint. \n
-                            For GlobalNetworkPolicy, an empty NamespaceSelector implies
-                            the Selector applies to workload endpoints across all
-                            namespaces."
-                          type: string
-                        nets:
-                          description: Nets is an optional field that restricts the
-                            rule to only apply to traffic that originates from (or
-                            terminates at) IP addresses in any of the given subnets.
-                          items:
-                            type: string
-                          type: array
-                        notNets:
-                          description: NotNets is the negated version of the Nets
-                            field.
-                          items:
-                            type: string
-                          type: array
-                        notPorts:
-                          description: NotPorts is the negated version of the Ports
-                            field. Since only some protocols have ports, if any ports
-                            are specified it requires the Protocol match in the Rule
-                            to be set to "TCP" or "UDP".
-                          items:
-                            anyOf:
-                            - type: integer
-                            - type: string
-                            pattern: ^.*
-                            x-kubernetes-int-or-string: true
-                          type: array
-                        notSelector:
-                          description: NotSelector is the negated version of the Selector
-                            field.  See Selector field for subtleties with negated
-                            selectors.
-                          type: string
-                        ports:
-                          description: "Ports is an optional field that restricts
-                            the rule to only apply to traffic that has a source (destination)
-                            port that matches one of these ranges/values. This value
-                            is a list of integers or strings that represent ranges
-                            of ports. \n Since only some protocols have ports, if
-                            any ports are specified it requires the Protocol match
-                            in the Rule to be set to \"TCP\" or \"UDP\"."
-                          items:
-                            anyOf:
-                            - type: integer
-                            - type: string
-                            pattern: ^.*
-                            x-kubernetes-int-or-string: true
-                          type: array
-                        selector:
-                          description: "Selector is an optional field that contains
-                            a selector expression (see Policy for sample syntax).
-                            \ Only traffic that originates from (terminates at) endpoints
-                            matching the selector will be matched. \n Note that: in
-                            addition to the negated version of the Selector (see NotSelector
-                            below), the selector expression syntax itself supports
-                            negation.  The two types of negation are subtly different.
-                            One negates the set of matched endpoints, the other negates
-                            the whole match: \n \tSelector = \"!has(my_label)\" matches
-                            packets that are from other Calico-controlled \tendpoints
-                            that do not have the label \"my_label\". \n \tNotSelector
-                            = \"has(my_label)\" matches packets that are not from
-                            Calico-controlled \tendpoints that do have the label \"my_label\".
-                            \n The effect is that the latter will accept packets from
-                            non-Calico sources whereas the former is limited to packets
-                            from Calico-controlled endpoints."
-                          type: string
-                        serviceAccounts:
-                          description: ServiceAccounts is an optional field that restricts
-                            the rule to only apply to traffic that originates from
-                            (or terminates at) a pod running as a matching service
-                            account.
-                          properties:
-                            names:
-                              description: Names is an optional field that restricts
-                                the rule to only apply to traffic that originates
-                                from (or terminates at) a pod running as a service
-                                account whose name is in the list.
-                              items:
-                                type: string
-                              type: array
-                            selector:
-                              description: Selector is an optional field that restricts
-                                the rule to only apply to traffic that originates
-                                from (or terminates at) a pod running as a service
-                                account that matches the given label selector. If
-                                both Names and Selector are specified then they are
-                                AND'ed.
-                              type: string
-                          type: object
-                        services:
-                          description: "Services is an optional field that contains
-                            options for matching Kubernetes Services. If specified,
-                            only traffic that originates from or terminates at endpoints
-                            within the selected service(s) will be matched, and only
-                            to/from each endpoint's port. \n Services cannot be specified
-                            on the same rule as Selector, NotSelector, NamespaceSelector,
-                            Nets, NotNets or ServiceAccounts. \n Ports and NotPorts
-                            can only be specified with Services on ingress rules."
-                          properties:
-                            name:
-                              description: Name specifies the name of a Kubernetes
-                                Service to match.
-                              type: string
-                            namespace:
-                              description: Namespace specifies the namespace of the
-                                given Service. If left empty, the rule will match
-                                within this policy's namespace.
-                              type: string
-                          type: object
-                      type: object
-                  required:
-                  - action
-                  type: object
-                type: array
-              ingress:
-                description: The ordered set of ingress rules.  Each rule contains
-                  a set of packet match criteria and a corresponding action to apply.
-                items:
-                  description: "A Rule encapsulates a set of match criteria and an
-                    action.  Both selector-based security Policy and security Profiles
-                    reference rules - separated out as a list of rules for both ingress
-                    and egress packet matching. \n Each positive match criteria has
-                    a negated version, prefixed with \"Not\". All the match criteria
-                    within a rule must be satisfied for a packet to match. A single
-                    rule can contain the positive and negative version of a match
-                    and both must be satisfied for the rule to match."
-                  properties:
-                    action:
-                      type: string
-                    destination:
-                      description: Destination contains the match criteria that apply
-                        to destination entity.
-                      properties:
-                        namespaceSelector:
-                          description: "NamespaceSelector is an optional field that
-                            contains a selector expression. Only traffic that originates
-                            from (or terminates at) endpoints within the selected
-                            namespaces will be matched. When both NamespaceSelector
-                            and another selector are defined on the same rule, then
-                            only workload endpoints that are matched by both selectors
-                            will be selected by the rule. \n For NetworkPolicy, an
-                            empty NamespaceSelector implies that the Selector is limited
-                            to selecting only workload endpoints in the same namespace
-                            as the NetworkPolicy. \n For NetworkPolicy, `global()`
-                            NamespaceSelector implies that the Selector is limited
-                            to selecting only GlobalNetworkSet or HostEndpoint. \n
-                            For GlobalNetworkPolicy, an empty NamespaceSelector implies
-                            the Selector applies to workload endpoints across all
-                            namespaces."
-                          type: string
-                        nets:
-                          description: Nets is an optional field that restricts the
-                            rule to only apply to traffic that originates from (or
-                            terminates at) IP addresses in any of the given subnets.
-                          items:
-                            type: string
-                          type: array
-                        notNets:
-                          description: NotNets is the negated version of the Nets
-                            field.
-                          items:
-                            type: string
-                          type: array
-                        notPorts:
-                          description: NotPorts is the negated version of the Ports
-                            field. Since only some protocols have ports, if any ports
-                            are specified it requires the Protocol match in the Rule
-                            to be set to "TCP" or "UDP".
-                          items:
-                            anyOf:
-                            - type: integer
-                            - type: string
-                            pattern: ^.*
-                            x-kubernetes-int-or-string: true
-                          type: array
-                        notSelector:
-                          description: NotSelector is the negated version of the Selector
-                            field.  See Selector field for subtleties with negated
-                            selectors.
-                          type: string
-                        ports:
-                          description: "Ports is an optional field that restricts
-                            the rule to only apply to traffic that has a source (destination)
-                            port that matches one of these ranges/values. This value
-                            is a list of integers or strings that represent ranges
-                            of ports. \n Since only some protocols have ports, if
-                            any ports are specified it requires the Protocol match
-                            in the Rule to be set to \"TCP\" or \"UDP\"."
-                          items:
-                            anyOf:
-                            - type: integer
-                            - type: string
-                            pattern: ^.*
-                            x-kubernetes-int-or-string: true
-                          type: array
-                        selector:
-                          description: "Selector is an optional field that contains
-                            a selector expression (see Policy for sample syntax).
-                            \ Only traffic that originates from (terminates at) endpoints
-                            matching the selector will be matched. \n Note that: in
-                            addition to the negated version of the Selector (see NotSelector
-                            below), the selector expression syntax itself supports
-                            negation.  The two types of negation are subtly different.
-                            One negates the set of matched endpoints, the other negates
-                            the whole match: \n \tSelector = \"!has(my_label)\" matches
-                            packets that are from other Calico-controlled \tendpoints
-                            that do not have the label \"my_label\". \n \tNotSelector
-                            = \"has(my_label)\" matches packets that are not from
-                            Calico-controlled \tendpoints that do have the label \"my_label\".
-                            \n The effect is that the latter will accept packets from
-                            non-Calico sources whereas the former is limited to packets
-                            from Calico-controlled endpoints."
-                          type: string
-                        serviceAccounts:
-                          description: ServiceAccounts is an optional field that restricts
-                            the rule to only apply to traffic that originates from
-                            (or terminates at) a pod running as a matching service
-                            account.
-                          properties:
-                            names:
-                              description: Names is an optional field that restricts
-                                the rule to only apply to traffic that originates
-                                from (or terminates at) a pod running as a service
-                                account whose name is in the list.
-                              items:
-                                type: string
-                              type: array
-                            selector:
-                              description: Selector is an optional field that restricts
-                                the rule to only apply to traffic that originates
-                                from (or terminates at) a pod running as a service
-                                account that matches the given label selector. If
-                                both Names and Selector are specified then they are
-                                AND'ed.
-                              type: string
-                          type: object
-                        services:
-                          description: "Services is an optional field that contains
-                            options for matching Kubernetes Services. If specified,
-                            only traffic that originates from or terminates at endpoints
-                            within the selected service(s) will be matched, and only
-                            to/from each endpoint's port. \n Services cannot be specified
-                            on the same rule as Selector, NotSelector, NamespaceSelector,
-                            Nets, NotNets or ServiceAccounts. \n Ports and NotPorts
-                            can only be specified with Services on ingress rules."
-                          properties:
-                            name:
-                              description: Name specifies the name of a Kubernetes
-                                Service to match.
-                              type: string
-                            namespace:
-                              description: Namespace specifies the namespace of the
-                                given Service. If left empty, the rule will match
-                                within this policy's namespace.
-                              type: string
-                          type: object
-                      type: object
-                    http:
-                      description: HTTP contains match criteria that apply to HTTP
-                        requests.
-                      properties:
-                        methods:
-                          description: Methods is an optional field that restricts
-                            the rule to apply only to HTTP requests that use one of
-                            the listed HTTP Methods (e.g. GET, PUT, etc.) Multiple
-                            methods are OR'd together.
-                          items:
-                            type: string
-                          type: array
-                        paths:
-                          description: 'Paths is an optional field that restricts
-                            the rule to apply to HTTP requests that use one of the
-                            listed HTTP Paths. Multiple paths are OR''d together.
-                            e.g: - exact: /foo - prefix: /bar NOTE: Each entry may
-                            ONLY specify either a `exact` or a `prefix` match. The
-                            validator will check for it.'
-                          items:
-                            description: 'HTTPPath specifies an HTTP path to match.
-                              It may be either of the form: exact: <path>: which matches
-                              the path exactly or prefix: <path-prefix>: which matches
-                              the path prefix'
-                            properties:
-                              exact:
-                                type: string
-                              prefix:
-                                type: string
-                            type: object
-                          type: array
-                      type: object
-                    icmp:
-                      description: ICMP is an optional field that restricts the rule
-                        to apply to a specific type and code of ICMP traffic.  This
-                        should only be specified if the Protocol field is set to "ICMP"
-                        or "ICMPv6".
-                      properties:
-                        code:
-                          description: Match on a specific ICMP code.  If specified,
-                            the Type value must also be specified. This is a technical
-                            limitation imposed by the kernel's iptables firewall,
-                            which Calico uses to enforce the rule.
-                          type: integer
-                        type:
-                          description: Match on a specific ICMP type.  For example
-                            a value of 8 refers to ICMP Echo Request (i.e. pings).
-                          type: integer
-                      type: object
-                    ipVersion:
-                      description: IPVersion is an optional field that restricts the
-                        rule to only match a specific IP version.
-                      type: integer
-                    metadata:
-                      description: Metadata contains additional information for this
-                        rule
-                      properties:
-                        annotations:
-                          additionalProperties:
-                            type: string
-                          description: Annotations is a set of key value pairs that
-                            give extra information about the rule
-                          type: object
-                      type: object
-                    notICMP:
-                      description: NotICMP is the negated version of the ICMP field.
-                      properties:
-                        code:
-                          description: Match on a specific ICMP code.  If specified,
-                            the Type value must also be specified. This is a technical
-                            limitation imposed by the kernel's iptables firewall,
-                            which Calico uses to enforce the rule.
-                          type: integer
-                        type:
-                          description: Match on a specific ICMP type.  For example
-                            a value of 8 refers to ICMP Echo Request (i.e. pings).
-                          type: integer
-                      type: object
-                    notProtocol:
-                      anyOf:
-                      - type: integer
-                      - type: string
-                      description: NotProtocol is the negated version of the Protocol
-                        field.
-                      pattern: ^.*
-                      x-kubernetes-int-or-string: true
-                    protocol:
-                      anyOf:
-                      - type: integer
-                      - type: string
-                      description: "Protocol is an optional field that restricts the
-                        rule to only apply to traffic of a specific IP protocol. Required
-                        if any of the EntityRules contain Ports (because ports only
-                        apply to certain protocols). \n Must be one of these string
-                        values: \"TCP\", \"UDP\", \"ICMP\", \"ICMPv6\", \"SCTP\",
-                        \"UDPLite\" or an integer in the range 1-255."
-                      pattern: ^.*
-                      x-kubernetes-int-or-string: true
-                    source:
-                      description: Source contains the match criteria that apply to
-                        source entity.
-                      properties:
-                        namespaceSelector:
-                          description: "NamespaceSelector is an optional field that
-                            contains a selector expression. Only traffic that originates
-                            from (or terminates at) endpoints within the selected
-                            namespaces will be matched. When both NamespaceSelector
-                            and another selector are defined on the same rule, then
-                            only workload endpoints that are matched by both selectors
-                            will be selected by the rule. \n For NetworkPolicy, an
-                            empty NamespaceSelector implies that the Selector is limited
-                            to selecting only workload endpoints in the same namespace
-                            as the NetworkPolicy. \n For NetworkPolicy, `global()`
-                            NamespaceSelector implies that the Selector is limited
-                            to selecting only GlobalNetworkSet or HostEndpoint. \n
-                            For GlobalNetworkPolicy, an empty NamespaceSelector implies
-                            the Selector applies to workload endpoints across all
-                            namespaces."
-                          type: string
-                        nets:
-                          description: Nets is an optional field that restricts the
-                            rule to only apply to traffic that originates from (or
-                            terminates at) IP addresses in any of the given subnets.
-                          items:
-                            type: string
-                          type: array
-                        notNets:
-                          description: NotNets is the negated version of the Nets
-                            field.
-                          items:
-                            type: string
-                          type: array
-                        notPorts:
-                          description: NotPorts is the negated version of the Ports
-                            field. Since only some protocols have ports, if any ports
-                            are specified it requires the Protocol match in the Rule
-                            to be set to "TCP" or "UDP".
-                          items:
-                            anyOf:
-                            - type: integer
-                            - type: string
-                            pattern: ^.*
-                            x-kubernetes-int-or-string: true
-                          type: array
-                        notSelector:
-                          description: NotSelector is the negated version of the Selector
-                            field.  See Selector field for subtleties with negated
-                            selectors.
-                          type: string
-                        ports:
-                          description: "Ports is an optional field that restricts
-                            the rule to only apply to traffic that has a source (destination)
-                            port that matches one of these ranges/values. This value
-                            is a list of integers or strings that represent ranges
-                            of ports. \n Since only some protocols have ports, if
-                            any ports are specified it requires the Protocol match
-                            in the Rule to be set to \"TCP\" or \"UDP\"."
-                          items:
-                            anyOf:
-                            - type: integer
-                            - type: string
-                            pattern: ^.*
-                            x-kubernetes-int-or-string: true
-                          type: array
-                        selector:
-                          description: "Selector is an optional field that contains
-                            a selector expression (see Policy for sample syntax).
-                            \ Only traffic that originates from (terminates at) endpoints
-                            matching the selector will be matched. \n Note that: in
-                            addition to the negated version of the Selector (see NotSelector
-                            below), the selector expression syntax itself supports
-                            negation.  The two types of negation are subtly different.
-                            One negates the set of matched endpoints, the other negates
-                            the whole match: \n \tSelector = \"!has(my_label)\" matches
-                            packets that are from other Calico-controlled \tendpoints
-                            that do not have the label \"my_label\". \n \tNotSelector
-                            = \"has(my_label)\" matches packets that are not from
-                            Calico-controlled \tendpoints that do have the label \"my_label\".
-                            \n The effect is that the latter will accept packets from
-                            non-Calico sources whereas the former is limited to packets
-                            from Calico-controlled endpoints."
-                          type: string
-                        serviceAccounts:
-                          description: ServiceAccounts is an optional field that restricts
-                            the rule to only apply to traffic that originates from
-                            (or terminates at) a pod running as a matching service
-                            account.
-                          properties:
-                            names:
-                              description: Names is an optional field that restricts
-                                the rule to only apply to traffic that originates
-                                from (or terminates at) a pod running as a service
-                                account whose name is in the list.
-                              items:
-                                type: string
-                              type: array
-                            selector:
-                              description: Selector is an optional field that restricts
-                                the rule to only apply to traffic that originates
-                                from (or terminates at) a pod running as a service
-                                account that matches the given label selector. If
-                                both Names and Selector are specified then they are
-                                AND'ed.
-                              type: string
-                          type: object
-                        services:
-                          description: "Services is an optional field that contains
-                            options for matching Kubernetes Services. If specified,
-                            only traffic that originates from or terminates at endpoints
-                            within the selected service(s) will be matched, and only
-                            to/from each endpoint's port. \n Services cannot be specified
-                            on the same rule as Selector, NotSelector, NamespaceSelector,
-                            Nets, NotNets or ServiceAccounts. \n Ports and NotPorts
-                            can only be specified with Services on ingress rules."
-                          properties:
-                            name:
-                              description: Name specifies the name of a Kubernetes
-                                Service to match.
-                              type: string
-                            namespace:
-                              description: Namespace specifies the namespace of the
-                                given Service. If left empty, the rule will match
-                                within this policy's namespace.
-                              type: string
-                          type: object
-                      type: object
-                  required:
-                  - action
-                  type: object
-                type: array
-              order:
-                description: Order is an optional field that specifies the order in
-                  which the policy is applied. Policies with higher "order" are applied
-                  after those with lower order.  If the order is omitted, it may be
-                  considered to be "infinite" - i.e. the policy will be applied last.  Policies
-                  with identical order will be applied in alphanumerical order based
-                  on the Policy "Name".
-                type: number
-              performanceHints:
-                description: "PerformanceHints contains a list of hints to Calico's
-                  policy engine to help process the policy more efficiently.  Hints
-                  never change the enforcement behaviour of the policy. \n Currently,
-                  the only available hint is \"AssumeNeededOnEveryNode\".  When that
-                  hint is set on a policy, Felix will act as if the policy matches
-                  a local endpoint even if it does not. This is useful for \"preloading\"
-                  any large static policies that are known to be used on every node.
-                  If the policy is _not_ used on a particular node then the work done
-                  to preload the policy (and to maintain it) is wasted."
-                items:
-                  type: string
-                type: array
-              selector:
-                description: "The selector is an expression used to pick out the endpoints
-                  that the policy should be applied to. \n Selector expressions follow
-                  this syntax: \n \tlabel == \"string_literal\"  ->  comparison, e.g.
-                  my_label == \"foo bar\" \tlabel != \"string_literal\"   ->  not
-                  equal; also matches if label is not present \tlabel in { \"a\",
-                  \"b\", \"c\", ... }  ->  true if the value of label X is one of
-                  \"a\", \"b\", \"c\" \tlabel not in { \"a\", \"b\", \"c\", ... }
-                  \ ->  true if the value of label X is not one of \"a\", \"b\", \"c\"
-                  \thas(label_name)  -> True if that label is present \t! expr ->
-                  negation of expr \texpr && expr  -> Short-circuit and \texpr ||
-                  expr  -> Short-circuit or \t( expr ) -> parens for grouping \tall()
-                  or the empty selector -> matches all endpoints. \n Label names are
-                  allowed to contain alphanumerics, -, _ and /. String literals are
-                  more permissive but they do not support escape characters. \n Examples
-                  (with made-up labels): \n \ttype == \"webserver\" && deployment
-                  == \"prod\" \ttype in {\"frontend\", \"backend\"} \tdeployment !=
-                  \"dev\" \t! has(label_name)"
-                type: string
-              serviceAccountSelector:
-                description: ServiceAccountSelector is an optional field for an expression
-                  used to select a pod based on service accounts.
-                type: string
-              types:
-                description: "Types indicates whether this policy applies to ingress,
-                  or to egress, or to both.  When not explicitly specified (and so
-                  the value on creation is empty or nil), Calico defaults Types according
-                  to what Ingress and Egress are present in the policy.  The default
-                  is: \n - [ PolicyTypeIngress ], if there are no Egress rules (including
-                  the case where there are   also no Ingress rules) \n - [ PolicyTypeEgress
-                  ], if there are Egress rules but no Ingress rules \n - [ PolicyTypeIngress,
-                  PolicyTypeEgress ], if there are both Ingress and Egress rules.
-                  \n When the policy is read back again, Types will always be one
-                  of these values, never empty or nil."
-                items:
-                  description: PolicyType enumerates the possible values of the PolicySpec
-                    Types field.
-                  type: string
-                type: array
-            type: object
-        type: object
-    served: true
-    storage: true
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: []
-  storedVersions: []
----
-# Source: calico/templates/kdd-crds.yaml
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  name: networksets.crd.projectcalico.org
-spec:
-  group: crd.projectcalico.org
-  names:
-    kind: NetworkSet
-    listKind: NetworkSetList
-    plural: networksets
-    singular: networkset
-  preserveUnknownFields: false
-  scope: Namespaced
-  versions:
-  - name: v1
-    schema:
-      openAPIV3Schema:
-        description: NetworkSet is the Namespaced-equivalent of the GlobalNetworkSet.
-        properties:
-          apiVersion:
-            description: 'APIVersion defines the versioned schema of this representation
-              of an object. Servers should convert recognized schemas to the latest
-              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
-            type: string
-          kind:
-            description: 'Kind is a string value representing the REST resource this
-              object represents. Servers may infer this from the endpoint the client
-              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: NetworkSetSpec contains the specification for a NetworkSet
-              resource.
-            properties:
-              nets:
-                description: The list of IP networks that belong to this set.
-                items:
-                  type: string
-                type: array
-            type: object
-        type: object
-    served: true
-    storage: true
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: []
-  storedVersions: []
----
-# Source: calico/templates/calico-kube-controllers-rbac.yaml
-# Include a clusterrole for the kube-controllers component,
-# and bind it to the calico-kube-controllers serviceaccount.
-kind: ClusterRole
-apiVersion: rbac.authorization.k8s.io/v1
-metadata:
-  name: calico-kube-controllers
-rules:
-  # Nodes are watched to monitor for deletions.
-  - apiGroups: [""]
-    resources:
-      - nodes
-    verbs:
-      - watch
-      - list
-      - get
-  # Pods are watched to check for existence as part of IPAM controller.
-  - apiGroups: [""]
-    resources:
-      - pods
-    verbs:
-      - get
-      - list
-      - watch
-  # IPAM resources are manipulated in response to node and block updates, as well as periodic triggers.
-  - apiGroups: ["crd.projectcalico.org"]
-    resources:
-      - ipreservations
-    verbs:
-      - list
-  - apiGroups: ["crd.projectcalico.org"]
-    resources:
-      - blockaffinities
-      - ipamblocks
-      - ipamhandles
-    verbs:
-      - get
-      - list
-      - create
-      - update
-      - delete
-      - watch
-  # Pools are watched to maintain a mapping of blocks to IP pools.
-  - apiGroups: ["crd.projectcalico.org"]
-    resources:
-      - ippools
-    verbs:
-      - list
-      - watch
-  # kube-controllers manages hostendpoints.
-  - apiGroups: ["crd.projectcalico.org"]
-    resources:
-      - hostendpoints
-    verbs:
-      - get
-      - list
-      - create
-      - update
-      - delete
-  # Needs access to update clusterinformations.
-  - apiGroups: ["crd.projectcalico.org"]
-    resources:
-      - clusterinformations
-    verbs:
-      - get
-      - list
-      - create
-      - update
-      - watch
-  # KubeControllersConfiguration is where it gets its config
-  - apiGroups: ["crd.projectcalico.org"]
-    resources:
-      - kubecontrollersconfigurations
-    verbs:
-      # read its own config
-      - get
-      - list
-      # create a default if none exists
-      - create
-      # update status
-      - update
-      # watch for changes
-      - watch
----
-# Source: calico/templates/calico-node-rbac.yaml
-# Include a clusterrole for the calico-node DaemonSet,
-# and bind it to the calico-node serviceaccount.
-kind: ClusterRole
-apiVersion: rbac.authorization.k8s.io/v1
-metadata:
-  name: calico-node
-rules:
-  # Used for creating service account tokens to be used by the CNI plugin
-  - apiGroups: [""]
-    resources:
-      - serviceaccounts/token
-    resourceNames:
-      - calico-cni-plugin
-    verbs:
-      - create
-  # The CNI plugin needs to get pods, nodes, and namespaces.
-  - apiGroups: [""]
-    resources:
-      - pods
-      - nodes
-      - namespaces
-    verbs:
-      - get
-  # EndpointSlices are used for Service-based network policy rule
-  # enforcement.
-  - apiGroups: ["discovery.k8s.io"]
-    resources:
-      - endpointslices
-    verbs:
-      - watch
-      - list
-  - apiGroups: [""]
-    resources:
-      - endpoints
-      - services
-    verbs:
-      # Used to discover service IPs for advertisement.
-      - watch
-      - list
-      # Used to discover Typhas.
-      - get
-  # Pod CIDR auto-detection on kubeadm needs access to config maps.
-  - apiGroups: [""]
-    resources:
-      - configmaps
-    verbs:
-      - get
-  - apiGroups: [""]
-    resources:
-      - nodes/status
-    verbs:
-      # Needed for clearing NodeNetworkUnavailable flag.
-      - patch
-      # Calico stores some configuration information in node annotations.
-      - update
-  # Watch for changes to Kubernetes NetworkPolicies.
-  - apiGroups: ["networking.k8s.io"]
-    resources:
-      - networkpolicies
-    verbs:
-      - watch
-      - list
-  # Used by Calico for policy information.
-  - apiGroups: [""]
-    resources:
-      - pods
-      - namespaces
-      - serviceaccounts
-    verbs:
-      - list
-      - watch
-  # The CNI plugin patches pods/status.
-  - apiGroups: [""]
-    resources:
-      - pods/status
-    verbs:
-      - patch
-  # Calico monitors various CRDs for config.
-  - apiGroups: ["crd.projectcalico.org"]
-    resources:
-      - globalfelixconfigs
-      - felixconfigurations
-      - bgppeers
-      - bgpfilters
-      - globalbgpconfigs
-      - bgpconfigurations
-      - ippools
-      - ipreservations
-      - ipamblocks
-      - globalnetworkpolicies
-      - globalnetworksets
-      - networkpolicies
-      - networksets
-      - clusterinformations
-      - hostendpoints
-      - blockaffinities
-      - caliconodestatuses
-    verbs:
-      - get
-      - list
-      - watch
-  # Calico must create and update some CRDs on startup.
-  - apiGroups: ["crd.projectcalico.org"]
-    resources:
-      - ippools
-      - felixconfigurations
-      - clusterinformations
-    verbs:
-      - create
-      - update
-  # Calico must update some CRDs.
-  - apiGroups: ["crd.projectcalico.org"]
-    resources:
-      - caliconodestatuses
-    verbs:
-      - update
-  # Calico stores some configuration information on the node.
-  - apiGroups: [""]
-    resources:
-      - nodes
-    verbs:
-      - get
-      - list
-      - watch
-  # These permissions are only required for upgrade from v2.6, and can
-  # be removed after upgrade or on fresh installations.
-  - apiGroups: ["crd.projectcalico.org"]
-    resources:
-      - bgpconfigurations
-      - bgppeers
-    verbs:
-      - create
-      - update
-  # These permissions are required for Calico CNI to perform IPAM allocations.
-  - apiGroups: ["crd.projectcalico.org"]
-    resources:
-      - blockaffinities
-      - ipamblocks
-      - ipamhandles
-    verbs:
-      - get
-      - list
-      - create
-      - update
-      - delete
-  # The CNI plugin and calico/node need to be able to create a default
-  # IPAMConfiguration
-  - apiGroups: ["crd.projectcalico.org"]
-    resources:
-      - ipamconfigs
-    verbs:
-      - get
-      - create
-  # Block affinities must also be watchable by confd for route aggregation.
-  - apiGroups: ["crd.projectcalico.org"]
-    resources:
-      - blockaffinities
-    verbs:
-      - watch
-  # The Calico IPAM migration needs to get daemonsets. These permissions can be
-  # removed if not upgrading from an installation using host-local IPAM.
-  - apiGroups: ["apps"]
-    resources:
-      - daemonsets
-    verbs:
-      - get
----
-# Source: calico/templates/calico-node-rbac.yaml
-# CNI cluster role
-kind: ClusterRole
-apiVersion: rbac.authorization.k8s.io/v1
-metadata:
-  name: calico-cni-plugin
-rules:
-  - apiGroups: [""]
-    resources:
-      - pods
-      - nodes
-      - namespaces
-    verbs:
-      - get
-  - apiGroups: [""]
-    resources:
-      - pods/status
-    verbs:
-      - patch
-  - apiGroups: ["crd.projectcalico.org"]
-    resources:
-      - blockaffinities
-      - ipamblocks
-      - ipamhandles
-      - clusterinformations
-      - ippools
-      - ipreservations
-      - ipamconfigs
-    verbs:
-      - get
-      - list
-      - create
-      - update
-      - delete
----
-# Source: calico/templates/calico-kube-controllers-rbac.yaml
-kind: ClusterRoleBinding
-apiVersion: rbac.authorization.k8s.io/v1
-metadata:
-  name: calico-kube-controllers
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: ClusterRole
-  name: calico-kube-controllers
-subjects:
-- kind: ServiceAccount
-  name: calico-kube-controllers
-  namespace: kube-system
----
-# Source: calico/templates/calico-node-rbac.yaml
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
-  name: calico-node
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: ClusterRole
-  name: calico-node
-subjects:
-- kind: ServiceAccount
-  name: calico-node
-  namespace: kube-system
----
-# Source: calico/templates/calico-node-rbac.yaml
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
-  name: calico-cni-plugin
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: ClusterRole
-  name: calico-cni-plugin
-subjects:
-- kind: ServiceAccount
-  name: calico-cni-plugin
-  namespace: kube-system
----
-# Source: calico/templates/calico-node.yaml
-# This manifest installs the calico-node container, as well
-# as the CNI plugins and network config on
-# each master and worker node in a Kubernetes cluster.
-kind: DaemonSet
-apiVersion: apps/v1
-metadata:
-  name: calico-node
-  namespace: kube-system
-  labels:
-    k8s-app: calico-node
-spec:
-  selector:
-    matchLabels:
-      k8s-app: calico-node
-  updateStrategy:
-    type: RollingUpdate
-    rollingUpdate:
-      maxUnavailable: 1
-  template:
-    metadata:
-      labels:
-        k8s-app: calico-node
-    spec:
-      nodeSelector:
-        kubernetes.io/os: linux
-      hostNetwork: true
-      tolerations:
-        # Make sure calico-node gets scheduled on all nodes.
-        - effect: NoSchedule
-          operator: Exists
-        # Mark the pod as a critical add-on for rescheduling.
-        - key: CriticalAddonsOnly
-          operator: Exists
-        - effect: NoExecute
-          operator: Exists
-      serviceAccountName: calico-node
-      # Minimize downtime during a rolling upgrade or deletion; tell Kubernetes to do a "force
-      # deletion": https://kubernetes.io/docs/concepts/workloads/pods/pod/#termination-of-pods.
-      terminationGracePeriodSeconds: 0
-      priorityClassName: system-node-critical
-      initContainers:
-        # This container performs upgrade from host-local IPAM to calico-ipam.
-        # It can be deleted if this is a fresh installation, or if you have already
-        # upgraded to use calico-ipam.
-        - name: upgrade-ipam
-          image: docker.io/calico/cni:v3.28.3
-          imagePullPolicy: IfNotPresent
-          command: ["/opt/cni/bin/calico-ipam", "-upgrade"]
-          envFrom:
-          - configMapRef:
-              # Allow KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT to be overridden for eBPF mode.
-              name: kubernetes-services-endpoint
-              optional: true
-          env:
-            - name: KUBERNETES_NODE_NAME
-              valueFrom:
-                fieldRef:
-                  fieldPath: spec.nodeName
-            - name: CALICO_NETWORKING_BACKEND
-              valueFrom:
-                configMapKeyRef:
-                  name: calico-config
-                  key: calico_backend
-          volumeMounts:
-            - mountPath: /var/lib/cni/networks
-              name: host-local-net-dir
-            - mountPath: /host/opt/cni/bin
-              name: cni-bin-dir
-          securityContext:
-            privileged: true
-        # This container installs the CNI binaries
-        # and CNI network config file on each node.
-        - name: install-cni
-          image: docker.io/calico/cni:v3.28.3
-          imagePullPolicy: IfNotPresent
-          command: ["/opt/cni/bin/install"]
-          envFrom:
-          - configMapRef:
-              # Allow KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT to be overridden for eBPF mode.
-              name: kubernetes-services-endpoint
-              optional: true
-          env:
-            # Name of the CNI config file to create.
-            - name: CNI_CONF_NAME
-              value: "10-calico.conflist"
-            # The CNI network config to install on each node.
-            - name: CNI_NETWORK_CONFIG
-              valueFrom:
-                configMapKeyRef:
-                  name: calico-config
-                  key: cni_network_config
-            # Set the hostname based on the k8s node name.
-            - name: KUBERNETES_NODE_NAME
-              valueFrom:
-                fieldRef:
-                  fieldPath: spec.nodeName
-            # CNI MTU Config variable
-            - name: CNI_MTU
-              valueFrom:
-                configMapKeyRef:
-                  name: calico-config
-                  key: veth_mtu
-            # Prevents the container from sleeping forever.
-            - name: SLEEP
-              value: "false"
-          volumeMounts:
-            - mountPath: /host/opt/cni/bin
-              name: cni-bin-dir
-            - mountPath: /host/etc/cni/net.d
-              name: cni-net-dir
-          securityContext:
-            privileged: true
-        # This init container mounts the necessary filesystems needed by the BPF data plane
-        # i.e. bpf at /sys/fs/bpf and cgroup2 at /run/calico/cgroup. Calico-node initialisation is executed
-        # in best effort fashion, i.e. no failure for errors, to not disrupt pod creation in iptable mode.
-        - name: "mount-bpffs"
-          image: docker.io/calico/node:v3.28.3
-          imagePullPolicy: IfNotPresent
-          command: ["calico-node", "-init", "-best-effort"]
-          volumeMounts:
-            - mountPath: /sys/fs
-              name: sys-fs
-              # Bidirectional is required to ensure that the new mount we make at /sys/fs/bpf propagates to the host
-              # so that it outlives the init container.
-              mountPropagation: Bidirectional
-            - mountPath: /var/run/calico
-              name: var-run-calico
-              # Bidirectional is required to ensure that the new mount we make at /run/calico/cgroup propagates to the host
-              # so that it outlives the init container.
-              mountPropagation: Bidirectional
-            # Mount /proc/ from host which usually is an init program at /nodeproc. It's needed by mountns binary,
-            # executed by calico-node, to mount root cgroup2 fs at /run/calico/cgroup to attach CTLB programs correctly.
-            - mountPath: /nodeproc
-              name: nodeproc
-              readOnly: true
-          securityContext:
-            privileged: true
-      containers:
-        # Runs calico-node container on each Kubernetes node. This
-        # container programs network policy and routes on each
-        # host.
-        - name: calico-node
-          image: docker.io/calico/node:v3.28.3
-          imagePullPolicy: IfNotPresent
-          envFrom:
-          - configMapRef:
-              # Allow KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT to be overridden for eBPF mode.
-              name: kubernetes-services-endpoint
-              optional: true
-          env:
-            # Use Kubernetes API as the backing datastore.
-            - name: DATASTORE_TYPE
-              value: "kubernetes"
-            # Wait for the datastore.
-            - name: WAIT_FOR_DATASTORE
-              value: "true"
-            # Set based on the k8s node name.
-            - name: NODENAME
-              valueFrom:
-                fieldRef:
-                  fieldPath: spec.nodeName
-            # Choose the backend to use.
-            - name: CALICO_NETWORKING_BACKEND
-              valueFrom:
-                configMapKeyRef:
-                  name: calico-config
-                  key: calico_backend
-            # Cluster type to identify the deployment type
-            - name: CLUSTER_TYPE
-              value: "k8s,bgp"
-            # Auto-detect the BGP IP address.
-            - name: IP
-              value: "autodetect"
-            # Enable IPIP
-            - name: CALICO_IPV4POOL_IPIP
-              value: "Always"
-            # Enable or Disable VXLAN on the default IP pool.
-            - name: CALICO_IPV4POOL_VXLAN
-              value: "Never"
-            # Enable or Disable VXLAN on the default IPv6 IP pool.
-            - name: CALICO_IPV6POOL_VXLAN
-              value: "Never"
-            # Set MTU for tunnel device used if ipip is enabled
-            - name: FELIX_IPINIPMTU
-              valueFrom:
-                configMapKeyRef:
-                  name: calico-config
-                  key: veth_mtu
-            # Set MTU for the VXLAN tunnel device.
-            - name: FELIX_VXLANMTU
-              valueFrom:
-                configMapKeyRef:
-                  name: calico-config
-                  key: veth_mtu
-            # Set MTU for the Wireguard tunnel device.
-            - name: FELIX_WIREGUARDMTU
-              valueFrom:
-                configMapKeyRef:
-                  name: calico-config
-                  key: veth_mtu
-            # The default IPv4 pool to create on startup if none exists. Pod IPs will be
-            # chosen from this range. Changing this value after installation will have
-            # no effect. This should fall within `--cluster-cidr`.
-            # - name: CALICO_IPV4POOL_CIDR
-            #   value: "192.168.0.0/16"
-            # Disable file logging so `kubectl logs` works.
-            - name: CALICO_DISABLE_FILE_LOGGING
-              value: "true"
-            # Set Felix endpoint to host default action to ACCEPT.
-            - name: FELIX_DEFAULTENDPOINTTOHOSTACTION
-              value: "ACCEPT"
-            # Disable IPv6 on Kubernetes.
-            - name: FELIX_IPV6SUPPORT
-              value: "false"
-            - name: FELIX_HEALTHENABLED
-              value: "true"
-          securityContext:
-            privileged: true
-          resources:
-            requests:
-              cpu: 250m
-          lifecycle:
-            preStop:
-              exec:
-                command:
-                - /bin/calico-node
-                - -shutdown
-          livenessProbe:
-            exec:
-              command:
-              - /bin/calico-node
-              - -felix-live
-              - -bird-live
-            periodSeconds: 10
-            initialDelaySeconds: 10
-            failureThreshold: 6
-            timeoutSeconds: 10
-          readinessProbe:
-            exec:
-              command:
-              - /bin/calico-node
-              - -felix-ready
-              - -bird-ready
-            periodSeconds: 10
-            timeoutSeconds: 10
-          volumeMounts:
-            # For maintaining CNI plugin API credentials.
-            - mountPath: /host/etc/cni/net.d
-              name: cni-net-dir
-              readOnly: false
-            - mountPath: /lib/modules
-              name: lib-modules
-              readOnly: true
-            - mountPath: /run/xtables.lock
-              name: xtables-lock
-              readOnly: false
-            - mountPath: /var/run/calico
-              name: var-run-calico
-              readOnly: false
-            - mountPath: /var/lib/calico
-              name: var-lib-calico
-              readOnly: false
-            - name: policysync
-              mountPath: /var/run/nodeagent
-            # For eBPF mode, we need to be able to mount the BPF filesystem at /sys/fs/bpf so we mount in the
-            # parent directory.
-            - name: bpffs
-              mountPath: /sys/fs/bpf
-            - name: cni-log-dir
-              mountPath: /var/log/calico/cni
-              readOnly: true
-      volumes:
-        # Used by calico-node.
-        - name: lib-modules
-          hostPath:
-            path: /lib/modules
-        - name: var-run-calico
-          hostPath:
-            path: /var/run/calico
-            type: DirectoryOrCreate
-        - name: var-lib-calico
-          hostPath:
-            path: /var/lib/calico
-            type: DirectoryOrCreate
-        - name: xtables-lock
-          hostPath:
-            path: /run/xtables.lock
-            type: FileOrCreate
-        - name: sys-fs
-          hostPath:
-            path: /sys/fs/
-            type: DirectoryOrCreate
-        - name: bpffs
-          hostPath:
-            path: /sys/fs/bpf
-            type: Directory
-        # mount /proc at /nodeproc to be used by mount-bpffs initContainer to mount root cgroup2 fs.
-        - name: nodeproc
-          hostPath:
-            path: /proc
-        # Used to install CNI.
-        - name: cni-bin-dir
-          hostPath:
-            path: /opt/cni/bin
-            type: DirectoryOrCreate
-        - name: cni-net-dir
-          hostPath:
-            path: /etc/cni/net.d
-        # Used to access CNI logs.
-        - name: cni-log-dir
-          hostPath:
-            path: /var/log/calico/cni
-        # Mount in the directory for host-local IPAM allocations. This is
-        # used when upgrading from host-local to calico-ipam, and can be removed
-        # if not using the upgrade-ipam init container.
-        - name: host-local-net-dir
-          hostPath:
-            path: /var/lib/cni/networks
-        # Used to create per-pod Unix Domain Sockets
-        - name: policysync
-          hostPath:
-            type: DirectoryOrCreate
-            path: /var/run/nodeagent
----
-# Source: calico/templates/calico-kube-controllers.yaml
-# See https://github.com/projectcalico/kube-controllers
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: calico-kube-controllers
-  namespace: kube-system
-  labels:
-    k8s-app: calico-kube-controllers
-spec:
-  # The controllers can only have a single active instance.
-  replicas: 1
-  selector:
-    matchLabels:
-      k8s-app: calico-kube-controllers
-  strategy:
-    type: Recreate
-  template:
-    metadata:
-      name: calico-kube-controllers
-      namespace: kube-system
-      labels:
-        k8s-app: calico-kube-controllers
-    spec:
-      nodeSelector:
-        kubernetes.io/os: linux
-      tolerations:
-        # Mark the pod as a critical add-on for rescheduling.
-        - key: CriticalAddonsOnly
-          operator: Exists
-        - key: node-role.kubernetes.io/master
-          effect: NoSchedule
-        - key: node-role.kubernetes.io/control-plane
-          effect: NoSchedule
-      serviceAccountName: calico-kube-controllers
-      priorityClassName: system-cluster-critical
-      containers:
-        - name: calico-kube-controllers
-          image: docker.io/calico/kube-controllers:v3.28.3
-          imagePullPolicy: IfNotPresent
-          env:
-            # Choose which controllers to run.
-            - name: ENABLED_CONTROLLERS
-              value: node
-            - name: DATASTORE_TYPE
-              value: kubernetes
-          livenessProbe:
-            exec:
-              command:
-              - /usr/bin/check-status
-              - -l
-            periodSeconds: 10
-            initialDelaySeconds: 10
-            failureThreshold: 6
-            timeoutSeconds: 10
-          readinessProbe:
-            exec:
-              command:
-              - /usr/bin/check-status
-              - -r
-            periodSeconds: 10
diff --git a/installers/flux/templates/sw-catalogs/cloud-resources/capi/openstack-kubeadm/manifests/post-install/cloud-controller-manager-role-bindings.yaml b/installers/flux/templates/sw-catalogs/cloud-resources/capi/openstack-kubeadm/manifests/post-install/cloud-controller-manager-role-bindings.yaml
deleted file mode 100644 (file)
index 19f3f95..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-apiVersion: v1
-items:
-- apiVersion: rbac.authorization.k8s.io/v1
-  kind: ClusterRoleBinding
-  metadata:
-    name: system:cloud-node-controller
-  roleRef:
-    apiGroup: rbac.authorization.k8s.io
-    kind: ClusterRole
-    name: system:cloud-node-controller
-  subjects:
-  - kind: ServiceAccount
-    name: cloud-node-controller
-    namespace: kube-system
-- apiVersion: rbac.authorization.k8s.io/v1
-  kind: ClusterRoleBinding
-  metadata:
-    name: system:cloud-controller-manager
-  roleRef:
-    apiGroup: rbac.authorization.k8s.io
-    kind: ClusterRole
-    name: system:cloud-controller-manager
-  subjects:
-  - kind: ServiceAccount
-    name: cloud-controller-manager
-    namespace: kube-system
-kind: List
-metadata: {}
\ No newline at end of file
diff --git a/installers/flux/templates/sw-catalogs/cloud-resources/capi/openstack-kubeadm/manifests/post-install/cloud-controller-manager-roles.yaml b/installers/flux/templates/sw-catalogs/cloud-resources/capi/openstack-kubeadm/manifests/post-install/cloud-controller-manager-roles.yaml
deleted file mode 100644 (file)
index 93a47b7..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-apiVersion: v1
-items:
-- apiVersion: rbac.authorization.k8s.io/v1
-  kind: ClusterRole
-  metadata:
-    name: system:cloud-controller-manager
-  rules:
-  - apiGroups:
-    - coordination.k8s.io
-    resources:
-    - leases
-    verbs:
-    - get
-    - create
-    - update
-  - apiGroups:
-    - ""
-    resources:
-    - events
-    verbs:
-    - create
-    - patch
-    - update
-  - apiGroups:
-    - ""
-    resources:
-    - nodes
-    verbs:
-    - '*'
-  - apiGroups:
-    - ""
-    resources:
-    - nodes/status
-    verbs:
-    - patch
-  - apiGroups:
-    - ""
-    resources:
-    - services
-    verbs:
-    - list
-    - patch
-    - update
-    - watch
-  - apiGroups:
-    - ""
-    resources:
-    - services/status
-    verbs:
-    - patch
-  - apiGroups:
-    - ""
-    resources:
-    - serviceaccounts
-    verbs:
-    - create
-    - get
-  - apiGroups:
-    - ""
-    resources:
-    - serviceaccounts/token
-    verbs:
-    - create
-  - apiGroups:
-    - ""
-    resources:
-    - persistentvolumes
-    verbs:
-    - '*'
-  - apiGroups:
-    - ""
-    resources:
-    - endpoints
-    verbs:
-    - create
-    - get
-    - list
-    - watch
-    - update
-  - apiGroups:
-    - ""
-    resources:
-    - configmaps
-    verbs:
-    - get
-    - list
-    - watch
-  - apiGroups:
-    - ""
-    resources:
-    - secrets
-    verbs:
-    - list
-    - get
-    - watch
-- apiVersion: rbac.authorization.k8s.io/v1
-  kind: ClusterRole
-  metadata:
-    name: system:cloud-node-controller
-  rules:
-  - apiGroups:
-    - ""
-    resources:
-    - nodes
-    verbs:
-    - '*'
-  - apiGroups:
-    - ""
-    resources:
-    - nodes/status
-    verbs:
-    - patch
-  - apiGroups:
-    - ""
-    resources:
-    - events
-    verbs:
-    - create
-    - patch
-    - update
-kind: List
-metadata: {}
diff --git a/installers/flux/templates/sw-catalogs/cloud-resources/capi/openstack-kubeadm/manifests/post-install/openstack-cloud-controller-manager-ds.yaml b/installers/flux/templates/sw-catalogs/cloud-resources/capi/openstack-kubeadm/manifests/post-install/openstack-cloud-controller-manager-ds.yaml
deleted file mode 100644 (file)
index 6f54c7e..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
-  name: cloud-controller-manager
-  namespace: kube-system
----
-apiVersion: apps/v1
-kind: DaemonSet
-metadata:
-  name: openstack-cloud-controller-manager
-  namespace: kube-system
-  labels:
-    k8s-app: openstack-cloud-controller-manager
-spec:
-  selector:
-    matchLabels:
-      k8s-app: openstack-cloud-controller-manager
-  updateStrategy:
-    type: RollingUpdate
-  template:
-    metadata:
-      labels:
-        k8s-app: openstack-cloud-controller-manager
-    spec:
-      nodeSelector:
-        node-role.kubernetes.io/control-plane: ""
-      securityContext:
-        runAsUser: 1001
-      tolerations:
-      - key: node.cloudprovider.kubernetes.io/uninitialized
-        value: "true"
-        effect: NoSchedule
-      - key: node-role.kubernetes.io/master
-        effect: NoSchedule
-      - key: node-role.kubernetes.io/control-plane
-        effect: NoSchedule
-      serviceAccountName: cloud-controller-manager
-      containers:
-        - name: openstack-cloud-controller-manager
-          image: registry.k8s.io/provider-os/openstack-cloud-controller-manager:v1.31.2
-          args:
-            - /bin/openstack-cloud-controller-manager
-            - --v=1
-            - --cluster-name=$(CLUSTER_NAME)
-            - --cloud-config=$(CLOUD_CONFIG)
-            - --cloud-provider=openstack
-            - --use-service-account-credentials=false
-            - --bind-address=127.0.0.1
-          volumeMounts:
-            - mountPath: /etc/kubernetes/pki
-              name: k8s-certs
-              readOnly: true
-            - mountPath: /etc/ssl/certs
-              name: ca-certs
-              readOnly: true
-            - mountPath: /etc/config
-              name: cloud-config-volume
-              readOnly: true
-          resources:
-            requests:
-              cpu: 200m
-          env:
-            - name: CLOUD_CONFIG
-              value: /etc/config/cloud.conf
-            - name: CLUSTER_NAME
-              value: kubernetes
-      dnsPolicy: ClusterFirst
-      hostNetwork: true
-      volumes:
-      - hostPath:
-          path: /etc/kubernetes/pki
-          type: DirectoryOrCreate
-        name: k8s-certs
-      - hostPath:
-          path: /etc/ssl/certs
-          type: DirectoryOrCreate
-        name: ca-certs
-      - name: cloud-config-volume
-        secret:
-          secretName: cloud-config
diff --git a/installers/flux/templates/sw-catalogs/infra-controllers/capi/manifests/core-controller/core.yaml b/installers/flux/templates/sw-catalogs/infra-controllers/capi/manifests/core-controller/core.yaml
deleted file mode 100644 (file)
index 49ea596..0000000
+++ /dev/null
@@ -1,14850 +0,0 @@
-apiVersion: v1
-kind: Namespace
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: cluster-api
-    clusterctl.cluster.x-k8s.io: ""
-    control-plane: controller-manager
-  name: capi-system
----
-apiVersion: cert-manager.io/v1
-kind: Issuer
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: cluster-api
-    clusterctl.cluster.x-k8s.io: ""
-  name: capi-selfsigned-issuer
-  namespace: capi-system
-spec:
-  selfSigned: {}
----
-apiVersion: cert-manager.io/v1
-kind: Certificate
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: cluster-api
-    clusterctl.cluster.x-k8s.io: ""
-  name: capi-serving-cert
-  namespace: capi-system
-spec:
-  dnsNames:
-  - capi-webhook-service.capi-system.svc
-  - capi-webhook-service.capi-system.svc.cluster.local
-  issuerRef:
-    kind: Issuer
-    name: capi-selfsigned-issuer
-  secretName: capi-webhook-service-cert
-  subject:
-    organizations:
-    - k8s-sig-cluster-lifecycle
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  annotations:
-    cert-manager.io/inject-ca-from: capi-system/capi-serving-cert
-    controller-gen.kubebuilder.io/version: v0.16.1
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: cluster-api
-    clusterctl.cluster.x-k8s.io: ""
-  name: clusterclasses.cluster.x-k8s.io
-spec:
-  conversion:
-    strategy: Webhook
-    webhook:
-      clientConfig:
-        service:
-          name: capi-webhook-service
-          namespace: capi-system
-          path: /convert
-      conversionReviewVersions:
-      - v1
-      - v1beta1
-  group: cluster.x-k8s.io
-  names:
-    categories:
-    - cluster-api
-    kind: ClusterClass
-    listKind: ClusterClassList
-    plural: clusterclasses
-    shortNames:
-    - cc
-    singular: clusterclass
-  scope: Namespaced
-  versions:
-  - additionalPrinterColumns:
-    - description: Time duration since creation of ClusterClass
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    deprecated: true
-    name: v1alpha4
-    schema:
-      openAPIV3Schema:
-        description: |-
-          ClusterClass is a template which can be used to create managed topologies.
-
-          Deprecated: This type will be removed in one of the next releases.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: ClusterClassSpec describes the desired state of the ClusterClass.
-            properties:
-              controlPlane:
-                description: |-
-                  controlPlane is a reference to a local struct that holds the details
-                  for provisioning the Control Plane for the Cluster.
-                properties:
-                  machineInfrastructure:
-                    description: |-
-                      MachineTemplate defines the metadata and infrastructure information
-                      for control plane machines.
-
-                      This field is supported if and only if the control plane provider template
-                      referenced above is Machine based and supports setting replicas.
-                    properties:
-                      ref:
-                        description: |-
-                          ref is a required reference to a custom resource
-                          offered by a provider.
-                        properties:
-                          apiVersion:
-                            description: API version of the referent.
-                            type: string
-                          fieldPath:
-                            description: |-
-                              If referring to a piece of an object instead of an entire object, this string
-                              should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                              For example, if the object reference is to a container within a pod, this would take on a value like:
-                              "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                              the event) or if no container name is specified "spec.containers[2]" (container with
-                              index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                              referencing a part of an object.
-                            type: string
-                          kind:
-                            description: |-
-                              Kind of the referent.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                            type: string
-                          name:
-                            description: |-
-                              Name of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                            type: string
-                          namespace:
-                            description: |-
-                              Namespace of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                            type: string
-                          resourceVersion:
-                            description: |-
-                              Specific resourceVersion to which this reference is made, if any.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                            type: string
-                          uid:
-                            description: |-
-                              UID of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                            type: string
-                        type: object
-                        x-kubernetes-map-type: atomic
-                    required:
-                    - ref
-                    type: object
-                  metadata:
-                    description: |-
-                      metadata is the metadata applied to the machines of the ControlPlane.
-                      At runtime this metadata is merged with the corresponding metadata from the topology.
-
-                      This field is supported if and only if the control plane provider template
-                      referenced is Machine based.
-                    properties:
-                      annotations:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          annotations is an unstructured key value map stored with a resource that may be
-                          set by external tools to store and retrieve arbitrary metadata. They are not
-                          queryable and should be preserved when modifying objects.
-                          More info: http://kubernetes.io/docs/user-guide/annotations
-                        type: object
-                      labels:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          Map of string keys and values that can be used to organize and categorize
-                          (scope and select) objects. May match selectors of replication controllers
-                          and services.
-                          More info: http://kubernetes.io/docs/user-guide/labels
-                        type: object
-                    type: object
-                  ref:
-                    description: |-
-                      ref is a required reference to a custom resource
-                      offered by a provider.
-                    properties:
-                      apiVersion:
-                        description: API version of the referent.
-                        type: string
-                      fieldPath:
-                        description: |-
-                          If referring to a piece of an object instead of an entire object, this string
-                          should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                          For example, if the object reference is to a container within a pod, this would take on a value like:
-                          "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                          the event) or if no container name is specified "spec.containers[2]" (container with
-                          index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                          referencing a part of an object.
-                        type: string
-                      kind:
-                        description: |-
-                          Kind of the referent.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                        type: string
-                      name:
-                        description: |-
-                          Name of the referent.
-                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                        type: string
-                      namespace:
-                        description: |-
-                          Namespace of the referent.
-                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                        type: string
-                      resourceVersion:
-                        description: |-
-                          Specific resourceVersion to which this reference is made, if any.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                        type: string
-                      uid:
-                        description: |-
-                          UID of the referent.
-                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                        type: string
-                    type: object
-                    x-kubernetes-map-type: atomic
-                required:
-                - ref
-                type: object
-              infrastructure:
-                description: |-
-                  infrastructure is a reference to a provider-specific template that holds
-                  the details for provisioning infrastructure specific cluster
-                  for the underlying provider.
-                  The underlying provider is responsible for the implementation
-                  of the template to an infrastructure cluster.
-                properties:
-                  ref:
-                    description: |-
-                      ref is a required reference to a custom resource
-                      offered by a provider.
-                    properties:
-                      apiVersion:
-                        description: API version of the referent.
-                        type: string
-                      fieldPath:
-                        description: |-
-                          If referring to a piece of an object instead of an entire object, this string
-                          should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                          For example, if the object reference is to a container within a pod, this would take on a value like:
-                          "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                          the event) or if no container name is specified "spec.containers[2]" (container with
-                          index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                          referencing a part of an object.
-                        type: string
-                      kind:
-                        description: |-
-                          Kind of the referent.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                        type: string
-                      name:
-                        description: |-
-                          Name of the referent.
-                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                        type: string
-                      namespace:
-                        description: |-
-                          Namespace of the referent.
-                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                        type: string
-                      resourceVersion:
-                        description: |-
-                          Specific resourceVersion to which this reference is made, if any.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                        type: string
-                      uid:
-                        description: |-
-                          UID of the referent.
-                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                        type: string
-                    type: object
-                    x-kubernetes-map-type: atomic
-                required:
-                - ref
-                type: object
-              workers:
-                description: |-
-                  workers describes the worker nodes for the cluster.
-                  It is a collection of node types which can be used to create
-                  the worker nodes of the cluster.
-                properties:
-                  machineDeployments:
-                    description: |-
-                      machineDeployments is a list of machine deployment classes that can be used to create
-                      a set of worker nodes.
-                    items:
-                      description: |-
-                        MachineDeploymentClass serves as a template to define a set of worker nodes of the cluster
-                        provisioned using the `ClusterClass`.
-                      properties:
-                        class:
-                          description: |-
-                            class denotes a type of worker node present in the cluster,
-                            this name MUST be unique within a ClusterClass and can be referenced
-                            in the Cluster to create a managed MachineDeployment.
-                          type: string
-                        template:
-                          description: |-
-                            template is a local struct containing a collection of templates for creation of
-                            MachineDeployment objects representing a set of worker nodes.
-                          properties:
-                            bootstrap:
-                              description: |-
-                                bootstrap contains the bootstrap template reference to be used
-                                for the creation of worker Machines.
-                              properties:
-                                ref:
-                                  description: |-
-                                    ref is a required reference to a custom resource
-                                    offered by a provider.
-                                  properties:
-                                    apiVersion:
-                                      description: API version of the referent.
-                                      type: string
-                                    fieldPath:
-                                      description: |-
-                                        If referring to a piece of an object instead of an entire object, this string
-                                        should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                                        For example, if the object reference is to a container within a pod, this would take on a value like:
-                                        "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                                        the event) or if no container name is specified "spec.containers[2]" (container with
-                                        index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                                        referencing a part of an object.
-                                      type: string
-                                    kind:
-                                      description: |-
-                                        Kind of the referent.
-                                        More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                                      type: string
-                                    name:
-                                      description: |-
-                                        Name of the referent.
-                                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                      type: string
-                                    namespace:
-                                      description: |-
-                                        Namespace of the referent.
-                                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                                      type: string
-                                    resourceVersion:
-                                      description: |-
-                                        Specific resourceVersion to which this reference is made, if any.
-                                        More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                                      type: string
-                                    uid:
-                                      description: |-
-                                        UID of the referent.
-                                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                                      type: string
-                                  type: object
-                                  x-kubernetes-map-type: atomic
-                              required:
-                              - ref
-                              type: object
-                            infrastructure:
-                              description: |-
-                                infrastructure contains the infrastructure template reference to be used
-                                for the creation of worker Machines.
-                              properties:
-                                ref:
-                                  description: |-
-                                    ref is a required reference to a custom resource
-                                    offered by a provider.
-                                  properties:
-                                    apiVersion:
-                                      description: API version of the referent.
-                                      type: string
-                                    fieldPath:
-                                      description: |-
-                                        If referring to a piece of an object instead of an entire object, this string
-                                        should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                                        For example, if the object reference is to a container within a pod, this would take on a value like:
-                                        "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                                        the event) or if no container name is specified "spec.containers[2]" (container with
-                                        index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                                        referencing a part of an object.
-                                      type: string
-                                    kind:
-                                      description: |-
-                                        Kind of the referent.
-                                        More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                                      type: string
-                                    name:
-                                      description: |-
-                                        Name of the referent.
-                                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                      type: string
-                                    namespace:
-                                      description: |-
-                                        Namespace of the referent.
-                                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                                      type: string
-                                    resourceVersion:
-                                      description: |-
-                                        Specific resourceVersion to which this reference is made, if any.
-                                        More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                                      type: string
-                                    uid:
-                                      description: |-
-                                        UID of the referent.
-                                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                                      type: string
-                                  type: object
-                                  x-kubernetes-map-type: atomic
-                              required:
-                              - ref
-                              type: object
-                            metadata:
-                              description: |-
-                                metadata is the metadata applied to the machines of the MachineDeployment.
-                                At runtime this metadata is merged with the corresponding metadata from the topology.
-                              properties:
-                                annotations:
-                                  additionalProperties:
-                                    type: string
-                                  description: |-
-                                    annotations is an unstructured key value map stored with a resource that may be
-                                    set by external tools to store and retrieve arbitrary metadata. They are not
-                                    queryable and should be preserved when modifying objects.
-                                    More info: http://kubernetes.io/docs/user-guide/annotations
-                                  type: object
-                                labels:
-                                  additionalProperties:
-                                    type: string
-                                  description: |-
-                                    Map of string keys and values that can be used to organize and categorize
-                                    (scope and select) objects. May match selectors of replication controllers
-                                    and services.
-                                    More info: http://kubernetes.io/docs/user-guide/labels
-                                  type: object
-                              type: object
-                          required:
-                          - bootstrap
-                          - infrastructure
-                          type: object
-                      required:
-                      - class
-                      - template
-                      type: object
-                    type: array
-                type: object
-            type: object
-        type: object
-    served: false
-    storage: false
-    subresources: {}
-  - additionalPrinterColumns:
-    - description: Time duration since creation of ClusterClass
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    name: v1beta1
-    schema:
-      openAPIV3Schema:
-        description: ClusterClass is a template which can be used to create managed
-          topologies.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: ClusterClassSpec describes the desired state of the ClusterClass.
-            properties:
-              controlPlane:
-                description: |-
-                  controlPlane is a reference to a local struct that holds the details
-                  for provisioning the Control Plane for the Cluster.
-                properties:
-                  machineHealthCheck:
-                    description: |-
-                      machineHealthCheck defines a MachineHealthCheck for this ControlPlaneClass.
-                      This field is supported if and only if the ControlPlane provider template
-                      referenced above is Machine based and supports setting replicas.
-                    properties:
-                      maxUnhealthy:
-                        anyOf:
-                        - type: integer
-                        - type: string
-                        description: |-
-                          Any further remediation is only allowed if at most "MaxUnhealthy" machines selected by
-                          "selector" are not healthy.
-                        x-kubernetes-int-or-string: true
-                      nodeStartupTimeout:
-                        description: |-
-                          nodeStartupTimeout allows to set the maximum time for MachineHealthCheck
-                          to consider a Machine unhealthy if a corresponding Node isn't associated
-                          through a `Spec.ProviderID` field.
-
-                          The duration set in this field is compared to the greatest of:
-                          - Cluster's infrastructure ready condition timestamp (if and when available)
-                          - Control Plane's initialized condition timestamp (if and when available)
-                          - Machine's infrastructure ready condition timestamp (if and when available)
-                          - Machine's metadata creation timestamp
-
-                          Defaults to 10 minutes.
-                          If you wish to disable this feature, set the value explicitly to 0.
-                        type: string
-                      remediationTemplate:
-                        description: |-
-                          remediationTemplate is a reference to a remediation template
-                          provided by an infrastructure provider.
-
-                          This field is completely optional, when filled, the MachineHealthCheck controller
-                          creates a new object from the template referenced and hands off remediation of the machine to
-                          a controller that lives outside of Cluster API.
-                        properties:
-                          apiVersion:
-                            description: API version of the referent.
-                            type: string
-                          fieldPath:
-                            description: |-
-                              If referring to a piece of an object instead of an entire object, this string
-                              should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                              For example, if the object reference is to a container within a pod, this would take on a value like:
-                              "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                              the event) or if no container name is specified "spec.containers[2]" (container with
-                              index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                              referencing a part of an object.
-                            type: string
-                          kind:
-                            description: |-
-                              Kind of the referent.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                            type: string
-                          name:
-                            description: |-
-                              Name of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                            type: string
-                          namespace:
-                            description: |-
-                              Namespace of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                            type: string
-                          resourceVersion:
-                            description: |-
-                              Specific resourceVersion to which this reference is made, if any.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                            type: string
-                          uid:
-                            description: |-
-                              UID of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                            type: string
-                        type: object
-                        x-kubernetes-map-type: atomic
-                      unhealthyConditions:
-                        description: |-
-                          unhealthyConditions contains a list of the conditions that determine
-                          whether a node is considered unhealthy. The conditions are combined in a
-                          logical OR, i.e. if any of the conditions is met, the node is unhealthy.
-                        items:
-                          description: |-
-                            UnhealthyCondition represents a Node condition type and value with a timeout
-                            specified as a duration.  When the named condition has been in the given
-                            status for at least the timeout value, a node is considered unhealthy.
-                          properties:
-                            status:
-                              minLength: 1
-                              type: string
-                            timeout:
-                              type: string
-                            type:
-                              minLength: 1
-                              type: string
-                          required:
-                          - status
-                          - timeout
-                          - type
-                          type: object
-                        type: array
-                      unhealthyRange:
-                        description: |-
-                          Any further remediation is only allowed if the number of machines selected by "selector" as not healthy
-                          is within the range of "UnhealthyRange". Takes precedence over MaxUnhealthy.
-                          Eg. "[3-5]" - This means that remediation will be allowed only when:
-                          (a) there are at least 3 unhealthy machines (and)
-                          (b) there are at most 5 unhealthy machines
-                        pattern: ^\[[0-9]+-[0-9]+\]$
-                        type: string
-                    type: object
-                  machineInfrastructure:
-                    description: |-
-                      machineInfrastructure defines the metadata and infrastructure information
-                      for control plane machines.
-
-                      This field is supported if and only if the control plane provider template
-                      referenced above is Machine based and supports setting replicas.
-                    properties:
-                      ref:
-                        description: |-
-                          ref is a required reference to a custom resource
-                          offered by a provider.
-                        properties:
-                          apiVersion:
-                            description: API version of the referent.
-                            type: string
-                          fieldPath:
-                            description: |-
-                              If referring to a piece of an object instead of an entire object, this string
-                              should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                              For example, if the object reference is to a container within a pod, this would take on a value like:
-                              "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                              the event) or if no container name is specified "spec.containers[2]" (container with
-                              index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                              referencing a part of an object.
-                            type: string
-                          kind:
-                            description: |-
-                              Kind of the referent.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                            type: string
-                          name:
-                            description: |-
-                              Name of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                            type: string
-                          namespace:
-                            description: |-
-                              Namespace of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                            type: string
-                          resourceVersion:
-                            description: |-
-                              Specific resourceVersion to which this reference is made, if any.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                            type: string
-                          uid:
-                            description: |-
-                              UID of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                            type: string
-                        type: object
-                        x-kubernetes-map-type: atomic
-                    required:
-                    - ref
-                    type: object
-                  metadata:
-                    description: |-
-                      metadata is the metadata applied to the ControlPlane and the Machines of the ControlPlane
-                      if the ControlPlaneTemplate referenced is machine based. If not, it is applied only to the
-                      ControlPlane.
-                      At runtime this metadata is merged with the corresponding metadata from the topology.
-
-                      This field is supported if and only if the control plane provider template
-                      referenced is Machine based.
-                    properties:
-                      annotations:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          annotations is an unstructured key value map stored with a resource that may be
-                          set by external tools to store and retrieve arbitrary metadata. They are not
-                          queryable and should be preserved when modifying objects.
-                          More info: http://kubernetes.io/docs/user-guide/annotations
-                        type: object
-                      labels:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          Map of string keys and values that can be used to organize and categorize
-                          (scope and select) objects. May match selectors of replication controllers
-                          and services.
-                          More info: http://kubernetes.io/docs/user-guide/labels
-                        type: object
-                    type: object
-                  namingStrategy:
-                    description: namingStrategy allows changing the naming pattern
-                      used when creating the control plane provider object.
-                    properties:
-                      template:
-                        description: |-
-                          template defines the template to use for generating the name of the ControlPlane object.
-                          If not defined, it will fallback to `{{ .cluster.name }}-{{ .random }}`.
-                          If the templated string exceeds 63 characters, it will be trimmed to 58 characters and will
-                          get concatenated with a random suffix of length 5.
-                          The templating mechanism provides the following arguments:
-                          * `.cluster.name`: The name of the cluster object.
-                          * `.random`: A random alphanumeric string, without vowels, of length 5.
-                        type: string
-                    type: object
-                  nodeDeletionTimeout:
-                    description: |-
-                      nodeDeletionTimeout defines how long the controller will attempt to delete the Node that the Machine
-                      hosts after the Machine is marked for deletion. A duration of 0 will retry deletion indefinitely.
-                      Defaults to 10 seconds.
-                      NOTE: This value can be overridden while defining a Cluster.Topology.
-                    type: string
-                  nodeDrainTimeout:
-                    description: |-
-                      nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
-                      The default value is 0, meaning that the node can be drained without any time limitations.
-                      NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
-                      NOTE: This value can be overridden while defining a Cluster.Topology.
-                    type: string
-                  nodeVolumeDetachTimeout:
-                    description: |-
-                      nodeVolumeDetachTimeout is the total amount of time that the controller will spend on waiting for all volumes
-                      to be detached. The default value is 0, meaning that the volumes can be detached without any time limitations.
-                      NOTE: This value can be overridden while defining a Cluster.Topology.
-                    type: string
-                  ref:
-                    description: |-
-                      ref is a required reference to a custom resource
-                      offered by a provider.
-                    properties:
-                      apiVersion:
-                        description: API version of the referent.
-                        type: string
-                      fieldPath:
-                        description: |-
-                          If referring to a piece of an object instead of an entire object, this string
-                          should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                          For example, if the object reference is to a container within a pod, this would take on a value like:
-                          "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                          the event) or if no container name is specified "spec.containers[2]" (container with
-                          index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                          referencing a part of an object.
-                        type: string
-                      kind:
-                        description: |-
-                          Kind of the referent.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                        type: string
-                      name:
-                        description: |-
-                          Name of the referent.
-                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                        type: string
-                      namespace:
-                        description: |-
-                          Namespace of the referent.
-                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                        type: string
-                      resourceVersion:
-                        description: |-
-                          Specific resourceVersion to which this reference is made, if any.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                        type: string
-                      uid:
-                        description: |-
-                          UID of the referent.
-                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                        type: string
-                    type: object
-                    x-kubernetes-map-type: atomic
-                required:
-                - ref
-                type: object
-              infrastructure:
-                description: |-
-                  infrastructure is a reference to a provider-specific template that holds
-                  the details for provisioning infrastructure specific cluster
-                  for the underlying provider.
-                  The underlying provider is responsible for the implementation
-                  of the template to an infrastructure cluster.
-                properties:
-                  ref:
-                    description: |-
-                      ref is a required reference to a custom resource
-                      offered by a provider.
-                    properties:
-                      apiVersion:
-                        description: API version of the referent.
-                        type: string
-                      fieldPath:
-                        description: |-
-                          If referring to a piece of an object instead of an entire object, this string
-                          should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                          For example, if the object reference is to a container within a pod, this would take on a value like:
-                          "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                          the event) or if no container name is specified "spec.containers[2]" (container with
-                          index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                          referencing a part of an object.
-                        type: string
-                      kind:
-                        description: |-
-                          Kind of the referent.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                        type: string
-                      name:
-                        description: |-
-                          Name of the referent.
-                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                        type: string
-                      namespace:
-                        description: |-
-                          Namespace of the referent.
-                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                        type: string
-                      resourceVersion:
-                        description: |-
-                          Specific resourceVersion to which this reference is made, if any.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                        type: string
-                      uid:
-                        description: |-
-                          UID of the referent.
-                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                        type: string
-                    type: object
-                    x-kubernetes-map-type: atomic
-                required:
-                - ref
-                type: object
-              patches:
-                description: |-
-                  patches defines the patches which are applied to customize
-                  referenced templates of a ClusterClass.
-                  Note: Patches will be applied in the order of the array.
-                items:
-                  description: ClusterClassPatch defines a patch which is applied
-                    to customize the referenced templates.
-                  properties:
-                    definitions:
-                      description: |-
-                        definitions define inline patches.
-                        Note: Patches will be applied in the order of the array.
-                        Note: Exactly one of Definitions or External must be set.
-                      items:
-                        description: PatchDefinition defines a patch which is applied
-                          to customize the referenced templates.
-                        properties:
-                          jsonPatches:
-                            description: |-
-                              jsonPatches defines the patches which should be applied on the templates
-                              matching the selector.
-                              Note: Patches will be applied in the order of the array.
-                            items:
-                              description: JSONPatch defines a JSON patch.
-                              properties:
-                                op:
-                                  description: |-
-                                    op defines the operation of the patch.
-                                    Note: Only `add`, `replace` and `remove` are supported.
-                                  type: string
-                                path:
-                                  description: |-
-                                    path defines the path of the patch.
-                                    Note: Only the spec of a template can be patched, thus the path has to start with /spec/.
-                                    Note: For now the only allowed array modifications are `append` and `prepend`, i.e.:
-                                    * for op: `add`: only index 0 (prepend) and - (append) are allowed
-                                    * for op: `replace` or `remove`: no indexes are allowed
-                                  type: string
-                                value:
-                                  description: |-
-                                    value defines the value of the patch.
-                                    Note: Either Value or ValueFrom is required for add and replace
-                                    operations. Only one of them is allowed to be set at the same time.
-                                    Note: We have to use apiextensionsv1.JSON instead of our JSON type,
-                                    because controller-tools has a hard-coded schema for apiextensionsv1.JSON
-                                    which cannot be produced by another type (unset type field).
-                                    Ref: https://github.com/kubernetes-sigs/controller-tools/blob/d0e03a142d0ecdd5491593e941ee1d6b5d91dba6/pkg/crd/known_types.go#L106-L111
-                                  x-kubernetes-preserve-unknown-fields: true
-                                valueFrom:
-                                  description: |-
-                                    valueFrom defines the value of the patch.
-                                    Note: Either Value or ValueFrom is required for add and replace
-                                    operations. Only one of them is allowed to be set at the same time.
-                                  properties:
-                                    template:
-                                      description: |-
-                                        template is the Go template to be used to calculate the value.
-                                        A template can reference variables defined in .spec.variables and builtin variables.
-                                        Note: The template must evaluate to a valid YAML or JSON value.
-                                      type: string
-                                    variable:
-                                      description: |-
-                                        variable is the variable to be used as value.
-                                        Variable can be one of the variables defined in .spec.variables or a builtin variable.
-                                      type: string
-                                  type: object
-                              required:
-                              - op
-                              - path
-                              type: object
-                            type: array
-                          selector:
-                            description: selector defines on which templates the patch
-                              should be applied.
-                            properties:
-                              apiVersion:
-                                description: apiVersion filters templates by apiVersion.
-                                type: string
-                              kind:
-                                description: kind filters templates by kind.
-                                type: string
-                              matchResources:
-                                description: matchResources selects templates based
-                                  on where they are referenced.
-                                properties:
-                                  controlPlane:
-                                    description: |-
-                                      controlPlane selects templates referenced in .spec.ControlPlane.
-                                      Note: this will match the controlPlane and also the controlPlane
-                                      machineInfrastructure (depending on the kind and apiVersion).
-                                    type: boolean
-                                  infrastructureCluster:
-                                    description: infrastructureCluster selects templates
-                                      referenced in .spec.infrastructure.
-                                    type: boolean
-                                  machineDeploymentClass:
-                                    description: |-
-                                      machineDeploymentClass selects templates referenced in specific MachineDeploymentClasses in
-                                      .spec.workers.machineDeployments.
-                                    properties:
-                                      names:
-                                        description: names selects templates by class
-                                          names.
-                                        items:
-                                          type: string
-                                        type: array
-                                    type: object
-                                  machinePoolClass:
-                                    description: |-
-                                      machinePoolClass selects templates referenced in specific MachinePoolClasses in
-                                      .spec.workers.machinePools.
-                                    properties:
-                                      names:
-                                        description: names selects templates by class
-                                          names.
-                                        items:
-                                          type: string
-                                        type: array
-                                    type: object
-                                type: object
-                            required:
-                            - apiVersion
-                            - kind
-                            - matchResources
-                            type: object
-                        required:
-                        - jsonPatches
-                        - selector
-                        type: object
-                      type: array
-                    description:
-                      description: description is a human-readable description of
-                        this patch.
-                      type: string
-                    enabledIf:
-                      description: |-
-                        enabledIf is a Go template to be used to calculate if a patch should be enabled.
-                        It can reference variables defined in .spec.variables and builtin variables.
-                        The patch will be enabled if the template evaluates to `true`, otherwise it will
-                        be disabled.
-                        If EnabledIf is not set, the patch will be enabled per default.
-                      type: string
-                    external:
-                      description: |-
-                        external defines an external patch.
-                        Note: Exactly one of Definitions or External must be set.
-                      properties:
-                        discoverVariablesExtension:
-                          description: discoverVariablesExtension references an extension
-                            which is called to discover variables.
-                          type: string
-                        generateExtension:
-                          description: generateExtension references an extension which
-                            is called to generate patches.
-                          type: string
-                        settings:
-                          additionalProperties:
-                            type: string
-                          description: |-
-                            settings defines key value pairs to be passed to the extensions.
-                            Values defined here take precedence over the values defined in the
-                            corresponding ExtensionConfig.
-                          type: object
-                        validateExtension:
-                          description: validateExtension references an extension which
-                            is called to validate the topology.
-                          type: string
-                      type: object
-                    name:
-                      description: name of the patch.
-                      type: string
-                  required:
-                  - name
-                  type: object
-                type: array
-              variables:
-                description: |-
-                  variables defines the variables which can be configured
-                  in the Cluster topology and are then used in patches.
-                items:
-                  description: |-
-                    ClusterClassVariable defines a variable which can
-                    be configured in the Cluster topology and used in patches.
-                  properties:
-                    metadata:
-                      description: |-
-                        metadata is the metadata of a variable.
-                        It can be used to add additional data for higher level tools to
-                        a ClusterClassVariable.
-
-                        Deprecated: This field is deprecated and is going to be removed in the next apiVersion. Please use XMetadata in JSONSchemaProps instead.
-                      properties:
-                        annotations:
-                          additionalProperties:
-                            type: string
-                          description: |-
-                            annotations is an unstructured key value map that can be used to store and
-                            retrieve arbitrary metadata.
-                            They are not queryable.
-                          type: object
-                        labels:
-                          additionalProperties:
-                            type: string
-                          description: |-
-                            Map of string keys and values that can be used to organize and categorize
-                            (scope and select) variables.
-                          type: object
-                      type: object
-                    name:
-                      description: name of the variable.
-                      type: string
-                    required:
-                      description: |-
-                        required specifies if the variable is required.
-                        Note: this applies to the variable as a whole and thus the
-                        top-level object defined in the schema. If nested fields are
-                        required, this will be specified inside the schema.
-                      type: boolean
-                    schema:
-                      description: schema defines the schema of the variable.
-                      properties:
-                        openAPIV3Schema:
-                          description: |-
-                            openAPIV3Schema defines the schema of a variable via OpenAPI v3
-                            schema. The schema is a subset of the schema used in
-                            Kubernetes CRDs.
-                          properties:
-                            additionalProperties:
-                              description: |-
-                                additionalProperties specifies the schema of values in a map (keys are always strings).
-                                NOTE: Can only be set if type is object.
-                                NOTE: AdditionalProperties is mutually exclusive with Properties.
-                                NOTE: This field uses PreserveUnknownFields and Schemaless,
-                                because recursive validation is not possible.
-                              x-kubernetes-preserve-unknown-fields: true
-                            allOf:
-                              description: |-
-                                allOf specifies that the variable must validate against all of the subschemas in the array.
-                                NOTE: This field uses PreserveUnknownFields and Schemaless,
-                                because recursive validation is not possible.
-                              x-kubernetes-preserve-unknown-fields: true
-                            anyOf:
-                              description: |-
-                                anyOf specifies that the variable must validate against one or more of the subschemas in the array.
-                                NOTE: This field uses PreserveUnknownFields and Schemaless,
-                                because recursive validation is not possible.
-                              x-kubernetes-preserve-unknown-fields: true
-                            default:
-                              description: |-
-                                default is the default value of the variable.
-                                NOTE: Can be set for all types.
-                              x-kubernetes-preserve-unknown-fields: true
-                            description:
-                              description: description is a human-readable description
-                                of this variable.
-                              type: string
-                            enum:
-                              description: |-
-                                enum is the list of valid values of the variable.
-                                NOTE: Can be set for all types.
-                              items:
-                                x-kubernetes-preserve-unknown-fields: true
-                              type: array
-                            example:
-                              description: example is an example for this variable.
-                              x-kubernetes-preserve-unknown-fields: true
-                            exclusiveMaximum:
-                              description: |-
-                                exclusiveMaximum specifies if the Maximum is exclusive.
-                                NOTE: Can only be set if type is integer or number.
-                              type: boolean
-                            exclusiveMinimum:
-                              description: |-
-                                exclusiveMinimum specifies if the Minimum is exclusive.
-                                NOTE: Can only be set if type is integer or number.
-                              type: boolean
-                            format:
-                              description: |-
-                                format is an OpenAPI v3 format string. Unknown formats are ignored.
-                                For a list of supported formats please see: (of the k8s.io/apiextensions-apiserver version we're currently using)
-                                https://github.com/kubernetes/apiextensions-apiserver/blob/master/pkg/apiserver/validation/formats.go
-                                NOTE: Can only be set if type is string.
-                              type: string
-                            items:
-                              description: |-
-                                items specifies fields of an array.
-                                NOTE: Can only be set if type is array.
-                                NOTE: This field uses PreserveUnknownFields and Schemaless,
-                                because recursive validation is not possible.
-                              x-kubernetes-preserve-unknown-fields: true
-                            maxItems:
-                              description: |-
-                                maxItems is the max length of an array variable.
-                                NOTE: Can only be set if type is array.
-                              format: int64
-                              type: integer
-                            maxLength:
-                              description: |-
-                                maxLength is the max length of a string variable.
-                                NOTE: Can only be set if type is string.
-                              format: int64
-                              type: integer
-                            maxProperties:
-                              description: |-
-                                maxProperties is the maximum amount of entries in a map or properties in an object.
-                                NOTE: Can only be set if type is object.
-                              format: int64
-                              type: integer
-                            maximum:
-                              description: |-
-                                maximum is the maximum of an integer or number variable.
-                                If ExclusiveMaximum is false, the variable is valid if it is lower than, or equal to, the value of Maximum.
-                                If ExclusiveMaximum is true, the variable is valid if it is strictly lower than the value of Maximum.
-                                NOTE: Can only be set if type is integer or number.
-                              format: int64
-                              type: integer
-                            minItems:
-                              description: |-
-                                minItems is the min length of an array variable.
-                                NOTE: Can only be set if type is array.
-                              format: int64
-                              type: integer
-                            minLength:
-                              description: |-
-                                minLength is the min length of a string variable.
-                                NOTE: Can only be set if type is string.
-                              format: int64
-                              type: integer
-                            minProperties:
-                              description: |-
-                                minProperties is the minimum amount of entries in a map or properties in an object.
-                                NOTE: Can only be set if type is object.
-                              format: int64
-                              type: integer
-                            minimum:
-                              description: |-
-                                minimum is the minimum of an integer or number variable.
-                                If ExclusiveMinimum is false, the variable is valid if it is greater than, or equal to, the value of Minimum.
-                                If ExclusiveMinimum is true, the variable is valid if it is strictly greater than the value of Minimum.
-                                NOTE: Can only be set if type is integer or number.
-                              format: int64
-                              type: integer
-                            not:
-                              description: |-
-                                not specifies that the variable must not validate against the subschema.
-                                NOTE: This field uses PreserveUnknownFields and Schemaless,
-                                because recursive validation is not possible.
-                              x-kubernetes-preserve-unknown-fields: true
-                            oneOf:
-                              description: |-
-                                oneOf specifies that the variable must validate against exactly one of the subschemas in the array.
-                                NOTE: This field uses PreserveUnknownFields and Schemaless,
-                                because recursive validation is not possible.
-                              x-kubernetes-preserve-unknown-fields: true
-                            pattern:
-                              description: |-
-                                pattern is the regex which a string variable must match.
-                                NOTE: Can only be set if type is string.
-                              type: string
-                            properties:
-                              description: |-
-                                properties specifies fields of an object.
-                                NOTE: Can only be set if type is object.
-                                NOTE: Properties is mutually exclusive with AdditionalProperties.
-                                NOTE: This field uses PreserveUnknownFields and Schemaless,
-                                because recursive validation is not possible.
-                              x-kubernetes-preserve-unknown-fields: true
-                            required:
-                              description: |-
-                                required specifies which fields of an object are required.
-                                NOTE: Can only be set if type is object.
-                              items:
-                                type: string
-                              type: array
-                            type:
-                              description: |-
-                                type is the type of the variable.
-                                Valid values are: object, array, string, integer, number or boolean.
-                              type: string
-                            uniqueItems:
-                              description: |-
-                                uniqueItems specifies if items in an array must be unique.
-                                NOTE: Can only be set if type is array.
-                              type: boolean
-                            x-kubernetes-int-or-string:
-                              description: |-
-                                x-kubernetes-int-or-string specifies that this value is
-                                either an integer or a string. If this is true, an empty
-                                type is allowed and type as child of anyOf is permitted
-                                if following one of the following patterns:
-
-                                1) anyOf:
-                                   - type: integer
-                                   - type: string
-                                2) allOf:
-                                   - anyOf:
-                                     - type: integer
-                                     - type: string
-                                   - ... zero or more
-                              type: boolean
-                            x-kubernetes-preserve-unknown-fields:
-                              description: |-
-                                x-kubernetes-preserve-unknown-fields allows setting fields in a variable object
-                                which are not defined in the variable schema. This affects fields recursively,
-                                except if nested properties or additionalProperties are specified in the schema.
-                              type: boolean
-                            x-kubernetes-validations:
-                              description: x-kubernetes-validations describes a list
-                                of validation rules written in the CEL expression
-                                language.
-                              items:
-                                description: ValidationRule describes a validation
-                                  rule written in the CEL expression language.
-                                properties:
-                                  fieldPath:
-                                    description: |-
-                                      fieldPath represents the field path returned when the validation fails.
-                                      It must be a relative JSON path (i.e. with array notation) scoped to the location of this x-kubernetes-validations extension in the schema and refer to an existing field.
-                                      e.g. when validation checks if a specific attribute `foo` under a map `testMap`, the fieldPath could be set to `.testMap.foo`
-                                      If the validation checks two lists must have unique attributes, the fieldPath could be set to either of the list: e.g. `.testList`
-                                      It does not support list numeric index.
-                                      It supports child operation to refer to an existing field currently. Refer to [JSONPath support in Kubernetes](https://kubernetes.io/docs/reference/kubectl/jsonpath/) for more info.
-                                      Numeric index of array is not supported.
-                                      For field name which contains special characters, use `['specialName']` to refer the field name.
-                                      e.g. for attribute `foo.34$` appears in a list `testList`, the fieldPath could be set to `.testList['foo.34$']`
-                                    type: string
-                                  message:
-                                    description: |-
-                                      message represents the message displayed when validation fails. The message is required if the Rule contains
-                                      line breaks. The message must not contain line breaks.
-                                      If unset, the message is "failed rule: {Rule}".
-                                      e.g. "must be a URL with the host matching spec.host"
-                                    type: string
-                                  messageExpression:
-                                    description: |-
-                                      messageExpression declares a CEL expression that evaluates to the validation failure message that is returned when this rule fails.
-                                      Since messageExpression is used as a failure message, it must evaluate to a string.
-                                      If both message and messageExpression are present on a rule, then messageExpression will be used if validation
-                                      fails. If messageExpression results in a runtime error, the validation failure message is produced
-                                      as if the messageExpression field were unset. If messageExpression evaluates to an empty string, a string with only spaces, or a string
-                                      that contains line breaks, then the validation failure message will also be produced as if the messageExpression field were unset.
-                                      messageExpression has access to all the same variables as the rule; the only difference is the return type.
-                                      Example:
-                                      "x must be less than max ("+string(self.max)+")"
-                                    type: string
-                                  reason:
-                                    default: FieldValueInvalid
-                                    description: |-
-                                      reason provides a machine-readable validation failure reason that is returned to the caller when a request fails this validation rule.
-                                      The currently supported reasons are: "FieldValueInvalid", "FieldValueForbidden", "FieldValueRequired", "FieldValueDuplicate".
-                                      If not set, default to use "FieldValueInvalid".
-                                      All future added reasons must be accepted by clients when reading this value and unknown reasons should be treated as FieldValueInvalid.
-                                    enum:
-                                    - FieldValueInvalid
-                                    - FieldValueForbidden
-                                    - FieldValueRequired
-                                    - FieldValueDuplicate
-                                    type: string
-                                  rule:
-                                    description: "rule represents the expression which
-                                      will be evaluated by CEL.\nref: https://github.com/google/cel-spec\nThe
-                                      Rule is scoped to the location of the x-kubernetes-validations
-                                      extension in the schema.\nThe `self` variable
-                                      in the CEL expression is bound to the scoped
-                                      value.\nIf the Rule is scoped to an object with
-                                      properties, the accessible properties of the
-                                      object are field selectable\nvia `self.field`
-                                      and field presence can be checked via `has(self.field)`.\nIf
-                                      the Rule is scoped to an object with additionalProperties
-                                      (i.e. a map) the value of the map\nare accessible
-                                      via `self[mapKey]`, map containment can be checked
-                                      via `mapKey in self` and all entries of the
-                                      map\nare accessible via CEL macros and functions
-                                      such as `self.all(...)`.\nIf the Rule is scoped
-                                      to an array, the elements of the array are accessible
-                                      via `self[i]` and also by macros and\nfunctions.\nIf
-                                      the Rule is scoped to a scalar, `self` is bound
-                                      to the scalar value.\nExamples:\n- Rule scoped
-                                      to a map of objects: {\"rule\": \"self.components['Widget'].priority
-                                      < 10\"}\n- Rule scoped to a list of integers:
-                                      {\"rule\": \"self.values.all(value, value >=
-                                      0 && value < 100)\"}\n- Rule scoped to a string
-                                      value: {\"rule\": \"self.startsWith('kube')\"}\n\nUnknown
-                                      data preserved in custom resources via x-kubernetes-preserve-unknown-fields
-                                      is not accessible in CEL\nexpressions. This
-                                      includes:\n- Unknown field values that are preserved
-                                      by object schemas with x-kubernetes-preserve-unknown-fields.\n-
-                                      Object properties where the property schema
-                                      is of an \"unknown type\". An \"unknown type\"
-                                      is recursively defined as:\n  - A schema with
-                                      no type and x-kubernetes-preserve-unknown-fields
-                                      set to true\n  - An array where the items schema
-                                      is of an \"unknown type\"\n  - An object where
-                                      the additionalProperties schema is of an \"unknown
-                                      type\"\n\nOnly property names of the form `[a-zA-Z_.-/][a-zA-Z0-9_.-/]*`
-                                      are accessible.\nAccessible property names are
-                                      escaped according to the following rules when
-                                      accessed in the expression:\n- '__' escapes
-                                      to '__underscores__'\n- '.' escapes to '__dot__'\n-
-                                      '-' escapes to '__dash__'\n- '/' escapes to
-                                      '__slash__'\n- Property names that exactly match
-                                      a CEL RESERVED keyword escape to '__{keyword}__'.
-                                      The keywords are:\n\t  \"true\", \"false\",
-                                      \"null\", \"in\", \"as\", \"break\", \"const\",
-                                      \"continue\", \"else\", \"for\", \"function\",
-                                      \"if\",\n\t  \"import\", \"let\", \"loop\",
-                                      \"package\", \"namespace\", \"return\".\nExamples:\n
-                                      \ - Rule accessing a property named \"namespace\":
-                                      {\"rule\": \"self.__namespace__ > 0\"}\n  -
-                                      Rule accessing a property named \"x-prop\":
-                                      {\"rule\": \"self.x__dash__prop > 0\"}\n  -
-                                      Rule accessing a property named \"redact__d\":
-                                      {\"rule\": \"self.redact__underscores__d > 0\"}\n\nIf
-                                      `rule` makes use of the `oldSelf` variable it
-                                      is implicitly a\n`transition rule`.\n\nBy default,
-                                      the `oldSelf` variable is the same type as `self`.\n\nTransition
-                                      rules by default are applied only on UPDATE
-                                      requests and are\nskipped if an old value could
-                                      not be found."
-                                    type: string
-                                required:
-                                - rule
-                                type: object
-                              type: array
-                              x-kubernetes-list-map-keys:
-                              - rule
-                              x-kubernetes-list-type: map
-                            x-metadata:
-                              description: |-
-                                x-metadata is the metadata of a variable or a nested field within a variable.
-                                It can be used to add additional data for higher level tools.
-                              properties:
-                                annotations:
-                                  additionalProperties:
-                                    type: string
-                                  description: |-
-                                    annotations is an unstructured key value map that can be used to store and
-                                    retrieve arbitrary metadata.
-                                    They are not queryable.
-                                  type: object
-                                labels:
-                                  additionalProperties:
-                                    type: string
-                                  description: |-
-                                    Map of string keys and values that can be used to organize and categorize
-                                    (scope and select) variables.
-                                  type: object
-                              type: object
-                          type: object
-                      required:
-                      - openAPIV3Schema
-                      type: object
-                  required:
-                  - name
-                  - required
-                  - schema
-                  type: object
-                type: array
-              workers:
-                description: |-
-                  workers describes the worker nodes for the cluster.
-                  It is a collection of node types which can be used to create
-                  the worker nodes of the cluster.
-                properties:
-                  machineDeployments:
-                    description: |-
-                      machineDeployments is a list of machine deployment classes that can be used to create
-                      a set of worker nodes.
-                    items:
-                      description: |-
-                        MachineDeploymentClass serves as a template to define a set of worker nodes of the cluster
-                        provisioned using the `ClusterClass`.
-                      properties:
-                        class:
-                          description: |-
-                            class denotes a type of worker node present in the cluster,
-                            this name MUST be unique within a ClusterClass and can be referenced
-                            in the Cluster to create a managed MachineDeployment.
-                          type: string
-                        failureDomain:
-                          description: |-
-                            failureDomain is the failure domain the machines will be created in.
-                            Must match a key in the FailureDomains map stored on the cluster object.
-                            NOTE: This value can be overridden while defining a Cluster.Topology using this MachineDeploymentClass.
-                          type: string
-                        machineHealthCheck:
-                          description: machineHealthCheck defines a MachineHealthCheck
-                            for this MachineDeploymentClass.
-                          properties:
-                            maxUnhealthy:
-                              anyOf:
-                              - type: integer
-                              - type: string
-                              description: |-
-                                Any further remediation is only allowed if at most "MaxUnhealthy" machines selected by
-                                "selector" are not healthy.
-                              x-kubernetes-int-or-string: true
-                            nodeStartupTimeout:
-                              description: |-
-                                nodeStartupTimeout allows to set the maximum time for MachineHealthCheck
-                                to consider a Machine unhealthy if a corresponding Node isn't associated
-                                through a `Spec.ProviderID` field.
-
-                                The duration set in this field is compared to the greatest of:
-                                - Cluster's infrastructure ready condition timestamp (if and when available)
-                                - Control Plane's initialized condition timestamp (if and when available)
-                                - Machine's infrastructure ready condition timestamp (if and when available)
-                                - Machine's metadata creation timestamp
-
-                                Defaults to 10 minutes.
-                                If you wish to disable this feature, set the value explicitly to 0.
-                              type: string
-                            remediationTemplate:
-                              description: |-
-                                remediationTemplate is a reference to a remediation template
-                                provided by an infrastructure provider.
-
-                                This field is completely optional, when filled, the MachineHealthCheck controller
-                                creates a new object from the template referenced and hands off remediation of the machine to
-                                a controller that lives outside of Cluster API.
-                              properties:
-                                apiVersion:
-                                  description: API version of the referent.
-                                  type: string
-                                fieldPath:
-                                  description: |-
-                                    If referring to a piece of an object instead of an entire object, this string
-                                    should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                                    For example, if the object reference is to a container within a pod, this would take on a value like:
-                                    "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                                    the event) or if no container name is specified "spec.containers[2]" (container with
-                                    index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                                    referencing a part of an object.
-                                  type: string
-                                kind:
-                                  description: |-
-                                    Kind of the referent.
-                                    More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                                  type: string
-                                name:
-                                  description: |-
-                                    Name of the referent.
-                                    More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                  type: string
-                                namespace:
-                                  description: |-
-                                    Namespace of the referent.
-                                    More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                                  type: string
-                                resourceVersion:
-                                  description: |-
-                                    Specific resourceVersion to which this reference is made, if any.
-                                    More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                                  type: string
-                                uid:
-                                  description: |-
-                                    UID of the referent.
-                                    More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                                  type: string
-                              type: object
-                              x-kubernetes-map-type: atomic
-                            unhealthyConditions:
-                              description: |-
-                                unhealthyConditions contains a list of the conditions that determine
-                                whether a node is considered unhealthy. The conditions are combined in a
-                                logical OR, i.e. if any of the conditions is met, the node is unhealthy.
-                              items:
-                                description: |-
-                                  UnhealthyCondition represents a Node condition type and value with a timeout
-                                  specified as a duration.  When the named condition has been in the given
-                                  status for at least the timeout value, a node is considered unhealthy.
-                                properties:
-                                  status:
-                                    minLength: 1
-                                    type: string
-                                  timeout:
-                                    type: string
-                                  type:
-                                    minLength: 1
-                                    type: string
-                                required:
-                                - status
-                                - timeout
-                                - type
-                                type: object
-                              type: array
-                            unhealthyRange:
-                              description: |-
-                                Any further remediation is only allowed if the number of machines selected by "selector" as not healthy
-                                is within the range of "UnhealthyRange". Takes precedence over MaxUnhealthy.
-                                Eg. "[3-5]" - This means that remediation will be allowed only when:
-                                (a) there are at least 3 unhealthy machines (and)
-                                (b) there are at most 5 unhealthy machines
-                              pattern: ^\[[0-9]+-[0-9]+\]$
-                              type: string
-                          type: object
-                        minReadySeconds:
-                          description: |-
-                            Minimum number of seconds for which a newly created machine should
-                            be ready.
-                            Defaults to 0 (machine will be considered available as soon as it
-                            is ready)
-                            NOTE: This value can be overridden while defining a Cluster.Topology using this MachineDeploymentClass.
-                          format: int32
-                          type: integer
-                        namingStrategy:
-                          description: namingStrategy allows changing the naming pattern
-                            used when creating the MachineDeployment.
-                          properties:
-                            template:
-                              description: |-
-                                template defines the template to use for generating the name of the MachineDeployment object.
-                                If not defined, it will fallback to `{{ .cluster.name }}-{{ .machineDeployment.topologyName }}-{{ .random }}`.
-                                If the templated string exceeds 63 characters, it will be trimmed to 58 characters and will
-                                get concatenated with a random suffix of length 5.
-                                The templating mechanism provides the following arguments:
-                                * `.cluster.name`: The name of the cluster object.
-                                * `.random`: A random alphanumeric string, without vowels, of length 5.
-                                * `.machineDeployment.topologyName`: The name of the MachineDeployment topology (Cluster.spec.topology.workers.machineDeployments[].name).
-                              type: string
-                          type: object
-                        nodeDeletionTimeout:
-                          description: |-
-                            nodeDeletionTimeout defines how long the controller will attempt to delete the Node that the Machine
-                            hosts after the Machine is marked for deletion. A duration of 0 will retry deletion indefinitely.
-                            Defaults to 10 seconds.
-                            NOTE: This value can be overridden while defining a Cluster.Topology using this MachineDeploymentClass.
-                          type: string
-                        nodeDrainTimeout:
-                          description: |-
-                            nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
-                            The default value is 0, meaning that the node can be drained without any time limitations.
-                            NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
-                            NOTE: This value can be overridden while defining a Cluster.Topology using this MachineDeploymentClass.
-                          type: string
-                        nodeVolumeDetachTimeout:
-                          description: |-
-                            nodeVolumeDetachTimeout is the total amount of time that the controller will spend on waiting for all volumes
-                            to be detached. The default value is 0, meaning that the volumes can be detached without any time limitations.
-                            NOTE: This value can be overridden while defining a Cluster.Topology using this MachineDeploymentClass.
-                          type: string
-                        strategy:
-                          description: |-
-                            The deployment strategy to use to replace existing machines with
-                            new ones.
-                            NOTE: This value can be overridden while defining a Cluster.Topology using this MachineDeploymentClass.
-                          properties:
-                            remediation:
-                              description: |-
-                                remediation controls the strategy of remediating unhealthy machines
-                                and how remediating operations should occur during the lifecycle of the dependant MachineSets.
-                              properties:
-                                maxInFlight:
-                                  anyOf:
-                                  - type: integer
-                                  - type: string
-                                  description: |-
-                                    maxInFlight determines how many in flight remediations should happen at the same time.
-
-                                    Remediation only happens on the MachineSet with the most current revision, while
-                                    older MachineSets (usually present during rollout operations) aren't allowed to remediate.
-
-                                    Note: In general (independent of remediations), unhealthy machines are always
-                                    prioritized during scale down operations over healthy ones.
-
-                                    MaxInFlight can be set to a fixed number or a percentage.
-                                    Example: when this is set to 20%, the MachineSet controller deletes at most 20% of
-                                    the desired replicas.
-
-                                    If not set, remediation is limited to all machines (bounded by replicas)
-                                    under the active MachineSet's management.
-                                  x-kubernetes-int-or-string: true
-                              type: object
-                            rollingUpdate:
-                              description: |-
-                                Rolling update config params. Present only if
-                                MachineDeploymentStrategyType = RollingUpdate.
-                              properties:
-                                deletePolicy:
-                                  description: |-
-                                    deletePolicy defines the policy used by the MachineDeployment to identify nodes to delete when downscaling.
-                                    Valid values are "Random, "Newest", "Oldest"
-                                    When no value is supplied, the default DeletePolicy of MachineSet is used
-                                  enum:
-                                  - Random
-                                  - Newest
-                                  - Oldest
-                                  type: string
-                                maxSurge:
-                                  anyOf:
-                                  - type: integer
-                                  - type: string
-                                  description: |-
-                                    The maximum number of machines that can be scheduled above the
-                                    desired number of machines.
-                                    Value can be an absolute number (ex: 5) or a percentage of
-                                    desired machines (ex: 10%).
-                                    This can not be 0 if MaxUnavailable is 0.
-                                    Absolute number is calculated from percentage by rounding up.
-                                    Defaults to 1.
-                                    Example: when this is set to 30%, the new MachineSet can be scaled
-                                    up immediately when the rolling update starts, such that the total
-                                    number of old and new machines do not exceed 130% of desired
-                                    machines. Once old machines have been killed, new MachineSet can
-                                    be scaled up further, ensuring that total number of machines running
-                                    at any time during the update is at most 130% of desired machines.
-                                  x-kubernetes-int-or-string: true
-                                maxUnavailable:
-                                  anyOf:
-                                  - type: integer
-                                  - type: string
-                                  description: |-
-                                    The maximum number of machines that can be unavailable during the update.
-                                    Value can be an absolute number (ex: 5) or a percentage of desired
-                                    machines (ex: 10%).
-                                    Absolute number is calculated from percentage by rounding down.
-                                    This can not be 0 if MaxSurge is 0.
-                                    Defaults to 0.
-                                    Example: when this is set to 30%, the old MachineSet can be scaled
-                                    down to 70% of desired machines immediately when the rolling update
-                                    starts. Once new machines are ready, old MachineSet can be scaled
-                                    down further, followed by scaling up the new MachineSet, ensuring
-                                    that the total number of machines available at all times
-                                    during the update is at least 70% of desired machines.
-                                  x-kubernetes-int-or-string: true
-                              type: object
-                            type:
-                              description: |-
-                                type of deployment. Allowed values are RollingUpdate and OnDelete.
-                                The default is RollingUpdate.
-                              enum:
-                              - RollingUpdate
-                              - OnDelete
-                              type: string
-                          type: object
-                        template:
-                          description: |-
-                            template is a local struct containing a collection of templates for creation of
-                            MachineDeployment objects representing a set of worker nodes.
-                          properties:
-                            bootstrap:
-                              description: |-
-                                bootstrap contains the bootstrap template reference to be used
-                                for the creation of worker Machines.
-                              properties:
-                                ref:
-                                  description: |-
-                                    ref is a required reference to a custom resource
-                                    offered by a provider.
-                                  properties:
-                                    apiVersion:
-                                      description: API version of the referent.
-                                      type: string
-                                    fieldPath:
-                                      description: |-
-                                        If referring to a piece of an object instead of an entire object, this string
-                                        should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                                        For example, if the object reference is to a container within a pod, this would take on a value like:
-                                        "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                                        the event) or if no container name is specified "spec.containers[2]" (container with
-                                        index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                                        referencing a part of an object.
-                                      type: string
-                                    kind:
-                                      description: |-
-                                        Kind of the referent.
-                                        More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                                      type: string
-                                    name:
-                                      description: |-
-                                        Name of the referent.
-                                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                      type: string
-                                    namespace:
-                                      description: |-
-                                        Namespace of the referent.
-                                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                                      type: string
-                                    resourceVersion:
-                                      description: |-
-                                        Specific resourceVersion to which this reference is made, if any.
-                                        More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                                      type: string
-                                    uid:
-                                      description: |-
-                                        UID of the referent.
-                                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                                      type: string
-                                  type: object
-                                  x-kubernetes-map-type: atomic
-                              required:
-                              - ref
-                              type: object
-                            infrastructure:
-                              description: |-
-                                infrastructure contains the infrastructure template reference to be used
-                                for the creation of worker Machines.
-                              properties:
-                                ref:
-                                  description: |-
-                                    ref is a required reference to a custom resource
-                                    offered by a provider.
-                                  properties:
-                                    apiVersion:
-                                      description: API version of the referent.
-                                      type: string
-                                    fieldPath:
-                                      description: |-
-                                        If referring to a piece of an object instead of an entire object, this string
-                                        should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                                        For example, if the object reference is to a container within a pod, this would take on a value like:
-                                        "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                                        the event) or if no container name is specified "spec.containers[2]" (container with
-                                        index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                                        referencing a part of an object.
-                                      type: string
-                                    kind:
-                                      description: |-
-                                        Kind of the referent.
-                                        More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                                      type: string
-                                    name:
-                                      description: |-
-                                        Name of the referent.
-                                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                      type: string
-                                    namespace:
-                                      description: |-
-                                        Namespace of the referent.
-                                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                                      type: string
-                                    resourceVersion:
-                                      description: |-
-                                        Specific resourceVersion to which this reference is made, if any.
-                                        More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                                      type: string
-                                    uid:
-                                      description: |-
-                                        UID of the referent.
-                                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                                      type: string
-                                  type: object
-                                  x-kubernetes-map-type: atomic
-                              required:
-                              - ref
-                              type: object
-                            metadata:
-                              description: |-
-                                metadata is the metadata applied to the MachineDeployment and the machines of the MachineDeployment.
-                                At runtime this metadata is merged with the corresponding metadata from the topology.
-                              properties:
-                                annotations:
-                                  additionalProperties:
-                                    type: string
-                                  description: |-
-                                    annotations is an unstructured key value map stored with a resource that may be
-                                    set by external tools to store and retrieve arbitrary metadata. They are not
-                                    queryable and should be preserved when modifying objects.
-                                    More info: http://kubernetes.io/docs/user-guide/annotations
-                                  type: object
-                                labels:
-                                  additionalProperties:
-                                    type: string
-                                  description: |-
-                                    Map of string keys and values that can be used to organize and categorize
-                                    (scope and select) objects. May match selectors of replication controllers
-                                    and services.
-                                    More info: http://kubernetes.io/docs/user-guide/labels
-                                  type: object
-                              type: object
-                          required:
-                          - bootstrap
-                          - infrastructure
-                          type: object
-                      required:
-                      - class
-                      - template
-                      type: object
-                    type: array
-                    x-kubernetes-list-map-keys:
-                    - class
-                    x-kubernetes-list-type: map
-                  machinePools:
-                    description: |-
-                      machinePools is a list of machine pool classes that can be used to create
-                      a set of worker nodes.
-                    items:
-                      description: |-
-                        MachinePoolClass serves as a template to define a pool of worker nodes of the cluster
-                        provisioned using `ClusterClass`.
-                      properties:
-                        class:
-                          description: |-
-                            class denotes a type of machine pool present in the cluster,
-                            this name MUST be unique within a ClusterClass and can be referenced
-                            in the Cluster to create a managed MachinePool.
-                          type: string
-                        failureDomains:
-                          description: |-
-                            failureDomains is the list of failure domains the MachinePool should be attached to.
-                            Must match a key in the FailureDomains map stored on the cluster object.
-                            NOTE: This value can be overridden while defining a Cluster.Topology using this MachinePoolClass.
-                          items:
-                            type: string
-                          type: array
-                        minReadySeconds:
-                          description: |-
-                            Minimum number of seconds for which a newly created machine pool should
-                            be ready.
-                            Defaults to 0 (machine will be considered available as soon as it
-                            is ready)
-                            NOTE: This value can be overridden while defining a Cluster.Topology using this MachinePoolClass.
-                          format: int32
-                          type: integer
-                        namingStrategy:
-                          description: namingStrategy allows changing the naming pattern
-                            used when creating the MachinePool.
-                          properties:
-                            template:
-                              description: |-
-                                template defines the template to use for generating the name of the MachinePool object.
-                                If not defined, it will fallback to `{{ .cluster.name }}-{{ .machinePool.topologyName }}-{{ .random }}`.
-                                If the templated string exceeds 63 characters, it will be trimmed to 58 characters and will
-                                get concatenated with a random suffix of length 5.
-                                The templating mechanism provides the following arguments:
-                                * `.cluster.name`: The name of the cluster object.
-                                * `.random`: A random alphanumeric string, without vowels, of length 5.
-                                * `.machinePool.topologyName`: The name of the MachinePool topology (Cluster.spec.topology.workers.machinePools[].name).
-                              type: string
-                          type: object
-                        nodeDeletionTimeout:
-                          description: |-
-                            nodeDeletionTimeout defines how long the controller will attempt to delete the Node that the Machine
-                            hosts after the Machine Pool is marked for deletion. A duration of 0 will retry deletion indefinitely.
-                            Defaults to 10 seconds.
-                            NOTE: This value can be overridden while defining a Cluster.Topology using this MachinePoolClass.
-                          type: string
-                        nodeDrainTimeout:
-                          description: |-
-                            nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
-                            The default value is 0, meaning that the node can be drained without any time limitations.
-                            NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
-                            NOTE: This value can be overridden while defining a Cluster.Topology using this MachinePoolClass.
-                          type: string
-                        nodeVolumeDetachTimeout:
-                          description: |-
-                            nodeVolumeDetachTimeout is the total amount of time that the controller will spend on waiting for all volumes
-                            to be detached. The default value is 0, meaning that the volumes can be detached without any time limitations.
-                            NOTE: This value can be overridden while defining a Cluster.Topology using this MachinePoolClass.
-                          type: string
-                        template:
-                          description: |-
-                            template is a local struct containing a collection of templates for creation of
-                            MachinePools objects representing a pool of worker nodes.
-                          properties:
-                            bootstrap:
-                              description: |-
-                                bootstrap contains the bootstrap template reference to be used
-                                for the creation of the Machines in the MachinePool.
-                              properties:
-                                ref:
-                                  description: |-
-                                    ref is a required reference to a custom resource
-                                    offered by a provider.
-                                  properties:
-                                    apiVersion:
-                                      description: API version of the referent.
-                                      type: string
-                                    fieldPath:
-                                      description: |-
-                                        If referring to a piece of an object instead of an entire object, this string
-                                        should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                                        For example, if the object reference is to a container within a pod, this would take on a value like:
-                                        "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                                        the event) or if no container name is specified "spec.containers[2]" (container with
-                                        index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                                        referencing a part of an object.
-                                      type: string
-                                    kind:
-                                      description: |-
-                                        Kind of the referent.
-                                        More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                                      type: string
-                                    name:
-                                      description: |-
-                                        Name of the referent.
-                                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                      type: string
-                                    namespace:
-                                      description: |-
-                                        Namespace of the referent.
-                                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                                      type: string
-                                    resourceVersion:
-                                      description: |-
-                                        Specific resourceVersion to which this reference is made, if any.
-                                        More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                                      type: string
-                                    uid:
-                                      description: |-
-                                        UID of the referent.
-                                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                                      type: string
-                                  type: object
-                                  x-kubernetes-map-type: atomic
-                              required:
-                              - ref
-                              type: object
-                            infrastructure:
-                              description: |-
-                                infrastructure contains the infrastructure template reference to be used
-                                for the creation of the MachinePool.
-                              properties:
-                                ref:
-                                  description: |-
-                                    ref is a required reference to a custom resource
-                                    offered by a provider.
-                                  properties:
-                                    apiVersion:
-                                      description: API version of the referent.
-                                      type: string
-                                    fieldPath:
-                                      description: |-
-                                        If referring to a piece of an object instead of an entire object, this string
-                                        should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                                        For example, if the object reference is to a container within a pod, this would take on a value like:
-                                        "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                                        the event) or if no container name is specified "spec.containers[2]" (container with
-                                        index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                                        referencing a part of an object.
-                                      type: string
-                                    kind:
-                                      description: |-
-                                        Kind of the referent.
-                                        More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                                      type: string
-                                    name:
-                                      description: |-
-                                        Name of the referent.
-                                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                      type: string
-                                    namespace:
-                                      description: |-
-                                        Namespace of the referent.
-                                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                                      type: string
-                                    resourceVersion:
-                                      description: |-
-                                        Specific resourceVersion to which this reference is made, if any.
-                                        More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                                      type: string
-                                    uid:
-                                      description: |-
-                                        UID of the referent.
-                                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                                      type: string
-                                  type: object
-                                  x-kubernetes-map-type: atomic
-                              required:
-                              - ref
-                              type: object
-                            metadata:
-                              description: |-
-                                metadata is the metadata applied to the MachinePool.
-                                At runtime this metadata is merged with the corresponding metadata from the topology.
-                              properties:
-                                annotations:
-                                  additionalProperties:
-                                    type: string
-                                  description: |-
-                                    annotations is an unstructured key value map stored with a resource that may be
-                                    set by external tools to store and retrieve arbitrary metadata. They are not
-                                    queryable and should be preserved when modifying objects.
-                                    More info: http://kubernetes.io/docs/user-guide/annotations
-                                  type: object
-                                labels:
-                                  additionalProperties:
-                                    type: string
-                                  description: |-
-                                    Map of string keys and values that can be used to organize and categorize
-                                    (scope and select) objects. May match selectors of replication controllers
-                                    and services.
-                                    More info: http://kubernetes.io/docs/user-guide/labels
-                                  type: object
-                              type: object
-                          required:
-                          - bootstrap
-                          - infrastructure
-                          type: object
-                      required:
-                      - class
-                      - template
-                      type: object
-                    type: array
-                    x-kubernetes-list-map-keys:
-                    - class
-                    x-kubernetes-list-type: map
-                type: object
-            type: object
-          status:
-            description: ClusterClassStatus defines the observed state of the ClusterClass.
-            properties:
-              conditions:
-                description: conditions defines current observed state of the ClusterClass.
-                items:
-                  description: Condition defines an observation of a Cluster API resource
-                    operational state.
-                  properties:
-                    lastTransitionTime:
-                      description: |-
-                        Last time the condition transitioned from one status to another.
-                        This should be when the underlying condition changed. If that is not known, then using the time when
-                        the API field changed is acceptable.
-                      format: date-time
-                      type: string
-                    message:
-                      description: |-
-                        A human readable message indicating details about the transition.
-                        This field may be empty.
-                      type: string
-                    reason:
-                      description: |-
-                        The reason for the condition's last transition in CamelCase.
-                        The specific API may choose whether or not this field is considered a guaranteed API.
-                        This field may be empty.
-                      type: string
-                    severity:
-                      description: |-
-                        severity provides an explicit classification of Reason code, so the users or machines can immediately
-                        understand the current situation and act accordingly.
-                        The Severity field MUST be set only when Status=False.
-                      type: string
-                    status:
-                      description: status of the condition, one of True, False, Unknown.
-                      type: string
-                    type:
-                      description: |-
-                        type of condition in CamelCase or in foo.example.com/CamelCase.
-                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
-                        can be useful (see .node.status.conditions), the ability to deconflict is important.
-                      type: string
-                  required:
-                  - lastTransitionTime
-                  - status
-                  - type
-                  type: object
-                type: array
-              observedGeneration:
-                description: observedGeneration is the latest generation observed
-                  by the controller.
-                format: int64
-                type: integer
-              v1beta2:
-                description: v1beta2 groups all the fields that will be added or modified
-                  in ClusterClass's status with the V1Beta2 version.
-                properties:
-                  conditions:
-                    description: |-
-                      conditions represents the observations of a ClusterClass's current state.
-                      Known condition types are VariablesReady, RefVersionsUpToDate, Paused.
-                    items:
-                      description: Condition contains details for one aspect of the
-                        current state of this API Resource.
-                      properties:
-                        lastTransitionTime:
-                          description: |-
-                            lastTransitionTime is the last time the condition transitioned from one status to another.
-                            This should be when the underlying condition changed.  If that is not known, then using the time when the API field changed is acceptable.
-                          format: date-time
-                          type: string
-                        message:
-                          description: |-
-                            message is a human readable message indicating details about the transition.
-                            This may be an empty string.
-                          maxLength: 32768
-                          type: string
-                        observedGeneration:
-                          description: |-
-                            observedGeneration represents the .metadata.generation that the condition was set based upon.
-                            For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
-                            with respect to the current state of the instance.
-                          format: int64
-                          minimum: 0
-                          type: integer
-                        reason:
-                          description: |-
-                            reason contains a programmatic identifier indicating the reason for the condition's last transition.
-                            Producers of specific condition types may define expected values and meanings for this field,
-                            and whether the values are considered a guaranteed API.
-                            The value should be a CamelCase string.
-                            This field may not be empty.
-                          maxLength: 1024
-                          minLength: 1
-                          pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
-                          type: string
-                        status:
-                          description: status of the condition, one of True, False,
-                            Unknown.
-                          enum:
-                          - "True"
-                          - "False"
-                          - Unknown
-                          type: string
-                        type:
-                          description: type of condition in CamelCase or in foo.example.com/CamelCase.
-                          maxLength: 316
-                          pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-                          type: string
-                      required:
-                      - lastTransitionTime
-                      - message
-                      - reason
-                      - status
-                      - type
-                      type: object
-                    maxItems: 32
-                    type: array
-                    x-kubernetes-list-map-keys:
-                    - type
-                    x-kubernetes-list-type: map
-                type: object
-              variables:
-                description: variables is a list of ClusterClassStatusVariable that
-                  are defined for the ClusterClass.
-                items:
-                  description: ClusterClassStatusVariable defines a variable which
-                    appears in the status of a ClusterClass.
-                  properties:
-                    definitions:
-                      description: definitions is a list of definitions for a variable.
-                      items:
-                        description: ClusterClassStatusVariableDefinition defines
-                          a variable which appears in the status of a ClusterClass.
-                        properties:
-                          from:
-                            description: |-
-                              from specifies the origin of the variable definition.
-                              This will be `inline` for variables defined in the ClusterClass or the name of a patch defined in the ClusterClass
-                              for variables discovered from a DiscoverVariables runtime extensions.
-                            type: string
-                          metadata:
-                            description: |-
-                              metadata is the metadata of a variable.
-                              It can be used to add additional data for higher level tools to
-                              a ClusterClassVariable.
-
-                              Deprecated: This field is deprecated and is going to be removed in the next apiVersion.
-                            properties:
-                              annotations:
-                                additionalProperties:
-                                  type: string
-                                description: |-
-                                  annotations is an unstructured key value map that can be used to store and
-                                  retrieve arbitrary metadata.
-                                  They are not queryable.
-                                type: object
-                              labels:
-                                additionalProperties:
-                                  type: string
-                                description: |-
-                                  Map of string keys and values that can be used to organize and categorize
-                                  (scope and select) variables.
-                                type: object
-                            type: object
-                          required:
-                            description: |-
-                              required specifies if the variable is required.
-                              Note: this applies to the variable as a whole and thus the
-                              top-level object defined in the schema. If nested fields are
-                              required, this will be specified inside the schema.
-                            type: boolean
-                          schema:
-                            description: schema defines the schema of the variable.
-                            properties:
-                              openAPIV3Schema:
-                                description: |-
-                                  openAPIV3Schema defines the schema of a variable via OpenAPI v3
-                                  schema. The schema is a subset of the schema used in
-                                  Kubernetes CRDs.
-                                properties:
-                                  additionalProperties:
-                                    description: |-
-                                      additionalProperties specifies the schema of values in a map (keys are always strings).
-                                      NOTE: Can only be set if type is object.
-                                      NOTE: AdditionalProperties is mutually exclusive with Properties.
-                                      NOTE: This field uses PreserveUnknownFields and Schemaless,
-                                      because recursive validation is not possible.
-                                    x-kubernetes-preserve-unknown-fields: true
-                                  allOf:
-                                    description: |-
-                                      allOf specifies that the variable must validate against all of the subschemas in the array.
-                                      NOTE: This field uses PreserveUnknownFields and Schemaless,
-                                      because recursive validation is not possible.
-                                    x-kubernetes-preserve-unknown-fields: true
-                                  anyOf:
-                                    description: |-
-                                      anyOf specifies that the variable must validate against one or more of the subschemas in the array.
-                                      NOTE: This field uses PreserveUnknownFields and Schemaless,
-                                      because recursive validation is not possible.
-                                    x-kubernetes-preserve-unknown-fields: true
-                                  default:
-                                    description: |-
-                                      default is the default value of the variable.
-                                      NOTE: Can be set for all types.
-                                    x-kubernetes-preserve-unknown-fields: true
-                                  description:
-                                    description: description is a human-readable description
-                                      of this variable.
-                                    type: string
-                                  enum:
-                                    description: |-
-                                      enum is the list of valid values of the variable.
-                                      NOTE: Can be set for all types.
-                                    items:
-                                      x-kubernetes-preserve-unknown-fields: true
-                                    type: array
-                                  example:
-                                    description: example is an example for this variable.
-                                    x-kubernetes-preserve-unknown-fields: true
-                                  exclusiveMaximum:
-                                    description: |-
-                                      exclusiveMaximum specifies if the Maximum is exclusive.
-                                      NOTE: Can only be set if type is integer or number.
-                                    type: boolean
-                                  exclusiveMinimum:
-                                    description: |-
-                                      exclusiveMinimum specifies if the Minimum is exclusive.
-                                      NOTE: Can only be set if type is integer or number.
-                                    type: boolean
-                                  format:
-                                    description: |-
-                                      format is an OpenAPI v3 format string. Unknown formats are ignored.
-                                      For a list of supported formats please see: (of the k8s.io/apiextensions-apiserver version we're currently using)
-                                      https://github.com/kubernetes/apiextensions-apiserver/blob/master/pkg/apiserver/validation/formats.go
-                                      NOTE: Can only be set if type is string.
-                                    type: string
-                                  items:
-                                    description: |-
-                                      items specifies fields of an array.
-                                      NOTE: Can only be set if type is array.
-                                      NOTE: This field uses PreserveUnknownFields and Schemaless,
-                                      because recursive validation is not possible.
-                                    x-kubernetes-preserve-unknown-fields: true
-                                  maxItems:
-                                    description: |-
-                                      maxItems is the max length of an array variable.
-                                      NOTE: Can only be set if type is array.
-                                    format: int64
-                                    type: integer
-                                  maxLength:
-                                    description: |-
-                                      maxLength is the max length of a string variable.
-                                      NOTE: Can only be set if type is string.
-                                    format: int64
-                                    type: integer
-                                  maxProperties:
-                                    description: |-
-                                      maxProperties is the maximum amount of entries in a map or properties in an object.
-                                      NOTE: Can only be set if type is object.
-                                    format: int64
-                                    type: integer
-                                  maximum:
-                                    description: |-
-                                      maximum is the maximum of an integer or number variable.
-                                      If ExclusiveMaximum is false, the variable is valid if it is lower than, or equal to, the value of Maximum.
-                                      If ExclusiveMaximum is true, the variable is valid if it is strictly lower than the value of Maximum.
-                                      NOTE: Can only be set if type is integer or number.
-                                    format: int64
-                                    type: integer
-                                  minItems:
-                                    description: |-
-                                      minItems is the min length of an array variable.
-                                      NOTE: Can only be set if type is array.
-                                    format: int64
-                                    type: integer
-                                  minLength:
-                                    description: |-
-                                      minLength is the min length of a string variable.
-                                      NOTE: Can only be set if type is string.
-                                    format: int64
-                                    type: integer
-                                  minProperties:
-                                    description: |-
-                                      minProperties is the minimum amount of entries in a map or properties in an object.
-                                      NOTE: Can only be set if type is object.
-                                    format: int64
-                                    type: integer
-                                  minimum:
-                                    description: |-
-                                      minimum is the minimum of an integer or number variable.
-                                      If ExclusiveMinimum is false, the variable is valid if it is greater than, or equal to, the value of Minimum.
-                                      If ExclusiveMinimum is true, the variable is valid if it is strictly greater than the value of Minimum.
-                                      NOTE: Can only be set if type is integer or number.
-                                    format: int64
-                                    type: integer
-                                  not:
-                                    description: |-
-                                      not specifies that the variable must not validate against the subschema.
-                                      NOTE: This field uses PreserveUnknownFields and Schemaless,
-                                      because recursive validation is not possible.
-                                    x-kubernetes-preserve-unknown-fields: true
-                                  oneOf:
-                                    description: |-
-                                      oneOf specifies that the variable must validate against exactly one of the subschemas in the array.
-                                      NOTE: This field uses PreserveUnknownFields and Schemaless,
-                                      because recursive validation is not possible.
-                                    x-kubernetes-preserve-unknown-fields: true
-                                  pattern:
-                                    description: |-
-                                      pattern is the regex which a string variable must match.
-                                      NOTE: Can only be set if type is string.
-                                    type: string
-                                  properties:
-                                    description: |-
-                                      properties specifies fields of an object.
-                                      NOTE: Can only be set if type is object.
-                                      NOTE: Properties is mutually exclusive with AdditionalProperties.
-                                      NOTE: This field uses PreserveUnknownFields and Schemaless,
-                                      because recursive validation is not possible.
-                                    x-kubernetes-preserve-unknown-fields: true
-                                  required:
-                                    description: |-
-                                      required specifies which fields of an object are required.
-                                      NOTE: Can only be set if type is object.
-                                    items:
-                                      type: string
-                                    type: array
-                                  type:
-                                    description: |-
-                                      type is the type of the variable.
-                                      Valid values are: object, array, string, integer, number or boolean.
-                                    type: string
-                                  uniqueItems:
-                                    description: |-
-                                      uniqueItems specifies if items in an array must be unique.
-                                      NOTE: Can only be set if type is array.
-                                    type: boolean
-                                  x-kubernetes-int-or-string:
-                                    description: |-
-                                      x-kubernetes-int-or-string specifies that this value is
-                                      either an integer or a string. If this is true, an empty
-                                      type is allowed and type as child of anyOf is permitted
-                                      if following one of the following patterns:
-
-                                      1) anyOf:
-                                         - type: integer
-                                         - type: string
-                                      2) allOf:
-                                         - anyOf:
-                                           - type: integer
-                                           - type: string
-                                         - ... zero or more
-                                    type: boolean
-                                  x-kubernetes-preserve-unknown-fields:
-                                    description: |-
-                                      x-kubernetes-preserve-unknown-fields allows setting fields in a variable object
-                                      which are not defined in the variable schema. This affects fields recursively,
-                                      except if nested properties or additionalProperties are specified in the schema.
-                                    type: boolean
-                                  x-kubernetes-validations:
-                                    description: x-kubernetes-validations describes
-                                      a list of validation rules written in the CEL
-                                      expression language.
-                                    items:
-                                      description: ValidationRule describes a validation
-                                        rule written in the CEL expression language.
-                                      properties:
-                                        fieldPath:
-                                          description: |-
-                                            fieldPath represents the field path returned when the validation fails.
-                                            It must be a relative JSON path (i.e. with array notation) scoped to the location of this x-kubernetes-validations extension in the schema and refer to an existing field.
-                                            e.g. when validation checks if a specific attribute `foo` under a map `testMap`, the fieldPath could be set to `.testMap.foo`
-                                            If the validation checks two lists must have unique attributes, the fieldPath could be set to either of the list: e.g. `.testList`
-                                            It does not support list numeric index.
-                                            It supports child operation to refer to an existing field currently. Refer to [JSONPath support in Kubernetes](https://kubernetes.io/docs/reference/kubectl/jsonpath/) for more info.
-                                            Numeric index of array is not supported.
-                                            For field name which contains special characters, use `['specialName']` to refer the field name.
-                                            e.g. for attribute `foo.34$` appears in a list `testList`, the fieldPath could be set to `.testList['foo.34$']`
-                                          type: string
-                                        message:
-                                          description: |-
-                                            message represents the message displayed when validation fails. The message is required if the Rule contains
-                                            line breaks. The message must not contain line breaks.
-                                            If unset, the message is "failed rule: {Rule}".
-                                            e.g. "must be a URL with the host matching spec.host"
-                                          type: string
-                                        messageExpression:
-                                          description: |-
-                                            messageExpression declares a CEL expression that evaluates to the validation failure message that is returned when this rule fails.
-                                            Since messageExpression is used as a failure message, it must evaluate to a string.
-                                            If both message and messageExpression are present on a rule, then messageExpression will be used if validation
-                                            fails. If messageExpression results in a runtime error, the validation failure message is produced
-                                            as if the messageExpression field were unset. If messageExpression evaluates to an empty string, a string with only spaces, or a string
-                                            that contains line breaks, then the validation failure message will also be produced as if the messageExpression field were unset.
-                                            messageExpression has access to all the same variables as the rule; the only difference is the return type.
-                                            Example:
-                                            "x must be less than max ("+string(self.max)+")"
-                                          type: string
-                                        reason:
-                                          default: FieldValueInvalid
-                                          description: |-
-                                            reason provides a machine-readable validation failure reason that is returned to the caller when a request fails this validation rule.
-                                            The currently supported reasons are: "FieldValueInvalid", "FieldValueForbidden", "FieldValueRequired", "FieldValueDuplicate".
-                                            If not set, default to use "FieldValueInvalid".
-                                            All future added reasons must be accepted by clients when reading this value and unknown reasons should be treated as FieldValueInvalid.
-                                          enum:
-                                          - FieldValueInvalid
-                                          - FieldValueForbidden
-                                          - FieldValueRequired
-                                          - FieldValueDuplicate
-                                          type: string
-                                        rule:
-                                          description: "rule represents the expression
-                                            which will be evaluated by CEL.\nref:
-                                            https://github.com/google/cel-spec\nThe
-                                            Rule is scoped to the location of the
-                                            x-kubernetes-validations extension in
-                                            the schema.\nThe `self` variable in the
-                                            CEL expression is bound to the scoped
-                                            value.\nIf the Rule is scoped to an object
-                                            with properties, the accessible properties
-                                            of the object are field selectable\nvia
-                                            `self.field` and field presence can be
-                                            checked via `has(self.field)`.\nIf the
-                                            Rule is scoped to an object with additionalProperties
-                                            (i.e. a map) the value of the map\nare
-                                            accessible via `self[mapKey]`, map containment
-                                            can be checked via `mapKey in self` and
-                                            all entries of the map\nare accessible
-                                            via CEL macros and functions such as `self.all(...)`.\nIf
-                                            the Rule is scoped to an array, the elements
-                                            of the array are accessible via `self[i]`
-                                            and also by macros and\nfunctions.\nIf
-                                            the Rule is scoped to a scalar, `self`
-                                            is bound to the scalar value.\nExamples:\n-
-                                            Rule scoped to a map of objects: {\"rule\":
-                                            \"self.components['Widget'].priority <
-                                            10\"}\n- Rule scoped to a list of integers:
-                                            {\"rule\": \"self.values.all(value, value
-                                            >= 0 && value < 100)\"}\n- Rule scoped
-                                            to a string value: {\"rule\": \"self.startsWith('kube')\"}\n\nUnknown
-                                            data preserved in custom resources via
-                                            x-kubernetes-preserve-unknown-fields is
-                                            not accessible in CEL\nexpressions. This
-                                            includes:\n- Unknown field values that
-                                            are preserved by object schemas with x-kubernetes-preserve-unknown-fields.\n-
-                                            Object properties where the property schema
-                                            is of an \"unknown type\". An \"unknown
-                                            type\" is recursively defined as:\n  -
-                                            A schema with no type and x-kubernetes-preserve-unknown-fields
-                                            set to true\n  - An array where the items
-                                            schema is of an \"unknown type\"\n  -
-                                            An object where the additionalProperties
-                                            schema is of an \"unknown type\"\n\nOnly
-                                            property names of the form `[a-zA-Z_.-/][a-zA-Z0-9_.-/]*`
-                                            are accessible.\nAccessible property names
-                                            are escaped according to the following
-                                            rules when accessed in the expression:\n-
-                                            '__' escapes to '__underscores__'\n- '.'
-                                            escapes to '__dot__'\n- '-' escapes to
-                                            '__dash__'\n- '/' escapes to '__slash__'\n-
-                                            Property names that exactly match a CEL
-                                            RESERVED keyword escape to '__{keyword}__'.
-                                            The keywords are:\n\t  \"true\", \"false\",
-                                            \"null\", \"in\", \"as\", \"break\", \"const\",
-                                            \"continue\", \"else\", \"for\", \"function\",
-                                            \"if\",\n\t  \"import\", \"let\", \"loop\",
-                                            \"package\", \"namespace\", \"return\".\nExamples:\n
-                                            \ - Rule accessing a property named \"namespace\":
-                                            {\"rule\": \"self.__namespace__ > 0\"}\n
-                                            \ - Rule accessing a property named \"x-prop\":
-                                            {\"rule\": \"self.x__dash__prop > 0\"}\n
-                                            \ - Rule accessing a property named \"redact__d\":
-                                            {\"rule\": \"self.redact__underscores__d
-                                            > 0\"}\n\nIf `rule` makes use of the `oldSelf`
-                                            variable it is implicitly a\n`transition
-                                            rule`.\n\nBy default, the `oldSelf` variable
-                                            is the same type as `self`.\n\nTransition
-                                            rules by default are applied only on UPDATE
-                                            requests and are\nskipped if an old value
-                                            could not be found."
-                                          type: string
-                                      required:
-                                      - rule
-                                      type: object
-                                    type: array
-                                    x-kubernetes-list-map-keys:
-                                    - rule
-                                    x-kubernetes-list-type: map
-                                  x-metadata:
-                                    description: |-
-                                      x-metadata is the metadata of a variable or a nested field within a variable.
-                                      It can be used to add additional data for higher level tools.
-                                    properties:
-                                      annotations:
-                                        additionalProperties:
-                                          type: string
-                                        description: |-
-                                          annotations is an unstructured key value map that can be used to store and
-                                          retrieve arbitrary metadata.
-                                          They are not queryable.
-                                        type: object
-                                      labels:
-                                        additionalProperties:
-                                          type: string
-                                        description: |-
-                                          Map of string keys and values that can be used to organize and categorize
-                                          (scope and select) variables.
-                                        type: object
-                                    type: object
-                                type: object
-                            required:
-                            - openAPIV3Schema
-                            type: object
-                        required:
-                        - from
-                        - required
-                        - schema
-                        type: object
-                      type: array
-                    definitionsConflict:
-                      description: definitionsConflict specifies whether or not there
-                        are conflicting definitions for a single variable name.
-                      type: boolean
-                    name:
-                      description: name is the name of the variable.
-                      type: string
-                  required:
-                  - definitions
-                  - name
-                  type: object
-                type: array
-            type: object
-        type: object
-    served: true
-    storage: true
-    subresources:
-      status: {}
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: null
-  storedVersions: null
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  annotations:
-    cert-manager.io/inject-ca-from: capi-system/capi-serving-cert
-    controller-gen.kubebuilder.io/version: v0.16.1
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: cluster-api
-    clusterctl.cluster.x-k8s.io: ""
-  name: clusterresourcesetbindings.addons.cluster.x-k8s.io
-spec:
-  conversion:
-    strategy: Webhook
-    webhook:
-      clientConfig:
-        service:
-          name: capi-webhook-service
-          namespace: capi-system
-          path: /convert
-      conversionReviewVersions:
-      - v1
-      - v1beta1
-  group: addons.cluster.x-k8s.io
-  names:
-    categories:
-    - cluster-api
-    kind: ClusterResourceSetBinding
-    listKind: ClusterResourceSetBindingList
-    plural: clusterresourcesetbindings
-    singular: clusterresourcesetbinding
-  scope: Namespaced
-  versions:
-  - deprecated: true
-    name: v1alpha3
-    schema:
-      openAPIV3Schema:
-        description: |-
-          ClusterResourceSetBinding lists all matching ClusterResourceSets with the cluster it belongs to.
-
-          Deprecated: This type will be removed in one of the next releases.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: ClusterResourceSetBindingSpec defines the desired state of
-              ClusterResourceSetBinding.
-            properties:
-              bindings:
-                description: bindings is a list of ClusterResourceSets and their resources.
-                items:
-                  description: ResourceSetBinding keeps info on all of the resources
-                    in a ClusterResourceSet.
-                  properties:
-                    clusterResourceSetName:
-                      description: clusterResourceSetName is the name of the ClusterResourceSet
-                        that is applied to the owner cluster of the binding.
-                      type: string
-                    resources:
-                      description: resources is a list of resources that the ClusterResourceSet
-                        has.
-                      items:
-                        description: ResourceBinding shows the status of a resource
-                          that belongs to a ClusterResourceSet matched by the owner
-                          cluster of the ClusterResourceSetBinding object.
-                        properties:
-                          applied:
-                            description: applied is to track if a resource is applied
-                              to the cluster or not.
-                            type: boolean
-                          hash:
-                            description: |-
-                              hash is the hash of a resource's data. This can be used to decide if a resource is changed.
-                              For "ApplyOnce" ClusterResourceSet.spec.strategy, this is no-op as that strategy does not act on change.
-                            type: string
-                          kind:
-                            description: 'kind of the resource. Supported kinds are:
-                              Secrets and ConfigMaps.'
-                            enum:
-                            - Secret
-                            - ConfigMap
-                            type: string
-                          lastAppliedTime:
-                            description: lastAppliedTime identifies when this resource
-                              was last applied to the cluster.
-                            format: date-time
-                            type: string
-                          name:
-                            description: name of the resource that is in the same
-                              namespace with ClusterResourceSet object.
-                            minLength: 1
-                            type: string
-                        required:
-                        - applied
-                        - kind
-                        - name
-                        type: object
-                      type: array
-                  required:
-                  - clusterResourceSetName
-                  type: object
-                type: array
-            type: object
-        type: object
-    served: false
-    storage: false
-    subresources:
-      status: {}
-  - additionalPrinterColumns:
-    - description: Time duration since creation of ClusterResourceSetBinding
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    deprecated: true
-    name: v1alpha4
-    schema:
-      openAPIV3Schema:
-        description: |-
-          ClusterResourceSetBinding lists all matching ClusterResourceSets with the cluster it belongs to.
-
-          Deprecated: This type will be removed in one of the next releases.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: ClusterResourceSetBindingSpec defines the desired state of
-              ClusterResourceSetBinding.
-            properties:
-              bindings:
-                description: bindings is a list of ClusterResourceSets and their resources.
-                items:
-                  description: ResourceSetBinding keeps info on all of the resources
-                    in a ClusterResourceSet.
-                  properties:
-                    clusterResourceSetName:
-                      description: clusterResourceSetName is the name of the ClusterResourceSet
-                        that is applied to the owner cluster of the binding.
-                      type: string
-                    resources:
-                      description: resources is a list of resources that the ClusterResourceSet
-                        has.
-                      items:
-                        description: ResourceBinding shows the status of a resource
-                          that belongs to a ClusterResourceSet matched by the owner
-                          cluster of the ClusterResourceSetBinding object.
-                        properties:
-                          applied:
-                            description: applied is to track if a resource is applied
-                              to the cluster or not.
-                            type: boolean
-                          hash:
-                            description: |-
-                              hash is the hash of a resource's data. This can be used to decide if a resource is changed.
-                              For "ApplyOnce" ClusterResourceSet.spec.strategy, this is no-op as that strategy does not act on change.
-                            type: string
-                          kind:
-                            description: 'kind of the resource. Supported kinds are:
-                              Secrets and ConfigMaps.'
-                            enum:
-                            - Secret
-                            - ConfigMap
-                            type: string
-                          lastAppliedTime:
-                            description: lastAppliedTime identifies when this resource
-                              was last applied to the cluster.
-                            format: date-time
-                            type: string
-                          name:
-                            description: name of the resource that is in the same
-                              namespace with ClusterResourceSet object.
-                            minLength: 1
-                            type: string
-                        required:
-                        - applied
-                        - kind
-                        - name
-                        type: object
-                      type: array
-                  required:
-                  - clusterResourceSetName
-                  type: object
-                type: array
-            type: object
-        type: object
-    served: false
-    storage: false
-    subresources:
-      status: {}
-  - additionalPrinterColumns:
-    - description: Time duration since creation of ClusterResourceSetBinding
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    name: v1beta1
-    schema:
-      openAPIV3Schema:
-        description: ClusterResourceSetBinding lists all matching ClusterResourceSets
-          with the cluster it belongs to.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: ClusterResourceSetBindingSpec defines the desired state of
-              ClusterResourceSetBinding.
-            properties:
-              bindings:
-                description: bindings is a list of ClusterResourceSets and their resources.
-                items:
-                  description: ResourceSetBinding keeps info on all of the resources
-                    in a ClusterResourceSet.
-                  properties:
-                    clusterResourceSetName:
-                      description: clusterResourceSetName is the name of the ClusterResourceSet
-                        that is applied to the owner cluster of the binding.
-                      type: string
-                    resources:
-                      description: resources is a list of resources that the ClusterResourceSet
-                        has.
-                      items:
-                        description: ResourceBinding shows the status of a resource
-                          that belongs to a ClusterResourceSet matched by the owner
-                          cluster of the ClusterResourceSetBinding object.
-                        properties:
-                          applied:
-                            description: applied is to track if a resource is applied
-                              to the cluster or not.
-                            type: boolean
-                          hash:
-                            description: |-
-                              hash is the hash of a resource's data. This can be used to decide if a resource is changed.
-                              For "ApplyOnce" ClusterResourceSet.spec.strategy, this is no-op as that strategy does not act on change.
-                            type: string
-                          kind:
-                            description: 'kind of the resource. Supported kinds are:
-                              Secrets and ConfigMaps.'
-                            enum:
-                            - Secret
-                            - ConfigMap
-                            type: string
-                          lastAppliedTime:
-                            description: lastAppliedTime identifies when this resource
-                              was last applied to the cluster.
-                            format: date-time
-                            type: string
-                          name:
-                            description: name of the resource that is in the same
-                              namespace with ClusterResourceSet object.
-                            minLength: 1
-                            type: string
-                        required:
-                        - applied
-                        - kind
-                        - name
-                        type: object
-                      type: array
-                  required:
-                  - clusterResourceSetName
-                  type: object
-                type: array
-              clusterName:
-                description: |-
-                  clusterName is the name of the Cluster this binding applies to.
-                  Note: this field mandatory in v1beta2.
-                type: string
-            type: object
-        type: object
-    served: true
-    storage: true
-    subresources:
-      status: {}
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: null
-  storedVersions: null
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  annotations:
-    cert-manager.io/inject-ca-from: capi-system/capi-serving-cert
-    controller-gen.kubebuilder.io/version: v0.16.1
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: cluster-api
-    clusterctl.cluster.x-k8s.io: ""
-  name: clusterresourcesets.addons.cluster.x-k8s.io
-spec:
-  conversion:
-    strategy: Webhook
-    webhook:
-      clientConfig:
-        service:
-          name: capi-webhook-service
-          namespace: capi-system
-          path: /convert
-      conversionReviewVersions:
-      - v1
-      - v1beta1
-  group: addons.cluster.x-k8s.io
-  names:
-    categories:
-    - cluster-api
-    kind: ClusterResourceSet
-    listKind: ClusterResourceSetList
-    plural: clusterresourcesets
-    singular: clusterresourceset
-  scope: Namespaced
-  versions:
-  - deprecated: true
-    name: v1alpha3
-    schema:
-      openAPIV3Schema:
-        description: |-
-          ClusterResourceSet is the Schema for the clusterresourcesets API.
-
-          Deprecated: This type will be removed in one of the next releases.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: ClusterResourceSetSpec defines the desired state of ClusterResourceSet.
-            properties:
-              clusterSelector:
-                description: |-
-                  Label selector for Clusters. The Clusters that are
-                  selected by this will be the ones affected by this ClusterResourceSet.
-                  It must match the Cluster labels. This field is immutable.
-                properties:
-                  matchExpressions:
-                    description: matchExpressions is a list of label selector requirements.
-                      The requirements are ANDed.
-                    items:
-                      description: |-
-                        A label selector requirement is a selector that contains values, a key, and an operator that
-                        relates the key and values.
-                      properties:
-                        key:
-                          description: key is the label key that the selector applies
-                            to.
-                          type: string
-                        operator:
-                          description: |-
-                            operator represents a key's relationship to a set of values.
-                            Valid operators are In, NotIn, Exists and DoesNotExist.
-                          type: string
-                        values:
-                          description: |-
-                            values is an array of string values. If the operator is In or NotIn,
-                            the values array must be non-empty. If the operator is Exists or DoesNotExist,
-                            the values array must be empty. This array is replaced during a strategic
-                            merge patch.
-                          items:
-                            type: string
-                          type: array
-                          x-kubernetes-list-type: atomic
-                      required:
-                      - key
-                      - operator
-                      type: object
-                    type: array
-                    x-kubernetes-list-type: atomic
-                  matchLabels:
-                    additionalProperties:
-                      type: string
-                    description: |-
-                      matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
-                      map is equivalent to an element of matchExpressions, whose key field is "key", the
-                      operator is "In", and the values array contains only "value". The requirements are ANDed.
-                    type: object
-                type: object
-                x-kubernetes-map-type: atomic
-              resources:
-                description: resources is a list of Secrets/ConfigMaps where each
-                  contains 1 or more resources to be applied to remote clusters.
-                items:
-                  description: ResourceRef specifies a resource.
-                  properties:
-                    kind:
-                      description: 'kind of the resource. Supported kinds are: Secrets
-                        and ConfigMaps.'
-                      enum:
-                      - Secret
-                      - ConfigMap
-                      type: string
-                    name:
-                      description: name of the resource that is in the same namespace
-                        with ClusterResourceSet object.
-                      minLength: 1
-                      type: string
-                  required:
-                  - kind
-                  - name
-                  type: object
-                type: array
-              strategy:
-                description: strategy is the strategy to be used during applying resources.
-                  Defaults to ApplyOnce. This field is immutable.
-                enum:
-                - ApplyOnce
-                type: string
-            required:
-            - clusterSelector
-            type: object
-          status:
-            description: ClusterResourceSetStatus defines the observed state of ClusterResourceSet.
-            properties:
-              conditions:
-                description: conditions defines current state of the ClusterResourceSet.
-                items:
-                  description: Condition defines an observation of a Cluster API resource
-                    operational state.
-                  properties:
-                    lastTransitionTime:
-                      description: |-
-                        Last time the condition transitioned from one status to another.
-                        This should be when the underlying condition changed. If that is not known, then using the time when
-                        the API field changed is acceptable.
-                      format: date-time
-                      type: string
-                    message:
-                      description: |-
-                        A human readable message indicating details about the transition.
-                        This field may be empty.
-                      type: string
-                    reason:
-                      description: |-
-                        The reason for the condition's last transition in CamelCase.
-                        The specific API may choose whether or not this field is considered a guaranteed API.
-                        This field may not be empty.
-                      type: string
-                    severity:
-                      description: |-
-                        severity provides an explicit classification of Reason code, so the users or machines can immediately
-                        understand the current situation and act accordingly.
-                        The Severity field MUST be set only when Status=False.
-                      type: string
-                    status:
-                      description: status of the condition, one of True, False, Unknown.
-                      type: string
-                    type:
-                      description: |-
-                        type of condition in CamelCase or in foo.example.com/CamelCase.
-                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
-                        can be useful (see .node.status.conditions), the ability to deconflict is important.
-                      type: string
-                  required:
-                  - status
-                  - type
-                  type: object
-                type: array
-              observedGeneration:
-                description: observedGeneration reflects the generation of the most
-                  recently observed ClusterResourceSet.
-                format: int64
-                type: integer
-            type: object
-        type: object
-    served: false
-    storage: false
-    subresources:
-      status: {}
-  - additionalPrinterColumns:
-    - description: Time duration since creation of ClusterResourceSet
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    deprecated: true
-    name: v1alpha4
-    schema:
-      openAPIV3Schema:
-        description: |-
-          ClusterResourceSet is the Schema for the clusterresourcesets API.
-
-          Deprecated: This type will be removed in one of the next releases.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: ClusterResourceSetSpec defines the desired state of ClusterResourceSet.
-            properties:
-              clusterSelector:
-                description: |-
-                  Label selector for Clusters. The Clusters that are
-                  selected by this will be the ones affected by this ClusterResourceSet.
-                  It must match the Cluster labels. This field is immutable.
-                  Label selector cannot be empty.
-                properties:
-                  matchExpressions:
-                    description: matchExpressions is a list of label selector requirements.
-                      The requirements are ANDed.
-                    items:
-                      description: |-
-                        A label selector requirement is a selector that contains values, a key, and an operator that
-                        relates the key and values.
-                      properties:
-                        key:
-                          description: key is the label key that the selector applies
-                            to.
-                          type: string
-                        operator:
-                          description: |-
-                            operator represents a key's relationship to a set of values.
-                            Valid operators are In, NotIn, Exists and DoesNotExist.
-                          type: string
-                        values:
-                          description: |-
-                            values is an array of string values. If the operator is In or NotIn,
-                            the values array must be non-empty. If the operator is Exists or DoesNotExist,
-                            the values array must be empty. This array is replaced during a strategic
-                            merge patch.
-                          items:
-                            type: string
-                          type: array
-                          x-kubernetes-list-type: atomic
-                      required:
-                      - key
-                      - operator
-                      type: object
-                    type: array
-                    x-kubernetes-list-type: atomic
-                  matchLabels:
-                    additionalProperties:
-                      type: string
-                    description: |-
-                      matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
-                      map is equivalent to an element of matchExpressions, whose key field is "key", the
-                      operator is "In", and the values array contains only "value". The requirements are ANDed.
-                    type: object
-                type: object
-                x-kubernetes-map-type: atomic
-              resources:
-                description: resources is a list of Secrets/ConfigMaps where each
-                  contains 1 or more resources to be applied to remote clusters.
-                items:
-                  description: ResourceRef specifies a resource.
-                  properties:
-                    kind:
-                      description: 'kind of the resource. Supported kinds are: Secrets
-                        and ConfigMaps.'
-                      enum:
-                      - Secret
-                      - ConfigMap
-                      type: string
-                    name:
-                      description: name of the resource that is in the same namespace
-                        with ClusterResourceSet object.
-                      minLength: 1
-                      type: string
-                  required:
-                  - kind
-                  - name
-                  type: object
-                type: array
-              strategy:
-                description: strategy is the strategy to be used during applying resources.
-                  Defaults to ApplyOnce. This field is immutable.
-                enum:
-                - ApplyOnce
-                type: string
-            required:
-            - clusterSelector
-            type: object
-          status:
-            description: ClusterResourceSetStatus defines the observed state of ClusterResourceSet.
-            properties:
-              conditions:
-                description: conditions defines current state of the ClusterResourceSet.
-                items:
-                  description: Condition defines an observation of a Cluster API resource
-                    operational state.
-                  properties:
-                    lastTransitionTime:
-                      description: |-
-                        Last time the condition transitioned from one status to another.
-                        This should be when the underlying condition changed. If that is not known, then using the time when
-                        the API field changed is acceptable.
-                      format: date-time
-                      type: string
-                    message:
-                      description: |-
-                        A human readable message indicating details about the transition.
-                        This field may be empty.
-                      type: string
-                    reason:
-                      description: |-
-                        The reason for the condition's last transition in CamelCase.
-                        The specific API may choose whether or not this field is considered a guaranteed API.
-                        This field may not be empty.
-                      type: string
-                    severity:
-                      description: |-
-                        severity provides an explicit classification of Reason code, so the users or machines can immediately
-                        understand the current situation and act accordingly.
-                        The Severity field MUST be set only when Status=False.
-                      type: string
-                    status:
-                      description: status of the condition, one of True, False, Unknown.
-                      type: string
-                    type:
-                      description: |-
-                        type of condition in CamelCase or in foo.example.com/CamelCase.
-                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
-                        can be useful (see .node.status.conditions), the ability to deconflict is important.
-                      type: string
-                  required:
-                  - status
-                  - type
-                  type: object
-                type: array
-              observedGeneration:
-                description: observedGeneration reflects the generation of the most
-                  recently observed ClusterResourceSet.
-                format: int64
-                type: integer
-            type: object
-        type: object
-    served: false
-    storage: false
-    subresources:
-      status: {}
-  - additionalPrinterColumns:
-    - description: Time duration since creation of ClusterResourceSet
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    name: v1beta1
-    schema:
-      openAPIV3Schema:
-        description: ClusterResourceSet is the Schema for the clusterresourcesets
-          API.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: ClusterResourceSetSpec defines the desired state of ClusterResourceSet.
-            properties:
-              clusterSelector:
-                description: |-
-                  Label selector for Clusters. The Clusters that are
-                  selected by this will be the ones affected by this ClusterResourceSet.
-                  It must match the Cluster labels. This field is immutable.
-                  Label selector cannot be empty.
-                properties:
-                  matchExpressions:
-                    description: matchExpressions is a list of label selector requirements.
-                      The requirements are ANDed.
-                    items:
-                      description: |-
-                        A label selector requirement is a selector that contains values, a key, and an operator that
-                        relates the key and values.
-                      properties:
-                        key:
-                          description: key is the label key that the selector applies
-                            to.
-                          type: string
-                        operator:
-                          description: |-
-                            operator represents a key's relationship to a set of values.
-                            Valid operators are In, NotIn, Exists and DoesNotExist.
-                          type: string
-                        values:
-                          description: |-
-                            values is an array of string values. If the operator is In or NotIn,
-                            the values array must be non-empty. If the operator is Exists or DoesNotExist,
-                            the values array must be empty. This array is replaced during a strategic
-                            merge patch.
-                          items:
-                            type: string
-                          type: array
-                          x-kubernetes-list-type: atomic
-                      required:
-                      - key
-                      - operator
-                      type: object
-                    type: array
-                    x-kubernetes-list-type: atomic
-                  matchLabels:
-                    additionalProperties:
-                      type: string
-                    description: |-
-                      matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
-                      map is equivalent to an element of matchExpressions, whose key field is "key", the
-                      operator is "In", and the values array contains only "value". The requirements are ANDed.
-                    type: object
-                type: object
-                x-kubernetes-map-type: atomic
-              resources:
-                description: resources is a list of Secrets/ConfigMaps where each
-                  contains 1 or more resources to be applied to remote clusters.
-                items:
-                  description: ResourceRef specifies a resource.
-                  properties:
-                    kind:
-                      description: 'kind of the resource. Supported kinds are: Secrets
-                        and ConfigMaps.'
-                      enum:
-                      - Secret
-                      - ConfigMap
-                      type: string
-                    name:
-                      description: name of the resource that is in the same namespace
-                        with ClusterResourceSet object.
-                      minLength: 1
-                      type: string
-                  required:
-                  - kind
-                  - name
-                  type: object
-                type: array
-              strategy:
-                description: strategy is the strategy to be used during applying resources.
-                  Defaults to ApplyOnce. This field is immutable.
-                enum:
-                - ApplyOnce
-                - Reconcile
-                type: string
-            required:
-            - clusterSelector
-            type: object
-          status:
-            description: ClusterResourceSetStatus defines the observed state of ClusterResourceSet.
-            properties:
-              conditions:
-                description: conditions defines current state of the ClusterResourceSet.
-                items:
-                  description: Condition defines an observation of a Cluster API resource
-                    operational state.
-                  properties:
-                    lastTransitionTime:
-                      description: |-
-                        Last time the condition transitioned from one status to another.
-                        This should be when the underlying condition changed. If that is not known, then using the time when
-                        the API field changed is acceptable.
-                      format: date-time
-                      type: string
-                    message:
-                      description: |-
-                        A human readable message indicating details about the transition.
-                        This field may be empty.
-                      type: string
-                    reason:
-                      description: |-
-                        The reason for the condition's last transition in CamelCase.
-                        The specific API may choose whether or not this field is considered a guaranteed API.
-                        This field may be empty.
-                      type: string
-                    severity:
-                      description: |-
-                        severity provides an explicit classification of Reason code, so the users or machines can immediately
-                        understand the current situation and act accordingly.
-                        The Severity field MUST be set only when Status=False.
-                      type: string
-                    status:
-                      description: status of the condition, one of True, False, Unknown.
-                      type: string
-                    type:
-                      description: |-
-                        type of condition in CamelCase or in foo.example.com/CamelCase.
-                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
-                        can be useful (see .node.status.conditions), the ability to deconflict is important.
-                      type: string
-                  required:
-                  - lastTransitionTime
-                  - status
-                  - type
-                  type: object
-                type: array
-              observedGeneration:
-                description: observedGeneration reflects the generation of the most
-                  recently observed ClusterResourceSet.
-                format: int64
-                type: integer
-              v1beta2:
-                description: v1beta2 groups all the fields that will be added or modified
-                  in ClusterResourceSet's status with the V1Beta2 version.
-                properties:
-                  conditions:
-                    description: |-
-                      conditions represents the observations of a ClusterResourceSet's current state.
-                      Known condition types are ResourceSetApplied, Deleting.
-                    items:
-                      description: Condition contains details for one aspect of the
-                        current state of this API Resource.
-                      properties:
-                        lastTransitionTime:
-                          description: |-
-                            lastTransitionTime is the last time the condition transitioned from one status to another.
-                            This should be when the underlying condition changed.  If that is not known, then using the time when the API field changed is acceptable.
-                          format: date-time
-                          type: string
-                        message:
-                          description: |-
-                            message is a human readable message indicating details about the transition.
-                            This may be an empty string.
-                          maxLength: 32768
-                          type: string
-                        observedGeneration:
-                          description: |-
-                            observedGeneration represents the .metadata.generation that the condition was set based upon.
-                            For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
-                            with respect to the current state of the instance.
-                          format: int64
-                          minimum: 0
-                          type: integer
-                        reason:
-                          description: |-
-                            reason contains a programmatic identifier indicating the reason for the condition's last transition.
-                            Producers of specific condition types may define expected values and meanings for this field,
-                            and whether the values are considered a guaranteed API.
-                            The value should be a CamelCase string.
-                            This field may not be empty.
-                          maxLength: 1024
-                          minLength: 1
-                          pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
-                          type: string
-                        status:
-                          description: status of the condition, one of True, False,
-                            Unknown.
-                          enum:
-                          - "True"
-                          - "False"
-                          - Unknown
-                          type: string
-                        type:
-                          description: type of condition in CamelCase or in foo.example.com/CamelCase.
-                          maxLength: 316
-                          pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-                          type: string
-                      required:
-                      - lastTransitionTime
-                      - message
-                      - reason
-                      - status
-                      - type
-                      type: object
-                    maxItems: 32
-                    type: array
-                    x-kubernetes-list-map-keys:
-                    - type
-                    x-kubernetes-list-type: map
-                type: object
-            type: object
-        type: object
-    served: true
-    storage: true
-    subresources:
-      status: {}
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: null
-  storedVersions: null
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  annotations:
-    cert-manager.io/inject-ca-from: capi-system/capi-serving-cert
-    controller-gen.kubebuilder.io/version: v0.16.1
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: cluster-api
-    clusterctl.cluster.x-k8s.io: ""
-  name: clusters.cluster.x-k8s.io
-spec:
-  conversion:
-    strategy: Webhook
-    webhook:
-      clientConfig:
-        service:
-          name: capi-webhook-service
-          namespace: capi-system
-          path: /convert
-      conversionReviewVersions:
-      - v1
-      - v1beta1
-  group: cluster.x-k8s.io
-  names:
-    categories:
-    - cluster-api
-    kind: Cluster
-    listKind: ClusterList
-    plural: clusters
-    shortNames:
-    - cl
-    singular: cluster
-  scope: Namespaced
-  versions:
-  - additionalPrinterColumns:
-    - description: Cluster status such as Pending/Provisioning/Provisioned/Deleting/Failed
-      jsonPath: .status.phase
-      name: Phase
-      type: string
-    deprecated: true
-    name: v1alpha3
-    schema:
-      openAPIV3Schema:
-        description: Cluster is the Schema for the clusters API.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: ClusterSpec defines the desired state of Cluster.
-            properties:
-              clusterNetwork:
-                description: Cluster network configuration.
-                properties:
-                  apiServerPort:
-                    description: |-
-                      apiServerPort specifies the port the API Server should bind to.
-                      Defaults to 6443.
-                    format: int32
-                    type: integer
-                  pods:
-                    description: The network ranges from which Pod networks are allocated.
-                    properties:
-                      cidrBlocks:
-                        items:
-                          type: string
-                        type: array
-                    required:
-                    - cidrBlocks
-                    type: object
-                  serviceDomain:
-                    description: Domain name for services.
-                    type: string
-                  services:
-                    description: The network ranges from which service VIPs are allocated.
-                    properties:
-                      cidrBlocks:
-                        items:
-                          type: string
-                        type: array
-                    required:
-                    - cidrBlocks
-                    type: object
-                type: object
-              controlPlaneEndpoint:
-                description: controlPlaneEndpoint represents the endpoint used to
-                  communicate with the control plane.
-                properties:
-                  host:
-                    description: The hostname on which the API server is serving.
-                    type: string
-                  port:
-                    description: The port on which the API server is serving.
-                    format: int32
-                    type: integer
-                required:
-                - host
-                - port
-                type: object
-              controlPlaneRef:
-                description: |-
-                  controlPlaneRef is an optional reference to a provider-specific resource that holds
-                  the details for provisioning the Control Plane for a Cluster.
-                properties:
-                  apiVersion:
-                    description: API version of the referent.
-                    type: string
-                  fieldPath:
-                    description: |-
-                      If referring to a piece of an object instead of an entire object, this string
-                      should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                      For example, if the object reference is to a container within a pod, this would take on a value like:
-                      "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                      the event) or if no container name is specified "spec.containers[2]" (container with
-                      index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                      referencing a part of an object.
-                    type: string
-                  kind:
-                    description: |-
-                      Kind of the referent.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                    type: string
-                  name:
-                    description: |-
-                      Name of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                    type: string
-                  namespace:
-                    description: |-
-                      Namespace of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                    type: string
-                  resourceVersion:
-                    description: |-
-                      Specific resourceVersion to which this reference is made, if any.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                    type: string
-                  uid:
-                    description: |-
-                      UID of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                    type: string
-                type: object
-                x-kubernetes-map-type: atomic
-              infrastructureRef:
-                description: |-
-                  infrastructureRef is a reference to a provider-specific resource that holds the details
-                  for provisioning infrastructure for a cluster in said provider.
-                properties:
-                  apiVersion:
-                    description: API version of the referent.
-                    type: string
-                  fieldPath:
-                    description: |-
-                      If referring to a piece of an object instead of an entire object, this string
-                      should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                      For example, if the object reference is to a container within a pod, this would take on a value like:
-                      "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                      the event) or if no container name is specified "spec.containers[2]" (container with
-                      index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                      referencing a part of an object.
-                    type: string
-                  kind:
-                    description: |-
-                      Kind of the referent.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                    type: string
-                  name:
-                    description: |-
-                      Name of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                    type: string
-                  namespace:
-                    description: |-
-                      Namespace of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                    type: string
-                  resourceVersion:
-                    description: |-
-                      Specific resourceVersion to which this reference is made, if any.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                    type: string
-                  uid:
-                    description: |-
-                      UID of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                    type: string
-                type: object
-                x-kubernetes-map-type: atomic
-              paused:
-                description: paused can be used to prevent controllers from processing
-                  the Cluster and all its associated objects.
-                type: boolean
-            type: object
-          status:
-            description: ClusterStatus defines the observed state of Cluster.
-            properties:
-              conditions:
-                description: conditions defines current service state of the cluster.
-                items:
-                  description: Condition defines an observation of a Cluster API resource
-                    operational state.
-                  properties:
-                    lastTransitionTime:
-                      description: |-
-                        Last time the condition transitioned from one status to another.
-                        This should be when the underlying condition changed. If that is not known, then using the time when
-                        the API field changed is acceptable.
-                      format: date-time
-                      type: string
-                    message:
-                      description: |-
-                        A human readable message indicating details about the transition.
-                        This field may be empty.
-                      type: string
-                    reason:
-                      description: |-
-                        The reason for the condition's last transition in CamelCase.
-                        The specific API may choose whether or not this field is considered a guaranteed API.
-                        This field may not be empty.
-                      type: string
-                    severity:
-                      description: |-
-                        severity provides an explicit classification of Reason code, so the users or machines can immediately
-                        understand the current situation and act accordingly.
-                        The Severity field MUST be set only when Status=False.
-                      type: string
-                    status:
-                      description: status of the condition, one of True, False, Unknown.
-                      type: string
-                    type:
-                      description: |-
-                        type of condition in CamelCase or in foo.example.com/CamelCase.
-                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
-                        can be useful (see .node.status.conditions), the ability to deconflict is important.
-                      type: string
-                  required:
-                  - status
-                  - type
-                  type: object
-                type: array
-              controlPlaneInitialized:
-                description: controlPlaneInitialized defines if the control plane
-                  has been initialized.
-                type: boolean
-              controlPlaneReady:
-                description: controlPlaneReady defines if the control plane is ready.
-                type: boolean
-              failureDomains:
-                additionalProperties:
-                  description: |-
-                    FailureDomainSpec is the Schema for Cluster API failure domains.
-                    It allows controllers to understand how many failure domains a cluster can optionally span across.
-                  properties:
-                    attributes:
-                      additionalProperties:
-                        type: string
-                      description: attributes is a free form map of attributes an
-                        infrastructure provider might use or require.
-                      type: object
-                    controlPlane:
-                      description: controlPlane determines if this failure domain
-                        is suitable for use by control plane machines.
-                      type: boolean
-                  type: object
-                description: failureDomains is a slice of failure domain objects synced
-                  from the infrastructure provider.
-                type: object
-              failureMessage:
-                description: |-
-                  failureMessage indicates that there is a fatal problem reconciling the
-                  state, and will be set to a descriptive error message.
-                type: string
-              failureReason:
-                description: |-
-                  failureReason indicates that there is a fatal problem reconciling the
-                  state, and will be set to a token value suitable for
-                  programmatic interpretation.
-                type: string
-              infrastructureReady:
-                description: infrastructureReady is the state of the infrastructure
-                  provider.
-                type: boolean
-              observedGeneration:
-                description: observedGeneration is the latest generation observed
-                  by the controller.
-                format: int64
-                type: integer
-              phase:
-                description: |-
-                  phase represents the current phase of cluster actuation.
-                  E.g. Pending, Running, Terminating, Failed etc.
-                type: string
-            type: object
-        type: object
-    served: false
-    storage: false
-    subresources:
-      status: {}
-  - additionalPrinterColumns:
-    - description: Time duration since creation of Cluster
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    - description: Cluster status such as Pending/Provisioning/Provisioned/Deleting/Failed
-      jsonPath: .status.phase
-      name: Phase
-      type: string
-    deprecated: true
-    name: v1alpha4
-    schema:
-      openAPIV3Schema:
-        description: |-
-          Cluster is the Schema for the clusters API.
-
-          Deprecated: This type will be removed in one of the next releases.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: ClusterSpec defines the desired state of Cluster.
-            properties:
-              clusterNetwork:
-                description: Cluster network configuration.
-                properties:
-                  apiServerPort:
-                    description: |-
-                      apiServerPort specifies the port the API Server should bind to.
-                      Defaults to 6443.
-                    format: int32
-                    type: integer
-                  pods:
-                    description: The network ranges from which Pod networks are allocated.
-                    properties:
-                      cidrBlocks:
-                        items:
-                          type: string
-                        type: array
-                    required:
-                    - cidrBlocks
-                    type: object
-                  serviceDomain:
-                    description: Domain name for services.
-                    type: string
-                  services:
-                    description: The network ranges from which service VIPs are allocated.
-                    properties:
-                      cidrBlocks:
-                        items:
-                          type: string
-                        type: array
-                    required:
-                    - cidrBlocks
-                    type: object
-                type: object
-              controlPlaneEndpoint:
-                description: controlPlaneEndpoint represents the endpoint used to
-                  communicate with the control plane.
-                properties:
-                  host:
-                    description: The hostname on which the API server is serving.
-                    type: string
-                  port:
-                    description: The port on which the API server is serving.
-                    format: int32
-                    type: integer
-                required:
-                - host
-                - port
-                type: object
-              controlPlaneRef:
-                description: |-
-                  controlPlaneRef is an optional reference to a provider-specific resource that holds
-                  the details for provisioning the Control Plane for a Cluster.
-                properties:
-                  apiVersion:
-                    description: API version of the referent.
-                    type: string
-                  fieldPath:
-                    description: |-
-                      If referring to a piece of an object instead of an entire object, this string
-                      should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                      For example, if the object reference is to a container within a pod, this would take on a value like:
-                      "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                      the event) or if no container name is specified "spec.containers[2]" (container with
-                      index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                      referencing a part of an object.
-                    type: string
-                  kind:
-                    description: |-
-                      Kind of the referent.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                    type: string
-                  name:
-                    description: |-
-                      Name of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                    type: string
-                  namespace:
-                    description: |-
-                      Namespace of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                    type: string
-                  resourceVersion:
-                    description: |-
-                      Specific resourceVersion to which this reference is made, if any.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                    type: string
-                  uid:
-                    description: |-
-                      UID of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                    type: string
-                type: object
-                x-kubernetes-map-type: atomic
-              infrastructureRef:
-                description: |-
-                  infrastructureRef is a reference to a provider-specific resource that holds the details
-                  for provisioning infrastructure for a cluster in said provider.
-                properties:
-                  apiVersion:
-                    description: API version of the referent.
-                    type: string
-                  fieldPath:
-                    description: |-
-                      If referring to a piece of an object instead of an entire object, this string
-                      should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                      For example, if the object reference is to a container within a pod, this would take on a value like:
-                      "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                      the event) or if no container name is specified "spec.containers[2]" (container with
-                      index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                      referencing a part of an object.
-                    type: string
-                  kind:
-                    description: |-
-                      Kind of the referent.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                    type: string
-                  name:
-                    description: |-
-                      Name of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                    type: string
-                  namespace:
-                    description: |-
-                      Namespace of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                    type: string
-                  resourceVersion:
-                    description: |-
-                      Specific resourceVersion to which this reference is made, if any.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                    type: string
-                  uid:
-                    description: |-
-                      UID of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                    type: string
-                type: object
-                x-kubernetes-map-type: atomic
-              paused:
-                description: paused can be used to prevent controllers from processing
-                  the Cluster and all its associated objects.
-                type: boolean
-              topology:
-                description: |-
-                  This encapsulates the topology for the cluster.
-                  NOTE: It is required to enable the ClusterTopology
-                  feature gate flag to activate managed topologies support;
-                  this feature is highly experimental, and parts of it might still be not implemented.
-                properties:
-                  class:
-                    description: The name of the ClusterClass object to create the
-                      topology.
-                    type: string
-                  controlPlane:
-                    description: controlPlane describes the cluster control plane.
-                    properties:
-                      metadata:
-                        description: |-
-                          metadata is the metadata applied to the machines of the ControlPlane.
-                          At runtime this metadata is merged with the corresponding metadata from the ClusterClass.
-
-                          This field is supported if and only if the control plane provider template
-                          referenced in the ClusterClass is Machine based.
-                        properties:
-                          annotations:
-                            additionalProperties:
-                              type: string
-                            description: |-
-                              annotations is an unstructured key value map stored with a resource that may be
-                              set by external tools to store and retrieve arbitrary metadata. They are not
-                              queryable and should be preserved when modifying objects.
-                              More info: http://kubernetes.io/docs/user-guide/annotations
-                            type: object
-                          labels:
-                            additionalProperties:
-                              type: string
-                            description: |-
-                              Map of string keys and values that can be used to organize and categorize
-                              (scope and select) objects. May match selectors of replication controllers
-                              and services.
-                              More info: http://kubernetes.io/docs/user-guide/labels
-                            type: object
-                        type: object
-                      replicas:
-                        description: |-
-                          replicas is the number of control plane nodes.
-                          If the value is nil, the ControlPlane object is created without the number of Replicas
-                          and it's assumed that the control plane controller does not implement support for this field.
-                          When specified against a control plane provider that lacks support for this field, this value will be ignored.
-                        format: int32
-                        type: integer
-                    type: object
-                  rolloutAfter:
-                    description: |-
-                      rolloutAfter performs a rollout of the entire cluster one component at a time,
-                      control plane first and then machine deployments.
-                    format: date-time
-                    type: string
-                  version:
-                    description: The Kubernetes version of the cluster.
-                    type: string
-                  workers:
-                    description: |-
-                      workers encapsulates the different constructs that form the worker nodes
-                      for the cluster.
-                    properties:
-                      machineDeployments:
-                        description: machineDeployments is a list of machine deployments
-                          in the cluster.
-                        items:
-                          description: |-
-                            MachineDeploymentTopology specifies the different parameters for a set of worker nodes in the topology.
-                            This set of nodes is managed by a MachineDeployment object whose lifecycle is managed by the Cluster controller.
-                          properties:
-                            class:
-                              description: |-
-                                class is the name of the MachineDeploymentClass used to create the set of worker nodes.
-                                This should match one of the deployment classes defined in the ClusterClass object
-                                mentioned in the `Cluster.Spec.Class` field.
-                              type: string
-                            metadata:
-                              description: |-
-                                metadata is the metadata applied to the machines of the MachineDeployment.
-                                At runtime this metadata is merged with the corresponding metadata from the ClusterClass.
-                              properties:
-                                annotations:
-                                  additionalProperties:
-                                    type: string
-                                  description: |-
-                                    annotations is an unstructured key value map stored with a resource that may be
-                                    set by external tools to store and retrieve arbitrary metadata. They are not
-                                    queryable and should be preserved when modifying objects.
-                                    More info: http://kubernetes.io/docs/user-guide/annotations
-                                  type: object
-                                labels:
-                                  additionalProperties:
-                                    type: string
-                                  description: |-
-                                    Map of string keys and values that can be used to organize and categorize
-                                    (scope and select) objects. May match selectors of replication controllers
-                                    and services.
-                                    More info: http://kubernetes.io/docs/user-guide/labels
-                                  type: object
-                              type: object
-                            name:
-                              description: |-
-                                name is the unique identifier for this MachineDeploymentTopology.
-                                The value is used with other unique identifiers to create a MachineDeployment's Name
-                                (e.g. cluster's name, etc). In case the name is greater than the allowed maximum length,
-                                the values are hashed together.
-                              type: string
-                            replicas:
-                              description: |-
-                                replicas is the number of worker nodes belonging to this set.
-                                If the value is nil, the MachineDeployment is created without the number of Replicas (defaulting to zero)
-                                and it's assumed that an external entity (like cluster autoscaler) is responsible for the management
-                                of this value.
-                              format: int32
-                              type: integer
-                          required:
-                          - class
-                          - name
-                          type: object
-                        type: array
-                    type: object
-                required:
-                - class
-                - version
-                type: object
-            type: object
-          status:
-            description: ClusterStatus defines the observed state of Cluster.
-            properties:
-              conditions:
-                description: conditions defines current service state of the cluster.
-                items:
-                  description: Condition defines an observation of a Cluster API resource
-                    operational state.
-                  properties:
-                    lastTransitionTime:
-                      description: |-
-                        Last time the condition transitioned from one status to another.
-                        This should be when the underlying condition changed. If that is not known, then using the time when
-                        the API field changed is acceptable.
-                      format: date-time
-                      type: string
-                    message:
-                      description: |-
-                        A human readable message indicating details about the transition.
-                        This field may be empty.
-                      type: string
-                    reason:
-                      description: |-
-                        The reason for the condition's last transition in CamelCase.
-                        The specific API may choose whether or not this field is considered a guaranteed API.
-                        This field may not be empty.
-                      type: string
-                    severity:
-                      description: |-
-                        severity provides an explicit classification of Reason code, so the users or machines can immediately
-                        understand the current situation and act accordingly.
-                        The Severity field MUST be set only when Status=False.
-                      type: string
-                    status:
-                      description: status of the condition, one of True, False, Unknown.
-                      type: string
-                    type:
-                      description: |-
-                        type of condition in CamelCase or in foo.example.com/CamelCase.
-                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
-                        can be useful (see .node.status.conditions), the ability to deconflict is important.
-                      type: string
-                  required:
-                  - status
-                  - type
-                  type: object
-                type: array
-              controlPlaneReady:
-                description: controlPlaneReady defines if the control plane is ready.
-                type: boolean
-              failureDomains:
-                additionalProperties:
-                  description: |-
-                    FailureDomainSpec is the Schema for Cluster API failure domains.
-                    It allows controllers to understand how many failure domains a cluster can optionally span across.
-                  properties:
-                    attributes:
-                      additionalProperties:
-                        type: string
-                      description: attributes is a free form map of attributes an
-                        infrastructure provider might use or require.
-                      type: object
-                    controlPlane:
-                      description: controlPlane determines if this failure domain
-                        is suitable for use by control plane machines.
-                      type: boolean
-                  type: object
-                description: failureDomains is a slice of failure domain objects synced
-                  from the infrastructure provider.
-                type: object
-              failureMessage:
-                description: |-
-                  failureMessage indicates that there is a fatal problem reconciling the
-                  state, and will be set to a descriptive error message.
-                type: string
-              failureReason:
-                description: |-
-                  failureReason indicates that there is a fatal problem reconciling the
-                  state, and will be set to a token value suitable for
-                  programmatic interpretation.
-                type: string
-              infrastructureReady:
-                description: infrastructureReady is the state of the infrastructure
-                  provider.
-                type: boolean
-              observedGeneration:
-                description: observedGeneration is the latest generation observed
-                  by the controller.
-                format: int64
-                type: integer
-              phase:
-                description: |-
-                  phase represents the current phase of cluster actuation.
-                  E.g. Pending, Running, Terminating, Failed etc.
-                type: string
-            type: object
-        type: object
-    served: false
-    storage: false
-    subresources:
-      status: {}
-  - additionalPrinterColumns:
-    - description: ClusterClass of this Cluster, empty if the Cluster is not using
-        a ClusterClass
-      jsonPath: .spec.topology.class
-      name: ClusterClass
-      type: string
-    - description: Cluster status such as Pending/Provisioning/Provisioned/Deleting/Failed
-      jsonPath: .status.phase
-      name: Phase
-      type: string
-    - description: Time duration since creation of Cluster
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    - description: Kubernetes version associated with this Cluster
-      jsonPath: .spec.topology.version
-      name: Version
-      type: string
-    name: v1beta1
-    schema:
-      openAPIV3Schema:
-        description: Cluster is the Schema for the clusters API.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: ClusterSpec defines the desired state of Cluster.
-            properties:
-              availabilityGates:
-                description: |-
-                  availabilityGates specifies additional conditions to include when evaluating Cluster Available condition.
-
-                  NOTE: this field is considered only for computing v1beta2 conditions.
-                items:
-                  description: ClusterAvailabilityGate contains the type of a Cluster
-                    condition to be used as availability gate.
-                  properties:
-                    conditionType:
-                      description: |-
-                        conditionType refers to a positive polarity condition (status true means good) with matching type in the Cluster's condition list.
-                        If the conditions doesn't exist, it will be treated as unknown.
-                        Note: Both Cluster API conditions or conditions added by 3rd party controllers can be used as availability gates.
-                      maxLength: 316
-                      minLength: 1
-                      pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-                      type: string
-                  required:
-                  - conditionType
-                  type: object
-                maxItems: 32
-                type: array
-                x-kubernetes-list-map-keys:
-                - conditionType
-                x-kubernetes-list-type: map
-              clusterNetwork:
-                description: Cluster network configuration.
-                properties:
-                  apiServerPort:
-                    description: |-
-                      apiServerPort specifies the port the API Server should bind to.
-                      Defaults to 6443.
-                    format: int32
-                    type: integer
-                  pods:
-                    description: The network ranges from which Pod networks are allocated.
-                    properties:
-                      cidrBlocks:
-                        items:
-                          type: string
-                        type: array
-                    required:
-                    - cidrBlocks
-                    type: object
-                  serviceDomain:
-                    description: Domain name for services.
-                    type: string
-                  services:
-                    description: The network ranges from which service VIPs are allocated.
-                    properties:
-                      cidrBlocks:
-                        items:
-                          type: string
-                        type: array
-                    required:
-                    - cidrBlocks
-                    type: object
-                type: object
-              controlPlaneEndpoint:
-                description: controlPlaneEndpoint represents the endpoint used to
-                  communicate with the control plane.
-                properties:
-                  host:
-                    description: The hostname on which the API server is serving.
-                    type: string
-                  port:
-                    description: The port on which the API server is serving.
-                    format: int32
-                    type: integer
-                required:
-                - host
-                - port
-                type: object
-              controlPlaneRef:
-                description: |-
-                  controlPlaneRef is an optional reference to a provider-specific resource that holds
-                  the details for provisioning the Control Plane for a Cluster.
-                properties:
-                  apiVersion:
-                    description: API version of the referent.
-                    type: string
-                  fieldPath:
-                    description: |-
-                      If referring to a piece of an object instead of an entire object, this string
-                      should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                      For example, if the object reference is to a container within a pod, this would take on a value like:
-                      "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                      the event) or if no container name is specified "spec.containers[2]" (container with
-                      index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                      referencing a part of an object.
-                    type: string
-                  kind:
-                    description: |-
-                      Kind of the referent.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                    type: string
-                  name:
-                    description: |-
-                      Name of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                    type: string
-                  namespace:
-                    description: |-
-                      Namespace of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                    type: string
-                  resourceVersion:
-                    description: |-
-                      Specific resourceVersion to which this reference is made, if any.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                    type: string
-                  uid:
-                    description: |-
-                      UID of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                    type: string
-                type: object
-                x-kubernetes-map-type: atomic
-              infrastructureRef:
-                description: |-
-                  infrastructureRef is a reference to a provider-specific resource that holds the details
-                  for provisioning infrastructure for a cluster in said provider.
-                properties:
-                  apiVersion:
-                    description: API version of the referent.
-                    type: string
-                  fieldPath:
-                    description: |-
-                      If referring to a piece of an object instead of an entire object, this string
-                      should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                      For example, if the object reference is to a container within a pod, this would take on a value like:
-                      "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                      the event) or if no container name is specified "spec.containers[2]" (container with
-                      index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                      referencing a part of an object.
-                    type: string
-                  kind:
-                    description: |-
-                      Kind of the referent.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                    type: string
-                  name:
-                    description: |-
-                      Name of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                    type: string
-                  namespace:
-                    description: |-
-                      Namespace of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                    type: string
-                  resourceVersion:
-                    description: |-
-                      Specific resourceVersion to which this reference is made, if any.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                    type: string
-                  uid:
-                    description: |-
-                      UID of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                    type: string
-                type: object
-                x-kubernetes-map-type: atomic
-              paused:
-                description: paused can be used to prevent controllers from processing
-                  the Cluster and all its associated objects.
-                type: boolean
-              topology:
-                description: |-
-                  This encapsulates the topology for the cluster.
-                  NOTE: It is required to enable the ClusterTopology
-                  feature gate flag to activate managed topologies support;
-                  this feature is highly experimental, and parts of it might still be not implemented.
-                properties:
-                  class:
-                    description: The name of the ClusterClass object to create the
-                      topology.
-                    type: string
-                  classNamespace:
-                    description: |-
-                      classNamespace is the namespace of the ClusterClass object to create the topology.
-                      If the namespace is empty or not set, it is defaulted to the namespace of the cluster object.
-                      Value must follow the DNS1123Subdomain syntax.
-                    maxLength: 253
-                    minLength: 1
-                    pattern: ^[a-z0-9](?:[-a-z0-9]*[a-z0-9])?(?:\.[a-z0-9](?:[-a-z0-9]*[a-z0-9])?)*$
-                    type: string
-                  controlPlane:
-                    description: controlPlane describes the cluster control plane.
-                    properties:
-                      machineHealthCheck:
-                        description: |-
-                          machineHealthCheck allows to enable, disable and override
-                          the MachineHealthCheck configuration in the ClusterClass for this control plane.
-                        properties:
-                          enable:
-                            description: |-
-                              enable controls if a MachineHealthCheck should be created for the target machines.
-
-                              If false: No MachineHealthCheck will be created.
-
-                              If not set(default): A MachineHealthCheck will be created if it is defined here or
-                               in the associated ClusterClass. If no MachineHealthCheck is defined then none will be created.
-
-                              If true: A MachineHealthCheck is guaranteed to be created. Cluster validation will
-                              block if `enable` is true and no MachineHealthCheck definition is available.
-                            type: boolean
-                          maxUnhealthy:
-                            anyOf:
-                            - type: integer
-                            - type: string
-                            description: |-
-                              Any further remediation is only allowed if at most "MaxUnhealthy" machines selected by
-                              "selector" are not healthy.
-                            x-kubernetes-int-or-string: true
-                          nodeStartupTimeout:
-                            description: |-
-                              nodeStartupTimeout allows to set the maximum time for MachineHealthCheck
-                              to consider a Machine unhealthy if a corresponding Node isn't associated
-                              through a `Spec.ProviderID` field.
-
-                              The duration set in this field is compared to the greatest of:
-                              - Cluster's infrastructure ready condition timestamp (if and when available)
-                              - Control Plane's initialized condition timestamp (if and when available)
-                              - Machine's infrastructure ready condition timestamp (if and when available)
-                              - Machine's metadata creation timestamp
-
-                              Defaults to 10 minutes.
-                              If you wish to disable this feature, set the value explicitly to 0.
-                            type: string
-                          remediationTemplate:
-                            description: |-
-                              remediationTemplate is a reference to a remediation template
-                              provided by an infrastructure provider.
-
-                              This field is completely optional, when filled, the MachineHealthCheck controller
-                              creates a new object from the template referenced and hands off remediation of the machine to
-                              a controller that lives outside of Cluster API.
-                            properties:
-                              apiVersion:
-                                description: API version of the referent.
-                                type: string
-                              fieldPath:
-                                description: |-
-                                  If referring to a piece of an object instead of an entire object, this string
-                                  should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                                  For example, if the object reference is to a container within a pod, this would take on a value like:
-                                  "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                                  the event) or if no container name is specified "spec.containers[2]" (container with
-                                  index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                                  referencing a part of an object.
-                                type: string
-                              kind:
-                                description: |-
-                                  Kind of the referent.
-                                  More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                                type: string
-                              name:
-                                description: |-
-                                  Name of the referent.
-                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                type: string
-                              namespace:
-                                description: |-
-                                  Namespace of the referent.
-                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                                type: string
-                              resourceVersion:
-                                description: |-
-                                  Specific resourceVersion to which this reference is made, if any.
-                                  More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                                type: string
-                              uid:
-                                description: |-
-                                  UID of the referent.
-                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                                type: string
-                            type: object
-                            x-kubernetes-map-type: atomic
-                          unhealthyConditions:
-                            description: |-
-                              unhealthyConditions contains a list of the conditions that determine
-                              whether a node is considered unhealthy. The conditions are combined in a
-                              logical OR, i.e. if any of the conditions is met, the node is unhealthy.
-                            items:
-                              description: |-
-                                UnhealthyCondition represents a Node condition type and value with a timeout
-                                specified as a duration.  When the named condition has been in the given
-                                status for at least the timeout value, a node is considered unhealthy.
-                              properties:
-                                status:
-                                  minLength: 1
-                                  type: string
-                                timeout:
-                                  type: string
-                                type:
-                                  minLength: 1
-                                  type: string
-                              required:
-                              - status
-                              - timeout
-                              - type
-                              type: object
-                            type: array
-                          unhealthyRange:
-                            description: |-
-                              Any further remediation is only allowed if the number of machines selected by "selector" as not healthy
-                              is within the range of "UnhealthyRange". Takes precedence over MaxUnhealthy.
-                              Eg. "[3-5]" - This means that remediation will be allowed only when:
-                              (a) there are at least 3 unhealthy machines (and)
-                              (b) there are at most 5 unhealthy machines
-                            pattern: ^\[[0-9]+-[0-9]+\]$
-                            type: string
-                        type: object
-                      metadata:
-                        description: |-
-                          metadata is the metadata applied to the ControlPlane and the Machines of the ControlPlane
-                          if the ControlPlaneTemplate referenced by the ClusterClass is machine based. If not, it
-                          is applied only to the ControlPlane.
-                          At runtime this metadata is merged with the corresponding metadata from the ClusterClass.
-                        properties:
-                          annotations:
-                            additionalProperties:
-                              type: string
-                            description: |-
-                              annotations is an unstructured key value map stored with a resource that may be
-                              set by external tools to store and retrieve arbitrary metadata. They are not
-                              queryable and should be preserved when modifying objects.
-                              More info: http://kubernetes.io/docs/user-guide/annotations
-                            type: object
-                          labels:
-                            additionalProperties:
-                              type: string
-                            description: |-
-                              Map of string keys and values that can be used to organize and categorize
-                              (scope and select) objects. May match selectors of replication controllers
-                              and services.
-                              More info: http://kubernetes.io/docs/user-guide/labels
-                            type: object
-                        type: object
-                      nodeDeletionTimeout:
-                        description: |-
-                          nodeDeletionTimeout defines how long the controller will attempt to delete the Node that the Machine
-                          hosts after the Machine is marked for deletion. A duration of 0 will retry deletion indefinitely.
-                          Defaults to 10 seconds.
-                        type: string
-                      nodeDrainTimeout:
-                        description: |-
-                          nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
-                          The default value is 0, meaning that the node can be drained without any time limitations.
-                          NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
-                        type: string
-                      nodeVolumeDetachTimeout:
-                        description: |-
-                          nodeVolumeDetachTimeout is the total amount of time that the controller will spend on waiting for all volumes
-                          to be detached. The default value is 0, meaning that the volumes can be detached without any time limitations.
-                        type: string
-                      replicas:
-                        description: |-
-                          replicas is the number of control plane nodes.
-                          If the value is nil, the ControlPlane object is created without the number of Replicas
-                          and it's assumed that the control plane controller does not implement support for this field.
-                          When specified against a control plane provider that lacks support for this field, this value will be ignored.
-                        format: int32
-                        type: integer
-                      variables:
-                        description: variables can be used to customize the ControlPlane
-                          through patches.
-                        properties:
-                          overrides:
-                            description: overrides can be used to override Cluster
-                              level variables.
-                            items:
-                              description: |-
-                                ClusterVariable can be used to customize the Cluster through patches. Each ClusterVariable is associated with a
-                                Variable definition in the ClusterClass `status` variables.
-                              properties:
-                                definitionFrom:
-                                  description: |-
-                                    definitionFrom specifies where the definition of this Variable is from.
-
-                                    Deprecated: This field is deprecated, must not be set anymore and is going to be removed in the next apiVersion.
-                                  type: string
-                                name:
-                                  description: name of the variable.
-                                  type: string
-                                value:
-                                  description: |-
-                                    value of the variable.
-                                    Note: the value will be validated against the schema of the corresponding ClusterClassVariable
-                                    from the ClusterClass.
-                                    Note: We have to use apiextensionsv1.JSON instead of a custom JSON type, because controller-tools has a
-                                    hard-coded schema for apiextensionsv1.JSON which cannot be produced by another type via controller-tools,
-                                    i.e. it is not possible to have no type field.
-                                    Ref: https://github.com/kubernetes-sigs/controller-tools/blob/d0e03a142d0ecdd5491593e941ee1d6b5d91dba6/pkg/crd/known_types.go#L106-L111
-                                  x-kubernetes-preserve-unknown-fields: true
-                              required:
-                              - name
-                              - value
-                              type: object
-                            type: array
-                            x-kubernetes-list-map-keys:
-                            - name
-                            x-kubernetes-list-type: map
-                        type: object
-                    type: object
-                  rolloutAfter:
-                    description: |-
-                      rolloutAfter performs a rollout of the entire cluster one component at a time,
-                      control plane first and then machine deployments.
-
-                      Deprecated: This field has no function and is going to be removed in the next apiVersion.
-                    format: date-time
-                    type: string
-                  variables:
-                    description: |-
-                      variables can be used to customize the Cluster through
-                      patches. They must comply to the corresponding
-                      VariableClasses defined in the ClusterClass.
-                    items:
-                      description: |-
-                        ClusterVariable can be used to customize the Cluster through patches. Each ClusterVariable is associated with a
-                        Variable definition in the ClusterClass `status` variables.
-                      properties:
-                        definitionFrom:
-                          description: |-
-                            definitionFrom specifies where the definition of this Variable is from.
-
-                            Deprecated: This field is deprecated, must not be set anymore and is going to be removed in the next apiVersion.
-                          type: string
-                        name:
-                          description: name of the variable.
-                          type: string
-                        value:
-                          description: |-
-                            value of the variable.
-                            Note: the value will be validated against the schema of the corresponding ClusterClassVariable
-                            from the ClusterClass.
-                            Note: We have to use apiextensionsv1.JSON instead of a custom JSON type, because controller-tools has a
-                            hard-coded schema for apiextensionsv1.JSON which cannot be produced by another type via controller-tools,
-                            i.e. it is not possible to have no type field.
-                            Ref: https://github.com/kubernetes-sigs/controller-tools/blob/d0e03a142d0ecdd5491593e941ee1d6b5d91dba6/pkg/crd/known_types.go#L106-L111
-                          x-kubernetes-preserve-unknown-fields: true
-                      required:
-                      - name
-                      - value
-                      type: object
-                    type: array
-                    x-kubernetes-list-map-keys:
-                    - name
-                    x-kubernetes-list-type: map
-                  version:
-                    description: The Kubernetes version of the cluster.
-                    type: string
-                  workers:
-                    description: |-
-                      workers encapsulates the different constructs that form the worker nodes
-                      for the cluster.
-                    properties:
-                      machineDeployments:
-                        description: machineDeployments is a list of machine deployments
-                          in the cluster.
-                        items:
-                          description: |-
-                            MachineDeploymentTopology specifies the different parameters for a set of worker nodes in the topology.
-                            This set of nodes is managed by a MachineDeployment object whose lifecycle is managed by the Cluster controller.
-                          properties:
-                            class:
-                              description: |-
-                                class is the name of the MachineDeploymentClass used to create the set of worker nodes.
-                                This should match one of the deployment classes defined in the ClusterClass object
-                                mentioned in the `Cluster.Spec.Class` field.
-                              type: string
-                            failureDomain:
-                              description: |-
-                                failureDomain is the failure domain the machines will be created in.
-                                Must match a key in the FailureDomains map stored on the cluster object.
-                              type: string
-                            machineHealthCheck:
-                              description: |-
-                                machineHealthCheck allows to enable, disable and override
-                                the MachineHealthCheck configuration in the ClusterClass for this MachineDeployment.
-                              properties:
-                                enable:
-                                  description: |-
-                                    enable controls if a MachineHealthCheck should be created for the target machines.
-
-                                    If false: No MachineHealthCheck will be created.
-
-                                    If not set(default): A MachineHealthCheck will be created if it is defined here or
-                                     in the associated ClusterClass. If no MachineHealthCheck is defined then none will be created.
-
-                                    If true: A MachineHealthCheck is guaranteed to be created. Cluster validation will
-                                    block if `enable` is true and no MachineHealthCheck definition is available.
-                                  type: boolean
-                                maxUnhealthy:
-                                  anyOf:
-                                  - type: integer
-                                  - type: string
-                                  description: |-
-                                    Any further remediation is only allowed if at most "MaxUnhealthy" machines selected by
-                                    "selector" are not healthy.
-                                  x-kubernetes-int-or-string: true
-                                nodeStartupTimeout:
-                                  description: |-
-                                    nodeStartupTimeout allows to set the maximum time for MachineHealthCheck
-                                    to consider a Machine unhealthy if a corresponding Node isn't associated
-                                    through a `Spec.ProviderID` field.
-
-                                    The duration set in this field is compared to the greatest of:
-                                    - Cluster's infrastructure ready condition timestamp (if and when available)
-                                    - Control Plane's initialized condition timestamp (if and when available)
-                                    - Machine's infrastructure ready condition timestamp (if and when available)
-                                    - Machine's metadata creation timestamp
-
-                                    Defaults to 10 minutes.
-                                    If you wish to disable this feature, set the value explicitly to 0.
-                                  type: string
-                                remediationTemplate:
-                                  description: |-
-                                    remediationTemplate is a reference to a remediation template
-                                    provided by an infrastructure provider.
-
-                                    This field is completely optional, when filled, the MachineHealthCheck controller
-                                    creates a new object from the template referenced and hands off remediation of the machine to
-                                    a controller that lives outside of Cluster API.
-                                  properties:
-                                    apiVersion:
-                                      description: API version of the referent.
-                                      type: string
-                                    fieldPath:
-                                      description: |-
-                                        If referring to a piece of an object instead of an entire object, this string
-                                        should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                                        For example, if the object reference is to a container within a pod, this would take on a value like:
-                                        "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                                        the event) or if no container name is specified "spec.containers[2]" (container with
-                                        index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                                        referencing a part of an object.
-                                      type: string
-                                    kind:
-                                      description: |-
-                                        Kind of the referent.
-                                        More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                                      type: string
-                                    name:
-                                      description: |-
-                                        Name of the referent.
-                                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                      type: string
-                                    namespace:
-                                      description: |-
-                                        Namespace of the referent.
-                                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                                      type: string
-                                    resourceVersion:
-                                      description: |-
-                                        Specific resourceVersion to which this reference is made, if any.
-                                        More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                                      type: string
-                                    uid:
-                                      description: |-
-                                        UID of the referent.
-                                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                                      type: string
-                                  type: object
-                                  x-kubernetes-map-type: atomic
-                                unhealthyConditions:
-                                  description: |-
-                                    unhealthyConditions contains a list of the conditions that determine
-                                    whether a node is considered unhealthy. The conditions are combined in a
-                                    logical OR, i.e. if any of the conditions is met, the node is unhealthy.
-                                  items:
-                                    description: |-
-                                      UnhealthyCondition represents a Node condition type and value with a timeout
-                                      specified as a duration.  When the named condition has been in the given
-                                      status for at least the timeout value, a node is considered unhealthy.
-                                    properties:
-                                      status:
-                                        minLength: 1
-                                        type: string
-                                      timeout:
-                                        type: string
-                                      type:
-                                        minLength: 1
-                                        type: string
-                                    required:
-                                    - status
-                                    - timeout
-                                    - type
-                                    type: object
-                                  type: array
-                                unhealthyRange:
-                                  description: |-
-                                    Any further remediation is only allowed if the number of machines selected by "selector" as not healthy
-                                    is within the range of "UnhealthyRange". Takes precedence over MaxUnhealthy.
-                                    Eg. "[3-5]" - This means that remediation will be allowed only when:
-                                    (a) there are at least 3 unhealthy machines (and)
-                                    (b) there are at most 5 unhealthy machines
-                                  pattern: ^\[[0-9]+-[0-9]+\]$
-                                  type: string
-                              type: object
-                            metadata:
-                              description: |-
-                                metadata is the metadata applied to the MachineDeployment and the machines of the MachineDeployment.
-                                At runtime this metadata is merged with the corresponding metadata from the ClusterClass.
-                              properties:
-                                annotations:
-                                  additionalProperties:
-                                    type: string
-                                  description: |-
-                                    annotations is an unstructured key value map stored with a resource that may be
-                                    set by external tools to store and retrieve arbitrary metadata. They are not
-                                    queryable and should be preserved when modifying objects.
-                                    More info: http://kubernetes.io/docs/user-guide/annotations
-                                  type: object
-                                labels:
-                                  additionalProperties:
-                                    type: string
-                                  description: |-
-                                    Map of string keys and values that can be used to organize and categorize
-                                    (scope and select) objects. May match selectors of replication controllers
-                                    and services.
-                                    More info: http://kubernetes.io/docs/user-guide/labels
-                                  type: object
-                              type: object
-                            minReadySeconds:
-                              description: |-
-                                Minimum number of seconds for which a newly created machine should
-                                be ready.
-                                Defaults to 0 (machine will be considered available as soon as it
-                                is ready)
-                              format: int32
-                              type: integer
-                            name:
-                              description: |-
-                                name is the unique identifier for this MachineDeploymentTopology.
-                                The value is used with other unique identifiers to create a MachineDeployment's Name
-                                (e.g. cluster's name, etc). In case the name is greater than the allowed maximum length,
-                                the values are hashed together.
-                              type: string
-                            nodeDeletionTimeout:
-                              description: |-
-                                nodeDeletionTimeout defines how long the controller will attempt to delete the Node that the Machine
-                                hosts after the Machine is marked for deletion. A duration of 0 will retry deletion indefinitely.
-                                Defaults to 10 seconds.
-                              type: string
-                            nodeDrainTimeout:
-                              description: |-
-                                nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
-                                The default value is 0, meaning that the node can be drained without any time limitations.
-                                NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
-                              type: string
-                            nodeVolumeDetachTimeout:
-                              description: |-
-                                nodeVolumeDetachTimeout is the total amount of time that the controller will spend on waiting for all volumes
-                                to be detached. The default value is 0, meaning that the volumes can be detached without any time limitations.
-                              type: string
-                            replicas:
-                              description: |-
-                                replicas is the number of worker nodes belonging to this set.
-                                If the value is nil, the MachineDeployment is created without the number of Replicas (defaulting to 1)
-                                and it's assumed that an external entity (like cluster autoscaler) is responsible for the management
-                                of this value.
-                              format: int32
-                              type: integer
-                            strategy:
-                              description: |-
-                                The deployment strategy to use to replace existing machines with
-                                new ones.
-                              properties:
-                                remediation:
-                                  description: |-
-                                    remediation controls the strategy of remediating unhealthy machines
-                                    and how remediating operations should occur during the lifecycle of the dependant MachineSets.
-                                  properties:
-                                    maxInFlight:
-                                      anyOf:
-                                      - type: integer
-                                      - type: string
-                                      description: |-
-                                        maxInFlight determines how many in flight remediations should happen at the same time.
-
-                                        Remediation only happens on the MachineSet with the most current revision, while
-                                        older MachineSets (usually present during rollout operations) aren't allowed to remediate.
-
-                                        Note: In general (independent of remediations), unhealthy machines are always
-                                        prioritized during scale down operations over healthy ones.
-
-                                        MaxInFlight can be set to a fixed number or a percentage.
-                                        Example: when this is set to 20%, the MachineSet controller deletes at most 20% of
-                                        the desired replicas.
-
-                                        If not set, remediation is limited to all machines (bounded by replicas)
-                                        under the active MachineSet's management.
-                                      x-kubernetes-int-or-string: true
-                                  type: object
-                                rollingUpdate:
-                                  description: |-
-                                    Rolling update config params. Present only if
-                                    MachineDeploymentStrategyType = RollingUpdate.
-                                  properties:
-                                    deletePolicy:
-                                      description: |-
-                                        deletePolicy defines the policy used by the MachineDeployment to identify nodes to delete when downscaling.
-                                        Valid values are "Random, "Newest", "Oldest"
-                                        When no value is supplied, the default DeletePolicy of MachineSet is used
-                                      enum:
-                                      - Random
-                                      - Newest
-                                      - Oldest
-                                      type: string
-                                    maxSurge:
-                                      anyOf:
-                                      - type: integer
-                                      - type: string
-                                      description: |-
-                                        The maximum number of machines that can be scheduled above the
-                                        desired number of machines.
-                                        Value can be an absolute number (ex: 5) or a percentage of
-                                        desired machines (ex: 10%).
-                                        This can not be 0 if MaxUnavailable is 0.
-                                        Absolute number is calculated from percentage by rounding up.
-                                        Defaults to 1.
-                                        Example: when this is set to 30%, the new MachineSet can be scaled
-                                        up immediately when the rolling update starts, such that the total
-                                        number of old and new machines do not exceed 130% of desired
-                                        machines. Once old machines have been killed, new MachineSet can
-                                        be scaled up further, ensuring that total number of machines running
-                                        at any time during the update is at most 130% of desired machines.
-                                      x-kubernetes-int-or-string: true
-                                    maxUnavailable:
-                                      anyOf:
-                                      - type: integer
-                                      - type: string
-                                      description: |-
-                                        The maximum number of machines that can be unavailable during the update.
-                                        Value can be an absolute number (ex: 5) or a percentage of desired
-                                        machines (ex: 10%).
-                                        Absolute number is calculated from percentage by rounding down.
-                                        This can not be 0 if MaxSurge is 0.
-                                        Defaults to 0.
-                                        Example: when this is set to 30%, the old MachineSet can be scaled
-                                        down to 70% of desired machines immediately when the rolling update
-                                        starts. Once new machines are ready, old MachineSet can be scaled
-                                        down further, followed by scaling up the new MachineSet, ensuring
-                                        that the total number of machines available at all times
-                                        during the update is at least 70% of desired machines.
-                                      x-kubernetes-int-or-string: true
-                                  type: object
-                                type:
-                                  description: |-
-                                    type of deployment. Allowed values are RollingUpdate and OnDelete.
-                                    The default is RollingUpdate.
-                                  enum:
-                                  - RollingUpdate
-                                  - OnDelete
-                                  type: string
-                              type: object
-                            variables:
-                              description: variables can be used to customize the
-                                MachineDeployment through patches.
-                              properties:
-                                overrides:
-                                  description: overrides can be used to override Cluster
-                                    level variables.
-                                  items:
-                                    description: |-
-                                      ClusterVariable can be used to customize the Cluster through patches. Each ClusterVariable is associated with a
-                                      Variable definition in the ClusterClass `status` variables.
-                                    properties:
-                                      definitionFrom:
-                                        description: |-
-                                          definitionFrom specifies where the definition of this Variable is from.
-
-                                          Deprecated: This field is deprecated, must not be set anymore and is going to be removed in the next apiVersion.
-                                        type: string
-                                      name:
-                                        description: name of the variable.
-                                        type: string
-                                      value:
-                                        description: |-
-                                          value of the variable.
-                                          Note: the value will be validated against the schema of the corresponding ClusterClassVariable
-                                          from the ClusterClass.
-                                          Note: We have to use apiextensionsv1.JSON instead of a custom JSON type, because controller-tools has a
-                                          hard-coded schema for apiextensionsv1.JSON which cannot be produced by another type via controller-tools,
-                                          i.e. it is not possible to have no type field.
-                                          Ref: https://github.com/kubernetes-sigs/controller-tools/blob/d0e03a142d0ecdd5491593e941ee1d6b5d91dba6/pkg/crd/known_types.go#L106-L111
-                                        x-kubernetes-preserve-unknown-fields: true
-                                    required:
-                                    - name
-                                    - value
-                                    type: object
-                                  type: array
-                                  x-kubernetes-list-map-keys:
-                                  - name
-                                  x-kubernetes-list-type: map
-                              type: object
-                          required:
-                          - class
-                          - name
-                          type: object
-                        type: array
-                        x-kubernetes-list-map-keys:
-                        - name
-                        x-kubernetes-list-type: map
-                      machinePools:
-                        description: machinePools is a list of machine pools in the
-                          cluster.
-                        items:
-                          description: |-
-                            MachinePoolTopology specifies the different parameters for a pool of worker nodes in the topology.
-                            This pool of nodes is managed by a MachinePool object whose lifecycle is managed by the Cluster controller.
-                          properties:
-                            class:
-                              description: |-
-                                class is the name of the MachinePoolClass used to create the pool of worker nodes.
-                                This should match one of the deployment classes defined in the ClusterClass object
-                                mentioned in the `Cluster.Spec.Class` field.
-                              type: string
-                            failureDomains:
-                              description: |-
-                                failureDomains is the list of failure domains the machine pool will be created in.
-                                Must match a key in the FailureDomains map stored on the cluster object.
-                              items:
-                                type: string
-                              type: array
-                            metadata:
-                              description: |-
-                                metadata is the metadata applied to the MachinePool.
-                                At runtime this metadata is merged with the corresponding metadata from the ClusterClass.
-                              properties:
-                                annotations:
-                                  additionalProperties:
-                                    type: string
-                                  description: |-
-                                    annotations is an unstructured key value map stored with a resource that may be
-                                    set by external tools to store and retrieve arbitrary metadata. They are not
-                                    queryable and should be preserved when modifying objects.
-                                    More info: http://kubernetes.io/docs/user-guide/annotations
-                                  type: object
-                                labels:
-                                  additionalProperties:
-                                    type: string
-                                  description: |-
-                                    Map of string keys and values that can be used to organize and categorize
-                                    (scope and select) objects. May match selectors of replication controllers
-                                    and services.
-                                    More info: http://kubernetes.io/docs/user-guide/labels
-                                  type: object
-                              type: object
-                            minReadySeconds:
-                              description: |-
-                                Minimum number of seconds for which a newly created machine pool should
-                                be ready.
-                                Defaults to 0 (machine will be considered available as soon as it
-                                is ready)
-                              format: int32
-                              type: integer
-                            name:
-                              description: |-
-                                name is the unique identifier for this MachinePoolTopology.
-                                The value is used with other unique identifiers to create a MachinePool's Name
-                                (e.g. cluster's name, etc). In case the name is greater than the allowed maximum length,
-                                the values are hashed together.
-                              type: string
-                            nodeDeletionTimeout:
-                              description: |-
-                                nodeDeletionTimeout defines how long the controller will attempt to delete the Node that the MachinePool
-                                hosts after the MachinePool is marked for deletion. A duration of 0 will retry deletion indefinitely.
-                                Defaults to 10 seconds.
-                              type: string
-                            nodeDrainTimeout:
-                              description: |-
-                                nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
-                                The default value is 0, meaning that the node can be drained without any time limitations.
-                                NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
-                              type: string
-                            nodeVolumeDetachTimeout:
-                              description: |-
-                                nodeVolumeDetachTimeout is the total amount of time that the controller will spend on waiting for all volumes
-                                to be detached. The default value is 0, meaning that the volumes can be detached without any time limitations.
-                              type: string
-                            replicas:
-                              description: |-
-                                replicas is the number of nodes belonging to this pool.
-                                If the value is nil, the MachinePool is created without the number of Replicas (defaulting to 1)
-                                and it's assumed that an external entity (like cluster autoscaler) is responsible for the management
-                                of this value.
-                              format: int32
-                              type: integer
-                            variables:
-                              description: variables can be used to customize the
-                                MachinePool through patches.
-                              properties:
-                                overrides:
-                                  description: overrides can be used to override Cluster
-                                    level variables.
-                                  items:
-                                    description: |-
-                                      ClusterVariable can be used to customize the Cluster through patches. Each ClusterVariable is associated with a
-                                      Variable definition in the ClusterClass `status` variables.
-                                    properties:
-                                      definitionFrom:
-                                        description: |-
-                                          definitionFrom specifies where the definition of this Variable is from.
-
-                                          Deprecated: This field is deprecated, must not be set anymore and is going to be removed in the next apiVersion.
-                                        type: string
-                                      name:
-                                        description: name of the variable.
-                                        type: string
-                                      value:
-                                        description: |-
-                                          value of the variable.
-                                          Note: the value will be validated against the schema of the corresponding ClusterClassVariable
-                                          from the ClusterClass.
-                                          Note: We have to use apiextensionsv1.JSON instead of a custom JSON type, because controller-tools has a
-                                          hard-coded schema for apiextensionsv1.JSON which cannot be produced by another type via controller-tools,
-                                          i.e. it is not possible to have no type field.
-                                          Ref: https://github.com/kubernetes-sigs/controller-tools/blob/d0e03a142d0ecdd5491593e941ee1d6b5d91dba6/pkg/crd/known_types.go#L106-L111
-                                        x-kubernetes-preserve-unknown-fields: true
-                                    required:
-                                    - name
-                                    - value
-                                    type: object
-                                  type: array
-                                  x-kubernetes-list-map-keys:
-                                  - name
-                                  x-kubernetes-list-type: map
-                              type: object
-                          required:
-                          - class
-                          - name
-                          type: object
-                        type: array
-                        x-kubernetes-list-map-keys:
-                        - name
-                        x-kubernetes-list-type: map
-                    type: object
-                required:
-                - class
-                - version
-                type: object
-            type: object
-          status:
-            description: ClusterStatus defines the observed state of Cluster.
-            properties:
-              conditions:
-                description: conditions defines current service state of the cluster.
-                items:
-                  description: Condition defines an observation of a Cluster API resource
-                    operational state.
-                  properties:
-                    lastTransitionTime:
-                      description: |-
-                        Last time the condition transitioned from one status to another.
-                        This should be when the underlying condition changed. If that is not known, then using the time when
-                        the API field changed is acceptable.
-                      format: date-time
-                      type: string
-                    message:
-                      description: |-
-                        A human readable message indicating details about the transition.
-                        This field may be empty.
-                      type: string
-                    reason:
-                      description: |-
-                        The reason for the condition's last transition in CamelCase.
-                        The specific API may choose whether or not this field is considered a guaranteed API.
-                        This field may be empty.
-                      type: string
-                    severity:
-                      description: |-
-                        severity provides an explicit classification of Reason code, so the users or machines can immediately
-                        understand the current situation and act accordingly.
-                        The Severity field MUST be set only when Status=False.
-                      type: string
-                    status:
-                      description: status of the condition, one of True, False, Unknown.
-                      type: string
-                    type:
-                      description: |-
-                        type of condition in CamelCase or in foo.example.com/CamelCase.
-                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
-                        can be useful (see .node.status.conditions), the ability to deconflict is important.
-                      type: string
-                  required:
-                  - lastTransitionTime
-                  - status
-                  - type
-                  type: object
-                type: array
-              controlPlaneReady:
-                description: |-
-                  controlPlaneReady denotes if the control plane became ready during initial provisioning
-                  to receive requests.
-                  NOTE: this field is part of the Cluster API contract and it is used to orchestrate provisioning.
-                  The value of this field is never updated after provisioning is completed. Please use conditions
-                  to check the operational state of the control plane.
-                type: boolean
-              failureDomains:
-                additionalProperties:
-                  description: |-
-                    FailureDomainSpec is the Schema for Cluster API failure domains.
-                    It allows controllers to understand how many failure domains a cluster can optionally span across.
-                  properties:
-                    attributes:
-                      additionalProperties:
-                        type: string
-                      description: attributes is a free form map of attributes an
-                        infrastructure provider might use or require.
-                      type: object
-                    controlPlane:
-                      description: controlPlane determines if this failure domain
-                        is suitable for use by control plane machines.
-                      type: boolean
-                  type: object
-                description: failureDomains is a slice of failure domain objects synced
-                  from the infrastructure provider.
-                type: object
-              failureMessage:
-                description: |-
-                  failureMessage indicates that there is a fatal problem reconciling the
-                  state, and will be set to a descriptive error message.
-
-                  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.
-                type: string
-              failureReason:
-                description: |-
-                  failureReason indicates that there is a fatal problem reconciling the
-                  state, and will be set to a token value suitable for
-                  programmatic interpretation.
-
-                  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.
-                type: string
-              infrastructureReady:
-                description: infrastructureReady is the state of the infrastructure
-                  provider.
-                type: boolean
-              observedGeneration:
-                description: observedGeneration is the latest generation observed
-                  by the controller.
-                format: int64
-                type: integer
-              phase:
-                description: |-
-                  phase represents the current phase of cluster actuation.
-                  E.g. Pending, Running, Terminating, Failed etc.
-                type: string
-              v1beta2:
-                description: v1beta2 groups all the fields that will be added or modified
-                  in Cluster's status with the V1Beta2 version.
-                properties:
-                  conditions:
-                    description: |-
-                      conditions represents the observations of a Cluster's current state.
-                      Known condition types are Available, InfrastructureReady, ControlPlaneInitialized, ControlPlaneAvailable, WorkersAvailable, MachinesReady
-                      MachinesUpToDate, RemoteConnectionProbe, ScalingUp, ScalingDown, Remediating, Deleting, Paused.
-                      Additionally, a TopologyReconciled condition will be added in case the Cluster is referencing a ClusterClass / defining a managed Topology.
-                    items:
-                      description: Condition contains details for one aspect of the
-                        current state of this API Resource.
-                      properties:
-                        lastTransitionTime:
-                          description: |-
-                            lastTransitionTime is the last time the condition transitioned from one status to another.
-                            This should be when the underlying condition changed.  If that is not known, then using the time when the API field changed is acceptable.
-                          format: date-time
-                          type: string
-                        message:
-                          description: |-
-                            message is a human readable message indicating details about the transition.
-                            This may be an empty string.
-                          maxLength: 32768
-                          type: string
-                        observedGeneration:
-                          description: |-
-                            observedGeneration represents the .metadata.generation that the condition was set based upon.
-                            For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
-                            with respect to the current state of the instance.
-                          format: int64
-                          minimum: 0
-                          type: integer
-                        reason:
-                          description: |-
-                            reason contains a programmatic identifier indicating the reason for the condition's last transition.
-                            Producers of specific condition types may define expected values and meanings for this field,
-                            and whether the values are considered a guaranteed API.
-                            The value should be a CamelCase string.
-                            This field may not be empty.
-                          maxLength: 1024
-                          minLength: 1
-                          pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
-                          type: string
-                        status:
-                          description: status of the condition, one of True, False,
-                            Unknown.
-                          enum:
-                          - "True"
-                          - "False"
-                          - Unknown
-                          type: string
-                        type:
-                          description: type of condition in CamelCase or in foo.example.com/CamelCase.
-                          maxLength: 316
-                          pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-                          type: string
-                      required:
-                      - lastTransitionTime
-                      - message
-                      - reason
-                      - status
-                      - type
-                      type: object
-                    maxItems: 32
-                    type: array
-                    x-kubernetes-list-map-keys:
-                    - type
-                    x-kubernetes-list-type: map
-                  controlPlane:
-                    description: controlPlane groups all the observations about Cluster's
-                      ControlPlane current state.
-                    properties:
-                      availableReplicas:
-                        description: availableReplicas is the total number of available
-                          control plane machines in this cluster. A machine is considered
-                          available when Machine's Available condition is true.
-                        format: int32
-                        type: integer
-                      desiredReplicas:
-                        description: desiredReplicas is the total number of desired
-                          control plane machines in this cluster.
-                        format: int32
-                        type: integer
-                      readyReplicas:
-                        description: readyReplicas is the total number of ready control
-                          plane machines in this cluster. A machine is considered
-                          ready when Machine's Ready condition is true.
-                        format: int32
-                        type: integer
-                      replicas:
-                        description: |-
-                          replicas is the total number of control plane machines in this cluster.
-                          NOTE: replicas also includes machines still being provisioned or being deleted.
-                        format: int32
-                        type: integer
-                      upToDateReplicas:
-                        description: upToDateReplicas is the number of up-to-date
-                          control plane machines in this cluster. A machine is considered
-                          up-to-date when Machine's UpToDate condition is true.
-                        format: int32
-                        type: integer
-                    type: object
-                  workers:
-                    description: workers groups all the observations about Cluster's
-                      Workers current state.
-                    properties:
-                      availableReplicas:
-                        description: availableReplicas is the total number of available
-                          worker machines in this cluster. A machine is considered
-                          available when Machine's Available condition is true.
-                        format: int32
-                        type: integer
-                      desiredReplicas:
-                        description: desiredReplicas is the total number of desired
-                          worker machines in this cluster.
-                        format: int32
-                        type: integer
-                      readyReplicas:
-                        description: readyReplicas is the total number of ready worker
-                          machines in this cluster. A machine is considered ready
-                          when Machine's Ready condition is true.
-                        format: int32
-                        type: integer
-                      replicas:
-                        description: |-
-                          replicas is the total number of worker machines in this cluster.
-                          NOTE: replicas also includes machines still being provisioned or being deleted.
-                        format: int32
-                        type: integer
-                      upToDateReplicas:
-                        description: upToDateReplicas is the number of up-to-date
-                          worker machines in this cluster. A machine is considered
-                          up-to-date when Machine's UpToDate condition is true.
-                        format: int32
-                        type: integer
-                    type: object
-                type: object
-            type: object
-        type: object
-    served: true
-    storage: true
-    subresources:
-      status: {}
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: null
-  storedVersions: null
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  annotations:
-    controller-gen.kubebuilder.io/version: v0.16.1
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: cluster-api
-    clusterctl.cluster.x-k8s.io: ""
-  name: extensionconfigs.runtime.cluster.x-k8s.io
-spec:
-  group: runtime.cluster.x-k8s.io
-  names:
-    categories:
-    - cluster-api
-    kind: ExtensionConfig
-    listKind: ExtensionConfigList
-    plural: extensionconfigs
-    shortNames:
-    - ext
-    singular: extensionconfig
-  scope: Cluster
-  versions:
-  - additionalPrinterColumns:
-    - description: Time duration since creation of ExtensionConfig
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    name: v1alpha1
-    schema:
-      openAPIV3Schema:
-        description: ExtensionConfig is the Schema for the ExtensionConfig API.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: ExtensionConfigSpec is the desired state of the ExtensionConfig
-            properties:
-              clientConfig:
-                description: clientConfig defines how to communicate with the Extension
-                  server.
-                properties:
-                  caBundle:
-                    description: caBundle is a PEM encoded CA bundle which will be
-                      used to validate the Extension server's server certificate.
-                    format: byte
-                    type: string
-                  service:
-                    description: |-
-                      service is a reference to the Kubernetes service for the Extension server.
-                      Note: Exactly one of `url` or `service` must be specified.
-
-                      If the Extension server is running within a cluster, then you should use `service`.
-                    properties:
-                      name:
-                        description: name is the name of the service.
-                        type: string
-                      namespace:
-                        description: namespace is the namespace of the service.
-                        type: string
-                      path:
-                        description: |-
-                          path is an optional URL path and if present may be any string permissible in
-                          a URL. If a path is set it will be used as prefix to the hook-specific path.
-                        type: string
-                      port:
-                        description: |-
-                          port is the port on the service that's hosting the Extension server.
-                          Defaults to 443.
-                          Port should be a valid port number (1-65535, inclusive).
-                        format: int32
-                        type: integer
-                    required:
-                    - name
-                    - namespace
-                    type: object
-                  url:
-                    description: |-
-                      url gives the location of the Extension server, in standard URL form
-                      (`scheme://host:port/path`).
-                      Note: Exactly one of `url` or `service` must be specified.
-
-                      The scheme must be "https".
-
-                      The `host` should not refer to a service running in the cluster; use
-                      the `service` field instead.
-
-                      A path is optional, and if present may be any string permissible in
-                      a URL. If a path is set it will be used as prefix to the hook-specific path.
-
-                      Attempting to use a user or basic auth e.g. "user:password@" is not
-                      allowed. Fragments ("#...") and query parameters ("?...") are not
-                      allowed either.
-                    type: string
-                type: object
-              namespaceSelector:
-                description: |-
-                  namespaceSelector decides whether to call the hook for an object based
-                  on whether the namespace for that object matches the selector.
-                  Defaults to the empty LabelSelector, which matches all objects.
-                properties:
-                  matchExpressions:
-                    description: matchExpressions is a list of label selector requirements.
-                      The requirements are ANDed.
-                    items:
-                      description: |-
-                        A label selector requirement is a selector that contains values, a key, and an operator that
-                        relates the key and values.
-                      properties:
-                        key:
-                          description: key is the label key that the selector applies
-                            to.
-                          type: string
-                        operator:
-                          description: |-
-                            operator represents a key's relationship to a set of values.
-                            Valid operators are In, NotIn, Exists and DoesNotExist.
-                          type: string
-                        values:
-                          description: |-
-                            values is an array of string values. If the operator is In or NotIn,
-                            the values array must be non-empty. If the operator is Exists or DoesNotExist,
-                            the values array must be empty. This array is replaced during a strategic
-                            merge patch.
-                          items:
-                            type: string
-                          type: array
-                          x-kubernetes-list-type: atomic
-                      required:
-                      - key
-                      - operator
-                      type: object
-                    type: array
-                    x-kubernetes-list-type: atomic
-                  matchLabels:
-                    additionalProperties:
-                      type: string
-                    description: |-
-                      matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
-                      map is equivalent to an element of matchExpressions, whose key field is "key", the
-                      operator is "In", and the values array contains only "value". The requirements are ANDed.
-                    type: object
-                type: object
-                x-kubernetes-map-type: atomic
-              settings:
-                additionalProperties:
-                  type: string
-                description: |-
-                  settings defines key value pairs to be passed to all calls
-                  to all supported RuntimeExtensions.
-                  Note: Settings can be overridden on the ClusterClass.
-                type: object
-            required:
-            - clientConfig
-            type: object
-          status:
-            description: ExtensionConfigStatus is the current state of the ExtensionConfig
-            properties:
-              conditions:
-                description: conditions define the current service state of the ExtensionConfig.
-                items:
-                  description: Condition defines an observation of a Cluster API resource
-                    operational state.
-                  properties:
-                    lastTransitionTime:
-                      description: |-
-                        Last time the condition transitioned from one status to another.
-                        This should be when the underlying condition changed. If that is not known, then using the time when
-                        the API field changed is acceptable.
-                      format: date-time
-                      type: string
-                    message:
-                      description: |-
-                        A human readable message indicating details about the transition.
-                        This field may be empty.
-                      type: string
-                    reason:
-                      description: |-
-                        The reason for the condition's last transition in CamelCase.
-                        The specific API may choose whether or not this field is considered a guaranteed API.
-                        This field may be empty.
-                      type: string
-                    severity:
-                      description: |-
-                        severity provides an explicit classification of Reason code, so the users or machines can immediately
-                        understand the current situation and act accordingly.
-                        The Severity field MUST be set only when Status=False.
-                      type: string
-                    status:
-                      description: status of the condition, one of True, False, Unknown.
-                      type: string
-                    type:
-                      description: |-
-                        type of condition in CamelCase or in foo.example.com/CamelCase.
-                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
-                        can be useful (see .node.status.conditions), the ability to deconflict is important.
-                      type: string
-                  required:
-                  - lastTransitionTime
-                  - status
-                  - type
-                  type: object
-                type: array
-              handlers:
-                description: handlers defines the current ExtensionHandlers supported
-                  by an Extension.
-                items:
-                  description: ExtensionHandler specifies the details of a handler
-                    for a particular runtime hook registered by an Extension server.
-                  properties:
-                    failurePolicy:
-                      description: |-
-                        failurePolicy defines how failures in calls to the ExtensionHandler should be handled by a client.
-                        Defaults to Fail if not set.
-                      type: string
-                    name:
-                      description: name is the unique name of the ExtensionHandler.
-                      type: string
-                    requestHook:
-                      description: requestHook defines the versioned runtime hook
-                        which this ExtensionHandler serves.
-                      properties:
-                        apiVersion:
-                          description: apiVersion is the group and version of the
-                            Hook.
-                          type: string
-                        hook:
-                          description: hook is the name of the hook.
-                          type: string
-                      required:
-                      - apiVersion
-                      - hook
-                      type: object
-                    timeoutSeconds:
-                      description: |-
-                        timeoutSeconds defines the timeout duration for client calls to the ExtensionHandler.
-                        Defaults to 10 is not set.
-                      format: int32
-                      type: integer
-                  required:
-                  - name
-                  - requestHook
-                  type: object
-                type: array
-                x-kubernetes-list-map-keys:
-                - name
-                x-kubernetes-list-type: map
-            type: object
-        type: object
-    served: true
-    storage: true
-    subresources:
-      status: {}
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: null
-  storedVersions: null
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  annotations:
-    controller-gen.kubebuilder.io/version: v0.16.1
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: cluster-api
-    clusterctl.cluster.x-k8s.io: ""
-  name: ipaddressclaims.ipam.cluster.x-k8s.io
-spec:
-  group: ipam.cluster.x-k8s.io
-  names:
-    categories:
-    - cluster-api
-    kind: IPAddressClaim
-    listKind: IPAddressClaimList
-    plural: ipaddressclaims
-    singular: ipaddressclaim
-  scope: Namespaced
-  versions:
-  - additionalPrinterColumns:
-    - description: Name of the pool to allocate an address from
-      jsonPath: .spec.poolRef.name
-      name: Pool Name
-      type: string
-    - description: Kind of the pool to allocate an address from
-      jsonPath: .spec.poolRef.kind
-      name: Pool Kind
-      type: string
-    - description: Time duration since creation of IPAdressClaim
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    name: v1alpha1
-    schema:
-      openAPIV3Schema:
-        description: IPAddressClaim is the Schema for the ipaddressclaim API.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: IPAddressClaimSpec is the desired state of an IPAddressClaim.
-            properties:
-              poolRef:
-                description: poolRef is a reference to the pool from which an IP address
-                  should be created.
-                properties:
-                  apiGroup:
-                    description: |-
-                      APIGroup is the group for the resource being referenced.
-                      If APIGroup is not specified, the specified Kind must be in the core API group.
-                      For any other third-party types, APIGroup is required.
-                    type: string
-                  kind:
-                    description: Kind is the type of resource being referenced
-                    type: string
-                  name:
-                    description: Name is the name of resource being referenced
-                    type: string
-                required:
-                - kind
-                - name
-                type: object
-                x-kubernetes-map-type: atomic
-            required:
-            - poolRef
-            type: object
-          status:
-            description: IPAddressClaimStatus is the observed status of a IPAddressClaim.
-            properties:
-              addressRef:
-                description: addressRef is a reference to the address that was created
-                  for this claim.
-                properties:
-                  name:
-                    default: ""
-                    description: |-
-                      Name of the referent.
-                      This field is effectively required, but due to backwards compatibility is
-                      allowed to be empty. Instances of this type with an empty value here are
-                      almost certainly wrong.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                    type: string
-                type: object
-                x-kubernetes-map-type: atomic
-              conditions:
-                description: conditions summarises the current state of the IPAddressClaim
-                items:
-                  description: Condition defines an observation of a Cluster API resource
-                    operational state.
-                  properties:
-                    lastTransitionTime:
-                      description: |-
-                        Last time the condition transitioned from one status to another.
-                        This should be when the underlying condition changed. If that is not known, then using the time when
-                        the API field changed is acceptable.
-                      format: date-time
-                      type: string
-                    message:
-                      description: |-
-                        A human readable message indicating details about the transition.
-                        This field may be empty.
-                      type: string
-                    reason:
-                      description: |-
-                        The reason for the condition's last transition in CamelCase.
-                        The specific API may choose whether or not this field is considered a guaranteed API.
-                        This field may be empty.
-                      type: string
-                    severity:
-                      description: |-
-                        severity provides an explicit classification of Reason code, so the users or machines can immediately
-                        understand the current situation and act accordingly.
-                        The Severity field MUST be set only when Status=False.
-                      type: string
-                    status:
-                      description: status of the condition, one of True, False, Unknown.
-                      type: string
-                    type:
-                      description: |-
-                        type of condition in CamelCase or in foo.example.com/CamelCase.
-                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
-                        can be useful (see .node.status.conditions), the ability to deconflict is important.
-                      type: string
-                  required:
-                  - lastTransitionTime
-                  - status
-                  - type
-                  type: object
-                type: array
-            type: object
-        type: object
-    served: true
-    storage: false
-    subresources:
-      status: {}
-  - additionalPrinterColumns:
-    - description: Name of the pool to allocate an address from
-      jsonPath: .spec.poolRef.name
-      name: Pool Name
-      type: string
-    - description: Kind of the pool to allocate an address from
-      jsonPath: .spec.poolRef.kind
-      name: Pool Kind
-      type: string
-    - description: Time duration since creation of IPAdressClaim
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    name: v1beta1
-    schema:
-      openAPIV3Schema:
-        description: IPAddressClaim is the Schema for the ipaddressclaim API.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: IPAddressClaimSpec is the desired state of an IPAddressClaim.
-            properties:
-              clusterName:
-                description: clusterName is the name of the Cluster this object belongs
-                  to.
-                type: string
-              poolRef:
-                description: poolRef is a reference to the pool from which an IP address
-                  should be created.
-                properties:
-                  apiGroup:
-                    description: |-
-                      APIGroup is the group for the resource being referenced.
-                      If APIGroup is not specified, the specified Kind must be in the core API group.
-                      For any other third-party types, APIGroup is required.
-                    type: string
-                  kind:
-                    description: Kind is the type of resource being referenced
-                    type: string
-                  name:
-                    description: Name is the name of resource being referenced
-                    type: string
-                required:
-                - kind
-                - name
-                type: object
-                x-kubernetes-map-type: atomic
-            required:
-            - poolRef
-            type: object
-          status:
-            description: IPAddressClaimStatus is the observed status of a IPAddressClaim.
-            properties:
-              addressRef:
-                description: addressRef is a reference to the address that was created
-                  for this claim.
-                properties:
-                  name:
-                    default: ""
-                    description: |-
-                      Name of the referent.
-                      This field is effectively required, but due to backwards compatibility is
-                      allowed to be empty. Instances of this type with an empty value here are
-                      almost certainly wrong.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                    type: string
-                type: object
-                x-kubernetes-map-type: atomic
-              conditions:
-                description: conditions summarises the current state of the IPAddressClaim
-                items:
-                  description: Condition defines an observation of a Cluster API resource
-                    operational state.
-                  properties:
-                    lastTransitionTime:
-                      description: |-
-                        Last time the condition transitioned from one status to another.
-                        This should be when the underlying condition changed. If that is not known, then using the time when
-                        the API field changed is acceptable.
-                      format: date-time
-                      type: string
-                    message:
-                      description: |-
-                        A human readable message indicating details about the transition.
-                        This field may be empty.
-                      type: string
-                    reason:
-                      description: |-
-                        The reason for the condition's last transition in CamelCase.
-                        The specific API may choose whether or not this field is considered a guaranteed API.
-                        This field may be empty.
-                      type: string
-                    severity:
-                      description: |-
-                        severity provides an explicit classification of Reason code, so the users or machines can immediately
-                        understand the current situation and act accordingly.
-                        The Severity field MUST be set only when Status=False.
-                      type: string
-                    status:
-                      description: status of the condition, one of True, False, Unknown.
-                      type: string
-                    type:
-                      description: |-
-                        type of condition in CamelCase or in foo.example.com/CamelCase.
-                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
-                        can be useful (see .node.status.conditions), the ability to deconflict is important.
-                      type: string
-                  required:
-                  - lastTransitionTime
-                  - status
-                  - type
-                  type: object
-                type: array
-            type: object
-        type: object
-    served: true
-    storage: true
-    subresources:
-      status: {}
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: null
-  storedVersions: null
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  annotations:
-    controller-gen.kubebuilder.io/version: v0.16.1
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: cluster-api
-    clusterctl.cluster.x-k8s.io: ""
-  name: ipaddresses.ipam.cluster.x-k8s.io
-spec:
-  group: ipam.cluster.x-k8s.io
-  names:
-    categories:
-    - cluster-api
-    kind: IPAddress
-    listKind: IPAddressList
-    plural: ipaddresses
-    singular: ipaddress
-  scope: Namespaced
-  versions:
-  - additionalPrinterColumns:
-    - description: Address
-      jsonPath: .spec.address
-      name: Address
-      type: string
-    - description: Name of the pool the address is from
-      jsonPath: .spec.poolRef.name
-      name: Pool Name
-      type: string
-    - description: Kind of the pool the address is from
-      jsonPath: .spec.poolRef.kind
-      name: Pool Kind
-      type: string
-    - description: Time duration since creation of IPAdress
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    name: v1alpha1
-    schema:
-      openAPIV3Schema:
-        description: IPAddress is the Schema for the ipaddress API.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: IPAddressSpec is the desired state of an IPAddress.
-            properties:
-              address:
-                description: address is the IP address.
-                type: string
-              claimRef:
-                description: claimRef is a reference to the claim this IPAddress was
-                  created for.
-                properties:
-                  name:
-                    default: ""
-                    description: |-
-                      Name of the referent.
-                      This field is effectively required, but due to backwards compatibility is
-                      allowed to be empty. Instances of this type with an empty value here are
-                      almost certainly wrong.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                    type: string
-                type: object
-                x-kubernetes-map-type: atomic
-              gateway:
-                description: gateway is the network gateway of the network the address
-                  is from.
-                type: string
-              poolRef:
-                description: poolRef is a reference to the pool that this IPAddress
-                  was created from.
-                properties:
-                  apiGroup:
-                    description: |-
-                      APIGroup is the group for the resource being referenced.
-                      If APIGroup is not specified, the specified Kind must be in the core API group.
-                      For any other third-party types, APIGroup is required.
-                    type: string
-                  kind:
-                    description: Kind is the type of resource being referenced
-                    type: string
-                  name:
-                    description: Name is the name of resource being referenced
-                    type: string
-                required:
-                - kind
-                - name
-                type: object
-                x-kubernetes-map-type: atomic
-              prefix:
-                description: prefix is the prefix of the address.
-                type: integer
-            required:
-            - address
-            - claimRef
-            - poolRef
-            - prefix
-            type: object
-        type: object
-    served: true
-    storage: false
-    subresources: {}
-  - additionalPrinterColumns:
-    - description: Address
-      jsonPath: .spec.address
-      name: Address
-      type: string
-    - description: Name of the pool the address is from
-      jsonPath: .spec.poolRef.name
-      name: Pool Name
-      type: string
-    - description: Kind of the pool the address is from
-      jsonPath: .spec.poolRef.kind
-      name: Pool Kind
-      type: string
-    - description: Time duration since creation of IPAdress
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    name: v1beta1
-    schema:
-      openAPIV3Schema:
-        description: IPAddress is the Schema for the ipaddress API.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: IPAddressSpec is the desired state of an IPAddress.
-            properties:
-              address:
-                description: address is the IP address.
-                type: string
-              claimRef:
-                description: claimRef is a reference to the claim this IPAddress was
-                  created for.
-                properties:
-                  name:
-                    default: ""
-                    description: |-
-                      Name of the referent.
-                      This field is effectively required, but due to backwards compatibility is
-                      allowed to be empty. Instances of this type with an empty value here are
-                      almost certainly wrong.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                    type: string
-                type: object
-                x-kubernetes-map-type: atomic
-              gateway:
-                description: gateway is the network gateway of the network the address
-                  is from.
-                type: string
-              poolRef:
-                description: poolRef is a reference to the pool that this IPAddress
-                  was created from.
-                properties:
-                  apiGroup:
-                    description: |-
-                      APIGroup is the group for the resource being referenced.
-                      If APIGroup is not specified, the specified Kind must be in the core API group.
-                      For any other third-party types, APIGroup is required.
-                    type: string
-                  kind:
-                    description: Kind is the type of resource being referenced
-                    type: string
-                  name:
-                    description: Name is the name of resource being referenced
-                    type: string
-                required:
-                - kind
-                - name
-                type: object
-                x-kubernetes-map-type: atomic
-              prefix:
-                description: prefix is the prefix of the address.
-                type: integer
-            required:
-            - address
-            - claimRef
-            - poolRef
-            - prefix
-            type: object
-        type: object
-    served: true
-    storage: true
-    subresources: {}
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: null
-  storedVersions: null
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  annotations:
-    cert-manager.io/inject-ca-from: capi-system/capi-serving-cert
-    controller-gen.kubebuilder.io/version: v0.16.1
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: cluster-api
-    clusterctl.cluster.x-k8s.io: ""
-  name: machinedeployments.cluster.x-k8s.io
-spec:
-  conversion:
-    strategy: Webhook
-    webhook:
-      clientConfig:
-        service:
-          name: capi-webhook-service
-          namespace: capi-system
-          path: /convert
-      conversionReviewVersions:
-      - v1
-      - v1beta1
-  group: cluster.x-k8s.io
-  names:
-    categories:
-    - cluster-api
-    kind: MachineDeployment
-    listKind: MachineDeploymentList
-    plural: machinedeployments
-    shortNames:
-    - md
-    singular: machinedeployment
-  scope: Namespaced
-  versions:
-  - additionalPrinterColumns:
-    - description: MachineDeployment status such as ScalingUp/ScalingDown/Running/Failed/Unknown
-      jsonPath: .status.phase
-      name: Phase
-      type: string
-    - description: Total number of non-terminated machines targeted by this MachineDeployment
-      jsonPath: .status.replicas
-      name: Replicas
-      type: integer
-    - description: Total number of ready machines targeted by this MachineDeployment
-      jsonPath: .status.readyReplicas
-      name: Ready
-      type: integer
-    - description: Total number of non-terminated machines targeted by this deployment
-        that have the desired template spec
-      jsonPath: .status.updatedReplicas
-      name: Updated
-      type: integer
-    - description: Total number of unavailable machines targeted by this MachineDeployment
-      jsonPath: .status.unavailableReplicas
-      name: Unavailable
-      type: integer
-    deprecated: true
-    name: v1alpha3
-    schema:
-      openAPIV3Schema:
-        description: |-
-          MachineDeployment is the Schema for the machinedeployments API.
-
-          Deprecated: This type will be removed in one of the next releases.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: MachineDeploymentSpec defines the desired state of MachineDeployment.
-            properties:
-              clusterName:
-                description: clusterName is the name of the Cluster this object belongs
-                  to.
-                minLength: 1
-                type: string
-              minReadySeconds:
-                description: |-
-                  Minimum number of seconds for which a newly created machine should
-                  be ready.
-                  Defaults to 0 (machine will be considered available as soon as it
-                  is ready)
-                format: int32
-                type: integer
-              paused:
-                description: Indicates that the deployment is paused.
-                type: boolean
-              progressDeadlineSeconds:
-                description: |-
-                  The maximum time in seconds for a deployment to make progress before it
-                  is considered to be failed. The deployment controller will continue to
-                  process failed deployments and a condition with a ProgressDeadlineExceeded
-                  reason will be surfaced in the deployment status. Note that progress will
-                  not be estimated during the time a deployment is paused. Defaults to 600s.
-                format: int32
-                type: integer
-              replicas:
-                description: |-
-                  Number of desired machines. Defaults to 1.
-                  This is a pointer to distinguish between explicit zero and not specified.
-                format: int32
-                type: integer
-              revisionHistoryLimit:
-                description: |-
-                  The number of old MachineSets to retain to allow rollback.
-                  This is a pointer to distinguish between explicit zero and not specified.
-                  Defaults to 1.
-                format: int32
-                type: integer
-              selector:
-                description: |-
-                  Label selector for machines. Existing MachineSets whose machines are
-                  selected by this will be the ones affected by this deployment.
-                  It must match the machine template's labels.
-                properties:
-                  matchExpressions:
-                    description: matchExpressions is a list of label selector requirements.
-                      The requirements are ANDed.
-                    items:
-                      description: |-
-                        A label selector requirement is a selector that contains values, a key, and an operator that
-                        relates the key and values.
-                      properties:
-                        key:
-                          description: key is the label key that the selector applies
-                            to.
-                          type: string
-                        operator:
-                          description: |-
-                            operator represents a key's relationship to a set of values.
-                            Valid operators are In, NotIn, Exists and DoesNotExist.
-                          type: string
-                        values:
-                          description: |-
-                            values is an array of string values. If the operator is In or NotIn,
-                            the values array must be non-empty. If the operator is Exists or DoesNotExist,
-                            the values array must be empty. This array is replaced during a strategic
-                            merge patch.
-                          items:
-                            type: string
-                          type: array
-                          x-kubernetes-list-type: atomic
-                      required:
-                      - key
-                      - operator
-                      type: object
-                    type: array
-                    x-kubernetes-list-type: atomic
-                  matchLabels:
-                    additionalProperties:
-                      type: string
-                    description: |-
-                      matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
-                      map is equivalent to an element of matchExpressions, whose key field is "key", the
-                      operator is "In", and the values array contains only "value". The requirements are ANDed.
-                    type: object
-                type: object
-                x-kubernetes-map-type: atomic
-              strategy:
-                description: |-
-                  The deployment strategy to use to replace existing machines with
-                  new ones.
-                properties:
-                  rollingUpdate:
-                    description: |-
-                      Rolling update config params. Present only if
-                      MachineDeploymentStrategyType = RollingUpdate.
-                    properties:
-                      maxSurge:
-                        anyOf:
-                        - type: integer
-                        - type: string
-                        description: |-
-                          The maximum number of machines that can be scheduled above the
-                          desired number of machines.
-                          Value can be an absolute number (ex: 5) or a percentage of
-                          desired machines (ex: 10%).
-                          This can not be 0 if MaxUnavailable is 0.
-                          Absolute number is calculated from percentage by rounding up.
-                          Defaults to 1.
-                          Example: when this is set to 30%, the new MachineSet can be scaled
-                          up immediately when the rolling update starts, such that the total
-                          number of old and new machines do not exceed 130% of desired
-                          machines. Once old machines have been killed, new MachineSet can
-                          be scaled up further, ensuring that total number of machines running
-                          at any time during the update is at most 130% of desired machines.
-                        x-kubernetes-int-or-string: true
-                      maxUnavailable:
-                        anyOf:
-                        - type: integer
-                        - type: string
-                        description: |-
-                          The maximum number of machines that can be unavailable during the update.
-                          Value can be an absolute number (ex: 5) or a percentage of desired
-                          machines (ex: 10%).
-                          Absolute number is calculated from percentage by rounding down.
-                          This can not be 0 if MaxSurge is 0.
-                          Defaults to 0.
-                          Example: when this is set to 30%, the old MachineSet can be scaled
-                          down to 70% of desired machines immediately when the rolling update
-                          starts. Once new machines are ready, old MachineSet can be scaled
-                          down further, followed by scaling up the new MachineSet, ensuring
-                          that the total number of machines available at all times
-                          during the update is at least 70% of desired machines.
-                        x-kubernetes-int-or-string: true
-                    type: object
-                  type:
-                    description: |-
-                      type of deployment. Currently the only supported strategy is
-                      "RollingUpdate".
-                      Default is RollingUpdate.
-                    type: string
-                type: object
-              template:
-                description: template describes the machines that will be created.
-                properties:
-                  metadata:
-                    description: |-
-                      Standard object's metadata.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
-                    properties:
-                      annotations:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          annotations is an unstructured key value map stored with a resource that may be
-                          set by external tools to store and retrieve arbitrary metadata. They are not
-                          queryable and should be preserved when modifying objects.
-                          More info: http://kubernetes.io/docs/user-guide/annotations
-                        type: object
-                      generateName:
-                        description: |-
-                          generateName is an optional prefix, used by the server, to generate a unique
-                          name ONLY IF the Name field has not been provided.
-                          If this field is used, the name returned to the client will be different
-                          than the name passed. This value will also be combined with a unique suffix.
-                          The provided value has the same validation rules as the Name field,
-                          and may be truncated by the length of the suffix required to make the value
-                          unique on the server.
-
-                          If this field is specified and the generated name exists, the server will
-                          NOT return a 409 - instead, it will either return 201 Created or 500 with Reason
-                          ServerTimeout indicating a unique name could not be found in the time allotted, and the client
-                          should retry (optionally after the time indicated in the Retry-After header).
-
-                          Applied only if Name is not specified.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency
-
-                          Deprecated: This field has no function and is going to be removed in a next release.
-                        type: string
-                      labels:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          Map of string keys and values that can be used to organize and categorize
-                          (scope and select) objects. May match selectors of replication controllers
-                          and services.
-                          More info: http://kubernetes.io/docs/user-guide/labels
-                        type: object
-                      name:
-                        description: |-
-                          name must be unique within a namespace. Is required when creating resources, although
-                          some resources may allow a client to request the generation of an appropriate name
-                          automatically. Name is primarily intended for creation idempotence and configuration
-                          definition.
-                          Cannot be updated.
-                          More info: http://kubernetes.io/docs/user-guide/identifiers#names
-
-                          Deprecated: This field has no function and is going to be removed in a next release.
-                        type: string
-                      namespace:
-                        description: |-
-                          namespace defines the space within each name must be unique. An empty namespace is
-                          equivalent to the "default" namespace, but "default" is the canonical representation.
-                          Not all objects are required to be scoped to a namespace - the value of this field for
-                          those objects will be empty.
-
-                          Must be a DNS_LABEL.
-                          Cannot be updated.
-                          More info: http://kubernetes.io/docs/user-guide/namespaces
-
-                          Deprecated: This field has no function and is going to be removed in a next release.
-                        type: string
-                      ownerReferences:
-                        description: |-
-                          List of objects depended by this object. If ALL objects in the list have
-                          been deleted, this object will be garbage collected. If this object is managed by a controller,
-                          then an entry in this list will point to this controller, with the controller field set to true.
-                          There cannot be more than one managing controller.
-
-                          Deprecated: This field has no function and is going to be removed in a next release.
-                        items:
-                          description: |-
-                            OwnerReference contains enough information to let you identify an owning
-                            object. An owning object must be in the same namespace as the dependent, or
-                            be cluster-scoped, so there is no namespace field.
-                          properties:
-                            apiVersion:
-                              description: API version of the referent.
-                              type: string
-                            blockOwnerDeletion:
-                              description: |-
-                                If true, AND if the owner has the "foregroundDeletion" finalizer, then
-                                the owner cannot be deleted from the key-value store until this
-                                reference is removed.
-                                See https://kubernetes.io/docs/concepts/architecture/garbage-collection/#foreground-deletion
-                                for how the garbage collector interacts with this field and enforces the foreground deletion.
-                                Defaults to false.
-                                To set this field, a user needs "delete" permission of the owner,
-                                otherwise 422 (Unprocessable Entity) will be returned.
-                              type: boolean
-                            controller:
-                              description: If true, this reference points to the managing
-                                controller.
-                              type: boolean
-                            kind:
-                              description: |-
-                                Kind of the referent.
-                                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                              type: string
-                            name:
-                              description: |-
-                                Name of the referent.
-                                More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names
-                              type: string
-                            uid:
-                              description: |-
-                                UID of the referent.
-                                More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#uids
-                              type: string
-                          required:
-                          - apiVersion
-                          - kind
-                          - name
-                          - uid
-                          type: object
-                          x-kubernetes-map-type: atomic
-                        type: array
-                    type: object
-                  spec:
-                    description: |-
-                      Specification of the desired behavior of the machine.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
-                    properties:
-                      bootstrap:
-                        description: |-
-                          bootstrap is a reference to a local struct which encapsulates
-                          fields to configure the Machine’s bootstrapping mechanism.
-                        properties:
-                          configRef:
-                            description: |-
-                              configRef is a reference to a bootstrap provider-specific resource
-                              that holds configuration details. The reference is optional to
-                              allow users/operators to specify Bootstrap.Data without
-                              the need of a controller.
-                            properties:
-                              apiVersion:
-                                description: API version of the referent.
-                                type: string
-                              fieldPath:
-                                description: |-
-                                  If referring to a piece of an object instead of an entire object, this string
-                                  should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                                  For example, if the object reference is to a container within a pod, this would take on a value like:
-                                  "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                                  the event) or if no container name is specified "spec.containers[2]" (container with
-                                  index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                                  referencing a part of an object.
-                                type: string
-                              kind:
-                                description: |-
-                                  Kind of the referent.
-                                  More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                                type: string
-                              name:
-                                description: |-
-                                  Name of the referent.
-                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                type: string
-                              namespace:
-                                description: |-
-                                  Namespace of the referent.
-                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                                type: string
-                              resourceVersion:
-                                description: |-
-                                  Specific resourceVersion to which this reference is made, if any.
-                                  More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                                type: string
-                              uid:
-                                description: |-
-                                  UID of the referent.
-                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                                type: string
-                            type: object
-                            x-kubernetes-map-type: atomic
-                          data:
-                            description: |-
-                              data contains the bootstrap data, such as cloud-init details scripts.
-                              If nil, the Machine should remain in the Pending state.
-
-                              Deprecated: Switch to DataSecretName.
-                            type: string
-                          dataSecretName:
-                            description: |-
-                              dataSecretName is the name of the secret that stores the bootstrap data script.
-                              If nil, the Machine should remain in the Pending state.
-                            type: string
-                        type: object
-                      clusterName:
-                        description: clusterName is the name of the Cluster this object
-                          belongs to.
-                        minLength: 1
-                        type: string
-                      failureDomain:
-                        description: |-
-                          failureDomain is the failure domain the machine will be created in.
-                          Must match a key in the FailureDomains map stored on the cluster object.
-                        type: string
-                      infrastructureRef:
-                        description: |-
-                          infrastructureRef is a required reference to a custom resource
-                          offered by an infrastructure provider.
-                        properties:
-                          apiVersion:
-                            description: API version of the referent.
-                            type: string
-                          fieldPath:
-                            description: |-
-                              If referring to a piece of an object instead of an entire object, this string
-                              should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                              For example, if the object reference is to a container within a pod, this would take on a value like:
-                              "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                              the event) or if no container name is specified "spec.containers[2]" (container with
-                              index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                              referencing a part of an object.
-                            type: string
-                          kind:
-                            description: |-
-                              Kind of the referent.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                            type: string
-                          name:
-                            description: |-
-                              Name of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                            type: string
-                          namespace:
-                            description: |-
-                              Namespace of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                            type: string
-                          resourceVersion:
-                            description: |-
-                              Specific resourceVersion to which this reference is made, if any.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                            type: string
-                          uid:
-                            description: |-
-                              UID of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                            type: string
-                        type: object
-                        x-kubernetes-map-type: atomic
-                      nodeDrainTimeout:
-                        description: |-
-                          nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
-                          The default value is 0, meaning that the node can be drained without any time limitations.
-                          NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
-                        type: string
-                      providerID:
-                        description: |-
-                          providerID is the identification ID of the machine provided by the provider.
-                          This field must match the provider ID as seen on the node object corresponding to this machine.
-                          This field is required by higher level consumers of cluster-api. Example use case is cluster autoscaler
-                          with cluster-api as provider. Clean-up logic in the autoscaler compares machines to nodes to find out
-                          machines at provider which could not get registered as Kubernetes nodes. With cluster-api as a
-                          generic out-of-tree provider for autoscaler, this field is required by autoscaler to be
-                          able to have a provider view of the list of machines. Another list of nodes is queried from the k8s apiserver
-                          and then a comparison is done to find out unregistered machines and are marked for delete.
-                          This field will be set by the actuators and consumed by higher level entities like autoscaler that will
-                          be interfacing with cluster-api as generic provider.
-                        type: string
-                      version:
-                        description: |-
-                          version defines the desired Kubernetes version.
-                          This field is meant to be optionally used by bootstrap providers.
-                        type: string
-                    required:
-                    - bootstrap
-                    - clusterName
-                    - infrastructureRef
-                    type: object
-                type: object
-            required:
-            - clusterName
-            - selector
-            - template
-            type: object
-          status:
-            description: MachineDeploymentStatus defines the observed state of MachineDeployment.
-            properties:
-              availableReplicas:
-                description: |-
-                  Total number of available machines (ready for at least minReadySeconds)
-                  targeted by this deployment.
-                format: int32
-                type: integer
-              observedGeneration:
-                description: The generation observed by the deployment controller.
-                format: int64
-                type: integer
-              phase:
-                description: phase represents the current phase of a MachineDeployment
-                  (ScalingUp, ScalingDown, Running, Failed, or Unknown).
-                type: string
-              readyReplicas:
-                description: Total number of ready machines targeted by this deployment.
-                format: int32
-                type: integer
-              replicas:
-                description: |-
-                  Total number of non-terminated machines targeted by this deployment
-                  (their labels match the selector).
-                format: int32
-                type: integer
-              selector:
-                description: |-
-                  selector is the same as the label selector but in the string format to avoid introspection
-                  by clients. The string will be in the same format as the query-param syntax.
-                  More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors
-                type: string
-              unavailableReplicas:
-                description: |-
-                  Total number of unavailable machines targeted by this deployment.
-                  This is the total number of machines that are still required for
-                  the deployment to have 100% available capacity. They may either
-                  be machines that are running but not yet available or machines
-                  that still have not been created.
-                format: int32
-                type: integer
-              updatedReplicas:
-                description: |-
-                  Total number of non-terminated machines targeted by this deployment
-                  that have the desired template spec.
-                format: int32
-                type: integer
-            type: object
-        type: object
-    served: false
-    storage: false
-    subresources:
-      scale:
-        labelSelectorPath: .status.selector
-        specReplicasPath: .spec.replicas
-        statusReplicasPath: .status.replicas
-      status: {}
-  - additionalPrinterColumns:
-    - description: Cluster
-      jsonPath: .spec.clusterName
-      name: Cluster
-      type: string
-    - description: Time duration since creation of MachineDeployment
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    - description: MachineDeployment status such as ScalingUp/ScalingDown/Running/Failed/Unknown
-      jsonPath: .status.phase
-      name: Phase
-      type: string
-    - description: Total number of non-terminated machines targeted by this MachineDeployment
-      jsonPath: .status.replicas
-      name: Replicas
-      type: integer
-    - description: Total number of ready machines targeted by this MachineDeployment
-      jsonPath: .status.readyReplicas
-      name: Ready
-      type: integer
-    - description: Total number of non-terminated machines targeted by this deployment
-        that have the desired template spec
-      jsonPath: .status.updatedReplicas
-      name: Updated
-      type: integer
-    - description: Total number of unavailable machines targeted by this MachineDeployment
-      jsonPath: .status.unavailableReplicas
-      name: Unavailable
-      type: integer
-    deprecated: true
-    name: v1alpha4
-    schema:
-      openAPIV3Schema:
-        description: |-
-          MachineDeployment is the Schema for the machinedeployments API.
-
-          Deprecated: This type will be removed in one of the next releases.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: MachineDeploymentSpec defines the desired state of MachineDeployment.
-            properties:
-              clusterName:
-                description: clusterName is the name of the Cluster this object belongs
-                  to.
-                minLength: 1
-                type: string
-              minReadySeconds:
-                description: |-
-                  Minimum number of seconds for which a newly created machine should
-                  be ready.
-                  Defaults to 0 (machine will be considered available as soon as it
-                  is ready)
-                format: int32
-                type: integer
-              paused:
-                description: Indicates that the deployment is paused.
-                type: boolean
-              progressDeadlineSeconds:
-                description: |-
-                  The maximum time in seconds for a deployment to make progress before it
-                  is considered to be failed. The deployment controller will continue to
-                  process failed deployments and a condition with a ProgressDeadlineExceeded
-                  reason will be surfaced in the deployment status. Note that progress will
-                  not be estimated during the time a deployment is paused. Defaults to 600s.
-                format: int32
-                type: integer
-              replicas:
-                default: 1
-                description: |-
-                  Number of desired machines. Defaults to 1.
-                  This is a pointer to distinguish between explicit zero and not specified.
-                format: int32
-                type: integer
-              revisionHistoryLimit:
-                description: |-
-                  The number of old MachineSets to retain to allow rollback.
-                  This is a pointer to distinguish between explicit zero and not specified.
-                  Defaults to 1.
-                format: int32
-                type: integer
-              selector:
-                description: |-
-                  Label selector for machines. Existing MachineSets whose machines are
-                  selected by this will be the ones affected by this deployment.
-                  It must match the machine template's labels.
-                properties:
-                  matchExpressions:
-                    description: matchExpressions is a list of label selector requirements.
-                      The requirements are ANDed.
-                    items:
-                      description: |-
-                        A label selector requirement is a selector that contains values, a key, and an operator that
-                        relates the key and values.
-                      properties:
-                        key:
-                          description: key is the label key that the selector applies
-                            to.
-                          type: string
-                        operator:
-                          description: |-
-                            operator represents a key's relationship to a set of values.
-                            Valid operators are In, NotIn, Exists and DoesNotExist.
-                          type: string
-                        values:
-                          description: |-
-                            values is an array of string values. If the operator is In or NotIn,
-                            the values array must be non-empty. If the operator is Exists or DoesNotExist,
-                            the values array must be empty. This array is replaced during a strategic
-                            merge patch.
-                          items:
-                            type: string
-                          type: array
-                          x-kubernetes-list-type: atomic
-                      required:
-                      - key
-                      - operator
-                      type: object
-                    type: array
-                    x-kubernetes-list-type: atomic
-                  matchLabels:
-                    additionalProperties:
-                      type: string
-                    description: |-
-                      matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
-                      map is equivalent to an element of matchExpressions, whose key field is "key", the
-                      operator is "In", and the values array contains only "value". The requirements are ANDed.
-                    type: object
-                type: object
-                x-kubernetes-map-type: atomic
-              strategy:
-                description: |-
-                  The deployment strategy to use to replace existing machines with
-                  new ones.
-                properties:
-                  rollingUpdate:
-                    description: |-
-                      Rolling update config params. Present only if
-                      MachineDeploymentStrategyType = RollingUpdate.
-                    properties:
-                      deletePolicy:
-                        description: |-
-                          deletePolicy defines the policy used by the MachineDeployment to identify nodes to delete when downscaling.
-                          Valid values are "Random, "Newest", "Oldest"
-                          When no value is supplied, the default DeletePolicy of MachineSet is used
-                        enum:
-                        - Random
-                        - Newest
-                        - Oldest
-                        type: string
-                      maxSurge:
-                        anyOf:
-                        - type: integer
-                        - type: string
-                        description: |-
-                          The maximum number of machines that can be scheduled above the
-                          desired number of machines.
-                          Value can be an absolute number (ex: 5) or a percentage of
-                          desired machines (ex: 10%).
-                          This can not be 0 if MaxUnavailable is 0.
-                          Absolute number is calculated from percentage by rounding up.
-                          Defaults to 1.
-                          Example: when this is set to 30%, the new MachineSet can be scaled
-                          up immediately when the rolling update starts, such that the total
-                          number of old and new machines do not exceed 130% of desired
-                          machines. Once old machines have been killed, new MachineSet can
-                          be scaled up further, ensuring that total number of machines running
-                          at any time during the update is at most 130% of desired machines.
-                        x-kubernetes-int-or-string: true
-                      maxUnavailable:
-                        anyOf:
-                        - type: integer
-                        - type: string
-                        description: |-
-                          The maximum number of machines that can be unavailable during the update.
-                          Value can be an absolute number (ex: 5) or a percentage of desired
-                          machines (ex: 10%).
-                          Absolute number is calculated from percentage by rounding down.
-                          This can not be 0 if MaxSurge is 0.
-                          Defaults to 0.
-                          Example: when this is set to 30%, the old MachineSet can be scaled
-                          down to 70% of desired machines immediately when the rolling update
-                          starts. Once new machines are ready, old MachineSet can be scaled
-                          down further, followed by scaling up the new MachineSet, ensuring
-                          that the total number of machines available at all times
-                          during the update is at least 70% of desired machines.
-                        x-kubernetes-int-or-string: true
-                    type: object
-                  type:
-                    description: |-
-                      type of deployment.
-                      Default is RollingUpdate.
-                    enum:
-                    - RollingUpdate
-                    - OnDelete
-                    type: string
-                type: object
-              template:
-                description: template describes the machines that will be created.
-                properties:
-                  metadata:
-                    description: |-
-                      Standard object's metadata.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
-                    properties:
-                      annotations:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          annotations is an unstructured key value map stored with a resource that may be
-                          set by external tools to store and retrieve arbitrary metadata. They are not
-                          queryable and should be preserved when modifying objects.
-                          More info: http://kubernetes.io/docs/user-guide/annotations
-                        type: object
-                      labels:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          Map of string keys and values that can be used to organize and categorize
-                          (scope and select) objects. May match selectors of replication controllers
-                          and services.
-                          More info: http://kubernetes.io/docs/user-guide/labels
-                        type: object
-                    type: object
-                  spec:
-                    description: |-
-                      Specification of the desired behavior of the machine.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
-                    properties:
-                      bootstrap:
-                        description: |-
-                          bootstrap is a reference to a local struct which encapsulates
-                          fields to configure the Machine’s bootstrapping mechanism.
-                        properties:
-                          configRef:
-                            description: |-
-                              configRef is a reference to a bootstrap provider-specific resource
-                              that holds configuration details. The reference is optional to
-                              allow users/operators to specify Bootstrap.DataSecretName without
-                              the need of a controller.
-                            properties:
-                              apiVersion:
-                                description: API version of the referent.
-                                type: string
-                              fieldPath:
-                                description: |-
-                                  If referring to a piece of an object instead of an entire object, this string
-                                  should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                                  For example, if the object reference is to a container within a pod, this would take on a value like:
-                                  "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                                  the event) or if no container name is specified "spec.containers[2]" (container with
-                                  index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                                  referencing a part of an object.
-                                type: string
-                              kind:
-                                description: |-
-                                  Kind of the referent.
-                                  More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                                type: string
-                              name:
-                                description: |-
-                                  Name of the referent.
-                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                type: string
-                              namespace:
-                                description: |-
-                                  Namespace of the referent.
-                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                                type: string
-                              resourceVersion:
-                                description: |-
-                                  Specific resourceVersion to which this reference is made, if any.
-                                  More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                                type: string
-                              uid:
-                                description: |-
-                                  UID of the referent.
-                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                                type: string
-                            type: object
-                            x-kubernetes-map-type: atomic
-                          dataSecretName:
-                            description: |-
-                              dataSecretName is the name of the secret that stores the bootstrap data script.
-                              If nil, the Machine should remain in the Pending state.
-                            type: string
-                        type: object
-                      clusterName:
-                        description: clusterName is the name of the Cluster this object
-                          belongs to.
-                        minLength: 1
-                        type: string
-                      failureDomain:
-                        description: |-
-                          failureDomain is the failure domain the machine will be created in.
-                          Must match a key in the FailureDomains map stored on the cluster object.
-                        type: string
-                      infrastructureRef:
-                        description: |-
-                          infrastructureRef is a required reference to a custom resource
-                          offered by an infrastructure provider.
-                        properties:
-                          apiVersion:
-                            description: API version of the referent.
-                            type: string
-                          fieldPath:
-                            description: |-
-                              If referring to a piece of an object instead of an entire object, this string
-                              should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                              For example, if the object reference is to a container within a pod, this would take on a value like:
-                              "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                              the event) or if no container name is specified "spec.containers[2]" (container with
-                              index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                              referencing a part of an object.
-                            type: string
-                          kind:
-                            description: |-
-                              Kind of the referent.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                            type: string
-                          name:
-                            description: |-
-                              Name of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                            type: string
-                          namespace:
-                            description: |-
-                              Namespace of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                            type: string
-                          resourceVersion:
-                            description: |-
-                              Specific resourceVersion to which this reference is made, if any.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                            type: string
-                          uid:
-                            description: |-
-                              UID of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                            type: string
-                        type: object
-                        x-kubernetes-map-type: atomic
-                      nodeDrainTimeout:
-                        description: |-
-                          nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
-                          The default value is 0, meaning that the node can be drained without any time limitations.
-                          NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
-                        type: string
-                      providerID:
-                        description: |-
-                          providerID is the identification ID of the machine provided by the provider.
-                          This field must match the provider ID as seen on the node object corresponding to this machine.
-                          This field is required by higher level consumers of cluster-api. Example use case is cluster autoscaler
-                          with cluster-api as provider. Clean-up logic in the autoscaler compares machines to nodes to find out
-                          machines at provider which could not get registered as Kubernetes nodes. With cluster-api as a
-                          generic out-of-tree provider for autoscaler, this field is required by autoscaler to be
-                          able to have a provider view of the list of machines. Another list of nodes is queried from the k8s apiserver
-                          and then a comparison is done to find out unregistered machines and are marked for delete.
-                          This field will be set by the actuators and consumed by higher level entities like autoscaler that will
-                          be interfacing with cluster-api as generic provider.
-                        type: string
-                      version:
-                        description: |-
-                          version defines the desired Kubernetes version.
-                          This field is meant to be optionally used by bootstrap providers.
-                        type: string
-                    required:
-                    - bootstrap
-                    - clusterName
-                    - infrastructureRef
-                    type: object
-                type: object
-            required:
-            - clusterName
-            - selector
-            - template
-            type: object
-          status:
-            description: MachineDeploymentStatus defines the observed state of MachineDeployment.
-            properties:
-              availableReplicas:
-                description: |-
-                  Total number of available machines (ready for at least minReadySeconds)
-                  targeted by this deployment.
-                format: int32
-                type: integer
-              conditions:
-                description: conditions defines current service state of the MachineDeployment.
-                items:
-                  description: Condition defines an observation of a Cluster API resource
-                    operational state.
-                  properties:
-                    lastTransitionTime:
-                      description: |-
-                        Last time the condition transitioned from one status to another.
-                        This should be when the underlying condition changed. If that is not known, then using the time when
-                        the API field changed is acceptable.
-                      format: date-time
-                      type: string
-                    message:
-                      description: |-
-                        A human readable message indicating details about the transition.
-                        This field may be empty.
-                      type: string
-                    reason:
-                      description: |-
-                        The reason for the condition's last transition in CamelCase.
-                        The specific API may choose whether or not this field is considered a guaranteed API.
-                        This field may not be empty.
-                      type: string
-                    severity:
-                      description: |-
-                        severity provides an explicit classification of Reason code, so the users or machines can immediately
-                        understand the current situation and act accordingly.
-                        The Severity field MUST be set only when Status=False.
-                      type: string
-                    status:
-                      description: status of the condition, one of True, False, Unknown.
-                      type: string
-                    type:
-                      description: |-
-                        type of condition in CamelCase or in foo.example.com/CamelCase.
-                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
-                        can be useful (see .node.status.conditions), the ability to deconflict is important.
-                      type: string
-                  required:
-                  - status
-                  - type
-                  type: object
-                type: array
-              observedGeneration:
-                description: The generation observed by the deployment controller.
-                format: int64
-                type: integer
-              phase:
-                description: phase represents the current phase of a MachineDeployment
-                  (ScalingUp, ScalingDown, Running, Failed, or Unknown).
-                type: string
-              readyReplicas:
-                description: Total number of ready machines targeted by this deployment.
-                format: int32
-                type: integer
-              replicas:
-                description: |-
-                  Total number of non-terminated machines targeted by this deployment
-                  (their labels match the selector).
-                format: int32
-                type: integer
-              selector:
-                description: |-
-                  selector is the same as the label selector but in the string format to avoid introspection
-                  by clients. The string will be in the same format as the query-param syntax.
-                  More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors
-                type: string
-              unavailableReplicas:
-                description: |-
-                  Total number of unavailable machines targeted by this deployment.
-                  This is the total number of machines that are still required for
-                  the deployment to have 100% available capacity. They may either
-                  be machines that are running but not yet available or machines
-                  that still have not been created.
-                format: int32
-                type: integer
-              updatedReplicas:
-                description: |-
-                  Total number of non-terminated machines targeted by this deployment
-                  that have the desired template spec.
-                format: int32
-                type: integer
-            type: object
-        type: object
-    served: false
-    storage: false
-    subresources:
-      scale:
-        labelSelectorPath: .status.selector
-        specReplicasPath: .spec.replicas
-        statusReplicasPath: .status.replicas
-      status: {}
-  - additionalPrinterColumns:
-    - description: Cluster
-      jsonPath: .spec.clusterName
-      name: Cluster
-      type: string
-    - description: Total number of machines desired by this MachineDeployment
-      jsonPath: .spec.replicas
-      name: Desired
-      priority: 10
-      type: integer
-    - description: Total number of non-terminated machines targeted by this MachineDeployment
-      jsonPath: .status.replicas
-      name: Replicas
-      type: integer
-    - description: Total number of ready machines targeted by this MachineDeployment
-      jsonPath: .status.readyReplicas
-      name: Ready
-      type: integer
-    - description: Total number of non-terminated machines targeted by this deployment
-        that have the desired template spec
-      jsonPath: .status.updatedReplicas
-      name: Updated
-      type: integer
-    - description: Total number of unavailable machines targeted by this MachineDeployment
-      jsonPath: .status.unavailableReplicas
-      name: Unavailable
-      type: integer
-    - description: MachineDeployment status such as ScalingUp/ScalingDown/Running/Failed/Unknown
-      jsonPath: .status.phase
-      name: Phase
-      type: string
-    - description: Time duration since creation of MachineDeployment
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    - description: Kubernetes version associated with this MachineDeployment
-      jsonPath: .spec.template.spec.version
-      name: Version
-      type: string
-    name: v1beta1
-    schema:
-      openAPIV3Schema:
-        description: MachineDeployment is the Schema for the machinedeployments API.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: MachineDeploymentSpec defines the desired state of MachineDeployment.
-            properties:
-              clusterName:
-                description: clusterName is the name of the Cluster this object belongs
-                  to.
-                minLength: 1
-                type: string
-              minReadySeconds:
-                description: |-
-                  minReadySeconds is the minimum number of seconds for which a Node for a newly created machine should be ready before considering the replica available.
-                  Defaults to 0 (machine will be considered available as soon as the Node is ready)
-                format: int32
-                type: integer
-              paused:
-                description: Indicates that the deployment is paused.
-                type: boolean
-              progressDeadlineSeconds:
-                description: |-
-                  The maximum time in seconds for a deployment to make progress before it
-                  is considered to be failed. The deployment controller will continue to
-                  process failed deployments and a condition with a ProgressDeadlineExceeded
-                  reason will be surfaced in the deployment status. Note that progress will
-                  not be estimated during the time a deployment is paused. Defaults to 600s.
-
-                  Deprecated: This field is deprecated and is going to be removed in the next apiVersion. Please see https://github.com/kubernetes-sigs/cluster-api/issues/11470 for more details.
-                format: int32
-                type: integer
-              replicas:
-                description: |-
-                  Number of desired machines.
-                  This is a pointer to distinguish between explicit zero and not specified.
-
-                  Defaults to:
-                  * if the Kubernetes autoscaler min size and max size annotations are set:
-                    - if it's a new MachineDeployment, use min size
-                    - if the replicas field of the old MachineDeployment is < min size, use min size
-                    - if the replicas field of the old MachineDeployment is > max size, use max size
-                    - if the replicas field of the old MachineDeployment is in the (min size, max size) range, keep the value from the oldMD
-                  * otherwise use 1
-                  Note: Defaulting will be run whenever the replicas field is not set:
-                  * A new MachineDeployment is created with replicas not set.
-                  * On an existing MachineDeployment the replicas field was first set and is now unset.
-                  Those cases are especially relevant for the following Kubernetes autoscaler use cases:
-                  * A new MachineDeployment is created and replicas should be managed by the autoscaler
-                  * An existing MachineDeployment which initially wasn't controlled by the autoscaler
-                    should be later controlled by the autoscaler
-                format: int32
-                type: integer
-              revisionHistoryLimit:
-                description: |-
-                  The number of old MachineSets to retain to allow rollback.
-                  This is a pointer to distinguish between explicit zero and not specified.
-                  Defaults to 1.
-
-                  Deprecated: This field is deprecated and is going to be removed in the next apiVersion. Please see https://github.com/kubernetes-sigs/cluster-api/issues/10479 for more details.
-                format: int32
-                type: integer
-              rolloutAfter:
-                description: |-
-                  rolloutAfter is a field to indicate a rollout should be performed
-                  after the specified time even if no changes have been made to the
-                  MachineDeployment.
-                  Example: In the YAML the time can be specified in the RFC3339 format.
-                  To specify the rolloutAfter target as March 9, 2023, at 9 am UTC
-                  use "2023-03-09T09:00:00Z".
-                format: date-time
-                type: string
-              selector:
-                description: |-
-                  Label selector for machines. Existing MachineSets whose machines are
-                  selected by this will be the ones affected by this deployment.
-                  It must match the machine template's labels.
-                properties:
-                  matchExpressions:
-                    description: matchExpressions is a list of label selector requirements.
-                      The requirements are ANDed.
-                    items:
-                      description: |-
-                        A label selector requirement is a selector that contains values, a key, and an operator that
-                        relates the key and values.
-                      properties:
-                        key:
-                          description: key is the label key that the selector applies
-                            to.
-                          type: string
-                        operator:
-                          description: |-
-                            operator represents a key's relationship to a set of values.
-                            Valid operators are In, NotIn, Exists and DoesNotExist.
-                          type: string
-                        values:
-                          description: |-
-                            values is an array of string values. If the operator is In or NotIn,
-                            the values array must be non-empty. If the operator is Exists or DoesNotExist,
-                            the values array must be empty. This array is replaced during a strategic
-                            merge patch.
-                          items:
-                            type: string
-                          type: array
-                          x-kubernetes-list-type: atomic
-                      required:
-                      - key
-                      - operator
-                      type: object
-                    type: array
-                    x-kubernetes-list-type: atomic
-                  matchLabels:
-                    additionalProperties:
-                      type: string
-                    description: |-
-                      matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
-                      map is equivalent to an element of matchExpressions, whose key field is "key", the
-                      operator is "In", and the values array contains only "value". The requirements are ANDed.
-                    type: object
-                type: object
-                x-kubernetes-map-type: atomic
-              strategy:
-                description: |-
-                  The deployment strategy to use to replace existing machines with
-                  new ones.
-                properties:
-                  remediation:
-                    description: |-
-                      remediation controls the strategy of remediating unhealthy machines
-                      and how remediating operations should occur during the lifecycle of the dependant MachineSets.
-                    properties:
-                      maxInFlight:
-                        anyOf:
-                        - type: integer
-                        - type: string
-                        description: |-
-                          maxInFlight determines how many in flight remediations should happen at the same time.
-
-                          Remediation only happens on the MachineSet with the most current revision, while
-                          older MachineSets (usually present during rollout operations) aren't allowed to remediate.
-
-                          Note: In general (independent of remediations), unhealthy machines are always
-                          prioritized during scale down operations over healthy ones.
-
-                          MaxInFlight can be set to a fixed number or a percentage.
-                          Example: when this is set to 20%, the MachineSet controller deletes at most 20% of
-                          the desired replicas.
-
-                          If not set, remediation is limited to all machines (bounded by replicas)
-                          under the active MachineSet's management.
-                        x-kubernetes-int-or-string: true
-                    type: object
-                  rollingUpdate:
-                    description: |-
-                      Rolling update config params. Present only if
-                      MachineDeploymentStrategyType = RollingUpdate.
-                    properties:
-                      deletePolicy:
-                        description: |-
-                          deletePolicy defines the policy used by the MachineDeployment to identify nodes to delete when downscaling.
-                          Valid values are "Random, "Newest", "Oldest"
-                          When no value is supplied, the default DeletePolicy of MachineSet is used
-                        enum:
-                        - Random
-                        - Newest
-                        - Oldest
-                        type: string
-                      maxSurge:
-                        anyOf:
-                        - type: integer
-                        - type: string
-                        description: |-
-                          The maximum number of machines that can be scheduled above the
-                          desired number of machines.
-                          Value can be an absolute number (ex: 5) or a percentage of
-                          desired machines (ex: 10%).
-                          This can not be 0 if MaxUnavailable is 0.
-                          Absolute number is calculated from percentage by rounding up.
-                          Defaults to 1.
-                          Example: when this is set to 30%, the new MachineSet can be scaled
-                          up immediately when the rolling update starts, such that the total
-                          number of old and new machines do not exceed 130% of desired
-                          machines. Once old machines have been killed, new MachineSet can
-                          be scaled up further, ensuring that total number of machines running
-                          at any time during the update is at most 130% of desired machines.
-                        x-kubernetes-int-or-string: true
-                      maxUnavailable:
-                        anyOf:
-                        - type: integer
-                        - type: string
-                        description: |-
-                          The maximum number of machines that can be unavailable during the update.
-                          Value can be an absolute number (ex: 5) or a percentage of desired
-                          machines (ex: 10%).
-                          Absolute number is calculated from percentage by rounding down.
-                          This can not be 0 if MaxSurge is 0.
-                          Defaults to 0.
-                          Example: when this is set to 30%, the old MachineSet can be scaled
-                          down to 70% of desired machines immediately when the rolling update
-                          starts. Once new machines are ready, old MachineSet can be scaled
-                          down further, followed by scaling up the new MachineSet, ensuring
-                          that the total number of machines available at all times
-                          during the update is at least 70% of desired machines.
-                        x-kubernetes-int-or-string: true
-                    type: object
-                  type:
-                    description: |-
-                      type of deployment. Allowed values are RollingUpdate and OnDelete.
-                      The default is RollingUpdate.
-                    enum:
-                    - RollingUpdate
-                    - OnDelete
-                    type: string
-                type: object
-              template:
-                description: template describes the machines that will be created.
-                properties:
-                  metadata:
-                    description: |-
-                      Standard object's metadata.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
-                    properties:
-                      annotations:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          annotations is an unstructured key value map stored with a resource that may be
-                          set by external tools to store and retrieve arbitrary metadata. They are not
-                          queryable and should be preserved when modifying objects.
-                          More info: http://kubernetes.io/docs/user-guide/annotations
-                        type: object
-                      labels:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          Map of string keys and values that can be used to organize and categorize
-                          (scope and select) objects. May match selectors of replication controllers
-                          and services.
-                          More info: http://kubernetes.io/docs/user-guide/labels
-                        type: object
-                    type: object
-                  spec:
-                    description: |-
-                      Specification of the desired behavior of the machine.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
-                    properties:
-                      bootstrap:
-                        description: |-
-                          bootstrap is a reference to a local struct which encapsulates
-                          fields to configure the Machine’s bootstrapping mechanism.
-                        properties:
-                          configRef:
-                            description: |-
-                              configRef is a reference to a bootstrap provider-specific resource
-                              that holds configuration details. The reference is optional to
-                              allow users/operators to specify Bootstrap.DataSecretName without
-                              the need of a controller.
-                            properties:
-                              apiVersion:
-                                description: API version of the referent.
-                                type: string
-                              fieldPath:
-                                description: |-
-                                  If referring to a piece of an object instead of an entire object, this string
-                                  should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                                  For example, if the object reference is to a container within a pod, this would take on a value like:
-                                  "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                                  the event) or if no container name is specified "spec.containers[2]" (container with
-                                  index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                                  referencing a part of an object.
-                                type: string
-                              kind:
-                                description: |-
-                                  Kind of the referent.
-                                  More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                                type: string
-                              name:
-                                description: |-
-                                  Name of the referent.
-                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                type: string
-                              namespace:
-                                description: |-
-                                  Namespace of the referent.
-                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                                type: string
-                              resourceVersion:
-                                description: |-
-                                  Specific resourceVersion to which this reference is made, if any.
-                                  More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                                type: string
-                              uid:
-                                description: |-
-                                  UID of the referent.
-                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                                type: string
-                            type: object
-                            x-kubernetes-map-type: atomic
-                          dataSecretName:
-                            description: |-
-                              dataSecretName is the name of the secret that stores the bootstrap data script.
-                              If nil, the Machine should remain in the Pending state.
-                            type: string
-                        type: object
-                      clusterName:
-                        description: clusterName is the name of the Cluster this object
-                          belongs to.
-                        minLength: 1
-                        type: string
-                      failureDomain:
-                        description: |-
-                          failureDomain is the failure domain the machine will be created in.
-                          Must match a key in the FailureDomains map stored on the cluster object.
-                        type: string
-                      infrastructureRef:
-                        description: |-
-                          infrastructureRef is a required reference to a custom resource
-                          offered by an infrastructure provider.
-                        properties:
-                          apiVersion:
-                            description: API version of the referent.
-                            type: string
-                          fieldPath:
-                            description: |-
-                              If referring to a piece of an object instead of an entire object, this string
-                              should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                              For example, if the object reference is to a container within a pod, this would take on a value like:
-                              "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                              the event) or if no container name is specified "spec.containers[2]" (container with
-                              index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                              referencing a part of an object.
-                            type: string
-                          kind:
-                            description: |-
-                              Kind of the referent.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                            type: string
-                          name:
-                            description: |-
-                              Name of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                            type: string
-                          namespace:
-                            description: |-
-                              Namespace of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                            type: string
-                          resourceVersion:
-                            description: |-
-                              Specific resourceVersion to which this reference is made, if any.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                            type: string
-                          uid:
-                            description: |-
-                              UID of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                            type: string
-                        type: object
-                        x-kubernetes-map-type: atomic
-                      nodeDeletionTimeout:
-                        description: |-
-                          nodeDeletionTimeout defines how long the controller will attempt to delete the Node that the Machine
-                          hosts after the Machine is marked for deletion. A duration of 0 will retry deletion indefinitely.
-                          Defaults to 10 seconds.
-                        type: string
-                      nodeDrainTimeout:
-                        description: |-
-                          nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
-                          The default value is 0, meaning that the node can be drained without any time limitations.
-                          NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
-                        type: string
-                      nodeVolumeDetachTimeout:
-                        description: |-
-                          nodeVolumeDetachTimeout is the total amount of time that the controller will spend on waiting for all volumes
-                          to be detached. The default value is 0, meaning that the volumes can be detached without any time limitations.
-                        type: string
-                      providerID:
-                        description: |-
-                          providerID is the identification ID of the machine provided by the provider.
-                          This field must match the provider ID as seen on the node object corresponding to this machine.
-                          This field is required by higher level consumers of cluster-api. Example use case is cluster autoscaler
-                          with cluster-api as provider. Clean-up logic in the autoscaler compares machines to nodes to find out
-                          machines at provider which could not get registered as Kubernetes nodes. With cluster-api as a
-                          generic out-of-tree provider for autoscaler, this field is required by autoscaler to be
-                          able to have a provider view of the list of machines. Another list of nodes is queried from the k8s apiserver
-                          and then a comparison is done to find out unregistered machines and are marked for delete.
-                          This field will be set by the actuators and consumed by higher level entities like autoscaler that will
-                          be interfacing with cluster-api as generic provider.
-                        type: string
-                      readinessGates:
-                        description: |-
-                          readinessGates specifies additional conditions to include when evaluating Machine Ready condition.
-
-                          This field can be used e.g. by Cluster API control plane providers to extend the semantic of the
-                          Ready condition for the Machine they control, like the kubeadm control provider adding ReadinessGates
-                          for the APIServerPodHealthy, SchedulerPodHealthy conditions, etc.
-
-                          Another example are external controllers, e.g. responsible to install special software/hardware on the Machines;
-                          they can include the status of those components with a new condition and add this condition to ReadinessGates.
-
-                          NOTE: This field is considered only for computing v1beta2 conditions.
-                          NOTE: In case readinessGates conditions start with the APIServer, ControllerManager, Scheduler prefix, and all those
-                          readiness gates condition are reporting the same message, when computing the Machine's Ready condition those
-                          readinessGates will be replaced by a single entry reporting "Control plane components: " + message.
-                          This helps to improve readability of conditions bubbling up to the Machine's owner resource / to the Cluster).
-                        items:
-                          description: MachineReadinessGate contains the type of a
-                            Machine condition to be used as a readiness gate.
-                          properties:
-                            conditionType:
-                              description: |-
-                                conditionType refers to a positive polarity condition (status true means good) with matching type in the Machine's condition list.
-                                If the conditions doesn't exist, it will be treated as unknown.
-                                Note: Both Cluster API conditions or conditions added by 3rd party controllers can be used as readiness gates.
-                              maxLength: 316
-                              minLength: 1
-                              pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-                              type: string
-                          required:
-                          - conditionType
-                          type: object
-                        maxItems: 32
-                        type: array
-                        x-kubernetes-list-map-keys:
-                        - conditionType
-                        x-kubernetes-list-type: map
-                      version:
-                        description: |-
-                          version defines the desired Kubernetes version.
-                          This field is meant to be optionally used by bootstrap providers.
-                        type: string
-                    required:
-                    - bootstrap
-                    - clusterName
-                    - infrastructureRef
-                    type: object
-                type: object
-            required:
-            - clusterName
-            - selector
-            - template
-            type: object
-          status:
-            description: MachineDeploymentStatus defines the observed state of MachineDeployment.
-            properties:
-              availableReplicas:
-                description: |-
-                  Total number of available machines (ready for at least minReadySeconds)
-                  targeted by this deployment.
-                format: int32
-                type: integer
-              conditions:
-                description: conditions defines current service state of the MachineDeployment.
-                items:
-                  description: Condition defines an observation of a Cluster API resource
-                    operational state.
-                  properties:
-                    lastTransitionTime:
-                      description: |-
-                        Last time the condition transitioned from one status to another.
-                        This should be when the underlying condition changed. If that is not known, then using the time when
-                        the API field changed is acceptable.
-                      format: date-time
-                      type: string
-                    message:
-                      description: |-
-                        A human readable message indicating details about the transition.
-                        This field may be empty.
-                      type: string
-                    reason:
-                      description: |-
-                        The reason for the condition's last transition in CamelCase.
-                        The specific API may choose whether or not this field is considered a guaranteed API.
-                        This field may be empty.
-                      type: string
-                    severity:
-                      description: |-
-                        severity provides an explicit classification of Reason code, so the users or machines can immediately
-                        understand the current situation and act accordingly.
-                        The Severity field MUST be set only when Status=False.
-                      type: string
-                    status:
-                      description: status of the condition, one of True, False, Unknown.
-                      type: string
-                    type:
-                      description: |-
-                        type of condition in CamelCase or in foo.example.com/CamelCase.
-                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
-                        can be useful (see .node.status.conditions), the ability to deconflict is important.
-                      type: string
-                  required:
-                  - lastTransitionTime
-                  - status
-                  - type
-                  type: object
-                type: array
-              observedGeneration:
-                description: The generation observed by the deployment controller.
-                format: int64
-                type: integer
-              phase:
-                description: phase represents the current phase of a MachineDeployment
-                  (ScalingUp, ScalingDown, Running, Failed, or Unknown).
-                type: string
-              readyReplicas:
-                description: Total number of ready machines targeted by this deployment.
-                format: int32
-                type: integer
-              replicas:
-                description: |-
-                  Total number of non-terminated machines targeted by this deployment
-                  (their labels match the selector).
-                format: int32
-                type: integer
-              selector:
-                description: |-
-                  selector is the same as the label selector but in the string format to avoid introspection
-                  by clients. The string will be in the same format as the query-param syntax.
-                  More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors
-                type: string
-              unavailableReplicas:
-                description: |-
-                  Total number of unavailable machines targeted by this deployment.
-                  This is the total number of machines that are still required for
-                  the deployment to have 100% available capacity. They may either
-                  be machines that are running but not yet available or machines
-                  that still have not been created.
-
-                  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.
-                format: int32
-                type: integer
-              updatedReplicas:
-                description: |-
-                  Total number of non-terminated machines targeted by this deployment
-                  that have the desired template spec.
-                format: int32
-                type: integer
-              v1beta2:
-                description: v1beta2 groups all the fields that will be added or modified
-                  in MachineDeployment's status with the V1Beta2 version.
-                properties:
-                  availableReplicas:
-                    description: availableReplicas is the number of available replicas
-                      for this MachineDeployment. A machine is considered available
-                      when Machine's Available condition is true.
-                    format: int32
-                    type: integer
-                  conditions:
-                    description: |-
-                      conditions represents the observations of a MachineDeployment's current state.
-                      Known condition types are Available, MachinesReady, MachinesUpToDate, ScalingUp, ScalingDown, Remediating, Deleting, Paused.
-                    items:
-                      description: Condition contains details for one aspect of the
-                        current state of this API Resource.
-                      properties:
-                        lastTransitionTime:
-                          description: |-
-                            lastTransitionTime is the last time the condition transitioned from one status to another.
-                            This should be when the underlying condition changed.  If that is not known, then using the time when the API field changed is acceptable.
-                          format: date-time
-                          type: string
-                        message:
-                          description: |-
-                            message is a human readable message indicating details about the transition.
-                            This may be an empty string.
-                          maxLength: 32768
-                          type: string
-                        observedGeneration:
-                          description: |-
-                            observedGeneration represents the .metadata.generation that the condition was set based upon.
-                            For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
-                            with respect to the current state of the instance.
-                          format: int64
-                          minimum: 0
-                          type: integer
-                        reason:
-                          description: |-
-                            reason contains a programmatic identifier indicating the reason for the condition's last transition.
-                            Producers of specific condition types may define expected values and meanings for this field,
-                            and whether the values are considered a guaranteed API.
-                            The value should be a CamelCase string.
-                            This field may not be empty.
-                          maxLength: 1024
-                          minLength: 1
-                          pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
-                          type: string
-                        status:
-                          description: status of the condition, one of True, False,
-                            Unknown.
-                          enum:
-                          - "True"
-                          - "False"
-                          - Unknown
-                          type: string
-                        type:
-                          description: type of condition in CamelCase or in foo.example.com/CamelCase.
-                          maxLength: 316
-                          pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-                          type: string
-                      required:
-                      - lastTransitionTime
-                      - message
-                      - reason
-                      - status
-                      - type
-                      type: object
-                    maxItems: 32
-                    type: array
-                    x-kubernetes-list-map-keys:
-                    - type
-                    x-kubernetes-list-type: map
-                  readyReplicas:
-                    description: readyReplicas is the number of ready replicas for
-                      this MachineDeployment. A machine is considered ready when Machine's
-                      Ready condition is true.
-                    format: int32
-                    type: integer
-                  upToDateReplicas:
-                    description: upToDateReplicas is the number of up-to-date replicas
-                      targeted by this deployment. A machine is considered up-to-date
-                      when Machine's UpToDate condition is true.
-                    format: int32
-                    type: integer
-                type: object
-            type: object
-        type: object
-    served: true
-    storage: true
-    subresources:
-      scale:
-        labelSelectorPath: .status.selector
-        specReplicasPath: .spec.replicas
-        statusReplicasPath: .status.replicas
-      status: {}
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: null
-  storedVersions: null
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  annotations:
-    cert-manager.io/inject-ca-from: capi-system/capi-serving-cert
-    controller-gen.kubebuilder.io/version: v0.16.1
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: cluster-api
-    clusterctl.cluster.x-k8s.io: ""
-  name: machinedrainrules.cluster.x-k8s.io
-spec:
-  conversion:
-    strategy: Webhook
-    webhook:
-      clientConfig:
-        service:
-          name: capi-webhook-service
-          namespace: capi-system
-          path: /convert
-      conversionReviewVersions:
-      - v1
-      - v1beta1
-  group: cluster.x-k8s.io
-  names:
-    categories:
-    - cluster-api
-    kind: MachineDrainRule
-    listKind: MachineDrainRuleList
-    plural: machinedrainrules
-    singular: machinedrainrule
-  scope: Namespaced
-  versions:
-  - additionalPrinterColumns:
-    - description: Drain behavior
-      jsonPath: .spec.drain.behavior
-      name: Behavior
-      type: string
-    - description: Drain order
-      jsonPath: .spec.drain.order
-      name: Order
-      type: string
-    - description: Time duration since creation of the MachineDrainRule
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    name: v1beta1
-    schema:
-      openAPIV3Schema:
-        description: MachineDrainRule is the Schema for the MachineDrainRule API.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: spec defines the spec of a MachineDrainRule.
-            properties:
-              drain:
-                description: drain configures if and how Pods are drained.
-                properties:
-                  behavior:
-                    description: |-
-                      behavior defines the drain behavior.
-                      Can be either "Drain", "Skip", or "WaitCompleted".
-                      "Drain" means that the Pods to which this MachineDrainRule applies will be drained.
-                      If behavior is set to "Drain" the order in which Pods are drained can be configured
-                      with the order field. When draining Pods of a Node the Pods will be grouped by order
-                      and one group after another will be drained (by increasing order). Cluster API will
-                      wait until all Pods of a group are terminated / removed from the Node before starting
-                      with the next group.
-                      "Skip" means that the Pods to which this MachineDrainRule applies will be skipped during drain.
-                      "WaitCompleted" means that the pods to which this MachineDrainRule applies will never be evicted
-                      and we wait for them to be completed, it is enforced that pods marked with this behavior always have Order=0.
-                    enum:
-                    - Drain
-                    - Skip
-                    - WaitCompleted
-                    type: string
-                  order:
-                    description: |-
-                      order defines the order in which Pods are drained.
-                      Pods with higher order are drained after Pods with lower order.
-                      order can only be set if behavior is set to "Drain".
-                      If order is not set, 0 will be used.
-                      Valid values for order are from -2147483648 to 2147483647 (inclusive).
-                    format: int32
-                    type: integer
-                required:
-                - behavior
-                type: object
-              machines:
-                description: |-
-                  machines defines to which Machines this MachineDrainRule should be applied.
-
-                  If machines is not set, the MachineDrainRule applies to all Machines in the Namespace.
-                  If machines contains multiple selectors, the results are ORed.
-                  Within a single Machine selector the results of selector and clusterSelector are ANDed.
-                  Machines will be selected from all Clusters in the Namespace unless otherwise
-                  restricted with the clusterSelector.
-
-                  Example: Selects control plane Machines in all Clusters or
-                           Machines with label "os" == "linux" in Clusters with label
-                           "stage" == "production".
-
-                   - selector:
-                       matchExpressions:
-                       - key: cluster.x-k8s.io/control-plane
-                         operator: Exists
-                   - selector:
-                       matchLabels:
-                         os: linux
-                     clusterSelector:
-                       matchExpressions:
-                       - key: stage
-                         operator: In
-                         values:
-                         - production
-                items:
-                  description: MachineDrainRuleMachineSelector defines to which Machines
-                    this MachineDrainRule should be applied.
-                  minProperties: 1
-                  properties:
-                    clusterSelector:
-                      description: |-
-                        clusterSelector is a label selector which selects Machines by the labels of
-                        their Clusters.
-                        This field follows standard label selector semantics; if not present or
-                        empty, it selects Machines of all Clusters.
-
-                        If selector is also set, then the selector as a whole selects
-                        Machines matching selector belonging to Clusters selected by clusterSelector.
-                        If selector is not set, it selects all Machines belonging to Clusters
-                        selected by clusterSelector.
-                      properties:
-                        matchExpressions:
-                          description: matchExpressions is a list of label selector
-                            requirements. The requirements are ANDed.
-                          items:
-                            description: |-
-                              A label selector requirement is a selector that contains values, a key, and an operator that
-                              relates the key and values.
-                            properties:
-                              key:
-                                description: key is the label key that the selector
-                                  applies to.
-                                type: string
-                              operator:
-                                description: |-
-                                  operator represents a key's relationship to a set of values.
-                                  Valid operators are In, NotIn, Exists and DoesNotExist.
-                                type: string
-                              values:
-                                description: |-
-                                  values is an array of string values. If the operator is In or NotIn,
-                                  the values array must be non-empty. If the operator is Exists or DoesNotExist,
-                                  the values array must be empty. This array is replaced during a strategic
-                                  merge patch.
-                                items:
-                                  type: string
-                                type: array
-                                x-kubernetes-list-type: atomic
-                            required:
-                            - key
-                            - operator
-                            type: object
-                          type: array
-                          x-kubernetes-list-type: atomic
-                        matchLabels:
-                          additionalProperties:
-                            type: string
-                          description: |-
-                            matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
-                            map is equivalent to an element of matchExpressions, whose key field is "key", the
-                            operator is "In", and the values array contains only "value". The requirements are ANDed.
-                          type: object
-                      type: object
-                      x-kubernetes-map-type: atomic
-                    selector:
-                      description: |-
-                        selector is a label selector which selects Machines by their labels.
-                        This field follows standard label selector semantics; if not present or
-                        empty, it selects all Machines.
-
-                        If clusterSelector is also set, then the selector as a whole selects
-                        Machines matching selector belonging to Clusters selected by clusterSelector.
-                        If clusterSelector is not set, it selects all Machines matching selector in
-                        all Clusters.
-                      properties:
-                        matchExpressions:
-                          description: matchExpressions is a list of label selector
-                            requirements. The requirements are ANDed.
-                          items:
-                            description: |-
-                              A label selector requirement is a selector that contains values, a key, and an operator that
-                              relates the key and values.
-                            properties:
-                              key:
-                                description: key is the label key that the selector
-                                  applies to.
-                                type: string
-                              operator:
-                                description: |-
-                                  operator represents a key's relationship to a set of values.
-                                  Valid operators are In, NotIn, Exists and DoesNotExist.
-                                type: string
-                              values:
-                                description: |-
-                                  values is an array of string values. If the operator is In or NotIn,
-                                  the values array must be non-empty. If the operator is Exists or DoesNotExist,
-                                  the values array must be empty. This array is replaced during a strategic
-                                  merge patch.
-                                items:
-                                  type: string
-                                type: array
-                                x-kubernetes-list-type: atomic
-                            required:
-                            - key
-                            - operator
-                            type: object
-                          type: array
-                          x-kubernetes-list-type: atomic
-                        matchLabels:
-                          additionalProperties:
-                            type: string
-                          description: |-
-                            matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
-                            map is equivalent to an element of matchExpressions, whose key field is "key", the
-                            operator is "In", and the values array contains only "value". The requirements are ANDed.
-                          type: object
-                      type: object
-                      x-kubernetes-map-type: atomic
-                  type: object
-                maxItems: 32
-                minItems: 1
-                type: array
-                x-kubernetes-list-type: atomic
-              pods:
-                description: |-
-                  pods defines to which Pods this MachineDrainRule should be applied.
-
-                  If pods is not set, the MachineDrainRule applies to all Pods in all Namespaces.
-                  If pods contains multiple selectors, the results are ORed.
-                  Within a single Pod selector the results of selector and namespaceSelector are ANDed.
-                  Pods will be selected from all Namespaces unless otherwise
-                  restricted with the namespaceSelector.
-
-                  Example: Selects Pods with label "app" == "logging" in all Namespaces or
-                           Pods with label "app" == "prometheus" in the "monitoring"
-                           Namespace.
-
-                   - selector:
-                       matchExpressions:
-                       - key: app
-                         operator: In
-                         values:
-                         - logging
-                   - selector:
-                       matchLabels:
-                         app: prometheus
-                     namespaceSelector:
-                       matchLabels:
-                         kubernetes.io/metadata.name: monitoring
-                items:
-                  description: MachineDrainRulePodSelector defines to which Pods this
-                    MachineDrainRule should be applied.
-                  minProperties: 1
-                  properties:
-                    namespaceSelector:
-                      description: |-
-                        namespaceSelector is a label selector which selects Pods by the labels of
-                        their Namespaces.
-                        This field follows standard label selector semantics; if not present or
-                        empty, it selects Pods of all Namespaces.
-
-                        If selector is also set, then the selector as a whole selects
-                        Pods matching selector in Namespaces selected by namespaceSelector.
-                        If selector is not set, it selects all Pods in Namespaces selected by
-                        namespaceSelector.
-                      properties:
-                        matchExpressions:
-                          description: matchExpressions is a list of label selector
-                            requirements. The requirements are ANDed.
-                          items:
-                            description: |-
-                              A label selector requirement is a selector that contains values, a key, and an operator that
-                              relates the key and values.
-                            properties:
-                              key:
-                                description: key is the label key that the selector
-                                  applies to.
-                                type: string
-                              operator:
-                                description: |-
-                                  operator represents a key's relationship to a set of values.
-                                  Valid operators are In, NotIn, Exists and DoesNotExist.
-                                type: string
-                              values:
-                                description: |-
-                                  values is an array of string values. If the operator is In or NotIn,
-                                  the values array must be non-empty. If the operator is Exists or DoesNotExist,
-                                  the values array must be empty. This array is replaced during a strategic
-                                  merge patch.
-                                items:
-                                  type: string
-                                type: array
-                                x-kubernetes-list-type: atomic
-                            required:
-                            - key
-                            - operator
-                            type: object
-                          type: array
-                          x-kubernetes-list-type: atomic
-                        matchLabels:
-                          additionalProperties:
-                            type: string
-                          description: |-
-                            matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
-                            map is equivalent to an element of matchExpressions, whose key field is "key", the
-                            operator is "In", and the values array contains only "value". The requirements are ANDed.
-                          type: object
-                      type: object
-                      x-kubernetes-map-type: atomic
-                    selector:
-                      description: |-
-                        selector is a label selector which selects Pods by their labels.
-                        This field follows standard label selector semantics; if not present or
-                        empty, it selects all Pods.
-
-                        If namespaceSelector is also set, then the selector as a whole selects
-                        Pods matching selector in Namespaces selected by namespaceSelector.
-                        If namespaceSelector is not set, it selects all Pods matching selector in
-                        all Namespaces.
-                      properties:
-                        matchExpressions:
-                          description: matchExpressions is a list of label selector
-                            requirements. The requirements are ANDed.
-                          items:
-                            description: |-
-                              A label selector requirement is a selector that contains values, a key, and an operator that
-                              relates the key and values.
-                            properties:
-                              key:
-                                description: key is the label key that the selector
-                                  applies to.
-                                type: string
-                              operator:
-                                description: |-
-                                  operator represents a key's relationship to a set of values.
-                                  Valid operators are In, NotIn, Exists and DoesNotExist.
-                                type: string
-                              values:
-                                description: |-
-                                  values is an array of string values. If the operator is In or NotIn,
-                                  the values array must be non-empty. If the operator is Exists or DoesNotExist,
-                                  the values array must be empty. This array is replaced during a strategic
-                                  merge patch.
-                                items:
-                                  type: string
-                                type: array
-                                x-kubernetes-list-type: atomic
-                            required:
-                            - key
-                            - operator
-                            type: object
-                          type: array
-                          x-kubernetes-list-type: atomic
-                        matchLabels:
-                          additionalProperties:
-                            type: string
-                          description: |-
-                            matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
-                            map is equivalent to an element of matchExpressions, whose key field is "key", the
-                            operator is "In", and the values array contains only "value". The requirements are ANDed.
-                          type: object
-                      type: object
-                      x-kubernetes-map-type: atomic
-                  type: object
-                maxItems: 32
-                minItems: 1
-                type: array
-                x-kubernetes-list-type: atomic
-            required:
-            - drain
-            type: object
-        required:
-        - metadata
-        - spec
-        type: object
-    served: true
-    storage: true
-    subresources: {}
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: null
-  storedVersions: null
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  annotations:
-    cert-manager.io/inject-ca-from: capi-system/capi-serving-cert
-    controller-gen.kubebuilder.io/version: v0.16.1
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: cluster-api
-    clusterctl.cluster.x-k8s.io: ""
-  name: machinehealthchecks.cluster.x-k8s.io
-spec:
-  conversion:
-    strategy: Webhook
-    webhook:
-      clientConfig:
-        service:
-          name: capi-webhook-service
-          namespace: capi-system
-          path: /convert
-      conversionReviewVersions:
-      - v1
-      - v1beta1
-  group: cluster.x-k8s.io
-  names:
-    categories:
-    - cluster-api
-    kind: MachineHealthCheck
-    listKind: MachineHealthCheckList
-    plural: machinehealthchecks
-    shortNames:
-    - mhc
-    - mhcs
-    singular: machinehealthcheck
-  scope: Namespaced
-  versions:
-  - additionalPrinterColumns:
-    - description: Maximum number of unhealthy machines allowed
-      jsonPath: .spec.maxUnhealthy
-      name: MaxUnhealthy
-      type: string
-    - description: Number of machines currently monitored
-      jsonPath: .status.expectedMachines
-      name: ExpectedMachines
-      type: integer
-    - description: Current observed healthy machines
-      jsonPath: .status.currentHealthy
-      name: CurrentHealthy
-      type: integer
-    deprecated: true
-    name: v1alpha3
-    schema:
-      openAPIV3Schema:
-        description: |-
-          MachineHealthCheck is the Schema for the machinehealthchecks API.
-
-          Deprecated: This type will be removed in one of the next releases.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: Specification of machine health check policy
-            properties:
-              clusterName:
-                description: clusterName is the name of the Cluster this object belongs
-                  to.
-                minLength: 1
-                type: string
-              maxUnhealthy:
-                anyOf:
-                - type: integer
-                - type: string
-                description: |-
-                  Any further remediation is only allowed if at most "MaxUnhealthy" machines selected by
-                  "selector" are not healthy.
-                x-kubernetes-int-or-string: true
-              nodeStartupTimeout:
-                description: |-
-                  Machines older than this duration without a node will be considered to have
-                  failed and will be remediated.
-                type: string
-              remediationTemplate:
-                description: |-
-                  remediationTemplate is a reference to a remediation template
-                  provided by an infrastructure provider.
-
-                  This field is completely optional, when filled, the MachineHealthCheck controller
-                  creates a new object from the template referenced and hands off remediation of the machine to
-                  a controller that lives outside of Cluster API.
-                properties:
-                  apiVersion:
-                    description: API version of the referent.
-                    type: string
-                  fieldPath:
-                    description: |-
-                      If referring to a piece of an object instead of an entire object, this string
-                      should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                      For example, if the object reference is to a container within a pod, this would take on a value like:
-                      "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                      the event) or if no container name is specified "spec.containers[2]" (container with
-                      index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                      referencing a part of an object.
-                    type: string
-                  kind:
-                    description: |-
-                      Kind of the referent.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                    type: string
-                  name:
-                    description: |-
-                      Name of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                    type: string
-                  namespace:
-                    description: |-
-                      Namespace of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                    type: string
-                  resourceVersion:
-                    description: |-
-                      Specific resourceVersion to which this reference is made, if any.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                    type: string
-                  uid:
-                    description: |-
-                      UID of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                    type: string
-                type: object
-                x-kubernetes-map-type: atomic
-              selector:
-                description: Label selector to match machines whose health will be
-                  exercised
-                properties:
-                  matchExpressions:
-                    description: matchExpressions is a list of label selector requirements.
-                      The requirements are ANDed.
-                    items:
-                      description: |-
-                        A label selector requirement is a selector that contains values, a key, and an operator that
-                        relates the key and values.
-                      properties:
-                        key:
-                          description: key is the label key that the selector applies
-                            to.
-                          type: string
-                        operator:
-                          description: |-
-                            operator represents a key's relationship to a set of values.
-                            Valid operators are In, NotIn, Exists and DoesNotExist.
-                          type: string
-                        values:
-                          description: |-
-                            values is an array of string values. If the operator is In or NotIn,
-                            the values array must be non-empty. If the operator is Exists or DoesNotExist,
-                            the values array must be empty. This array is replaced during a strategic
-                            merge patch.
-                          items:
-                            type: string
-                          type: array
-                          x-kubernetes-list-type: atomic
-                      required:
-                      - key
-                      - operator
-                      type: object
-                    type: array
-                    x-kubernetes-list-type: atomic
-                  matchLabels:
-                    additionalProperties:
-                      type: string
-                    description: |-
-                      matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
-                      map is equivalent to an element of matchExpressions, whose key field is "key", the
-                      operator is "In", and the values array contains only "value". The requirements are ANDed.
-                    type: object
-                type: object
-                x-kubernetes-map-type: atomic
-              unhealthyConditions:
-                description: |-
-                  unhealthyConditions contains a list of the conditions that determine
-                  whether a node is considered unhealthy.  The conditions are combined in a
-                  logical OR, i.e. if any of the conditions is met, the node is unhealthy.
-                items:
-                  description: |-
-                    UnhealthyCondition represents a Node condition type and value with a timeout
-                    specified as a duration.  When the named condition has been in the given
-                    status for at least the timeout value, a node is considered unhealthy.
-                  properties:
-                    status:
-                      minLength: 1
-                      type: string
-                    timeout:
-                      type: string
-                    type:
-                      minLength: 1
-                      type: string
-                  required:
-                  - status
-                  - timeout
-                  - type
-                  type: object
-                minItems: 1
-                type: array
-            required:
-            - clusterName
-            - selector
-            - unhealthyConditions
-            type: object
-          status:
-            description: Most recently observed status of MachineHealthCheck resource
-            properties:
-              conditions:
-                description: conditions defines current service state of the MachineHealthCheck.
-                items:
-                  description: Condition defines an observation of a Cluster API resource
-                    operational state.
-                  properties:
-                    lastTransitionTime:
-                      description: |-
-                        Last time the condition transitioned from one status to another.
-                        This should be when the underlying condition changed. If that is not known, then using the time when
-                        the API field changed is acceptable.
-                      format: date-time
-                      type: string
-                    message:
-                      description: |-
-                        A human readable message indicating details about the transition.
-                        This field may be empty.
-                      type: string
-                    reason:
-                      description: |-
-                        The reason for the condition's last transition in CamelCase.
-                        The specific API may choose whether or not this field is considered a guaranteed API.
-                        This field may not be empty.
-                      type: string
-                    severity:
-                      description: |-
-                        severity provides an explicit classification of Reason code, so the users or machines can immediately
-                        understand the current situation and act accordingly.
-                        The Severity field MUST be set only when Status=False.
-                      type: string
-                    status:
-                      description: status of the condition, one of True, False, Unknown.
-                      type: string
-                    type:
-                      description: |-
-                        type of condition in CamelCase or in foo.example.com/CamelCase.
-                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
-                        can be useful (see .node.status.conditions), the ability to deconflict is important.
-                      type: string
-                  required:
-                  - status
-                  - type
-                  type: object
-                type: array
-              currentHealthy:
-                description: total number of healthy machines counted by this machine
-                  health check
-                format: int32
-                minimum: 0
-                type: integer
-              expectedMachines:
-                description: total number of machines counted by this machine health
-                  check
-                format: int32
-                minimum: 0
-                type: integer
-              observedGeneration:
-                description: observedGeneration is the latest generation observed
-                  by the controller.
-                format: int64
-                type: integer
-              remediationsAllowed:
-                description: |-
-                  remediationsAllowed is the number of further remediations allowed by this machine health check before
-                  maxUnhealthy short circuiting will be applied
-                format: int32
-                minimum: 0
-                type: integer
-              targets:
-                description: targets shows the current list of machines the machine
-                  health check is watching
-                items:
-                  type: string
-                type: array
-            type: object
-        type: object
-    served: false
-    storage: false
-    subresources:
-      status: {}
-  - additionalPrinterColumns:
-    - description: Cluster
-      jsonPath: .spec.clusterName
-      name: Cluster
-      type: string
-    - description: Time duration since creation of MachineHealthCheck
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    - description: Maximum number of unhealthy machines allowed
-      jsonPath: .spec.maxUnhealthy
-      name: MaxUnhealthy
-      type: string
-    - description: Number of machines currently monitored
-      jsonPath: .status.expectedMachines
-      name: ExpectedMachines
-      type: integer
-    - description: Current observed healthy machines
-      jsonPath: .status.currentHealthy
-      name: CurrentHealthy
-      type: integer
-    deprecated: true
-    name: v1alpha4
-    schema:
-      openAPIV3Schema:
-        description: |-
-          MachineHealthCheck is the Schema for the machinehealthchecks API.
-
-          Deprecated: This type will be removed in one of the next releases.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: Specification of machine health check policy
-            properties:
-              clusterName:
-                description: clusterName is the name of the Cluster this object belongs
-                  to.
-                minLength: 1
-                type: string
-              maxUnhealthy:
-                anyOf:
-                - type: integer
-                - type: string
-                description: |-
-                  Any further remediation is only allowed if at most "MaxUnhealthy" machines selected by
-                  "selector" are not healthy.
-                x-kubernetes-int-or-string: true
-              nodeStartupTimeout:
-                description: |-
-                  Machines older than this duration without a node will be considered to have
-                  failed and will be remediated.
-                  If not set, this value is defaulted to 10 minutes.
-                  If you wish to disable this feature, set the value explicitly to 0.
-                type: string
-              remediationTemplate:
-                description: |-
-                  remediationTemplate is a reference to a remediation template
-                  provided by an infrastructure provider.
-
-                  This field is completely optional, when filled, the MachineHealthCheck controller
-                  creates a new object from the template referenced and hands off remediation of the machine to
-                  a controller that lives outside of Cluster API.
-                properties:
-                  apiVersion:
-                    description: API version of the referent.
-                    type: string
-                  fieldPath:
-                    description: |-
-                      If referring to a piece of an object instead of an entire object, this string
-                      should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                      For example, if the object reference is to a container within a pod, this would take on a value like:
-                      "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                      the event) or if no container name is specified "spec.containers[2]" (container with
-                      index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                      referencing a part of an object.
-                    type: string
-                  kind:
-                    description: |-
-                      Kind of the referent.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                    type: string
-                  name:
-                    description: |-
-                      Name of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                    type: string
-                  namespace:
-                    description: |-
-                      Namespace of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                    type: string
-                  resourceVersion:
-                    description: |-
-                      Specific resourceVersion to which this reference is made, if any.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                    type: string
-                  uid:
-                    description: |-
-                      UID of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                    type: string
-                type: object
-                x-kubernetes-map-type: atomic
-              selector:
-                description: Label selector to match machines whose health will be
-                  exercised
-                properties:
-                  matchExpressions:
-                    description: matchExpressions is a list of label selector requirements.
-                      The requirements are ANDed.
-                    items:
-                      description: |-
-                        A label selector requirement is a selector that contains values, a key, and an operator that
-                        relates the key and values.
-                      properties:
-                        key:
-                          description: key is the label key that the selector applies
-                            to.
-                          type: string
-                        operator:
-                          description: |-
-                            operator represents a key's relationship to a set of values.
-                            Valid operators are In, NotIn, Exists and DoesNotExist.
-                          type: string
-                        values:
-                          description: |-
-                            values is an array of string values. If the operator is In or NotIn,
-                            the values array must be non-empty. If the operator is Exists or DoesNotExist,
-                            the values array must be empty. This array is replaced during a strategic
-                            merge patch.
-                          items:
-                            type: string
-                          type: array
-                          x-kubernetes-list-type: atomic
-                      required:
-                      - key
-                      - operator
-                      type: object
-                    type: array
-                    x-kubernetes-list-type: atomic
-                  matchLabels:
-                    additionalProperties:
-                      type: string
-                    description: |-
-                      matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
-                      map is equivalent to an element of matchExpressions, whose key field is "key", the
-                      operator is "In", and the values array contains only "value". The requirements are ANDed.
-                    type: object
-                type: object
-                x-kubernetes-map-type: atomic
-              unhealthyConditions:
-                description: |-
-                  unhealthyConditions contains a list of the conditions that determine
-                  whether a node is considered unhealthy.  The conditions are combined in a
-                  logical OR, i.e. if any of the conditions is met, the node is unhealthy.
-                items:
-                  description: |-
-                    UnhealthyCondition represents a Node condition type and value with a timeout
-                    specified as a duration.  When the named condition has been in the given
-                    status for at least the timeout value, a node is considered unhealthy.
-                  properties:
-                    status:
-                      minLength: 1
-                      type: string
-                    timeout:
-                      type: string
-                    type:
-                      minLength: 1
-                      type: string
-                  required:
-                  - status
-                  - timeout
-                  - type
-                  type: object
-                minItems: 1
-                type: array
-              unhealthyRange:
-                description: |-
-                  Any further remediation is only allowed if the number of machines selected by "selector" as not healthy
-                  is within the range of "UnhealthyRange". Takes precedence over MaxUnhealthy.
-                  Eg. "[3-5]" - This means that remediation will be allowed only when:
-                  (a) there are at least 3 unhealthy machines (and)
-                  (b) there are at most 5 unhealthy machines
-                pattern: ^\[[0-9]+-[0-9]+\]$
-                type: string
-            required:
-            - clusterName
-            - selector
-            - unhealthyConditions
-            type: object
-          status:
-            description: Most recently observed status of MachineHealthCheck resource
-            properties:
-              conditions:
-                description: conditions defines current service state of the MachineHealthCheck.
-                items:
-                  description: Condition defines an observation of a Cluster API resource
-                    operational state.
-                  properties:
-                    lastTransitionTime:
-                      description: |-
-                        Last time the condition transitioned from one status to another.
-                        This should be when the underlying condition changed. If that is not known, then using the time when
-                        the API field changed is acceptable.
-                      format: date-time
-                      type: string
-                    message:
-                      description: |-
-                        A human readable message indicating details about the transition.
-                        This field may be empty.
-                      type: string
-                    reason:
-                      description: |-
-                        The reason for the condition's last transition in CamelCase.
-                        The specific API may choose whether or not this field is considered a guaranteed API.
-                        This field may not be empty.
-                      type: string
-                    severity:
-                      description: |-
-                        severity provides an explicit classification of Reason code, so the users or machines can immediately
-                        understand the current situation and act accordingly.
-                        The Severity field MUST be set only when Status=False.
-                      type: string
-                    status:
-                      description: status of the condition, one of True, False, Unknown.
-                      type: string
-                    type:
-                      description: |-
-                        type of condition in CamelCase or in foo.example.com/CamelCase.
-                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
-                        can be useful (see .node.status.conditions), the ability to deconflict is important.
-                      type: string
-                  required:
-                  - status
-                  - type
-                  type: object
-                type: array
-              currentHealthy:
-                description: total number of healthy machines counted by this machine
-                  health check
-                format: int32
-                minimum: 0
-                type: integer
-              expectedMachines:
-                description: total number of machines counted by this machine health
-                  check
-                format: int32
-                minimum: 0
-                type: integer
-              observedGeneration:
-                description: observedGeneration is the latest generation observed
-                  by the controller.
-                format: int64
-                type: integer
-              remediationsAllowed:
-                description: |-
-                  remediationsAllowed is the number of further remediations allowed by this machine health check before
-                  maxUnhealthy short circuiting will be applied
-                format: int32
-                minimum: 0
-                type: integer
-              targets:
-                description: targets shows the current list of machines the machine
-                  health check is watching
-                items:
-                  type: string
-                type: array
-            type: object
-        type: object
-    served: false
-    storage: false
-    subresources:
-      status: {}
-  - additionalPrinterColumns:
-    - description: Cluster
-      jsonPath: .spec.clusterName
-      name: Cluster
-      type: string
-    - description: Number of machines currently monitored
-      jsonPath: .status.expectedMachines
-      name: ExpectedMachines
-      type: integer
-    - description: Maximum number of unhealthy machines allowed
-      jsonPath: .spec.maxUnhealthy
-      name: MaxUnhealthy
-      type: string
-    - description: Current observed healthy machines
-      jsonPath: .status.currentHealthy
-      name: CurrentHealthy
-      type: integer
-    - description: Time duration since creation of MachineHealthCheck
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    name: v1beta1
-    schema:
-      openAPIV3Schema:
-        description: MachineHealthCheck is the Schema for the machinehealthchecks
-          API.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: Specification of machine health check policy
-            properties:
-              clusterName:
-                description: clusterName is the name of the Cluster this object belongs
-                  to.
-                minLength: 1
-                type: string
-              maxUnhealthy:
-                anyOf:
-                - type: integer
-                - type: string
-                description: |-
-                  Any further remediation is only allowed if at most "MaxUnhealthy" machines selected by
-                  "selector" are not healthy.
-
-                  Deprecated: This field is deprecated and is going to be removed in the next apiVersion. Please see https://github.com/kubernetes-sigs/cluster-api/issues/10722 for more details.
-                x-kubernetes-int-or-string: true
-              nodeStartupTimeout:
-                description: |-
-                  nodeStartupTimeout allows to set the maximum time for MachineHealthCheck
-                  to consider a Machine unhealthy if a corresponding Node isn't associated
-                  through a `Spec.ProviderID` field.
-
-                  The duration set in this field is compared to the greatest of:
-                  - Cluster's infrastructure ready condition timestamp (if and when available)
-                  - Control Plane's initialized condition timestamp (if and when available)
-                  - Machine's infrastructure ready condition timestamp (if and when available)
-                  - Machine's metadata creation timestamp
-
-                  Defaults to 10 minutes.
-                  If you wish to disable this feature, set the value explicitly to 0.
-                type: string
-              remediationTemplate:
-                description: |-
-                  remediationTemplate is a reference to a remediation template
-                  provided by an infrastructure provider.
-
-                  This field is completely optional, when filled, the MachineHealthCheck controller
-                  creates a new object from the template referenced and hands off remediation of the machine to
-                  a controller that lives outside of Cluster API.
-                properties:
-                  apiVersion:
-                    description: API version of the referent.
-                    type: string
-                  fieldPath:
-                    description: |-
-                      If referring to a piece of an object instead of an entire object, this string
-                      should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                      For example, if the object reference is to a container within a pod, this would take on a value like:
-                      "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                      the event) or if no container name is specified "spec.containers[2]" (container with
-                      index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                      referencing a part of an object.
-                    type: string
-                  kind:
-                    description: |-
-                      Kind of the referent.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                    type: string
-                  name:
-                    description: |-
-                      Name of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                    type: string
-                  namespace:
-                    description: |-
-                      Namespace of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                    type: string
-                  resourceVersion:
-                    description: |-
-                      Specific resourceVersion to which this reference is made, if any.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                    type: string
-                  uid:
-                    description: |-
-                      UID of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                    type: string
-                type: object
-                x-kubernetes-map-type: atomic
-              selector:
-                description: Label selector to match machines whose health will be
-                  exercised
-                properties:
-                  matchExpressions:
-                    description: matchExpressions is a list of label selector requirements.
-                      The requirements are ANDed.
-                    items:
-                      description: |-
-                        A label selector requirement is a selector that contains values, a key, and an operator that
-                        relates the key and values.
-                      properties:
-                        key:
-                          description: key is the label key that the selector applies
-                            to.
-                          type: string
-                        operator:
-                          description: |-
-                            operator represents a key's relationship to a set of values.
-                            Valid operators are In, NotIn, Exists and DoesNotExist.
-                          type: string
-                        values:
-                          description: |-
-                            values is an array of string values. If the operator is In or NotIn,
-                            the values array must be non-empty. If the operator is Exists or DoesNotExist,
-                            the values array must be empty. This array is replaced during a strategic
-                            merge patch.
-                          items:
-                            type: string
-                          type: array
-                          x-kubernetes-list-type: atomic
-                      required:
-                      - key
-                      - operator
-                      type: object
-                    type: array
-                    x-kubernetes-list-type: atomic
-                  matchLabels:
-                    additionalProperties:
-                      type: string
-                    description: |-
-                      matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
-                      map is equivalent to an element of matchExpressions, whose key field is "key", the
-                      operator is "In", and the values array contains only "value". The requirements are ANDed.
-                    type: object
-                type: object
-                x-kubernetes-map-type: atomic
-              unhealthyConditions:
-                description: |-
-                  unhealthyConditions contains a list of the conditions that determine
-                  whether a node is considered unhealthy.  The conditions are combined in a
-                  logical OR, i.e. if any of the conditions is met, the node is unhealthy.
-                items:
-                  description: |-
-                    UnhealthyCondition represents a Node condition type and value with a timeout
-                    specified as a duration.  When the named condition has been in the given
-                    status for at least the timeout value, a node is considered unhealthy.
-                  properties:
-                    status:
-                      minLength: 1
-                      type: string
-                    timeout:
-                      type: string
-                    type:
-                      minLength: 1
-                      type: string
-                  required:
-                  - status
-                  - timeout
-                  - type
-                  type: object
-                type: array
-              unhealthyRange:
-                description: |-
-                  Any further remediation is only allowed if the number of machines selected by "selector" as not healthy
-                  is within the range of "UnhealthyRange". Takes precedence over MaxUnhealthy.
-                  Eg. "[3-5]" - This means that remediation will be allowed only when:
-                  (a) there are at least 3 unhealthy machines (and)
-                  (b) there are at most 5 unhealthy machines
-
-                  Deprecated: This field is deprecated and is going to be removed in the next apiVersion. Please see https://github.com/kubernetes-sigs/cluster-api/issues/10722 for more details.
-                pattern: ^\[[0-9]+-[0-9]+\]$
-                type: string
-            required:
-            - clusterName
-            - selector
-            type: object
-          status:
-            description: Most recently observed status of MachineHealthCheck resource
-            properties:
-              conditions:
-                description: conditions defines current service state of the MachineHealthCheck.
-                items:
-                  description: Condition defines an observation of a Cluster API resource
-                    operational state.
-                  properties:
-                    lastTransitionTime:
-                      description: |-
-                        Last time the condition transitioned from one status to another.
-                        This should be when the underlying condition changed. If that is not known, then using the time when
-                        the API field changed is acceptable.
-                      format: date-time
-                      type: string
-                    message:
-                      description: |-
-                        A human readable message indicating details about the transition.
-                        This field may be empty.
-                      type: string
-                    reason:
-                      description: |-
-                        The reason for the condition's last transition in CamelCase.
-                        The specific API may choose whether or not this field is considered a guaranteed API.
-                        This field may be empty.
-                      type: string
-                    severity:
-                      description: |-
-                        severity provides an explicit classification of Reason code, so the users or machines can immediately
-                        understand the current situation and act accordingly.
-                        The Severity field MUST be set only when Status=False.
-                      type: string
-                    status:
-                      description: status of the condition, one of True, False, Unknown.
-                      type: string
-                    type:
-                      description: |-
-                        type of condition in CamelCase or in foo.example.com/CamelCase.
-                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
-                        can be useful (see .node.status.conditions), the ability to deconflict is important.
-                      type: string
-                  required:
-                  - lastTransitionTime
-                  - status
-                  - type
-                  type: object
-                type: array
-              currentHealthy:
-                description: total number of healthy machines counted by this machine
-                  health check
-                format: int32
-                minimum: 0
-                type: integer
-              expectedMachines:
-                description: total number of machines counted by this machine health
-                  check
-                format: int32
-                minimum: 0
-                type: integer
-              observedGeneration:
-                description: observedGeneration is the latest generation observed
-                  by the controller.
-                format: int64
-                type: integer
-              remediationsAllowed:
-                description: |-
-                  remediationsAllowed is the number of further remediations allowed by this machine health check before
-                  maxUnhealthy short circuiting will be applied
-                format: int32
-                minimum: 0
-                type: integer
-              targets:
-                description: targets shows the current list of machines the machine
-                  health check is watching
-                items:
-                  type: string
-                type: array
-              v1beta2:
-                description: v1beta2 groups all the fields that will be added or modified
-                  in MachineHealthCheck's status with the V1Beta2 version.
-                properties:
-                  conditions:
-                    description: |-
-                      conditions represents the observations of a MachineHealthCheck's current state.
-                      Known condition types are RemediationAllowed, Paused.
-                    items:
-                      description: Condition contains details for one aspect of the
-                        current state of this API Resource.
-                      properties:
-                        lastTransitionTime:
-                          description: |-
-                            lastTransitionTime is the last time the condition transitioned from one status to another.
-                            This should be when the underlying condition changed.  If that is not known, then using the time when the API field changed is acceptable.
-                          format: date-time
-                          type: string
-                        message:
-                          description: |-
-                            message is a human readable message indicating details about the transition.
-                            This may be an empty string.
-                          maxLength: 32768
-                          type: string
-                        observedGeneration:
-                          description: |-
-                            observedGeneration represents the .metadata.generation that the condition was set based upon.
-                            For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
-                            with respect to the current state of the instance.
-                          format: int64
-                          minimum: 0
-                          type: integer
-                        reason:
-                          description: |-
-                            reason contains a programmatic identifier indicating the reason for the condition's last transition.
-                            Producers of specific condition types may define expected values and meanings for this field,
-                            and whether the values are considered a guaranteed API.
-                            The value should be a CamelCase string.
-                            This field may not be empty.
-                          maxLength: 1024
-                          minLength: 1
-                          pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
-                          type: string
-                        status:
-                          description: status of the condition, one of True, False,
-                            Unknown.
-                          enum:
-                          - "True"
-                          - "False"
-                          - Unknown
-                          type: string
-                        type:
-                          description: type of condition in CamelCase or in foo.example.com/CamelCase.
-                          maxLength: 316
-                          pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-                          type: string
-                      required:
-                      - lastTransitionTime
-                      - message
-                      - reason
-                      - status
-                      - type
-                      type: object
-                    maxItems: 32
-                    type: array
-                    x-kubernetes-list-map-keys:
-                    - type
-                    x-kubernetes-list-type: map
-                type: object
-            type: object
-        type: object
-    served: true
-    storage: true
-    subresources:
-      status: {}
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: null
-  storedVersions: null
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  annotations:
-    cert-manager.io/inject-ca-from: capi-system/capi-serving-cert
-    controller-gen.kubebuilder.io/version: v0.16.1
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: cluster-api
-    clusterctl.cluster.x-k8s.io: ""
-  name: machinepools.cluster.x-k8s.io
-spec:
-  conversion:
-    strategy: Webhook
-    webhook:
-      clientConfig:
-        service:
-          name: capi-webhook-service
-          namespace: capi-system
-          path: /convert
-      conversionReviewVersions:
-      - v1
-      - v1beta1
-  group: cluster.x-k8s.io
-  names:
-    categories:
-    - cluster-api
-    kind: MachinePool
-    listKind: MachinePoolList
-    plural: machinepools
-    shortNames:
-    - mp
-    singular: machinepool
-  scope: Namespaced
-  versions:
-  - additionalPrinterColumns:
-    - description: MachinePool replicas count
-      jsonPath: .status.replicas
-      name: Replicas
-      type: string
-    - description: MachinePool status such as Terminating/Pending/Provisioning/Running/Failed
-        etc
-      jsonPath: .status.phase
-      name: Phase
-      type: string
-    - description: Kubernetes version associated with this MachinePool
-      jsonPath: .spec.template.spec.version
-      name: Version
-      type: string
-    deprecated: true
-    name: v1alpha3
-    schema:
-      openAPIV3Schema:
-        description: |-
-          MachinePool is the Schema for the machinepools API.
-
-          Deprecated: This type will be removed in one of the next releases.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: MachinePoolSpec defines the desired state of MachinePool.
-            properties:
-              clusterName:
-                description: clusterName is the name of the Cluster this object belongs
-                  to.
-                minLength: 1
-                type: string
-              failureDomains:
-                description: failureDomains is the list of failure domains this MachinePool
-                  should be attached to.
-                items:
-                  type: string
-                type: array
-              minReadySeconds:
-                description: |-
-                  Minimum number of seconds for which a newly created machine instances should
-                  be ready.
-                  Defaults to 0 (machine instance will be considered available as soon as it
-                  is ready)
-                format: int32
-                type: integer
-              providerIDList:
-                description: |-
-                  providerIDList are the identification IDs of machine instances provided by the provider.
-                  This field must match the provider IDs as seen on the node objects corresponding to a machine pool's machine instances.
-                items:
-                  type: string
-                type: array
-              replicas:
-                description: |-
-                  Number of desired machines. Defaults to 1.
-                  This is a pointer to distinguish between explicit zero and not specified.
-                format: int32
-                type: integer
-              strategy:
-                description: |-
-                  The deployment strategy to use to replace existing machine instances with
-                  new ones.
-                properties:
-                  rollingUpdate:
-                    description: |-
-                      Rolling update config params. Present only if
-                      MachineDeploymentStrategyType = RollingUpdate.
-                    properties:
-                      maxSurge:
-                        anyOf:
-                        - type: integer
-                        - type: string
-                        description: |-
-                          The maximum number of machines that can be scheduled above the
-                          desired number of machines.
-                          Value can be an absolute number (ex: 5) or a percentage of
-                          desired machines (ex: 10%).
-                          This can not be 0 if MaxUnavailable is 0.
-                          Absolute number is calculated from percentage by rounding up.
-                          Defaults to 1.
-                          Example: when this is set to 30%, the new MachineSet can be scaled
-                          up immediately when the rolling update starts, such that the total
-                          number of old and new machines do not exceed 130% of desired
-                          machines. Once old machines have been killed, new MachineSet can
-                          be scaled up further, ensuring that total number of machines running
-                          at any time during the update is at most 130% of desired machines.
-                        x-kubernetes-int-or-string: true
-                      maxUnavailable:
-                        anyOf:
-                        - type: integer
-                        - type: string
-                        description: |-
-                          The maximum number of machines that can be unavailable during the update.
-                          Value can be an absolute number (ex: 5) or a percentage of desired
-                          machines (ex: 10%).
-                          Absolute number is calculated from percentage by rounding down.
-                          This can not be 0 if MaxSurge is 0.
-                          Defaults to 0.
-                          Example: when this is set to 30%, the old MachineSet can be scaled
-                          down to 70% of desired machines immediately when the rolling update
-                          starts. Once new machines are ready, old MachineSet can be scaled
-                          down further, followed by scaling up the new MachineSet, ensuring
-                          that the total number of machines available at all times
-                          during the update is at least 70% of desired machines.
-                        x-kubernetes-int-or-string: true
-                    type: object
-                  type:
-                    description: |-
-                      type of deployment. Currently the only supported strategy is
-                      "RollingUpdate".
-                      Default is RollingUpdate.
-                    type: string
-                type: object
-              template:
-                description: template describes the machines that will be created.
-                properties:
-                  metadata:
-                    description: |-
-                      Standard object's metadata.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
-                    properties:
-                      annotations:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          annotations is an unstructured key value map stored with a resource that may be
-                          set by external tools to store and retrieve arbitrary metadata. They are not
-                          queryable and should be preserved when modifying objects.
-                          More info: http://kubernetes.io/docs/user-guide/annotations
-                        type: object
-                      generateName:
-                        description: |-
-                          generateName is an optional prefix, used by the server, to generate a unique
-                          name ONLY IF the Name field has not been provided.
-                          If this field is used, the name returned to the client will be different
-                          than the name passed. This value will also be combined with a unique suffix.
-                          The provided value has the same validation rules as the Name field,
-                          and may be truncated by the length of the suffix required to make the value
-                          unique on the server.
-
-                          If this field is specified and the generated name exists, the server will
-                          NOT return a 409 - instead, it will either return 201 Created or 500 with Reason
-                          ServerTimeout indicating a unique name could not be found in the time allotted, and the client
-                          should retry (optionally after the time indicated in the Retry-After header).
-
-                          Applied only if Name is not specified.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency
-
-                          Deprecated: This field has no function and is going to be removed in a next release.
-                        type: string
-                      labels:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          Map of string keys and values that can be used to organize and categorize
-                          (scope and select) objects. May match selectors of replication controllers
-                          and services.
-                          More info: http://kubernetes.io/docs/user-guide/labels
-                        type: object
-                      name:
-                        description: |-
-                          name must be unique within a namespace. Is required when creating resources, although
-                          some resources may allow a client to request the generation of an appropriate name
-                          automatically. Name is primarily intended for creation idempotence and configuration
-                          definition.
-                          Cannot be updated.
-                          More info: http://kubernetes.io/docs/user-guide/identifiers#names
-
-                          Deprecated: This field has no function and is going to be removed in a next release.
-                        type: string
-                      namespace:
-                        description: |-
-                          namespace defines the space within each name must be unique. An empty namespace is
-                          equivalent to the "default" namespace, but "default" is the canonical representation.
-                          Not all objects are required to be scoped to a namespace - the value of this field for
-                          those objects will be empty.
-
-                          Must be a DNS_LABEL.
-                          Cannot be updated.
-                          More info: http://kubernetes.io/docs/user-guide/namespaces
-
-                          Deprecated: This field has no function and is going to be removed in a next release.
-                        type: string
-                      ownerReferences:
-                        description: |-
-                          List of objects depended by this object. If ALL objects in the list have
-                          been deleted, this object will be garbage collected. If this object is managed by a controller,
-                          then an entry in this list will point to this controller, with the controller field set to true.
-                          There cannot be more than one managing controller.
-
-                          Deprecated: This field has no function and is going to be removed in a next release.
-                        items:
-                          description: |-
-                            OwnerReference contains enough information to let you identify an owning
-                            object. An owning object must be in the same namespace as the dependent, or
-                            be cluster-scoped, so there is no namespace field.
-                          properties:
-                            apiVersion:
-                              description: API version of the referent.
-                              type: string
-                            blockOwnerDeletion:
-                              description: |-
-                                If true, AND if the owner has the "foregroundDeletion" finalizer, then
-                                the owner cannot be deleted from the key-value store until this
-                                reference is removed.
-                                See https://kubernetes.io/docs/concepts/architecture/garbage-collection/#foreground-deletion
-                                for how the garbage collector interacts with this field and enforces the foreground deletion.
-                                Defaults to false.
-                                To set this field, a user needs "delete" permission of the owner,
-                                otherwise 422 (Unprocessable Entity) will be returned.
-                              type: boolean
-                            controller:
-                              description: If true, this reference points to the managing
-                                controller.
-                              type: boolean
-                            kind:
-                              description: |-
-                                Kind of the referent.
-                                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                              type: string
-                            name:
-                              description: |-
-                                Name of the referent.
-                                More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names
-                              type: string
-                            uid:
-                              description: |-
-                                UID of the referent.
-                                More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#uids
-                              type: string
-                          required:
-                          - apiVersion
-                          - kind
-                          - name
-                          - uid
-                          type: object
-                          x-kubernetes-map-type: atomic
-                        type: array
-                    type: object
-                  spec:
-                    description: |-
-                      Specification of the desired behavior of the machine.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
-                    properties:
-                      bootstrap:
-                        description: |-
-                          bootstrap is a reference to a local struct which encapsulates
-                          fields to configure the Machine’s bootstrapping mechanism.
-                        properties:
-                          configRef:
-                            description: |-
-                              configRef is a reference to a bootstrap provider-specific resource
-                              that holds configuration details. The reference is optional to
-                              allow users/operators to specify Bootstrap.Data without
-                              the need of a controller.
-                            properties:
-                              apiVersion:
-                                description: API version of the referent.
-                                type: string
-                              fieldPath:
-                                description: |-
-                                  If referring to a piece of an object instead of an entire object, this string
-                                  should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                                  For example, if the object reference is to a container within a pod, this would take on a value like:
-                                  "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                                  the event) or if no container name is specified "spec.containers[2]" (container with
-                                  index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                                  referencing a part of an object.
-                                type: string
-                              kind:
-                                description: |-
-                                  Kind of the referent.
-                                  More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                                type: string
-                              name:
-                                description: |-
-                                  Name of the referent.
-                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                type: string
-                              namespace:
-                                description: |-
-                                  Namespace of the referent.
-                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                                type: string
-                              resourceVersion:
-                                description: |-
-                                  Specific resourceVersion to which this reference is made, if any.
-                                  More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                                type: string
-                              uid:
-                                description: |-
-                                  UID of the referent.
-                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                                type: string
-                            type: object
-                            x-kubernetes-map-type: atomic
-                          data:
-                            description: |-
-                              data contains the bootstrap data, such as cloud-init details scripts.
-                              If nil, the Machine should remain in the Pending state.
-
-                              Deprecated: Switch to DataSecretName.
-                            type: string
-                          dataSecretName:
-                            description: |-
-                              dataSecretName is the name of the secret that stores the bootstrap data script.
-                              If nil, the Machine should remain in the Pending state.
-                            type: string
-                        type: object
-                      clusterName:
-                        description: clusterName is the name of the Cluster this object
-                          belongs to.
-                        minLength: 1
-                        type: string
-                      failureDomain:
-                        description: |-
-                          failureDomain is the failure domain the machine will be created in.
-                          Must match a key in the FailureDomains map stored on the cluster object.
-                        type: string
-                      infrastructureRef:
-                        description: |-
-                          infrastructureRef is a required reference to a custom resource
-                          offered by an infrastructure provider.
-                        properties:
-                          apiVersion:
-                            description: API version of the referent.
-                            type: string
-                          fieldPath:
-                            description: |-
-                              If referring to a piece of an object instead of an entire object, this string
-                              should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                              For example, if the object reference is to a container within a pod, this would take on a value like:
-                              "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                              the event) or if no container name is specified "spec.containers[2]" (container with
-                              index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                              referencing a part of an object.
-                            type: string
-                          kind:
-                            description: |-
-                              Kind of the referent.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                            type: string
-                          name:
-                            description: |-
-                              Name of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                            type: string
-                          namespace:
-                            description: |-
-                              Namespace of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                            type: string
-                          resourceVersion:
-                            description: |-
-                              Specific resourceVersion to which this reference is made, if any.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                            type: string
-                          uid:
-                            description: |-
-                              UID of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                            type: string
-                        type: object
-                        x-kubernetes-map-type: atomic
-                      nodeDrainTimeout:
-                        description: |-
-                          nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
-                          The default value is 0, meaning that the node can be drained without any time limitations.
-                          NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
-                        type: string
-                      providerID:
-                        description: |-
-                          providerID is the identification ID of the machine provided by the provider.
-                          This field must match the provider ID as seen on the node object corresponding to this machine.
-                          This field is required by higher level consumers of cluster-api. Example use case is cluster autoscaler
-                          with cluster-api as provider. Clean-up logic in the autoscaler compares machines to nodes to find out
-                          machines at provider which could not get registered as Kubernetes nodes. With cluster-api as a
-                          generic out-of-tree provider for autoscaler, this field is required by autoscaler to be
-                          able to have a provider view of the list of machines. Another list of nodes is queried from the k8s apiserver
-                          and then a comparison is done to find out unregistered machines and are marked for delete.
-                          This field will be set by the actuators and consumed by higher level entities like autoscaler that will
-                          be interfacing with cluster-api as generic provider.
-                        type: string
-                      version:
-                        description: |-
-                          version defines the desired Kubernetes version.
-                          This field is meant to be optionally used by bootstrap providers.
-                        type: string
-                    required:
-                    - bootstrap
-                    - clusterName
-                    - infrastructureRef
-                    type: object
-                type: object
-            required:
-            - clusterName
-            - template
-            type: object
-          status:
-            description: MachinePoolStatus defines the observed state of MachinePool.
-            properties:
-              availableReplicas:
-                description: The number of available replicas (ready for at least
-                  minReadySeconds) for this MachinePool.
-                format: int32
-                type: integer
-              bootstrapReady:
-                description: bootstrapReady is the state of the bootstrap provider.
-                type: boolean
-              conditions:
-                description: conditions define the current service state of the MachinePool.
-                items:
-                  description: Condition defines an observation of a Cluster API resource
-                    operational state.
-                  properties:
-                    lastTransitionTime:
-                      description: |-
-                        Last time the condition transitioned from one status to another.
-                        This should be when the underlying condition changed. If that is not known, then using the time when
-                        the API field changed is acceptable.
-                      format: date-time
-                      type: string
-                    message:
-                      description: |-
-                        A human readable message indicating details about the transition.
-                        This field may be empty.
-                      type: string
-                    reason:
-                      description: |-
-                        The reason for the condition's last transition in CamelCase.
-                        The specific API may choose whether or not this field is considered a guaranteed API.
-                        This field may not be empty.
-                      type: string
-                    severity:
-                      description: |-
-                        severity provides an explicit classification of Reason code, so the users or machines can immediately
-                        understand the current situation and act accordingly.
-                        The Severity field MUST be set only when Status=False.
-                      type: string
-                    status:
-                      description: status of the condition, one of True, False, Unknown.
-                      type: string
-                    type:
-                      description: |-
-                        type of condition in CamelCase or in foo.example.com/CamelCase.
-                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
-                        can be useful (see .node.status.conditions), the ability to deconflict is important.
-                      type: string
-                  required:
-                  - status
-                  - type
-                  type: object
-                type: array
-              failureMessage:
-                description: |-
-                  failureMessage indicates that there is a problem reconciling the state,
-                  and will be set to a descriptive error message.
-                type: string
-              failureReason:
-                description: |-
-                  failureReason indicates that there is a problem reconciling the state, and
-                  will be set to a token value suitable for programmatic interpretation.
-                type: string
-              infrastructureReady:
-                description: infrastructureReady is the state of the infrastructure
-                  provider.
-                type: boolean
-              nodeRefs:
-                description: nodeRefs will point to the corresponding Nodes if it
-                  they exist.
-                items:
-                  description: ObjectReference contains enough information to let
-                    you inspect or modify the referred object.
-                  properties:
-                    apiVersion:
-                      description: API version of the referent.
-                      type: string
-                    fieldPath:
-                      description: |-
-                        If referring to a piece of an object instead of an entire object, this string
-                        should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                        For example, if the object reference is to a container within a pod, this would take on a value like:
-                        "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                        the event) or if no container name is specified "spec.containers[2]" (container with
-                        index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                        referencing a part of an object.
-                      type: string
-                    kind:
-                      description: |-
-                        Kind of the referent.
-                        More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                      type: string
-                    name:
-                      description: |-
-                        Name of the referent.
-                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                      type: string
-                    namespace:
-                      description: |-
-                        Namespace of the referent.
-                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                      type: string
-                    resourceVersion:
-                      description: |-
-                        Specific resourceVersion to which this reference is made, if any.
-                        More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                      type: string
-                    uid:
-                      description: |-
-                        UID of the referent.
-                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                      type: string
-                  type: object
-                  x-kubernetes-map-type: atomic
-                type: array
-              observedGeneration:
-                description: observedGeneration is the latest generation observed
-                  by the controller.
-                format: int64
-                type: integer
-              phase:
-                description: |-
-                  phase represents the current phase of cluster actuation.
-                  E.g. Pending, Running, Terminating, Failed etc.
-                type: string
-              readyReplicas:
-                description: The number of ready replicas for this MachinePool. A
-                  machine is considered ready when the node has been created and is
-                  "Ready".
-                format: int32
-                type: integer
-              replicas:
-                description: replicas is the most recently observed number of replicas.
-                format: int32
-                type: integer
-              unavailableReplicas:
-                description: |-
-                  Total number of unavailable machine instances targeted by this machine pool.
-                  This is the total number of machine instances that are still required for
-                  the machine pool to have 100% available capacity. They may either
-                  be machine instances that are running but not yet available or machine instances
-                  that still have not been created.
-                format: int32
-                type: integer
-            type: object
-        type: object
-    served: false
-    storage: false
-    subresources:
-      scale:
-        specReplicasPath: .spec.replicas
-        statusReplicasPath: .status.replicas
-      status: {}
-  - additionalPrinterColumns:
-    - description: Time duration since creation of MachinePool
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    - description: MachinePool replicas count
-      jsonPath: .status.replicas
-      name: Replicas
-      type: string
-    - description: MachinePool status such as Terminating/Pending/Provisioning/Running/Failed
-        etc
-      jsonPath: .status.phase
-      name: Phase
-      type: string
-    - description: Kubernetes version associated with this MachinePool
-      jsonPath: .spec.template.spec.version
-      name: Version
-      type: string
-    deprecated: true
-    name: v1alpha4
-    schema:
-      openAPIV3Schema:
-        description: |-
-          MachinePool is the Schema for the machinepools API.
-
-          Deprecated: This type will be removed in one of the next releases.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: MachinePoolSpec defines the desired state of MachinePool.
-            properties:
-              clusterName:
-                description: clusterName is the name of the Cluster this object belongs
-                  to.
-                minLength: 1
-                type: string
-              failureDomains:
-                description: failureDomains is the list of failure domains this MachinePool
-                  should be attached to.
-                items:
-                  type: string
-                type: array
-              minReadySeconds:
-                description: |-
-                  Minimum number of seconds for which a newly created machine instances should
-                  be ready.
-                  Defaults to 0 (machine instance will be considered available as soon as it
-                  is ready)
-                format: int32
-                type: integer
-              providerIDList:
-                description: |-
-                  providerIDList are the identification IDs of machine instances provided by the provider.
-                  This field must match the provider IDs as seen on the node objects corresponding to a machine pool's machine instances.
-                items:
-                  type: string
-                type: array
-              replicas:
-                description: |-
-                  Number of desired machines. Defaults to 1.
-                  This is a pointer to distinguish between explicit zero and not specified.
-                format: int32
-                type: integer
-              template:
-                description: template describes the machines that will be created.
-                properties:
-                  metadata:
-                    description: |-
-                      Standard object's metadata.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
-                    properties:
-                      annotations:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          annotations is an unstructured key value map stored with a resource that may be
-                          set by external tools to store and retrieve arbitrary metadata. They are not
-                          queryable and should be preserved when modifying objects.
-                          More info: http://kubernetes.io/docs/user-guide/annotations
-                        type: object
-                      labels:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          Map of string keys and values that can be used to organize and categorize
-                          (scope and select) objects. May match selectors of replication controllers
-                          and services.
-                          More info: http://kubernetes.io/docs/user-guide/labels
-                        type: object
-                    type: object
-                  spec:
-                    description: |-
-                      Specification of the desired behavior of the machine.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
-                    properties:
-                      bootstrap:
-                        description: |-
-                          bootstrap is a reference to a local struct which encapsulates
-                          fields to configure the Machine’s bootstrapping mechanism.
-                        properties:
-                          configRef:
-                            description: |-
-                              configRef is a reference to a bootstrap provider-specific resource
-                              that holds configuration details. The reference is optional to
-                              allow users/operators to specify Bootstrap.DataSecretName without
-                              the need of a controller.
-                            properties:
-                              apiVersion:
-                                description: API version of the referent.
-                                type: string
-                              fieldPath:
-                                description: |-
-                                  If referring to a piece of an object instead of an entire object, this string
-                                  should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                                  For example, if the object reference is to a container within a pod, this would take on a value like:
-                                  "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                                  the event) or if no container name is specified "spec.containers[2]" (container with
-                                  index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                                  referencing a part of an object.
-                                type: string
-                              kind:
-                                description: |-
-                                  Kind of the referent.
-                                  More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                                type: string
-                              name:
-                                description: |-
-                                  Name of the referent.
-                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                type: string
-                              namespace:
-                                description: |-
-                                  Namespace of the referent.
-                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                                type: string
-                              resourceVersion:
-                                description: |-
-                                  Specific resourceVersion to which this reference is made, if any.
-                                  More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                                type: string
-                              uid:
-                                description: |-
-                                  UID of the referent.
-                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                                type: string
-                            type: object
-                            x-kubernetes-map-type: atomic
-                          dataSecretName:
-                            description: |-
-                              dataSecretName is the name of the secret that stores the bootstrap data script.
-                              If nil, the Machine should remain in the Pending state.
-                            type: string
-                        type: object
-                      clusterName:
-                        description: clusterName is the name of the Cluster this object
-                          belongs to.
-                        minLength: 1
-                        type: string
-                      failureDomain:
-                        description: |-
-                          failureDomain is the failure domain the machine will be created in.
-                          Must match a key in the FailureDomains map stored on the cluster object.
-                        type: string
-                      infrastructureRef:
-                        description: |-
-                          infrastructureRef is a required reference to a custom resource
-                          offered by an infrastructure provider.
-                        properties:
-                          apiVersion:
-                            description: API version of the referent.
-                            type: string
-                          fieldPath:
-                            description: |-
-                              If referring to a piece of an object instead of an entire object, this string
-                              should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                              For example, if the object reference is to a container within a pod, this would take on a value like:
-                              "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                              the event) or if no container name is specified "spec.containers[2]" (container with
-                              index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                              referencing a part of an object.
-                            type: string
-                          kind:
-                            description: |-
-                              Kind of the referent.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                            type: string
-                          name:
-                            description: |-
-                              Name of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                            type: string
-                          namespace:
-                            description: |-
-                              Namespace of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                            type: string
-                          resourceVersion:
-                            description: |-
-                              Specific resourceVersion to which this reference is made, if any.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                            type: string
-                          uid:
-                            description: |-
-                              UID of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                            type: string
-                        type: object
-                        x-kubernetes-map-type: atomic
-                      nodeDrainTimeout:
-                        description: |-
-                          nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
-                          The default value is 0, meaning that the node can be drained without any time limitations.
-                          NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
-                        type: string
-                      providerID:
-                        description: |-
-                          providerID is the identification ID of the machine provided by the provider.
-                          This field must match the provider ID as seen on the node object corresponding to this machine.
-                          This field is required by higher level consumers of cluster-api. Example use case is cluster autoscaler
-                          with cluster-api as provider. Clean-up logic in the autoscaler compares machines to nodes to find out
-                          machines at provider which could not get registered as Kubernetes nodes. With cluster-api as a
-                          generic out-of-tree provider for autoscaler, this field is required by autoscaler to be
-                          able to have a provider view of the list of machines. Another list of nodes is queried from the k8s apiserver
-                          and then a comparison is done to find out unregistered machines and are marked for delete.
-                          This field will be set by the actuators and consumed by higher level entities like autoscaler that will
-                          be interfacing with cluster-api as generic provider.
-                        type: string
-                      version:
-                        description: |-
-                          version defines the desired Kubernetes version.
-                          This field is meant to be optionally used by bootstrap providers.
-                        type: string
-                    required:
-                    - bootstrap
-                    - clusterName
-                    - infrastructureRef
-                    type: object
-                type: object
-            required:
-            - clusterName
-            - template
-            type: object
-          status:
-            description: MachinePoolStatus defines the observed state of MachinePool.
-            properties:
-              availableReplicas:
-                description: The number of available replicas (ready for at least
-                  minReadySeconds) for this MachinePool.
-                format: int32
-                type: integer
-              bootstrapReady:
-                description: bootstrapReady is the state of the bootstrap provider.
-                type: boolean
-              conditions:
-                description: conditions define the current service state of the MachinePool.
-                items:
-                  description: Condition defines an observation of a Cluster API resource
-                    operational state.
-                  properties:
-                    lastTransitionTime:
-                      description: |-
-                        Last time the condition transitioned from one status to another.
-                        This should be when the underlying condition changed. If that is not known, then using the time when
-                        the API field changed is acceptable.
-                      format: date-time
-                      type: string
-                    message:
-                      description: |-
-                        A human readable message indicating details about the transition.
-                        This field may be empty.
-                      type: string
-                    reason:
-                      description: |-
-                        The reason for the condition's last transition in CamelCase.
-                        The specific API may choose whether or not this field is considered a guaranteed API.
-                        This field may not be empty.
-                      type: string
-                    severity:
-                      description: |-
-                        severity provides an explicit classification of Reason code, so the users or machines can immediately
-                        understand the current situation and act accordingly.
-                        The Severity field MUST be set only when Status=False.
-                      type: string
-                    status:
-                      description: status of the condition, one of True, False, Unknown.
-                      type: string
-                    type:
-                      description: |-
-                        type of condition in CamelCase or in foo.example.com/CamelCase.
-                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
-                        can be useful (see .node.status.conditions), the ability to deconflict is important.
-                      type: string
-                  required:
-                  - status
-                  - type
-                  type: object
-                type: array
-              failureMessage:
-                description: |-
-                  failureMessage indicates that there is a problem reconciling the state,
-                  and will be set to a descriptive error message.
-                type: string
-              failureReason:
-                description: |-
-                  failureReason indicates that there is a problem reconciling the state, and
-                  will be set to a token value suitable for programmatic interpretation.
-                type: string
-              infrastructureReady:
-                description: infrastructureReady is the state of the infrastructure
-                  provider.
-                type: boolean
-              nodeRefs:
-                description: nodeRefs will point to the corresponding Nodes if it
-                  they exist.
-                items:
-                  description: ObjectReference contains enough information to let
-                    you inspect or modify the referred object.
-                  properties:
-                    apiVersion:
-                      description: API version of the referent.
-                      type: string
-                    fieldPath:
-                      description: |-
-                        If referring to a piece of an object instead of an entire object, this string
-                        should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                        For example, if the object reference is to a container within a pod, this would take on a value like:
-                        "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                        the event) or if no container name is specified "spec.containers[2]" (container with
-                        index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                        referencing a part of an object.
-                      type: string
-                    kind:
-                      description: |-
-                        Kind of the referent.
-                        More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                      type: string
-                    name:
-                      description: |-
-                        Name of the referent.
-                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                      type: string
-                    namespace:
-                      description: |-
-                        Namespace of the referent.
-                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                      type: string
-                    resourceVersion:
-                      description: |-
-                        Specific resourceVersion to which this reference is made, if any.
-                        More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                      type: string
-                    uid:
-                      description: |-
-                        UID of the referent.
-                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                      type: string
-                  type: object
-                  x-kubernetes-map-type: atomic
-                type: array
-              observedGeneration:
-                description: observedGeneration is the latest generation observed
-                  by the controller.
-                format: int64
-                type: integer
-              phase:
-                description: |-
-                  phase represents the current phase of cluster actuation.
-                  E.g. Pending, Running, Terminating, Failed etc.
-                type: string
-              readyReplicas:
-                description: The number of ready replicas for this MachinePool. A
-                  machine is considered ready when the node has been created and is
-                  "Ready".
-                format: int32
-                type: integer
-              replicas:
-                description: replicas is the most recently observed number of replicas.
-                format: int32
-                type: integer
-              unavailableReplicas:
-                description: |-
-                  Total number of unavailable machine instances targeted by this machine pool.
-                  This is the total number of machine instances that are still required for
-                  the machine pool to have 100% available capacity. They may either
-                  be machine instances that are running but not yet available or machine instances
-                  that still have not been created.
-                format: int32
-                type: integer
-            type: object
-        type: object
-    served: false
-    storage: false
-    subresources:
-      scale:
-        specReplicasPath: .spec.replicas
-        statusReplicasPath: .status.replicas
-      status: {}
-  - additionalPrinterColumns:
-    - description: Cluster
-      jsonPath: .spec.clusterName
-      name: Cluster
-      type: string
-    - description: Total number of machines desired by this MachinePool
-      jsonPath: .spec.replicas
-      name: Desired
-      priority: 10
-      type: integer
-    - description: MachinePool replicas count
-      jsonPath: .status.replicas
-      name: Replicas
-      type: string
-    - description: MachinePool status such as Terminating/Pending/Provisioning/Running/Failed
-        etc
-      jsonPath: .status.phase
-      name: Phase
-      type: string
-    - description: Time duration since creation of MachinePool
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    - description: Kubernetes version associated with this MachinePool
-      jsonPath: .spec.template.spec.version
-      name: Version
-      type: string
-    name: v1beta1
-    schema:
-      openAPIV3Schema:
-        description: MachinePool is the Schema for the machinepools API.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: MachinePoolSpec defines the desired state of MachinePool.
-            properties:
-              clusterName:
-                description: clusterName is the name of the Cluster this object belongs
-                  to.
-                minLength: 1
-                type: string
-              failureDomains:
-                description: failureDomains is the list of failure domains this MachinePool
-                  should be attached to.
-                items:
-                  type: string
-                type: array
-              minReadySeconds:
-                description: |-
-                  Minimum number of seconds for which a newly created machine instances should
-                  be ready.
-                  Defaults to 0 (machine instance will be considered available as soon as it
-                  is ready)
-                format: int32
-                type: integer
-              providerIDList:
-                description: |-
-                  providerIDList are the identification IDs of machine instances provided by the provider.
-                  This field must match the provider IDs as seen on the node objects corresponding to a machine pool's machine instances.
-                items:
-                  type: string
-                type: array
-              replicas:
-                description: |-
-                  Number of desired machines. Defaults to 1.
-                  This is a pointer to distinguish between explicit zero and not specified.
-                format: int32
-                type: integer
-              template:
-                description: template describes the machines that will be created.
-                properties:
-                  metadata:
-                    description: |-
-                      Standard object's metadata.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
-                    properties:
-                      annotations:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          annotations is an unstructured key value map stored with a resource that may be
-                          set by external tools to store and retrieve arbitrary metadata. They are not
-                          queryable and should be preserved when modifying objects.
-                          More info: http://kubernetes.io/docs/user-guide/annotations
-                        type: object
-                      labels:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          Map of string keys and values that can be used to organize and categorize
-                          (scope and select) objects. May match selectors of replication controllers
-                          and services.
-                          More info: http://kubernetes.io/docs/user-guide/labels
-                        type: object
-                    type: object
-                  spec:
-                    description: |-
-                      Specification of the desired behavior of the machine.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
-                    properties:
-                      bootstrap:
-                        description: |-
-                          bootstrap is a reference to a local struct which encapsulates
-                          fields to configure the Machine’s bootstrapping mechanism.
-                        properties:
-                          configRef:
-                            description: |-
-                              configRef is a reference to a bootstrap provider-specific resource
-                              that holds configuration details. The reference is optional to
-                              allow users/operators to specify Bootstrap.DataSecretName without
-                              the need of a controller.
-                            properties:
-                              apiVersion:
-                                description: API version of the referent.
-                                type: string
-                              fieldPath:
-                                description: |-
-                                  If referring to a piece of an object instead of an entire object, this string
-                                  should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                                  For example, if the object reference is to a container within a pod, this would take on a value like:
-                                  "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                                  the event) or if no container name is specified "spec.containers[2]" (container with
-                                  index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                                  referencing a part of an object.
-                                type: string
-                              kind:
-                                description: |-
-                                  Kind of the referent.
-                                  More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                                type: string
-                              name:
-                                description: |-
-                                  Name of the referent.
-                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                type: string
-                              namespace:
-                                description: |-
-                                  Namespace of the referent.
-                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                                type: string
-                              resourceVersion:
-                                description: |-
-                                  Specific resourceVersion to which this reference is made, if any.
-                                  More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                                type: string
-                              uid:
-                                description: |-
-                                  UID of the referent.
-                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                                type: string
-                            type: object
-                            x-kubernetes-map-type: atomic
-                          dataSecretName:
-                            description: |-
-                              dataSecretName is the name of the secret that stores the bootstrap data script.
-                              If nil, the Machine should remain in the Pending state.
-                            type: string
-                        type: object
-                      clusterName:
-                        description: clusterName is the name of the Cluster this object
-                          belongs to.
-                        minLength: 1
-                        type: string
-                      failureDomain:
-                        description: |-
-                          failureDomain is the failure domain the machine will be created in.
-                          Must match a key in the FailureDomains map stored on the cluster object.
-                        type: string
-                      infrastructureRef:
-                        description: |-
-                          infrastructureRef is a required reference to a custom resource
-                          offered by an infrastructure provider.
-                        properties:
-                          apiVersion:
-                            description: API version of the referent.
-                            type: string
-                          fieldPath:
-                            description: |-
-                              If referring to a piece of an object instead of an entire object, this string
-                              should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                              For example, if the object reference is to a container within a pod, this would take on a value like:
-                              "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                              the event) or if no container name is specified "spec.containers[2]" (container with
-                              index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                              referencing a part of an object.
-                            type: string
-                          kind:
-                            description: |-
-                              Kind of the referent.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                            type: string
-                          name:
-                            description: |-
-                              Name of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                            type: string
-                          namespace:
-                            description: |-
-                              Namespace of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                            type: string
-                          resourceVersion:
-                            description: |-
-                              Specific resourceVersion to which this reference is made, if any.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                            type: string
-                          uid:
-                            description: |-
-                              UID of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                            type: string
-                        type: object
-                        x-kubernetes-map-type: atomic
-                      nodeDeletionTimeout:
-                        description: |-
-                          nodeDeletionTimeout defines how long the controller will attempt to delete the Node that the Machine
-                          hosts after the Machine is marked for deletion. A duration of 0 will retry deletion indefinitely.
-                          Defaults to 10 seconds.
-                        type: string
-                      nodeDrainTimeout:
-                        description: |-
-                          nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
-                          The default value is 0, meaning that the node can be drained without any time limitations.
-                          NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
-                        type: string
-                      nodeVolumeDetachTimeout:
-                        description: |-
-                          nodeVolumeDetachTimeout is the total amount of time that the controller will spend on waiting for all volumes
-                          to be detached. The default value is 0, meaning that the volumes can be detached without any time limitations.
-                        type: string
-                      providerID:
-                        description: |-
-                          providerID is the identification ID of the machine provided by the provider.
-                          This field must match the provider ID as seen on the node object corresponding to this machine.
-                          This field is required by higher level consumers of cluster-api. Example use case is cluster autoscaler
-                          with cluster-api as provider. Clean-up logic in the autoscaler compares machines to nodes to find out
-                          machines at provider which could not get registered as Kubernetes nodes. With cluster-api as a
-                          generic out-of-tree provider for autoscaler, this field is required by autoscaler to be
-                          able to have a provider view of the list of machines. Another list of nodes is queried from the k8s apiserver
-                          and then a comparison is done to find out unregistered machines and are marked for delete.
-                          This field will be set by the actuators and consumed by higher level entities like autoscaler that will
-                          be interfacing with cluster-api as generic provider.
-                        type: string
-                      readinessGates:
-                        description: |-
-                          readinessGates specifies additional conditions to include when evaluating Machine Ready condition.
-
-                          This field can be used e.g. by Cluster API control plane providers to extend the semantic of the
-                          Ready condition for the Machine they control, like the kubeadm control provider adding ReadinessGates
-                          for the APIServerPodHealthy, SchedulerPodHealthy conditions, etc.
-
-                          Another example are external controllers, e.g. responsible to install special software/hardware on the Machines;
-                          they can include the status of those components with a new condition and add this condition to ReadinessGates.
-
-                          NOTE: This field is considered only for computing v1beta2 conditions.
-                          NOTE: In case readinessGates conditions start with the APIServer, ControllerManager, Scheduler prefix, and all those
-                          readiness gates condition are reporting the same message, when computing the Machine's Ready condition those
-                          readinessGates will be replaced by a single entry reporting "Control plane components: " + message.
-                          This helps to improve readability of conditions bubbling up to the Machine's owner resource / to the Cluster).
-                        items:
-                          description: MachineReadinessGate contains the type of a
-                            Machine condition to be used as a readiness gate.
-                          properties:
-                            conditionType:
-                              description: |-
-                                conditionType refers to a positive polarity condition (status true means good) with matching type in the Machine's condition list.
-                                If the conditions doesn't exist, it will be treated as unknown.
-                                Note: Both Cluster API conditions or conditions added by 3rd party controllers can be used as readiness gates.
-                              maxLength: 316
-                              minLength: 1
-                              pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-                              type: string
-                          required:
-                          - conditionType
-                          type: object
-                        maxItems: 32
-                        type: array
-                        x-kubernetes-list-map-keys:
-                        - conditionType
-                        x-kubernetes-list-type: map
-                      version:
-                        description: |-
-                          version defines the desired Kubernetes version.
-                          This field is meant to be optionally used by bootstrap providers.
-                        type: string
-                    required:
-                    - bootstrap
-                    - clusterName
-                    - infrastructureRef
-                    type: object
-                type: object
-            required:
-            - clusterName
-            - template
-            type: object
-          status:
-            description: MachinePoolStatus defines the observed state of MachinePool.
-            properties:
-              availableReplicas:
-                description: The number of available replicas (ready for at least
-                  minReadySeconds) for this MachinePool.
-                format: int32
-                type: integer
-              bootstrapReady:
-                description: bootstrapReady is the state of the bootstrap provider.
-                type: boolean
-              conditions:
-                description: conditions define the current service state of the MachinePool.
-                items:
-                  description: Condition defines an observation of a Cluster API resource
-                    operational state.
-                  properties:
-                    lastTransitionTime:
-                      description: |-
-                        Last time the condition transitioned from one status to another.
-                        This should be when the underlying condition changed. If that is not known, then using the time when
-                        the API field changed is acceptable.
-                      format: date-time
-                      type: string
-                    message:
-                      description: |-
-                        A human readable message indicating details about the transition.
-                        This field may be empty.
-                      type: string
-                    reason:
-                      description: |-
-                        The reason for the condition's last transition in CamelCase.
-                        The specific API may choose whether or not this field is considered a guaranteed API.
-                        This field may be empty.
-                      type: string
-                    severity:
-                      description: |-
-                        severity provides an explicit classification of Reason code, so the users or machines can immediately
-                        understand the current situation and act accordingly.
-                        The Severity field MUST be set only when Status=False.
-                      type: string
-                    status:
-                      description: status of the condition, one of True, False, Unknown.
-                      type: string
-                    type:
-                      description: |-
-                        type of condition in CamelCase or in foo.example.com/CamelCase.
-                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
-                        can be useful (see .node.status.conditions), the ability to deconflict is important.
-                      type: string
-                  required:
-                  - lastTransitionTime
-                  - status
-                  - type
-                  type: object
-                type: array
-              failureMessage:
-                description: |-
-                  failureMessage indicates that there is a problem reconciling the state,
-                  and will be set to a descriptive error message.
-
-                  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.
-                type: string
-              failureReason:
-                description: |-
-                  failureReason indicates that there is a problem reconciling the state, and
-                  will be set to a token value suitable for programmatic interpretation.
-
-                  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.
-                type: string
-              infrastructureReady:
-                description: infrastructureReady is the state of the infrastructure
-                  provider.
-                type: boolean
-              nodeRefs:
-                description: nodeRefs will point to the corresponding Nodes if it
-                  they exist.
-                items:
-                  description: ObjectReference contains enough information to let
-                    you inspect or modify the referred object.
-                  properties:
-                    apiVersion:
-                      description: API version of the referent.
-                      type: string
-                    fieldPath:
-                      description: |-
-                        If referring to a piece of an object instead of an entire object, this string
-                        should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                        For example, if the object reference is to a container within a pod, this would take on a value like:
-                        "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                        the event) or if no container name is specified "spec.containers[2]" (container with
-                        index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                        referencing a part of an object.
-                      type: string
-                    kind:
-                      description: |-
-                        Kind of the referent.
-                        More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                      type: string
-                    name:
-                      description: |-
-                        Name of the referent.
-                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                      type: string
-                    namespace:
-                      description: |-
-                        Namespace of the referent.
-                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                      type: string
-                    resourceVersion:
-                      description: |-
-                        Specific resourceVersion to which this reference is made, if any.
-                        More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                      type: string
-                    uid:
-                      description: |-
-                        UID of the referent.
-                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                      type: string
-                  type: object
-                  x-kubernetes-map-type: atomic
-                type: array
-              observedGeneration:
-                description: observedGeneration is the latest generation observed
-                  by the controller.
-                format: int64
-                type: integer
-              phase:
-                description: |-
-                  phase represents the current phase of cluster actuation.
-                  E.g. Pending, Running, Terminating, Failed etc.
-                type: string
-              readyReplicas:
-                description: The number of ready replicas for this MachinePool. A
-                  machine is considered ready when the node has been created and is
-                  "Ready".
-                format: int32
-                type: integer
-              replicas:
-                description: replicas is the most recently observed number of replicas.
-                format: int32
-                type: integer
-              unavailableReplicas:
-                description: |-
-                  Total number of unavailable machine instances targeted by this machine pool.
-                  This is the total number of machine instances that are still required for
-                  the machine pool to have 100% available capacity. They may either
-                  be machine instances that are running but not yet available or machine instances
-                  that still have not been created.
-
-                  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.
-                format: int32
-                type: integer
-              v1beta2:
-                description: v1beta2 groups all the fields that will be added or modified
-                  in MachinePool's status with the V1Beta2 version.
-                properties:
-                  availableReplicas:
-                    description: availableReplicas is the number of available replicas
-                      for this MachinePool. A machine is considered available when
-                      Machine's Available condition is true.
-                    format: int32
-                    type: integer
-                  conditions:
-                    description: |-
-                      conditions represents the observations of a MachinePool's current state.
-                      Known condition types are Available, BootstrapConfigReady, InfrastructureReady, MachinesReady, MachinesUpToDate,
-                      ScalingUp, ScalingDown, Remediating, Deleting, Paused.
-                    items:
-                      description: Condition contains details for one aspect of the
-                        current state of this API Resource.
-                      properties:
-                        lastTransitionTime:
-                          description: |-
-                            lastTransitionTime is the last time the condition transitioned from one status to another.
-                            This should be when the underlying condition changed.  If that is not known, then using the time when the API field changed is acceptable.
-                          format: date-time
-                          type: string
-                        message:
-                          description: |-
-                            message is a human readable message indicating details about the transition.
-                            This may be an empty string.
-                          maxLength: 32768
-                          type: string
-                        observedGeneration:
-                          description: |-
-                            observedGeneration represents the .metadata.generation that the condition was set based upon.
-                            For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
-                            with respect to the current state of the instance.
-                          format: int64
-                          minimum: 0
-                          type: integer
-                        reason:
-                          description: |-
-                            reason contains a programmatic identifier indicating the reason for the condition's last transition.
-                            Producers of specific condition types may define expected values and meanings for this field,
-                            and whether the values are considered a guaranteed API.
-                            The value should be a CamelCase string.
-                            This field may not be empty.
-                          maxLength: 1024
-                          minLength: 1
-                          pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
-                          type: string
-                        status:
-                          description: status of the condition, one of True, False,
-                            Unknown.
-                          enum:
-                          - "True"
-                          - "False"
-                          - Unknown
-                          type: string
-                        type:
-                          description: type of condition in CamelCase or in foo.example.com/CamelCase.
-                          maxLength: 316
-                          pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-                          type: string
-                      required:
-                      - lastTransitionTime
-                      - message
-                      - reason
-                      - status
-                      - type
-                      type: object
-                    maxItems: 32
-                    type: array
-                    x-kubernetes-list-map-keys:
-                    - type
-                    x-kubernetes-list-type: map
-                  readyReplicas:
-                    description: readyReplicas is the number of ready replicas for
-                      this MachinePool. A machine is considered ready when Machine's
-                      Ready condition is true.
-                    format: int32
-                    type: integer
-                  upToDateReplicas:
-                    description: 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.
-                    format: int32
-                    type: integer
-                type: object
-            type: object
-        type: object
-    served: true
-    storage: true
-    subresources:
-      scale:
-        specReplicasPath: .spec.replicas
-        statusReplicasPath: .status.replicas
-      status: {}
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: null
-  storedVersions: null
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  annotations:
-    cert-manager.io/inject-ca-from: capi-system/capi-serving-cert
-    controller-gen.kubebuilder.io/version: v0.16.1
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: cluster-api
-    clusterctl.cluster.x-k8s.io: ""
-  name: machines.cluster.x-k8s.io
-spec:
-  conversion:
-    strategy: Webhook
-    webhook:
-      clientConfig:
-        service:
-          name: capi-webhook-service
-          namespace: capi-system
-          path: /convert
-      conversionReviewVersions:
-      - v1
-      - v1beta1
-  group: cluster.x-k8s.io
-  names:
-    categories:
-    - cluster-api
-    kind: Machine
-    listKind: MachineList
-    plural: machines
-    shortNames:
-    - ma
-    singular: machine
-  scope: Namespaced
-  versions:
-  - additionalPrinterColumns:
-    - description: Provider ID
-      jsonPath: .spec.providerID
-      name: ProviderID
-      type: string
-    - description: Machine status such as Terminating/Pending/Running/Failed etc
-      jsonPath: .status.phase
-      name: Phase
-      type: string
-    - description: Kubernetes version associated with this Machine
-      jsonPath: .spec.version
-      name: Version
-      type: string
-    - description: Node name associated with this machine
-      jsonPath: .status.nodeRef.name
-      name: NodeName
-      priority: 1
-      type: string
-    deprecated: true
-    name: v1alpha3
-    schema:
-      openAPIV3Schema:
-        description: |-
-          Machine is the Schema for the machines API.
-
-          Deprecated: This type will be removed in one of the next releases.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: MachineSpec defines the desired state of Machine.
-            properties:
-              bootstrap:
-                description: |-
-                  bootstrap is a reference to a local struct which encapsulates
-                  fields to configure the Machine’s bootstrapping mechanism.
-                properties:
-                  configRef:
-                    description: |-
-                      configRef is a reference to a bootstrap provider-specific resource
-                      that holds configuration details. The reference is optional to
-                      allow users/operators to specify Bootstrap.Data without
-                      the need of a controller.
-                    properties:
-                      apiVersion:
-                        description: API version of the referent.
-                        type: string
-                      fieldPath:
-                        description: |-
-                          If referring to a piece of an object instead of an entire object, this string
-                          should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                          For example, if the object reference is to a container within a pod, this would take on a value like:
-                          "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                          the event) or if no container name is specified "spec.containers[2]" (container with
-                          index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                          referencing a part of an object.
-                        type: string
-                      kind:
-                        description: |-
-                          Kind of the referent.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                        type: string
-                      name:
-                        description: |-
-                          Name of the referent.
-                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                        type: string
-                      namespace:
-                        description: |-
-                          Namespace of the referent.
-                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                        type: string
-                      resourceVersion:
-                        description: |-
-                          Specific resourceVersion to which this reference is made, if any.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                        type: string
-                      uid:
-                        description: |-
-                          UID of the referent.
-                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                        type: string
-                    type: object
-                    x-kubernetes-map-type: atomic
-                  data:
-                    description: |-
-                      data contains the bootstrap data, such as cloud-init details scripts.
-                      If nil, the Machine should remain in the Pending state.
-
-                      Deprecated: Switch to DataSecretName.
-                    type: string
-                  dataSecretName:
-                    description: |-
-                      dataSecretName is the name of the secret that stores the bootstrap data script.
-                      If nil, the Machine should remain in the Pending state.
-                    type: string
-                type: object
-              clusterName:
-                description: clusterName is the name of the Cluster this object belongs
-                  to.
-                minLength: 1
-                type: string
-              failureDomain:
-                description: |-
-                  failureDomain is the failure domain the machine will be created in.
-                  Must match a key in the FailureDomains map stored on the cluster object.
-                type: string
-              infrastructureRef:
-                description: |-
-                  infrastructureRef is a required reference to a custom resource
-                  offered by an infrastructure provider.
-                properties:
-                  apiVersion:
-                    description: API version of the referent.
-                    type: string
-                  fieldPath:
-                    description: |-
-                      If referring to a piece of an object instead of an entire object, this string
-                      should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                      For example, if the object reference is to a container within a pod, this would take on a value like:
-                      "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                      the event) or if no container name is specified "spec.containers[2]" (container with
-                      index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                      referencing a part of an object.
-                    type: string
-                  kind:
-                    description: |-
-                      Kind of the referent.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                    type: string
-                  name:
-                    description: |-
-                      Name of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                    type: string
-                  namespace:
-                    description: |-
-                      Namespace of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                    type: string
-                  resourceVersion:
-                    description: |-
-                      Specific resourceVersion to which this reference is made, if any.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                    type: string
-                  uid:
-                    description: |-
-                      UID of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                    type: string
-                type: object
-                x-kubernetes-map-type: atomic
-              nodeDrainTimeout:
-                description: |-
-                  nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
-                  The default value is 0, meaning that the node can be drained without any time limitations.
-                  NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
-                type: string
-              providerID:
-                description: |-
-                  providerID is the identification ID of the machine provided by the provider.
-                  This field must match the provider ID as seen on the node object corresponding to this machine.
-                  This field is required by higher level consumers of cluster-api. Example use case is cluster autoscaler
-                  with cluster-api as provider. Clean-up logic in the autoscaler compares machines to nodes to find out
-                  machines at provider which could not get registered as Kubernetes nodes. With cluster-api as a
-                  generic out-of-tree provider for autoscaler, this field is required by autoscaler to be
-                  able to have a provider view of the list of machines. Another list of nodes is queried from the k8s apiserver
-                  and then a comparison is done to find out unregistered machines and are marked for delete.
-                  This field will be set by the actuators and consumed by higher level entities like autoscaler that will
-                  be interfacing with cluster-api as generic provider.
-                type: string
-              version:
-                description: |-
-                  version defines the desired Kubernetes version.
-                  This field is meant to be optionally used by bootstrap providers.
-                type: string
-            required:
-            - bootstrap
-            - clusterName
-            - infrastructureRef
-            type: object
-          status:
-            description: MachineStatus defines the observed state of Machine.
-            properties:
-              addresses:
-                description: |-
-                  addresses is a list of addresses assigned to the machine.
-                  This field is copied from the infrastructure provider reference.
-                items:
-                  description: MachineAddress contains information for the node's
-                    address.
-                  properties:
-                    address:
-                      description: The machine address.
-                      type: string
-                    type:
-                      description: Machine address type, one of Hostname, ExternalIP
-                        or InternalIP.
-                      type: string
-                  required:
-                  - address
-                  - type
-                  type: object
-                type: array
-              bootstrapReady:
-                description: bootstrapReady is the state of the bootstrap provider.
-                type: boolean
-              conditions:
-                description: conditions defines current service state of the Machine.
-                items:
-                  description: Condition defines an observation of a Cluster API resource
-                    operational state.
-                  properties:
-                    lastTransitionTime:
-                      description: |-
-                        Last time the condition transitioned from one status to another.
-                        This should be when the underlying condition changed. If that is not known, then using the time when
-                        the API field changed is acceptable.
-                      format: date-time
-                      type: string
-                    message:
-                      description: |-
-                        A human readable message indicating details about the transition.
-                        This field may be empty.
-                      type: string
-                    reason:
-                      description: |-
-                        The reason for the condition's last transition in CamelCase.
-                        The specific API may choose whether or not this field is considered a guaranteed API.
-                        This field may not be empty.
-                      type: string
-                    severity:
-                      description: |-
-                        severity provides an explicit classification of Reason code, so the users or machines can immediately
-                        understand the current situation and act accordingly.
-                        The Severity field MUST be set only when Status=False.
-                      type: string
-                    status:
-                      description: status of the condition, one of True, False, Unknown.
-                      type: string
-                    type:
-                      description: |-
-                        type of condition in CamelCase or in foo.example.com/CamelCase.
-                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
-                        can be useful (see .node.status.conditions), the ability to deconflict is important.
-                      type: string
-                  required:
-                  - status
-                  - type
-                  type: object
-                type: array
-              failureMessage:
-                description: |-
-                  failureMessage will be set in the event that there is a terminal problem
-                  reconciling the Machine and will contain a more verbose string suitable
-                  for logging and human consumption.
-
-                  This field should not be set for transitive errors that a controller
-                  faces that are expected to be fixed automatically over
-                  time (like service outages), but instead indicate that something is
-                  fundamentally wrong with the Machine's spec or the configuration of
-                  the controller, and that manual intervention is required. Examples
-                  of terminal errors would be invalid combinations of settings in the
-                  spec, values that are unsupported by the controller, or the
-                  responsible controller itself being critically misconfigured.
-
-                  Any transient errors that occur during the reconciliation of Machines
-                  can be added as events to the Machine object and/or logged in the
-                  controller's output.
-                type: string
-              failureReason:
-                description: |-
-                  failureReason will be set in the event that there is a terminal problem
-                  reconciling the Machine and will contain a succinct value suitable
-                  for machine interpretation.
-
-                  This field should not be set for transitive errors that a controller
-                  faces that are expected to be fixed automatically over
-                  time (like service outages), but instead indicate that something is
-                  fundamentally wrong with the Machine's spec or the configuration of
-                  the controller, and that manual intervention is required. Examples
-                  of terminal errors would be invalid combinations of settings in the
-                  spec, values that are unsupported by the controller, or the
-                  responsible controller itself being critically misconfigured.
-
-                  Any transient errors that occur during the reconciliation of Machines
-                  can be added as events to the Machine object and/or logged in the
-                  controller's output.
-                type: string
-              infrastructureReady:
-                description: infrastructureReady is the state of the infrastructure
-                  provider.
-                type: boolean
-              lastUpdated:
-                description: lastUpdated identifies when the phase of the Machine
-                  last transitioned.
-                format: date-time
-                type: string
-              nodeRef:
-                description: nodeRef will point to the corresponding Node if it exists.
-                properties:
-                  apiVersion:
-                    description: API version of the referent.
-                    type: string
-                  fieldPath:
-                    description: |-
-                      If referring to a piece of an object instead of an entire object, this string
-                      should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                      For example, if the object reference is to a container within a pod, this would take on a value like:
-                      "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                      the event) or if no container name is specified "spec.containers[2]" (container with
-                      index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                      referencing a part of an object.
-                    type: string
-                  kind:
-                    description: |-
-                      Kind of the referent.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                    type: string
-                  name:
-                    description: |-
-                      Name of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                    type: string
-                  namespace:
-                    description: |-
-                      Namespace of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                    type: string
-                  resourceVersion:
-                    description: |-
-                      Specific resourceVersion to which this reference is made, if any.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                    type: string
-                  uid:
-                    description: |-
-                      UID of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                    type: string
-                type: object
-                x-kubernetes-map-type: atomic
-              observedGeneration:
-                description: observedGeneration is the latest generation observed
-                  by the controller.
-                format: int64
-                type: integer
-              phase:
-                description: |-
-                  phase represents the current phase of machine actuation.
-                  E.g. Pending, Running, Terminating, Failed etc.
-                type: string
-              version:
-                description: |-
-                  version specifies the current version of Kubernetes running
-                  on the corresponding Node. This is meant to be a means of bubbling
-                  up status from the Node to the Machine.
-                  It is entirely optional, but useful for end-user UX if it’s present.
-                type: string
-            type: object
-        type: object
-    served: false
-    storage: false
-    subresources:
-      status: {}
-  - additionalPrinterColumns:
-    - description: Cluster
-      jsonPath: .spec.clusterName
-      name: Cluster
-      type: string
-    - description: Time duration since creation of Machine
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    - description: Provider ID
-      jsonPath: .spec.providerID
-      name: ProviderID
-      type: string
-    - description: Machine status such as Terminating/Pending/Running/Failed etc
-      jsonPath: .status.phase
-      name: Phase
-      type: string
-    - description: Kubernetes version associated with this Machine
-      jsonPath: .spec.version
-      name: Version
-      type: string
-    - description: Node name associated with this machine
-      jsonPath: .status.nodeRef.name
-      name: NodeName
-      priority: 1
-      type: string
-    deprecated: true
-    name: v1alpha4
-    schema:
-      openAPIV3Schema:
-        description: |-
-          Machine is the Schema for the machines API.
-
-          Deprecated: This type will be removed in one of the next releases.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: MachineSpec defines the desired state of Machine.
-            properties:
-              bootstrap:
-                description: |-
-                  bootstrap is a reference to a local struct which encapsulates
-                  fields to configure the Machine’s bootstrapping mechanism.
-                properties:
-                  configRef:
-                    description: |-
-                      configRef is a reference to a bootstrap provider-specific resource
-                      that holds configuration details. The reference is optional to
-                      allow users/operators to specify Bootstrap.DataSecretName without
-                      the need of a controller.
-                    properties:
-                      apiVersion:
-                        description: API version of the referent.
-                        type: string
-                      fieldPath:
-                        description: |-
-                          If referring to a piece of an object instead of an entire object, this string
-                          should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                          For example, if the object reference is to a container within a pod, this would take on a value like:
-                          "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                          the event) or if no container name is specified "spec.containers[2]" (container with
-                          index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                          referencing a part of an object.
-                        type: string
-                      kind:
-                        description: |-
-                          Kind of the referent.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                        type: string
-                      name:
-                        description: |-
-                          Name of the referent.
-                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                        type: string
-                      namespace:
-                        description: |-
-                          Namespace of the referent.
-                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                        type: string
-                      resourceVersion:
-                        description: |-
-                          Specific resourceVersion to which this reference is made, if any.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                        type: string
-                      uid:
-                        description: |-
-                          UID of the referent.
-                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                        type: string
-                    type: object
-                    x-kubernetes-map-type: atomic
-                  dataSecretName:
-                    description: |-
-                      dataSecretName is the name of the secret that stores the bootstrap data script.
-                      If nil, the Machine should remain in the Pending state.
-                    type: string
-                type: object
-              clusterName:
-                description: clusterName is the name of the Cluster this object belongs
-                  to.
-                minLength: 1
-                type: string
-              failureDomain:
-                description: |-
-                  failureDomain is the failure domain the machine will be created in.
-                  Must match a key in the FailureDomains map stored on the cluster object.
-                type: string
-              infrastructureRef:
-                description: |-
-                  infrastructureRef is a required reference to a custom resource
-                  offered by an infrastructure provider.
-                properties:
-                  apiVersion:
-                    description: API version of the referent.
-                    type: string
-                  fieldPath:
-                    description: |-
-                      If referring to a piece of an object instead of an entire object, this string
-                      should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                      For example, if the object reference is to a container within a pod, this would take on a value like:
-                      "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                      the event) or if no container name is specified "spec.containers[2]" (container with
-                      index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                      referencing a part of an object.
-                    type: string
-                  kind:
-                    description: |-
-                      Kind of the referent.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                    type: string
-                  name:
-                    description: |-
-                      Name of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                    type: string
-                  namespace:
-                    description: |-
-                      Namespace of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                    type: string
-                  resourceVersion:
-                    description: |-
-                      Specific resourceVersion to which this reference is made, if any.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                    type: string
-                  uid:
-                    description: |-
-                      UID of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                    type: string
-                type: object
-                x-kubernetes-map-type: atomic
-              nodeDrainTimeout:
-                description: |-
-                  nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
-                  The default value is 0, meaning that the node can be drained without any time limitations.
-                  NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
-                type: string
-              providerID:
-                description: |-
-                  providerID is the identification ID of the machine provided by the provider.
-                  This field must match the provider ID as seen on the node object corresponding to this machine.
-                  This field is required by higher level consumers of cluster-api. Example use case is cluster autoscaler
-                  with cluster-api as provider. Clean-up logic in the autoscaler compares machines to nodes to find out
-                  machines at provider which could not get registered as Kubernetes nodes. With cluster-api as a
-                  generic out-of-tree provider for autoscaler, this field is required by autoscaler to be
-                  able to have a provider view of the list of machines. Another list of nodes is queried from the k8s apiserver
-                  and then a comparison is done to find out unregistered machines and are marked for delete.
-                  This field will be set by the actuators and consumed by higher level entities like autoscaler that will
-                  be interfacing with cluster-api as generic provider.
-                type: string
-              version:
-                description: |-
-                  version defines the desired Kubernetes version.
-                  This field is meant to be optionally used by bootstrap providers.
-                type: string
-            required:
-            - bootstrap
-            - clusterName
-            - infrastructureRef
-            type: object
-          status:
-            description: MachineStatus defines the observed state of Machine.
-            properties:
-              addresses:
-                description: |-
-                  addresses is a list of addresses assigned to the machine.
-                  This field is copied from the infrastructure provider reference.
-                items:
-                  description: MachineAddress contains information for the node's
-                    address.
-                  properties:
-                    address:
-                      description: The machine address.
-                      type: string
-                    type:
-                      description: Machine address type, one of Hostname, ExternalIP
-                        or InternalIP.
-                      type: string
-                  required:
-                  - address
-                  - type
-                  type: object
-                type: array
-              bootstrapReady:
-                description: bootstrapReady is the state of the bootstrap provider.
-                type: boolean
-              conditions:
-                description: conditions defines current service state of the Machine.
-                items:
-                  description: Condition defines an observation of a Cluster API resource
-                    operational state.
-                  properties:
-                    lastTransitionTime:
-                      description: |-
-                        Last time the condition transitioned from one status to another.
-                        This should be when the underlying condition changed. If that is not known, then using the time when
-                        the API field changed is acceptable.
-                      format: date-time
-                      type: string
-                    message:
-                      description: |-
-                        A human readable message indicating details about the transition.
-                        This field may be empty.
-                      type: string
-                    reason:
-                      description: |-
-                        The reason for the condition's last transition in CamelCase.
-                        The specific API may choose whether or not this field is considered a guaranteed API.
-                        This field may not be empty.
-                      type: string
-                    severity:
-                      description: |-
-                        severity provides an explicit classification of Reason code, so the users or machines can immediately
-                        understand the current situation and act accordingly.
-                        The Severity field MUST be set only when Status=False.
-                      type: string
-                    status:
-                      description: status of the condition, one of True, False, Unknown.
-                      type: string
-                    type:
-                      description: |-
-                        type of condition in CamelCase or in foo.example.com/CamelCase.
-                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
-                        can be useful (see .node.status.conditions), the ability to deconflict is important.
-                      type: string
-                  required:
-                  - status
-                  - type
-                  type: object
-                type: array
-              failureMessage:
-                description: |-
-                  failureMessage will be set in the event that there is a terminal problem
-                  reconciling the Machine and will contain a more verbose string suitable
-                  for logging and human consumption.
-
-                  This field should not be set for transitive errors that a controller
-                  faces that are expected to be fixed automatically over
-                  time (like service outages), but instead indicate that something is
-                  fundamentally wrong with the Machine's spec or the configuration of
-                  the controller, and that manual intervention is required. Examples
-                  of terminal errors would be invalid combinations of settings in the
-                  spec, values that are unsupported by the controller, or the
-                  responsible controller itself being critically misconfigured.
-
-                  Any transient errors that occur during the reconciliation of Machines
-                  can be added as events to the Machine object and/or logged in the
-                  controller's output.
-                type: string
-              failureReason:
-                description: |-
-                  failureReason will be set in the event that there is a terminal problem
-                  reconciling the Machine and will contain a succinct value suitable
-                  for machine interpretation.
-
-                  This field should not be set for transitive errors that a controller
-                  faces that are expected to be fixed automatically over
-                  time (like service outages), but instead indicate that something is
-                  fundamentally wrong with the Machine's spec or the configuration of
-                  the controller, and that manual intervention is required. Examples
-                  of terminal errors would be invalid combinations of settings in the
-                  spec, values that are unsupported by the controller, or the
-                  responsible controller itself being critically misconfigured.
-
-                  Any transient errors that occur during the reconciliation of Machines
-                  can be added as events to the Machine object and/or logged in the
-                  controller's output.
-                type: string
-              infrastructureReady:
-                description: infrastructureReady is the state of the infrastructure
-                  provider.
-                type: boolean
-              lastUpdated:
-                description: lastUpdated identifies when the phase of the Machine
-                  last transitioned.
-                format: date-time
-                type: string
-              nodeInfo:
-                description: |-
-                  nodeInfo is a set of ids/uuids to uniquely identify the node.
-                  More info: https://kubernetes.io/docs/concepts/nodes/node/#info
-                properties:
-                  architecture:
-                    description: The Architecture reported by the node
-                    type: string
-                  bootID:
-                    description: Boot ID reported by the node.
-                    type: string
-                  containerRuntimeVersion:
-                    description: ContainerRuntime Version reported by the node through
-                      runtime remote API (e.g. containerd://1.4.2).
-                    type: string
-                  kernelVersion:
-                    description: Kernel Version reported by the node from 'uname -r'
-                      (e.g. 3.16.0-0.bpo.4-amd64).
-                    type: string
-                  kubeProxyVersion:
-                    description: 'Deprecated: KubeProxy Version reported by the node.'
-                    type: string
-                  kubeletVersion:
-                    description: Kubelet Version reported by the node.
-                    type: string
-                  machineID:
-                    description: |-
-                      MachineID reported by the node. For unique machine identification
-                      in the cluster this field is preferred. Learn more from man(5)
-                      machine-id: http://man7.org/linux/man-pages/man5/machine-id.5.html
-                    type: string
-                  operatingSystem:
-                    description: The Operating System reported by the node
-                    type: string
-                  osImage:
-                    description: OS Image reported by the node from /etc/os-release
-                      (e.g. Debian GNU/Linux 7 (wheezy)).
-                    type: string
-                  systemUUID:
-                    description: |-
-                      SystemUUID reported by the node. For unique machine identification
-                      MachineID is preferred. This field is specific to Red Hat hosts
-                      https://access.redhat.com/documentation/en-us/red_hat_subscription_management/1/html/rhsm/uuid
-                    type: string
-                required:
-                - architecture
-                - bootID
-                - containerRuntimeVersion
-                - kernelVersion
-                - kubeProxyVersion
-                - kubeletVersion
-                - machineID
-                - operatingSystem
-                - osImage
-                - systemUUID
-                type: object
-              nodeRef:
-                description: nodeRef will point to the corresponding Node if it exists.
-                properties:
-                  apiVersion:
-                    description: API version of the referent.
-                    type: string
-                  fieldPath:
-                    description: |-
-                      If referring to a piece of an object instead of an entire object, this string
-                      should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                      For example, if the object reference is to a container within a pod, this would take on a value like:
-                      "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                      the event) or if no container name is specified "spec.containers[2]" (container with
-                      index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                      referencing a part of an object.
-                    type: string
-                  kind:
-                    description: |-
-                      Kind of the referent.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                    type: string
-                  name:
-                    description: |-
-                      Name of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                    type: string
-                  namespace:
-                    description: |-
-                      Namespace of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                    type: string
-                  resourceVersion:
-                    description: |-
-                      Specific resourceVersion to which this reference is made, if any.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                    type: string
-                  uid:
-                    description: |-
-                      UID of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                    type: string
-                type: object
-                x-kubernetes-map-type: atomic
-              observedGeneration:
-                description: observedGeneration is the latest generation observed
-                  by the controller.
-                format: int64
-                type: integer
-              phase:
-                description: |-
-                  phase represents the current phase of machine actuation.
-                  E.g. Pending, Running, Terminating, Failed etc.
-                type: string
-              version:
-                description: |-
-                  version specifies the current version of Kubernetes running
-                  on the corresponding Node. This is meant to be a means of bubbling
-                  up status from the Node to the Machine.
-                  It is entirely optional, but useful for end-user UX if it’s present.
-                type: string
-            type: object
-        type: object
-    served: false
-    storage: false
-    subresources:
-      status: {}
-  - additionalPrinterColumns:
-    - description: Cluster
-      jsonPath: .spec.clusterName
-      name: Cluster
-      type: string
-    - description: Node name associated with this machine
-      jsonPath: .status.nodeRef.name
-      name: NodeName
-      type: string
-    - description: Provider ID
-      jsonPath: .spec.providerID
-      name: ProviderID
-      type: string
-    - description: Machine status such as Terminating/Pending/Running/Failed etc
-      jsonPath: .status.phase
-      name: Phase
-      type: string
-    - description: Time duration since creation of Machine
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    - description: Kubernetes version associated with this Machine
-      jsonPath: .spec.version
-      name: Version
-      type: string
-    name: v1beta1
-    schema:
-      openAPIV3Schema:
-        description: Machine is the Schema for the machines API.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: MachineSpec defines the desired state of Machine.
-            properties:
-              bootstrap:
-                description: |-
-                  bootstrap is a reference to a local struct which encapsulates
-                  fields to configure the Machine’s bootstrapping mechanism.
-                properties:
-                  configRef:
-                    description: |-
-                      configRef is a reference to a bootstrap provider-specific resource
-                      that holds configuration details. The reference is optional to
-                      allow users/operators to specify Bootstrap.DataSecretName without
-                      the need of a controller.
-                    properties:
-                      apiVersion:
-                        description: API version of the referent.
-                        type: string
-                      fieldPath:
-                        description: |-
-                          If referring to a piece of an object instead of an entire object, this string
-                          should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                          For example, if the object reference is to a container within a pod, this would take on a value like:
-                          "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                          the event) or if no container name is specified "spec.containers[2]" (container with
-                          index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                          referencing a part of an object.
-                        type: string
-                      kind:
-                        description: |-
-                          Kind of the referent.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                        type: string
-                      name:
-                        description: |-
-                          Name of the referent.
-                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                        type: string
-                      namespace:
-                        description: |-
-                          Namespace of the referent.
-                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                        type: string
-                      resourceVersion:
-                        description: |-
-                          Specific resourceVersion to which this reference is made, if any.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                        type: string
-                      uid:
-                        description: |-
-                          UID of the referent.
-                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                        type: string
-                    type: object
-                    x-kubernetes-map-type: atomic
-                  dataSecretName:
-                    description: |-
-                      dataSecretName is the name of the secret that stores the bootstrap data script.
-                      If nil, the Machine should remain in the Pending state.
-                    type: string
-                type: object
-              clusterName:
-                description: clusterName is the name of the Cluster this object belongs
-                  to.
-                minLength: 1
-                type: string
-              failureDomain:
-                description: |-
-                  failureDomain is the failure domain the machine will be created in.
-                  Must match a key in the FailureDomains map stored on the cluster object.
-                type: string
-              infrastructureRef:
-                description: |-
-                  infrastructureRef is a required reference to a custom resource
-                  offered by an infrastructure provider.
-                properties:
-                  apiVersion:
-                    description: API version of the referent.
-                    type: string
-                  fieldPath:
-                    description: |-
-                      If referring to a piece of an object instead of an entire object, this string
-                      should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                      For example, if the object reference is to a container within a pod, this would take on a value like:
-                      "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                      the event) or if no container name is specified "spec.containers[2]" (container with
-                      index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                      referencing a part of an object.
-                    type: string
-                  kind:
-                    description: |-
-                      Kind of the referent.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                    type: string
-                  name:
-                    description: |-
-                      Name of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                    type: string
-                  namespace:
-                    description: |-
-                      Namespace of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                    type: string
-                  resourceVersion:
-                    description: |-
-                      Specific resourceVersion to which this reference is made, if any.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                    type: string
-                  uid:
-                    description: |-
-                      UID of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                    type: string
-                type: object
-                x-kubernetes-map-type: atomic
-              nodeDeletionTimeout:
-                description: |-
-                  nodeDeletionTimeout defines how long the controller will attempt to delete the Node that the Machine
-                  hosts after the Machine is marked for deletion. A duration of 0 will retry deletion indefinitely.
-                  Defaults to 10 seconds.
-                type: string
-              nodeDrainTimeout:
-                description: |-
-                  nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
-                  The default value is 0, meaning that the node can be drained without any time limitations.
-                  NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
-                type: string
-              nodeVolumeDetachTimeout:
-                description: |-
-                  nodeVolumeDetachTimeout is the total amount of time that the controller will spend on waiting for all volumes
-                  to be detached. The default value is 0, meaning that the volumes can be detached without any time limitations.
-                type: string
-              providerID:
-                description: |-
-                  providerID is the identification ID of the machine provided by the provider.
-                  This field must match the provider ID as seen on the node object corresponding to this machine.
-                  This field is required by higher level consumers of cluster-api. Example use case is cluster autoscaler
-                  with cluster-api as provider. Clean-up logic in the autoscaler compares machines to nodes to find out
-                  machines at provider which could not get registered as Kubernetes nodes. With cluster-api as a
-                  generic out-of-tree provider for autoscaler, this field is required by autoscaler to be
-                  able to have a provider view of the list of machines. Another list of nodes is queried from the k8s apiserver
-                  and then a comparison is done to find out unregistered machines and are marked for delete.
-                  This field will be set by the actuators and consumed by higher level entities like autoscaler that will
-                  be interfacing with cluster-api as generic provider.
-                type: string
-              readinessGates:
-                description: |-
-                  readinessGates specifies additional conditions to include when evaluating Machine Ready condition.
-
-                  This field can be used e.g. by Cluster API control plane providers to extend the semantic of the
-                  Ready condition for the Machine they control, like the kubeadm control provider adding ReadinessGates
-                  for the APIServerPodHealthy, SchedulerPodHealthy conditions, etc.
-
-                  Another example are external controllers, e.g. responsible to install special software/hardware on the Machines;
-                  they can include the status of those components with a new condition and add this condition to ReadinessGates.
-
-                  NOTE: This field is considered only for computing v1beta2 conditions.
-                  NOTE: In case readinessGates conditions start with the APIServer, ControllerManager, Scheduler prefix, and all those
-                  readiness gates condition are reporting the same message, when computing the Machine's Ready condition those
-                  readinessGates will be replaced by a single entry reporting "Control plane components: " + message.
-                  This helps to improve readability of conditions bubbling up to the Machine's owner resource / to the Cluster).
-                items:
-                  description: MachineReadinessGate contains the type of a Machine
-                    condition to be used as a readiness gate.
-                  properties:
-                    conditionType:
-                      description: |-
-                        conditionType refers to a positive polarity condition (status true means good) with matching type in the Machine's condition list.
-                        If the conditions doesn't exist, it will be treated as unknown.
-                        Note: Both Cluster API conditions or conditions added by 3rd party controllers can be used as readiness gates.
-                      maxLength: 316
-                      minLength: 1
-                      pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-                      type: string
-                  required:
-                  - conditionType
-                  type: object
-                maxItems: 32
-                type: array
-                x-kubernetes-list-map-keys:
-                - conditionType
-                x-kubernetes-list-type: map
-              version:
-                description: |-
-                  version defines the desired Kubernetes version.
-                  This field is meant to be optionally used by bootstrap providers.
-                type: string
-            required:
-            - bootstrap
-            - clusterName
-            - infrastructureRef
-            type: object
-          status:
-            description: MachineStatus defines the observed state of Machine.
-            properties:
-              addresses:
-                description: |-
-                  addresses is a list of addresses assigned to the machine.
-                  This field is copied from the infrastructure provider reference.
-                items:
-                  description: MachineAddress contains information for the node's
-                    address.
-                  properties:
-                    address:
-                      description: The machine address.
-                      type: string
-                    type:
-                      description: Machine address type, one of Hostname, ExternalIP,
-                        InternalIP, ExternalDNS or InternalDNS.
-                      type: string
-                  required:
-                  - address
-                  - type
-                  type: object
-                type: array
-              bootstrapReady:
-                description: bootstrapReady is the state of the bootstrap provider.
-                type: boolean
-              certificatesExpiryDate:
-                description: |-
-                  certificatesExpiryDate is the expiry date of the machine certificates.
-                  This value is only set for control plane machines.
-                format: date-time
-                type: string
-              conditions:
-                description: conditions defines current service state of the Machine.
-                items:
-                  description: Condition defines an observation of a Cluster API resource
-                    operational state.
-                  properties:
-                    lastTransitionTime:
-                      description: |-
-                        Last time the condition transitioned from one status to another.
-                        This should be when the underlying condition changed. If that is not known, then using the time when
-                        the API field changed is acceptable.
-                      format: date-time
-                      type: string
-                    message:
-                      description: |-
-                        A human readable message indicating details about the transition.
-                        This field may be empty.
-                      type: string
-                    reason:
-                      description: |-
-                        The reason for the condition's last transition in CamelCase.
-                        The specific API may choose whether or not this field is considered a guaranteed API.
-                        This field may be empty.
-                      type: string
-                    severity:
-                      description: |-
-                        severity provides an explicit classification of Reason code, so the users or machines can immediately
-                        understand the current situation and act accordingly.
-                        The Severity field MUST be set only when Status=False.
-                      type: string
-                    status:
-                      description: status of the condition, one of True, False, Unknown.
-                      type: string
-                    type:
-                      description: |-
-                        type of condition in CamelCase or in foo.example.com/CamelCase.
-                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
-                        can be useful (see .node.status.conditions), the ability to deconflict is important.
-                      type: string
-                  required:
-                  - lastTransitionTime
-                  - status
-                  - type
-                  type: object
-                type: array
-              deletion:
-                description: |-
-                  deletion contains information relating to removal of the Machine.
-                  Only present when the Machine has a deletionTimestamp and drain or wait for volume detach started.
-                properties:
-                  nodeDrainStartTime:
-                    description: |-
-                      nodeDrainStartTime is the time when the drain of the node started and is used to determine
-                      if the NodeDrainTimeout is exceeded.
-                      Only present when the Machine has a deletionTimestamp and draining the node had been started.
-                    format: date-time
-                    type: string
-                  waitForNodeVolumeDetachStartTime:
-                    description: |-
-                      waitForNodeVolumeDetachStartTime is the time when waiting for volume detachment started
-                      and is used to determine if the NodeVolumeDetachTimeout is exceeded.
-                      Detaching volumes from nodes is usually done by CSI implementations and the current state
-                      is observed from the node's `.Status.VolumesAttached` field.
-                      Only present when the Machine has a deletionTimestamp and waiting for volume detachments had been started.
-                    format: date-time
-                    type: string
-                type: object
-              failureMessage:
-                description: |-
-                  failureMessage will be set in the event that there is a terminal problem
-                  reconciling the Machine and will contain a more verbose string suitable
-                  for logging and human consumption.
-
-                  This field should not be set for transitive errors that a controller
-                  faces that are expected to be fixed automatically over
-                  time (like service outages), but instead indicate that something is
-                  fundamentally wrong with the Machine's spec or the configuration of
-                  the controller, and that manual intervention is required. Examples
-                  of terminal errors would be invalid combinations of settings in the
-                  spec, values that are unsupported by the controller, or the
-                  responsible controller itself being critically misconfigured.
-
-                  Any transient errors that occur during the reconciliation of Machines
-                  can be added as events to the Machine object and/or logged in the
-                  controller's output.
-
-                  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.
-                type: string
-              failureReason:
-                description: |-
-                  failureReason will be set in the event that there is a terminal problem
-                  reconciling the Machine and will contain a succinct value suitable
-                  for machine interpretation.
-
-                  This field should not be set for transitive errors that a controller
-                  faces that are expected to be fixed automatically over
-                  time (like service outages), but instead indicate that something is
-                  fundamentally wrong with the Machine's spec or the configuration of
-                  the controller, and that manual intervention is required. Examples
-                  of terminal errors would be invalid combinations of settings in the
-                  spec, values that are unsupported by the controller, or the
-                  responsible controller itself being critically misconfigured.
-
-                  Any transient errors that occur during the reconciliation of Machines
-                  can be added as events to the Machine object and/or logged in the
-                  controller's output.
-
-                  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.
-                type: string
-              infrastructureReady:
-                description: infrastructureReady is the state of the infrastructure
-                  provider.
-                type: boolean
-              lastUpdated:
-                description: lastUpdated identifies when the phase of the Machine
-                  last transitioned.
-                format: date-time
-                type: string
-              nodeInfo:
-                description: |-
-                  nodeInfo is a set of ids/uuids to uniquely identify the node.
-                  More info: https://kubernetes.io/docs/concepts/nodes/node/#info
-                properties:
-                  architecture:
-                    description: The Architecture reported by the node
-                    type: string
-                  bootID:
-                    description: Boot ID reported by the node.
-                    type: string
-                  containerRuntimeVersion:
-                    description: ContainerRuntime Version reported by the node through
-                      runtime remote API (e.g. containerd://1.4.2).
-                    type: string
-                  kernelVersion:
-                    description: Kernel Version reported by the node from 'uname -r'
-                      (e.g. 3.16.0-0.bpo.4-amd64).
-                    type: string
-                  kubeProxyVersion:
-                    description: 'Deprecated: KubeProxy Version reported by the node.'
-                    type: string
-                  kubeletVersion:
-                    description: Kubelet Version reported by the node.
-                    type: string
-                  machineID:
-                    description: |-
-                      MachineID reported by the node. For unique machine identification
-                      in the cluster this field is preferred. Learn more from man(5)
-                      machine-id: http://man7.org/linux/man-pages/man5/machine-id.5.html
-                    type: string
-                  operatingSystem:
-                    description: The Operating System reported by the node
-                    type: string
-                  osImage:
-                    description: OS Image reported by the node from /etc/os-release
-                      (e.g. Debian GNU/Linux 7 (wheezy)).
-                    type: string
-                  systemUUID:
-                    description: |-
-                      SystemUUID reported by the node. For unique machine identification
-                      MachineID is preferred. This field is specific to Red Hat hosts
-                      https://access.redhat.com/documentation/en-us/red_hat_subscription_management/1/html/rhsm/uuid
-                    type: string
-                required:
-                - architecture
-                - bootID
-                - containerRuntimeVersion
-                - kernelVersion
-                - kubeProxyVersion
-                - kubeletVersion
-                - machineID
-                - operatingSystem
-                - osImage
-                - systemUUID
-                type: object
-              nodeRef:
-                description: nodeRef will point to the corresponding Node if it exists.
-                properties:
-                  apiVersion:
-                    description: API version of the referent.
-                    type: string
-                  fieldPath:
-                    description: |-
-                      If referring to a piece of an object instead of an entire object, this string
-                      should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                      For example, if the object reference is to a container within a pod, this would take on a value like:
-                      "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                      the event) or if no container name is specified "spec.containers[2]" (container with
-                      index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                      referencing a part of an object.
-                    type: string
-                  kind:
-                    description: |-
-                      Kind of the referent.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                    type: string
-                  name:
-                    description: |-
-                      Name of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                    type: string
-                  namespace:
-                    description: |-
-                      Namespace of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                    type: string
-                  resourceVersion:
-                    description: |-
-                      Specific resourceVersion to which this reference is made, if any.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                    type: string
-                  uid:
-                    description: |-
-                      UID of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                    type: string
-                type: object
-                x-kubernetes-map-type: atomic
-              observedGeneration:
-                description: observedGeneration is the latest generation observed
-                  by the controller.
-                format: int64
-                type: integer
-              phase:
-                description: |-
-                  phase represents the current phase of machine actuation.
-                  E.g. Pending, Running, Terminating, Failed etc.
-                type: string
-              v1beta2:
-                description: v1beta2 groups all the fields that will be added or modified
-                  in Machine's status with the V1Beta2 version.
-                properties:
-                  conditions:
-                    description: |-
-                      conditions represents the observations of a Machine's current state.
-                      Known condition types are Available, Ready, UpToDate, BootstrapConfigReady, InfrastructureReady, NodeReady,
-                      NodeHealthy, Deleting, Paused.
-                      If a MachineHealthCheck is targeting this machine, also HealthCheckSucceeded, OwnerRemediated conditions are added.
-                      Additionally control plane Machines controlled by KubeadmControlPlane will have following additional conditions:
-                      APIServerPodHealthy, ControllerManagerPodHealthy, SchedulerPodHealthy, EtcdPodHealthy, EtcdMemberHealthy.
-                    items:
-                      description: Condition contains details for one aspect of the
-                        current state of this API Resource.
-                      properties:
-                        lastTransitionTime:
-                          description: |-
-                            lastTransitionTime is the last time the condition transitioned from one status to another.
-                            This should be when the underlying condition changed.  If that is not known, then using the time when the API field changed is acceptable.
-                          format: date-time
-                          type: string
-                        message:
-                          description: |-
-                            message is a human readable message indicating details about the transition.
-                            This may be an empty string.
-                          maxLength: 32768
-                          type: string
-                        observedGeneration:
-                          description: |-
-                            observedGeneration represents the .metadata.generation that the condition was set based upon.
-                            For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
-                            with respect to the current state of the instance.
-                          format: int64
-                          minimum: 0
-                          type: integer
-                        reason:
-                          description: |-
-                            reason contains a programmatic identifier indicating the reason for the condition's last transition.
-                            Producers of specific condition types may define expected values and meanings for this field,
-                            and whether the values are considered a guaranteed API.
-                            The value should be a CamelCase string.
-                            This field may not be empty.
-                          maxLength: 1024
-                          minLength: 1
-                          pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
-                          type: string
-                        status:
-                          description: status of the condition, one of True, False,
-                            Unknown.
-                          enum:
-                          - "True"
-                          - "False"
-                          - Unknown
-                          type: string
-                        type:
-                          description: type of condition in CamelCase or in foo.example.com/CamelCase.
-                          maxLength: 316
-                          pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-                          type: string
-                      required:
-                      - lastTransitionTime
-                      - message
-                      - reason
-                      - status
-                      - type
-                      type: object
-                    maxItems: 32
-                    type: array
-                    x-kubernetes-list-map-keys:
-                    - type
-                    x-kubernetes-list-type: map
-                type: object
-            type: object
-        type: object
-    served: true
-    storage: true
-    subresources:
-      status: {}
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: null
-  storedVersions: null
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  annotations:
-    cert-manager.io/inject-ca-from: capi-system/capi-serving-cert
-    controller-gen.kubebuilder.io/version: v0.16.1
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: cluster-api
-    clusterctl.cluster.x-k8s.io: ""
-  name: machinesets.cluster.x-k8s.io
-spec:
-  conversion:
-    strategy: Webhook
-    webhook:
-      clientConfig:
-        service:
-          name: capi-webhook-service
-          namespace: capi-system
-          path: /convert
-      conversionReviewVersions:
-      - v1
-      - v1beta1
-  group: cluster.x-k8s.io
-  names:
-    categories:
-    - cluster-api
-    kind: MachineSet
-    listKind: MachineSetList
-    plural: machinesets
-    shortNames:
-    - ms
-    singular: machineset
-  scope: Namespaced
-  versions:
-  - additionalPrinterColumns:
-    - description: Total number of non-terminated machines targeted by this machineset
-      jsonPath: .status.replicas
-      name: Replicas
-      type: integer
-    - description: Total number of available machines (ready for at least minReadySeconds)
-      jsonPath: .status.availableReplicas
-      name: Available
-      type: integer
-    - description: Total number of ready machines targeted by this machineset.
-      jsonPath: .status.readyReplicas
-      name: Ready
-      type: integer
-    deprecated: true
-    name: v1alpha3
-    schema:
-      openAPIV3Schema:
-        description: |-
-          MachineSet is the Schema for the machinesets API.
-
-          Deprecated: This type will be removed in one of the next releases.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: MachineSetSpec defines the desired state of MachineSet.
-            properties:
-              clusterName:
-                description: clusterName is the name of the Cluster this object belongs
-                  to.
-                minLength: 1
-                type: string
-              deletePolicy:
-                description: |-
-                  deletePolicy defines the policy used to identify nodes to delete when downscaling.
-                  Defaults to "Random".  Valid values are "Random, "Newest", "Oldest"
-                enum:
-                - Random
-                - Newest
-                - Oldest
-                type: string
-              minReadySeconds:
-                description: |-
-                  minReadySeconds is the minimum number of seconds for which a newly created machine should be ready.
-                  Defaults to 0 (machine will be considered available as soon as it is ready)
-                format: int32
-                type: integer
-              replicas:
-                description: |-
-                  replicas is the number of desired replicas.
-                  This is a pointer to distinguish between explicit zero and unspecified.
-                  Defaults to 1.
-                format: int32
-                type: integer
-              selector:
-                description: |-
-                  selector is a label query over machines that should match the replica count.
-                  Label keys and values that must match in order to be controlled by this MachineSet.
-                  It must match the machine template's labels.
-                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
-                properties:
-                  matchExpressions:
-                    description: matchExpressions is a list of label selector requirements.
-                      The requirements are ANDed.
-                    items:
-                      description: |-
-                        A label selector requirement is a selector that contains values, a key, and an operator that
-                        relates the key and values.
-                      properties:
-                        key:
-                          description: key is the label key that the selector applies
-                            to.
-                          type: string
-                        operator:
-                          description: |-
-                            operator represents a key's relationship to a set of values.
-                            Valid operators are In, NotIn, Exists and DoesNotExist.
-                          type: string
-                        values:
-                          description: |-
-                            values is an array of string values. If the operator is In or NotIn,
-                            the values array must be non-empty. If the operator is Exists or DoesNotExist,
-                            the values array must be empty. This array is replaced during a strategic
-                            merge patch.
-                          items:
-                            type: string
-                          type: array
-                          x-kubernetes-list-type: atomic
-                      required:
-                      - key
-                      - operator
-                      type: object
-                    type: array
-                    x-kubernetes-list-type: atomic
-                  matchLabels:
-                    additionalProperties:
-                      type: string
-                    description: |-
-                      matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
-                      map is equivalent to an element of matchExpressions, whose key field is "key", the
-                      operator is "In", and the values array contains only "value". The requirements are ANDed.
-                    type: object
-                type: object
-                x-kubernetes-map-type: atomic
-              template:
-                description: |-
-                  template is the object that describes the machine that will be created if
-                  insufficient replicas are detected.
-                  Object references to custom resources are treated as templates.
-                properties:
-                  metadata:
-                    description: |-
-                      Standard object's metadata.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
-                    properties:
-                      annotations:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          annotations is an unstructured key value map stored with a resource that may be
-                          set by external tools to store and retrieve arbitrary metadata. They are not
-                          queryable and should be preserved when modifying objects.
-                          More info: http://kubernetes.io/docs/user-guide/annotations
-                        type: object
-                      generateName:
-                        description: |-
-                          generateName is an optional prefix, used by the server, to generate a unique
-                          name ONLY IF the Name field has not been provided.
-                          If this field is used, the name returned to the client will be different
-                          than the name passed. This value will also be combined with a unique suffix.
-                          The provided value has the same validation rules as the Name field,
-                          and may be truncated by the length of the suffix required to make the value
-                          unique on the server.
-
-                          If this field is specified and the generated name exists, the server will
-                          NOT return a 409 - instead, it will either return 201 Created or 500 with Reason
-                          ServerTimeout indicating a unique name could not be found in the time allotted, and the client
-                          should retry (optionally after the time indicated in the Retry-After header).
-
-                          Applied only if Name is not specified.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency
-
-                          Deprecated: This field has no function and is going to be removed in a next release.
-                        type: string
-                      labels:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          Map of string keys and values that can be used to organize and categorize
-                          (scope and select) objects. May match selectors of replication controllers
-                          and services.
-                          More info: http://kubernetes.io/docs/user-guide/labels
-                        type: object
-                      name:
-                        description: |-
-                          name must be unique within a namespace. Is required when creating resources, although
-                          some resources may allow a client to request the generation of an appropriate name
-                          automatically. Name is primarily intended for creation idempotence and configuration
-                          definition.
-                          Cannot be updated.
-                          More info: http://kubernetes.io/docs/user-guide/identifiers#names
-
-                          Deprecated: This field has no function and is going to be removed in a next release.
-                        type: string
-                      namespace:
-                        description: |-
-                          namespace defines the space within each name must be unique. An empty namespace is
-                          equivalent to the "default" namespace, but "default" is the canonical representation.
-                          Not all objects are required to be scoped to a namespace - the value of this field for
-                          those objects will be empty.
-
-                          Must be a DNS_LABEL.
-                          Cannot be updated.
-                          More info: http://kubernetes.io/docs/user-guide/namespaces
-
-                          Deprecated: This field has no function and is going to be removed in a next release.
-                        type: string
-                      ownerReferences:
-                        description: |-
-                          List of objects depended by this object. If ALL objects in the list have
-                          been deleted, this object will be garbage collected. If this object is managed by a controller,
-                          then an entry in this list will point to this controller, with the controller field set to true.
-                          There cannot be more than one managing controller.
-
-                          Deprecated: This field has no function and is going to be removed in a next release.
-                        items:
-                          description: |-
-                            OwnerReference contains enough information to let you identify an owning
-                            object. An owning object must be in the same namespace as the dependent, or
-                            be cluster-scoped, so there is no namespace field.
-                          properties:
-                            apiVersion:
-                              description: API version of the referent.
-                              type: string
-                            blockOwnerDeletion:
-                              description: |-
-                                If true, AND if the owner has the "foregroundDeletion" finalizer, then
-                                the owner cannot be deleted from the key-value store until this
-                                reference is removed.
-                                See https://kubernetes.io/docs/concepts/architecture/garbage-collection/#foreground-deletion
-                                for how the garbage collector interacts with this field and enforces the foreground deletion.
-                                Defaults to false.
-                                To set this field, a user needs "delete" permission of the owner,
-                                otherwise 422 (Unprocessable Entity) will be returned.
-                              type: boolean
-                            controller:
-                              description: If true, this reference points to the managing
-                                controller.
-                              type: boolean
-                            kind:
-                              description: |-
-                                Kind of the referent.
-                                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                              type: string
-                            name:
-                              description: |-
-                                Name of the referent.
-                                More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names
-                              type: string
-                            uid:
-                              description: |-
-                                UID of the referent.
-                                More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#uids
-                              type: string
-                          required:
-                          - apiVersion
-                          - kind
-                          - name
-                          - uid
-                          type: object
-                          x-kubernetes-map-type: atomic
-                        type: array
-                    type: object
-                  spec:
-                    description: |-
-                      Specification of the desired behavior of the machine.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
-                    properties:
-                      bootstrap:
-                        description: |-
-                          bootstrap is a reference to a local struct which encapsulates
-                          fields to configure the Machine’s bootstrapping mechanism.
-                        properties:
-                          configRef:
-                            description: |-
-                              configRef is a reference to a bootstrap provider-specific resource
-                              that holds configuration details. The reference is optional to
-                              allow users/operators to specify Bootstrap.Data without
-                              the need of a controller.
-                            properties:
-                              apiVersion:
-                                description: API version of the referent.
-                                type: string
-                              fieldPath:
-                                description: |-
-                                  If referring to a piece of an object instead of an entire object, this string
-                                  should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                                  For example, if the object reference is to a container within a pod, this would take on a value like:
-                                  "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                                  the event) or if no container name is specified "spec.containers[2]" (container with
-                                  index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                                  referencing a part of an object.
-                                type: string
-                              kind:
-                                description: |-
-                                  Kind of the referent.
-                                  More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                                type: string
-                              name:
-                                description: |-
-                                  Name of the referent.
-                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                type: string
-                              namespace:
-                                description: |-
-                                  Namespace of the referent.
-                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                                type: string
-                              resourceVersion:
-                                description: |-
-                                  Specific resourceVersion to which this reference is made, if any.
-                                  More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                                type: string
-                              uid:
-                                description: |-
-                                  UID of the referent.
-                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                                type: string
-                            type: object
-                            x-kubernetes-map-type: atomic
-                          data:
-                            description: |-
-                              data contains the bootstrap data, such as cloud-init details scripts.
-                              If nil, the Machine should remain in the Pending state.
-
-                              Deprecated: Switch to DataSecretName.
-                            type: string
-                          dataSecretName:
-                            description: |-
-                              dataSecretName is the name of the secret that stores the bootstrap data script.
-                              If nil, the Machine should remain in the Pending state.
-                            type: string
-                        type: object
-                      clusterName:
-                        description: clusterName is the name of the Cluster this object
-                          belongs to.
-                        minLength: 1
-                        type: string
-                      failureDomain:
-                        description: |-
-                          failureDomain is the failure domain the machine will be created in.
-                          Must match a key in the FailureDomains map stored on the cluster object.
-                        type: string
-                      infrastructureRef:
-                        description: |-
-                          infrastructureRef is a required reference to a custom resource
-                          offered by an infrastructure provider.
-                        properties:
-                          apiVersion:
-                            description: API version of the referent.
-                            type: string
-                          fieldPath:
-                            description: |-
-                              If referring to a piece of an object instead of an entire object, this string
-                              should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                              For example, if the object reference is to a container within a pod, this would take on a value like:
-                              "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                              the event) or if no container name is specified "spec.containers[2]" (container with
-                              index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                              referencing a part of an object.
-                            type: string
-                          kind:
-                            description: |-
-                              Kind of the referent.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                            type: string
-                          name:
-                            description: |-
-                              Name of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                            type: string
-                          namespace:
-                            description: |-
-                              Namespace of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                            type: string
-                          resourceVersion:
-                            description: |-
-                              Specific resourceVersion to which this reference is made, if any.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                            type: string
-                          uid:
-                            description: |-
-                              UID of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                            type: string
-                        type: object
-                        x-kubernetes-map-type: atomic
-                      nodeDrainTimeout:
-                        description: |-
-                          nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
-                          The default value is 0, meaning that the node can be drained without any time limitations.
-                          NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
-                        type: string
-                      providerID:
-                        description: |-
-                          providerID is the identification ID of the machine provided by the provider.
-                          This field must match the provider ID as seen on the node object corresponding to this machine.
-                          This field is required by higher level consumers of cluster-api. Example use case is cluster autoscaler
-                          with cluster-api as provider. Clean-up logic in the autoscaler compares machines to nodes to find out
-                          machines at provider which could not get registered as Kubernetes nodes. With cluster-api as a
-                          generic out-of-tree provider for autoscaler, this field is required by autoscaler to be
-                          able to have a provider view of the list of machines. Another list of nodes is queried from the k8s apiserver
-                          and then a comparison is done to find out unregistered machines and are marked for delete.
-                          This field will be set by the actuators and consumed by higher level entities like autoscaler that will
-                          be interfacing with cluster-api as generic provider.
-                        type: string
-                      version:
-                        description: |-
-                          version defines the desired Kubernetes version.
-                          This field is meant to be optionally used by bootstrap providers.
-                        type: string
-                    required:
-                    - bootstrap
-                    - clusterName
-                    - infrastructureRef
-                    type: object
-                type: object
-            required:
-            - clusterName
-            - selector
-            type: object
-          status:
-            description: MachineSetStatus defines the observed state of MachineSet.
-            properties:
-              availableReplicas:
-                description: The number of available replicas (ready for at least
-                  minReadySeconds) for this MachineSet.
-                format: int32
-                type: integer
-              failureMessage:
-                type: string
-              failureReason:
-                description: |-
-                  In the event that there is a terminal problem reconciling the
-                  replicas, both FailureReason and FailureMessage will be set. FailureReason
-                  will be populated with a succinct value suitable for machine
-                  interpretation, while FailureMessage will contain a more verbose
-                  string suitable for logging and human consumption.
-
-                  These fields should not be set for transitive errors that a
-                  controller faces that are expected to be fixed automatically over
-                  time (like service outages), but instead indicate that something is
-                  fundamentally wrong with the MachineTemplate's spec or the configuration of
-                  the machine controller, and that manual intervention is required. Examples
-                  of terminal errors would be invalid combinations of settings in the
-                  spec, values that are unsupported by the machine controller, or the
-                  responsible machine controller itself being critically misconfigured.
-
-                  Any transient errors that occur during the reconciliation of Machines
-                  can be added as events to the MachineSet object and/or logged in the
-                  controller's output.
-                type: string
-              fullyLabeledReplicas:
-                description: The number of replicas that have labels matching the
-                  labels of the machine template of the MachineSet.
-                format: int32
-                type: integer
-              observedGeneration:
-                description: observedGeneration reflects the generation of the most
-                  recently observed MachineSet.
-                format: int64
-                type: integer
-              readyReplicas:
-                description: The number of ready replicas for this MachineSet. A machine
-                  is considered ready when the node has been created and is "Ready".
-                format: int32
-                type: integer
-              replicas:
-                description: replicas is the most recently observed number of replicas.
-                format: int32
-                type: integer
-              selector:
-                description: |-
-                  selector is the same as the label selector but in the string format to avoid introspection
-                  by clients. The string will be in the same format as the query-param syntax.
-                  More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors
-                type: string
-            type: object
-        type: object
-    served: false
-    storage: false
-    subresources:
-      scale:
-        labelSelectorPath: .status.selector
-        specReplicasPath: .spec.replicas
-        statusReplicasPath: .status.replicas
-      status: {}
-  - additionalPrinterColumns:
-    - description: Cluster
-      jsonPath: .spec.clusterName
-      name: Cluster
-      type: string
-    - description: Time duration since creation of MachineSet
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    - description: Total number of non-terminated machines targeted by this machineset
-      jsonPath: .status.replicas
-      name: Replicas
-      type: integer
-    - description: Total number of available machines (ready for at least minReadySeconds)
-      jsonPath: .status.availableReplicas
-      name: Available
-      type: integer
-    - description: Total number of ready machines targeted by this machineset.
-      jsonPath: .status.readyReplicas
-      name: Ready
-      type: integer
-    deprecated: true
-    name: v1alpha4
-    schema:
-      openAPIV3Schema:
-        description: |-
-          MachineSet is the Schema for the machinesets API.
-
-          Deprecated: This type will be removed in one of the next releases.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: MachineSetSpec defines the desired state of MachineSet.
-            properties:
-              clusterName:
-                description: clusterName is the name of the Cluster this object belongs
-                  to.
-                minLength: 1
-                type: string
-              deletePolicy:
-                description: |-
-                  deletePolicy defines the policy used to identify nodes to delete when downscaling.
-                  Defaults to "Random".  Valid values are "Random, "Newest", "Oldest"
-                enum:
-                - Random
-                - Newest
-                - Oldest
-                type: string
-              minReadySeconds:
-                description: |-
-                  minReadySeconds is the minimum number of seconds for which a newly created machine should be ready.
-                  Defaults to 0 (machine will be considered available as soon as it is ready)
-                format: int32
-                type: integer
-              replicas:
-                default: 1
-                description: |-
-                  replicas is the number of desired replicas.
-                  This is a pointer to distinguish between explicit zero and unspecified.
-                  Defaults to 1.
-                format: int32
-                type: integer
-              selector:
-                description: |-
-                  selector is a label query over machines that should match the replica count.
-                  Label keys and values that must match in order to be controlled by this MachineSet.
-                  It must match the machine template's labels.
-                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
-                properties:
-                  matchExpressions:
-                    description: matchExpressions is a list of label selector requirements.
-                      The requirements are ANDed.
-                    items:
-                      description: |-
-                        A label selector requirement is a selector that contains values, a key, and an operator that
-                        relates the key and values.
-                      properties:
-                        key:
-                          description: key is the label key that the selector applies
-                            to.
-                          type: string
-                        operator:
-                          description: |-
-                            operator represents a key's relationship to a set of values.
-                            Valid operators are In, NotIn, Exists and DoesNotExist.
-                          type: string
-                        values:
-                          description: |-
-                            values is an array of string values. If the operator is In or NotIn,
-                            the values array must be non-empty. If the operator is Exists or DoesNotExist,
-                            the values array must be empty. This array is replaced during a strategic
-                            merge patch.
-                          items:
-                            type: string
-                          type: array
-                          x-kubernetes-list-type: atomic
-                      required:
-                      - key
-                      - operator
-                      type: object
-                    type: array
-                    x-kubernetes-list-type: atomic
-                  matchLabels:
-                    additionalProperties:
-                      type: string
-                    description: |-
-                      matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
-                      map is equivalent to an element of matchExpressions, whose key field is "key", the
-                      operator is "In", and the values array contains only "value". The requirements are ANDed.
-                    type: object
-                type: object
-                x-kubernetes-map-type: atomic
-              template:
-                description: |-
-                  template is the object that describes the machine that will be created if
-                  insufficient replicas are detected.
-                  Object references to custom resources are treated as templates.
-                properties:
-                  metadata:
-                    description: |-
-                      Standard object's metadata.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
-                    properties:
-                      annotations:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          annotations is an unstructured key value map stored with a resource that may be
-                          set by external tools to store and retrieve arbitrary metadata. They are not
-                          queryable and should be preserved when modifying objects.
-                          More info: http://kubernetes.io/docs/user-guide/annotations
-                        type: object
-                      labels:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          Map of string keys and values that can be used to organize and categorize
-                          (scope and select) objects. May match selectors of replication controllers
-                          and services.
-                          More info: http://kubernetes.io/docs/user-guide/labels
-                        type: object
-                    type: object
-                  spec:
-                    description: |-
-                      Specification of the desired behavior of the machine.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
-                    properties:
-                      bootstrap:
-                        description: |-
-                          bootstrap is a reference to a local struct which encapsulates
-                          fields to configure the Machine’s bootstrapping mechanism.
-                        properties:
-                          configRef:
-                            description: |-
-                              configRef is a reference to a bootstrap provider-specific resource
-                              that holds configuration details. The reference is optional to
-                              allow users/operators to specify Bootstrap.DataSecretName without
-                              the need of a controller.
-                            properties:
-                              apiVersion:
-                                description: API version of the referent.
-                                type: string
-                              fieldPath:
-                                description: |-
-                                  If referring to a piece of an object instead of an entire object, this string
-                                  should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                                  For example, if the object reference is to a container within a pod, this would take on a value like:
-                                  "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                                  the event) or if no container name is specified "spec.containers[2]" (container with
-                                  index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                                  referencing a part of an object.
-                                type: string
-                              kind:
-                                description: |-
-                                  Kind of the referent.
-                                  More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                                type: string
-                              name:
-                                description: |-
-                                  Name of the referent.
-                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                type: string
-                              namespace:
-                                description: |-
-                                  Namespace of the referent.
-                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                                type: string
-                              resourceVersion:
-                                description: |-
-                                  Specific resourceVersion to which this reference is made, if any.
-                                  More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                                type: string
-                              uid:
-                                description: |-
-                                  UID of the referent.
-                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                                type: string
-                            type: object
-                            x-kubernetes-map-type: atomic
-                          dataSecretName:
-                            description: |-
-                              dataSecretName is the name of the secret that stores the bootstrap data script.
-                              If nil, the Machine should remain in the Pending state.
-                            type: string
-                        type: object
-                      clusterName:
-                        description: clusterName is the name of the Cluster this object
-                          belongs to.
-                        minLength: 1
-                        type: string
-                      failureDomain:
-                        description: |-
-                          failureDomain is the failure domain the machine will be created in.
-                          Must match a key in the FailureDomains map stored on the cluster object.
-                        type: string
-                      infrastructureRef:
-                        description: |-
-                          infrastructureRef is a required reference to a custom resource
-                          offered by an infrastructure provider.
-                        properties:
-                          apiVersion:
-                            description: API version of the referent.
-                            type: string
-                          fieldPath:
-                            description: |-
-                              If referring to a piece of an object instead of an entire object, this string
-                              should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                              For example, if the object reference is to a container within a pod, this would take on a value like:
-                              "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                              the event) or if no container name is specified "spec.containers[2]" (container with
-                              index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                              referencing a part of an object.
-                            type: string
-                          kind:
-                            description: |-
-                              Kind of the referent.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                            type: string
-                          name:
-                            description: |-
-                              Name of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                            type: string
-                          namespace:
-                            description: |-
-                              Namespace of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                            type: string
-                          resourceVersion:
-                            description: |-
-                              Specific resourceVersion to which this reference is made, if any.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                            type: string
-                          uid:
-                            description: |-
-                              UID of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                            type: string
-                        type: object
-                        x-kubernetes-map-type: atomic
-                      nodeDrainTimeout:
-                        description: |-
-                          nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
-                          The default value is 0, meaning that the node can be drained without any time limitations.
-                          NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
-                        type: string
-                      providerID:
-                        description: |-
-                          providerID is the identification ID of the machine provided by the provider.
-                          This field must match the provider ID as seen on the node object corresponding to this machine.
-                          This field is required by higher level consumers of cluster-api. Example use case is cluster autoscaler
-                          with cluster-api as provider. Clean-up logic in the autoscaler compares machines to nodes to find out
-                          machines at provider which could not get registered as Kubernetes nodes. With cluster-api as a
-                          generic out-of-tree provider for autoscaler, this field is required by autoscaler to be
-                          able to have a provider view of the list of machines. Another list of nodes is queried from the k8s apiserver
-                          and then a comparison is done to find out unregistered machines and are marked for delete.
-                          This field will be set by the actuators and consumed by higher level entities like autoscaler that will
-                          be interfacing with cluster-api as generic provider.
-                        type: string
-                      version:
-                        description: |-
-                          version defines the desired Kubernetes version.
-                          This field is meant to be optionally used by bootstrap providers.
-                        type: string
-                    required:
-                    - bootstrap
-                    - clusterName
-                    - infrastructureRef
-                    type: object
-                type: object
-            required:
-            - clusterName
-            - selector
-            type: object
-          status:
-            description: MachineSetStatus defines the observed state of MachineSet.
-            properties:
-              availableReplicas:
-                description: The number of available replicas (ready for at least
-                  minReadySeconds) for this MachineSet.
-                format: int32
-                type: integer
-              conditions:
-                description: conditions defines current service state of the MachineSet.
-                items:
-                  description: Condition defines an observation of a Cluster API resource
-                    operational state.
-                  properties:
-                    lastTransitionTime:
-                      description: |-
-                        Last time the condition transitioned from one status to another.
-                        This should be when the underlying condition changed. If that is not known, then using the time when
-                        the API field changed is acceptable.
-                      format: date-time
-                      type: string
-                    message:
-                      description: |-
-                        A human readable message indicating details about the transition.
-                        This field may be empty.
-                      type: string
-                    reason:
-                      description: |-
-                        The reason for the condition's last transition in CamelCase.
-                        The specific API may choose whether or not this field is considered a guaranteed API.
-                        This field may not be empty.
-                      type: string
-                    severity:
-                      description: |-
-                        severity provides an explicit classification of Reason code, so the users or machines can immediately
-                        understand the current situation and act accordingly.
-                        The Severity field MUST be set only when Status=False.
-                      type: string
-                    status:
-                      description: status of the condition, one of True, False, Unknown.
-                      type: string
-                    type:
-                      description: |-
-                        type of condition in CamelCase or in foo.example.com/CamelCase.
-                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
-                        can be useful (see .node.status.conditions), the ability to deconflict is important.
-                      type: string
-                  required:
-                  - status
-                  - type
-                  type: object
-                type: array
-              failureMessage:
-                type: string
-              failureReason:
-                description: |-
-                  In the event that there is a terminal problem reconciling the
-                  replicas, both FailureReason and FailureMessage will be set. FailureReason
-                  will be populated with a succinct value suitable for machine
-                  interpretation, while FailureMessage will contain a more verbose
-                  string suitable for logging and human consumption.
-
-                  These fields should not be set for transitive errors that a
-                  controller faces that are expected to be fixed automatically over
-                  time (like service outages), but instead indicate that something is
-                  fundamentally wrong with the MachineTemplate's spec or the configuration of
-                  the machine controller, and that manual intervention is required. Examples
-                  of terminal errors would be invalid combinations of settings in the
-                  spec, values that are unsupported by the machine controller, or the
-                  responsible machine controller itself being critically misconfigured.
-
-                  Any transient errors that occur during the reconciliation of Machines
-                  can be added as events to the MachineSet object and/or logged in the
-                  controller's output.
-                type: string
-              fullyLabeledReplicas:
-                description: The number of replicas that have labels matching the
-                  labels of the machine template of the MachineSet.
-                format: int32
-                type: integer
-              observedGeneration:
-                description: observedGeneration reflects the generation of the most
-                  recently observed MachineSet.
-                format: int64
-                type: integer
-              readyReplicas:
-                description: The number of ready replicas for this MachineSet. A machine
-                  is considered ready when the node has been created and is "Ready".
-                format: int32
-                type: integer
-              replicas:
-                description: replicas is the most recently observed number of replicas.
-                format: int32
-                type: integer
-              selector:
-                description: |-
-                  selector is the same as the label selector but in the string format to avoid introspection
-                  by clients. The string will be in the same format as the query-param syntax.
-                  More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors
-                type: string
-            type: object
-        type: object
-    served: false
-    storage: false
-    subresources:
-      scale:
-        labelSelectorPath: .status.selector
-        specReplicasPath: .spec.replicas
-        statusReplicasPath: .status.replicas
-      status: {}
-  - additionalPrinterColumns:
-    - description: Cluster
-      jsonPath: .spec.clusterName
-      name: Cluster
-      type: string
-    - description: Total number of machines desired by this machineset
-      jsonPath: .spec.replicas
-      name: Desired
-      priority: 10
-      type: integer
-    - description: Total number of non-terminated machines targeted by this machineset
-      jsonPath: .status.replicas
-      name: Replicas
-      type: integer
-    - description: Total number of ready machines targeted by this machineset.
-      jsonPath: .status.readyReplicas
-      name: Ready
-      type: integer
-    - description: Total number of available machines (ready for at least minReadySeconds)
-      jsonPath: .status.availableReplicas
-      name: Available
-      type: integer
-    - description: Time duration since creation of MachineSet
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    - description: Kubernetes version associated with this MachineSet
-      jsonPath: .spec.template.spec.version
-      name: Version
-      type: string
-    name: v1beta1
-    schema:
-      openAPIV3Schema:
-        description: MachineSet is the Schema for the machinesets API.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: MachineSetSpec defines the desired state of MachineSet.
-            properties:
-              clusterName:
-                description: clusterName is the name of the Cluster this object belongs
-                  to.
-                minLength: 1
-                type: string
-              deletePolicy:
-                description: |-
-                  deletePolicy defines the policy used to identify nodes to delete when downscaling.
-                  Defaults to "Random".  Valid values are "Random, "Newest", "Oldest"
-                enum:
-                - Random
-                - Newest
-                - Oldest
-                type: string
-              minReadySeconds:
-                description: |-
-                  minReadySeconds is the minimum number of seconds for which a Node for a newly created machine should be ready before considering the replica available.
-                  Defaults to 0 (machine will be considered available as soon as the Node is ready)
-                format: int32
-                type: integer
-              replicas:
-                description: |-
-                  replicas is the number of desired replicas.
-                  This is a pointer to distinguish between explicit zero and unspecified.
-
-                  Defaults to:
-                  * if the Kubernetes autoscaler min size and max size annotations are set:
-                    - if it's a new MachineSet, use min size
-                    - if the replicas field of the old MachineSet is < min size, use min size
-                    - if the replicas field of the old MachineSet is > max size, use max size
-                    - if the replicas field of the old MachineSet is in the (min size, max size) range, keep the value from the oldMS
-                  * otherwise use 1
-                  Note: Defaulting will be run whenever the replicas field is not set:
-                  * A new MachineSet is created with replicas not set.
-                  * On an existing MachineSet the replicas field was first set and is now unset.
-                  Those cases are especially relevant for the following Kubernetes autoscaler use cases:
-                  * A new MachineSet is created and replicas should be managed by the autoscaler
-                  * An existing MachineSet which initially wasn't controlled by the autoscaler
-                    should be later controlled by the autoscaler
-                format: int32
-                type: integer
-              selector:
-                description: |-
-                  selector is a label query over machines that should match the replica count.
-                  Label keys and values that must match in order to be controlled by this MachineSet.
-                  It must match the machine template's labels.
-                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
-                properties:
-                  matchExpressions:
-                    description: matchExpressions is a list of label selector requirements.
-                      The requirements are ANDed.
-                    items:
-                      description: |-
-                        A label selector requirement is a selector that contains values, a key, and an operator that
-                        relates the key and values.
-                      properties:
-                        key:
-                          description: key is the label key that the selector applies
-                            to.
-                          type: string
-                        operator:
-                          description: |-
-                            operator represents a key's relationship to a set of values.
-                            Valid operators are In, NotIn, Exists and DoesNotExist.
-                          type: string
-                        values:
-                          description: |-
-                            values is an array of string values. If the operator is In or NotIn,
-                            the values array must be non-empty. If the operator is Exists or DoesNotExist,
-                            the values array must be empty. This array is replaced during a strategic
-                            merge patch.
-                          items:
-                            type: string
-                          type: array
-                          x-kubernetes-list-type: atomic
-                      required:
-                      - key
-                      - operator
-                      type: object
-                    type: array
-                    x-kubernetes-list-type: atomic
-                  matchLabels:
-                    additionalProperties:
-                      type: string
-                    description: |-
-                      matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
-                      map is equivalent to an element of matchExpressions, whose key field is "key", the
-                      operator is "In", and the values array contains only "value". The requirements are ANDed.
-                    type: object
-                type: object
-                x-kubernetes-map-type: atomic
-              template:
-                description: |-
-                  template is the object that describes the machine that will be created if
-                  insufficient replicas are detected.
-                  Object references to custom resources are treated as templates.
-                properties:
-                  metadata:
-                    description: |-
-                      Standard object's metadata.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
-                    properties:
-                      annotations:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          annotations is an unstructured key value map stored with a resource that may be
-                          set by external tools to store and retrieve arbitrary metadata. They are not
-                          queryable and should be preserved when modifying objects.
-                          More info: http://kubernetes.io/docs/user-guide/annotations
-                        type: object
-                      labels:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          Map of string keys and values that can be used to organize and categorize
-                          (scope and select) objects. May match selectors of replication controllers
-                          and services.
-                          More info: http://kubernetes.io/docs/user-guide/labels
-                        type: object
-                    type: object
-                  spec:
-                    description: |-
-                      Specification of the desired behavior of the machine.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
-                    properties:
-                      bootstrap:
-                        description: |-
-                          bootstrap is a reference to a local struct which encapsulates
-                          fields to configure the Machine’s bootstrapping mechanism.
-                        properties:
-                          configRef:
-                            description: |-
-                              configRef is a reference to a bootstrap provider-specific resource
-                              that holds configuration details. The reference is optional to
-                              allow users/operators to specify Bootstrap.DataSecretName without
-                              the need of a controller.
-                            properties:
-                              apiVersion:
-                                description: API version of the referent.
-                                type: string
-                              fieldPath:
-                                description: |-
-                                  If referring to a piece of an object instead of an entire object, this string
-                                  should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                                  For example, if the object reference is to a container within a pod, this would take on a value like:
-                                  "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                                  the event) or if no container name is specified "spec.containers[2]" (container with
-                                  index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                                  referencing a part of an object.
-                                type: string
-                              kind:
-                                description: |-
-                                  Kind of the referent.
-                                  More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                                type: string
-                              name:
-                                description: |-
-                                  Name of the referent.
-                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                type: string
-                              namespace:
-                                description: |-
-                                  Namespace of the referent.
-                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                                type: string
-                              resourceVersion:
-                                description: |-
-                                  Specific resourceVersion to which this reference is made, if any.
-                                  More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                                type: string
-                              uid:
-                                description: |-
-                                  UID of the referent.
-                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                                type: string
-                            type: object
-                            x-kubernetes-map-type: atomic
-                          dataSecretName:
-                            description: |-
-                              dataSecretName is the name of the secret that stores the bootstrap data script.
-                              If nil, the Machine should remain in the Pending state.
-                            type: string
-                        type: object
-                      clusterName:
-                        description: clusterName is the name of the Cluster this object
-                          belongs to.
-                        minLength: 1
-                        type: string
-                      failureDomain:
-                        description: |-
-                          failureDomain is the failure domain the machine will be created in.
-                          Must match a key in the FailureDomains map stored on the cluster object.
-                        type: string
-                      infrastructureRef:
-                        description: |-
-                          infrastructureRef is a required reference to a custom resource
-                          offered by an infrastructure provider.
-                        properties:
-                          apiVersion:
-                            description: API version of the referent.
-                            type: string
-                          fieldPath:
-                            description: |-
-                              If referring to a piece of an object instead of an entire object, this string
-                              should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                              For example, if the object reference is to a container within a pod, this would take on a value like:
-                              "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                              the event) or if no container name is specified "spec.containers[2]" (container with
-                              index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                              referencing a part of an object.
-                            type: string
-                          kind:
-                            description: |-
-                              Kind of the referent.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                            type: string
-                          name:
-                            description: |-
-                              Name of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                            type: string
-                          namespace:
-                            description: |-
-                              Namespace of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                            type: string
-                          resourceVersion:
-                            description: |-
-                              Specific resourceVersion to which this reference is made, if any.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                            type: string
-                          uid:
-                            description: |-
-                              UID of the referent.
-                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                            type: string
-                        type: object
-                        x-kubernetes-map-type: atomic
-                      nodeDeletionTimeout:
-                        description: |-
-                          nodeDeletionTimeout defines how long the controller will attempt to delete the Node that the Machine
-                          hosts after the Machine is marked for deletion. A duration of 0 will retry deletion indefinitely.
-                          Defaults to 10 seconds.
-                        type: string
-                      nodeDrainTimeout:
-                        description: |-
-                          nodeDrainTimeout is the total amount of time that the controller will spend on draining a node.
-                          The default value is 0, meaning that the node can be drained without any time limitations.
-                          NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
-                        type: string
-                      nodeVolumeDetachTimeout:
-                        description: |-
-                          nodeVolumeDetachTimeout is the total amount of time that the controller will spend on waiting for all volumes
-                          to be detached. The default value is 0, meaning that the volumes can be detached without any time limitations.
-                        type: string
-                      providerID:
-                        description: |-
-                          providerID is the identification ID of the machine provided by the provider.
-                          This field must match the provider ID as seen on the node object corresponding to this machine.
-                          This field is required by higher level consumers of cluster-api. Example use case is cluster autoscaler
-                          with cluster-api as provider. Clean-up logic in the autoscaler compares machines to nodes to find out
-                          machines at provider which could not get registered as Kubernetes nodes. With cluster-api as a
-                          generic out-of-tree provider for autoscaler, this field is required by autoscaler to be
-                          able to have a provider view of the list of machines. Another list of nodes is queried from the k8s apiserver
-                          and then a comparison is done to find out unregistered machines and are marked for delete.
-                          This field will be set by the actuators and consumed by higher level entities like autoscaler that will
-                          be interfacing with cluster-api as generic provider.
-                        type: string
-                      readinessGates:
-                        description: |-
-                          readinessGates specifies additional conditions to include when evaluating Machine Ready condition.
-
-                          This field can be used e.g. by Cluster API control plane providers to extend the semantic of the
-                          Ready condition for the Machine they control, like the kubeadm control provider adding ReadinessGates
-                          for the APIServerPodHealthy, SchedulerPodHealthy conditions, etc.
-
-                          Another example are external controllers, e.g. responsible to install special software/hardware on the Machines;
-                          they can include the status of those components with a new condition and add this condition to ReadinessGates.
-
-                          NOTE: This field is considered only for computing v1beta2 conditions.
-                          NOTE: In case readinessGates conditions start with the APIServer, ControllerManager, Scheduler prefix, and all those
-                          readiness gates condition are reporting the same message, when computing the Machine's Ready condition those
-                          readinessGates will be replaced by a single entry reporting "Control plane components: " + message.
-                          This helps to improve readability of conditions bubbling up to the Machine's owner resource / to the Cluster).
-                        items:
-                          description: MachineReadinessGate contains the type of a
-                            Machine condition to be used as a readiness gate.
-                          properties:
-                            conditionType:
-                              description: |-
-                                conditionType refers to a positive polarity condition (status true means good) with matching type in the Machine's condition list.
-                                If the conditions doesn't exist, it will be treated as unknown.
-                                Note: Both Cluster API conditions or conditions added by 3rd party controllers can be used as readiness gates.
-                              maxLength: 316
-                              minLength: 1
-                              pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-                              type: string
-                          required:
-                          - conditionType
-                          type: object
-                        maxItems: 32
-                        type: array
-                        x-kubernetes-list-map-keys:
-                        - conditionType
-                        x-kubernetes-list-type: map
-                      version:
-                        description: |-
-                          version defines the desired Kubernetes version.
-                          This field is meant to be optionally used by bootstrap providers.
-                        type: string
-                    required:
-                    - bootstrap
-                    - clusterName
-                    - infrastructureRef
-                    type: object
-                type: object
-            required:
-            - clusterName
-            - selector
-            type: object
-          status:
-            description: MachineSetStatus defines the observed state of MachineSet.
-            properties:
-              availableReplicas:
-                description: The number of available replicas (ready for at least
-                  minReadySeconds) for this MachineSet.
-                format: int32
-                type: integer
-              conditions:
-                description: conditions defines current service state of the MachineSet.
-                items:
-                  description: Condition defines an observation of a Cluster API resource
-                    operational state.
-                  properties:
-                    lastTransitionTime:
-                      description: |-
-                        Last time the condition transitioned from one status to another.
-                        This should be when the underlying condition changed. If that is not known, then using the time when
-                        the API field changed is acceptable.
-                      format: date-time
-                      type: string
-                    message:
-                      description: |-
-                        A human readable message indicating details about the transition.
-                        This field may be empty.
-                      type: string
-                    reason:
-                      description: |-
-                        The reason for the condition's last transition in CamelCase.
-                        The specific API may choose whether or not this field is considered a guaranteed API.
-                        This field may be empty.
-                      type: string
-                    severity:
-                      description: |-
-                        severity provides an explicit classification of Reason code, so the users or machines can immediately
-                        understand the current situation and act accordingly.
-                        The Severity field MUST be set only when Status=False.
-                      type: string
-                    status:
-                      description: status of the condition, one of True, False, Unknown.
-                      type: string
-                    type:
-                      description: |-
-                        type of condition in CamelCase or in foo.example.com/CamelCase.
-                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
-                        can be useful (see .node.status.conditions), the ability to deconflict is important.
-                      type: string
-                  required:
-                  - lastTransitionTime
-                  - status
-                  - type
-                  type: object
-                type: array
-              failureMessage:
-                description: '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.'
-                type: string
-              failureReason:
-                description: |-
-                  In the event that there is a terminal problem reconciling the
-                  replicas, both FailureReason and FailureMessage will be set. FailureReason
-                  will be populated with a succinct value suitable for machine
-                  interpretation, while FailureMessage will contain a more verbose
-                  string suitable for logging and human consumption.
-
-                  These fields should not be set for transitive errors that a
-                  controller faces that are expected to be fixed automatically over
-                  time (like service outages), but instead indicate that something is
-                  fundamentally wrong with the MachineTemplate's spec or the configuration of
-                  the machine controller, and that manual intervention is required. Examples
-                  of terminal errors would be invalid combinations of settings in the
-                  spec, values that are unsupported by the machine controller, or the
-                  responsible machine controller itself being critically misconfigured.
-
-                  Any transient errors that occur during the reconciliation of Machines
-                  can be added as events to the MachineSet object and/or logged in the
-                  controller's output.
-
-                  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.
-                type: string
-              fullyLabeledReplicas:
-                description: |-
-                  The number of replicas that have labels matching the labels of the machine template of the MachineSet.
-
-                  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.
-                format: int32
-                type: integer
-              observedGeneration:
-                description: observedGeneration reflects the generation of the most
-                  recently observed MachineSet.
-                format: int64
-                type: integer
-              readyReplicas:
-                description: The number of ready replicas for this MachineSet. A machine
-                  is considered ready when the node has been created and is "Ready".
-                format: int32
-                type: integer
-              replicas:
-                description: replicas is the most recently observed number of replicas.
-                format: int32
-                type: integer
-              selector:
-                description: |-
-                  selector is the same as the label selector but in the string format to avoid introspection
-                  by clients. The string will be in the same format as the query-param syntax.
-                  More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors
-                type: string
-              v1beta2:
-                description: v1beta2 groups all the fields that will be added or modified
-                  in MachineSet's status with the V1Beta2 version.
-                properties:
-                  availableReplicas:
-                    description: availableReplicas is the number of available replicas
-                      for this MachineSet. A machine is considered available when
-                      Machine's Available condition is true.
-                    format: int32
-                    type: integer
-                  conditions:
-                    description: |-
-                      conditions represents the observations of a MachineSet's current state.
-                      Known condition types are MachinesReady, MachinesUpToDate, ScalingUp, ScalingDown, Remediating, Deleting, Paused.
-                    items:
-                      description: Condition contains details for one aspect of the
-                        current state of this API Resource.
-                      properties:
-                        lastTransitionTime:
-                          description: |-
-                            lastTransitionTime is the last time the condition transitioned from one status to another.
-                            This should be when the underlying condition changed.  If that is not known, then using the time when the API field changed is acceptable.
-                          format: date-time
-                          type: string
-                        message:
-                          description: |-
-                            message is a human readable message indicating details about the transition.
-                            This may be an empty string.
-                          maxLength: 32768
-                          type: string
-                        observedGeneration:
-                          description: |-
-                            observedGeneration represents the .metadata.generation that the condition was set based upon.
-                            For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
-                            with respect to the current state of the instance.
-                          format: int64
-                          minimum: 0
-                          type: integer
-                        reason:
-                          description: |-
-                            reason contains a programmatic identifier indicating the reason for the condition's last transition.
-                            Producers of specific condition types may define expected values and meanings for this field,
-                            and whether the values are considered a guaranteed API.
-                            The value should be a CamelCase string.
-                            This field may not be empty.
-                          maxLength: 1024
-                          minLength: 1
-                          pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
-                          type: string
-                        status:
-                          description: status of the condition, one of True, False,
-                            Unknown.
-                          enum:
-                          - "True"
-                          - "False"
-                          - Unknown
-                          type: string
-                        type:
-                          description: type of condition in CamelCase or in foo.example.com/CamelCase.
-                          maxLength: 316
-                          pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-                          type: string
-                      required:
-                      - lastTransitionTime
-                      - message
-                      - reason
-                      - status
-                      - type
-                      type: object
-                    maxItems: 32
-                    type: array
-                    x-kubernetes-list-map-keys:
-                    - type
-                    x-kubernetes-list-type: map
-                  readyReplicas:
-                    description: readyReplicas is the number of ready replicas for
-                      this MachineSet. A machine is considered ready when Machine's
-                      Ready condition is true.
-                    format: int32
-                    type: integer
-                  upToDateReplicas:
-                    description: upToDateReplicas is the number of up-to-date replicas
-                      for this MachineSet. A machine is considered up-to-date when
-                      Machine's UpToDate condition is true.
-                    format: int32
-                    type: integer
-                type: object
-            type: object
-        type: object
-    served: true
-    storage: true
-    subresources:
-      scale:
-        labelSelectorPath: .status.selector
-        specReplicasPath: .spec.replicas
-        statusReplicasPath: .status.replicas
-      status: {}
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: null
-  storedVersions: null
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: cluster-api
-    clusterctl.cluster.x-k8s.io: ""
-  name: capi-manager
-  namespace: capi-system
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: Role
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: cluster-api
-    clusterctl.cluster.x-k8s.io: ""
-  name: capi-leader-election-role
-  namespace: capi-system
-rules:
-- apiGroups:
-  - ""
-  resources:
-  - events
-  verbs:
-  - create
-- apiGroups:
-  - coordination.k8s.io
-  resources:
-  - leases
-  verbs:
-  - get
-  - list
-  - watch
-  - create
-  - update
-  - patch
-  - delete
----
-aggregationRule:
-  clusterRoleSelectors:
-  - matchLabels:
-      cluster.x-k8s.io/aggregate-to-manager: "true"
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: cluster-api
-    clusterctl.cluster.x-k8s.io: ""
-  name: capi-aggregated-manager-role
-rules: []
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
-  labels:
-    cluster.x-k8s.io/aggregate-to-manager: "true"
-    cluster.x-k8s.io/provider: cluster-api
-    clusterctl.cluster.x-k8s.io: ""
-  name: capi-manager-role
-rules:
-- apiGroups:
-  - ""
-  resources:
-  - namespaces
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - addons.cluster.x-k8s.io
-  resources:
-  - clusterresourcesets/finalizers
-  - clusterresourcesets/status
-  verbs:
-  - get
-  - patch
-  - update
-- apiGroups:
-  - addons.cluster.x-k8s.io
-  - bootstrap.cluster.x-k8s.io
-  - controlplane.cluster.x-k8s.io
-  - infrastructure.cluster.x-k8s.io
-  resources:
-  - '*'
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - apiextensions.k8s.io
-  resources:
-  - customresourcedefinitions
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - authentication.k8s.io
-  resources:
-  - tokenreviews
-  verbs:
-  - create
-- apiGroups:
-  - authorization.k8s.io
-  resources:
-  - subjectaccessreviews
-  verbs:
-  - create
-- apiGroups:
-  - cluster.x-k8s.io
-  resources:
-  - clusterclasses
-  - clusterclasses/status
-  - clusters
-  - clusters/finalizers
-  - clusters/status
-  - machinehealthchecks/finalizers
-  - machinehealthchecks/status
-  verbs:
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - cluster.x-k8s.io
-  resources:
-  - machinedeployments
-  - machinedeployments/finalizers
-  - machinedeployments/status
-  - machinehealthchecks
-  - machinepools
-  - machinepools/finalizers
-  - machinepools/status
-  - machines
-  - machines/finalizers
-  - machines/status
-  - machinesets
-  - machinesets/finalizers
-  - machinesets/status
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - cluster.x-k8s.io
-  resources:
-  - machinedrainrules
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - ""
-  resources:
-  - configmaps
-  verbs:
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - ""
-  resources:
-  - events
-  verbs:
-  - create
-  - patch
-- apiGroups:
-  - ""
-  resources:
-  - secrets
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - ipam.cluster.x-k8s.io
-  resources:
-  - ipaddressclaims
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - runtime.cluster.x-k8s.io
-  resources:
-  - extensionconfigs
-  - extensionconfigs/status
-  verbs:
-  - get
-  - list
-  - patch
-  - update
-  - watch
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: RoleBinding
-metadata:
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: cluster-api
-    clusterctl.cluster.x-k8s.io: ""
-  name: capi-leader-election-rolebinding
-  namespace: capi-system
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: Role
-  name: capi-leader-election-role
-subjects:
-- kind: ServiceAccount
-  name: capi-manager
-  namespace: capi-system
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: cluster-api
-    clusterctl.cluster.x-k8s.io: ""
-  name: capi-manager-rolebinding
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: ClusterRole
-  name: capi-aggregated-manager-role
-subjects:
-- kind: ServiceAccount
-  name: capi-manager
-  namespace: capi-system
----
-apiVersion: v1
-kind: Service
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: cluster-api
-    clusterctl.cluster.x-k8s.io: ""
-  name: capi-webhook-service
-  namespace: capi-system
-spec:
-  ports:
-  - port: 443
-    targetPort: webhook-server
-  selector:
-    cluster.x-k8s.io/provider: cluster-api
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: cluster-api
-    clusterctl.cluster.x-k8s.io: ""
-    control-plane: controller-manager
-  name: capi-controller-manager
-  namespace: capi-system
-spec:
-  replicas: 1
-  selector:
-    matchLabels:
-      cluster.x-k8s.io/provider: cluster-api
-      control-plane: controller-manager
-  strategy: {}
-  template:
-    metadata:
-      creationTimestamp: null
-      labels:
-        cluster.x-k8s.io/provider: cluster-api
-        control-plane: controller-manager
-    spec:
-      containers:
-      - args:
-        - --leader-elect
-        - --diagnostics-address=:8443
-        - --insecure-diagnostics=false
-        - --use-deprecated-infra-machine-naming=false
-        - --feature-gates=MachinePool=true,ClusterResourceSet=true,ClusterTopology=false,RuntimeSDK=false,MachineSetPreflightChecks=true,MachineWaitForVolumeDetachConsiderVolumeAttachments=true
-        command:
-        - /manager
-        env:
-        - name: POD_NAMESPACE
-          valueFrom:
-            fieldRef:
-              fieldPath: metadata.namespace
-        - name: POD_NAME
-          valueFrom:
-            fieldRef:
-              fieldPath: metadata.name
-        - name: POD_UID
-          valueFrom:
-            fieldRef:
-              fieldPath: metadata.uid
-        image: registry.k8s.io/cluster-api/cluster-api-controller:v1.9.5
-        imagePullPolicy: IfNotPresent
-        livenessProbe:
-          httpGet:
-            path: /healthz
-            port: healthz
-        name: manager
-        ports:
-        - containerPort: 9443
-          name: webhook-server
-          protocol: TCP
-        - containerPort: 9440
-          name: healthz
-          protocol: TCP
-        - containerPort: 8443
-          name: metrics
-          protocol: TCP
-        readinessProbe:
-          httpGet:
-            path: /readyz
-            port: healthz
-        resources: {}
-        securityContext:
-          allowPrivilegeEscalation: false
-          capabilities:
-            drop:
-            - ALL
-          privileged: false
-          runAsGroup: 65532
-          runAsUser: 65532
-        terminationMessagePolicy: FallbackToLogsOnError
-        volumeMounts:
-        - mountPath: /tmp/k8s-webhook-server/serving-certs
-          name: cert
-          readOnly: true
-      securityContext:
-        runAsNonRoot: true
-        seccompProfile:
-          type: RuntimeDefault
-      serviceAccountName: capi-manager
-      terminationGracePeriodSeconds: 10
-      tolerations:
-      - effect: NoSchedule
-        key: node-role.kubernetes.io/master
-      - effect: NoSchedule
-        key: node-role.kubernetes.io/control-plane
-      volumes:
-      - name: cert
-        secret:
-          secretName: capi-webhook-service-cert
-status: {}
----
-apiVersion: admissionregistration.k8s.io/v1
-kind: MutatingWebhookConfiguration
-metadata:
-  annotations:
-    cert-manager.io/inject-ca-from: capi-system/capi-serving-cert
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: cluster-api
-    clusterctl.cluster.x-k8s.io: ""
-  name: capi-mutating-webhook-configuration
-webhooks:
-- admissionReviewVersions:
-  - v1
-  - v1beta1
-  clientConfig:
-    service:
-      name: capi-webhook-service
-      namespace: capi-system
-      path: /mutate-cluster-x-k8s-io-v1beta1-cluster
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: default.cluster.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - cluster.x-k8s.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - clusters
-  sideEffects: None
-- admissionReviewVersions:
-  - v1
-  - v1beta1
-  clientConfig:
-    service:
-      name: capi-webhook-service
-      namespace: capi-system
-      path: /mutate-cluster-x-k8s-io-v1beta1-clusterclass
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: default.clusterclass.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - cluster.x-k8s.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - clusterclasses
-  sideEffects: None
-- admissionReviewVersions:
-  - v1
-  - v1beta1
-  clientConfig:
-    service:
-      name: capi-webhook-service
-      namespace: capi-system
-      path: /mutate-cluster-x-k8s-io-v1beta1-machine
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: default.machine.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - cluster.x-k8s.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - machines
-  sideEffects: None
-- admissionReviewVersions:
-  - v1
-  - v1beta1
-  clientConfig:
-    service:
-      name: capi-webhook-service
-      namespace: capi-system
-      path: /mutate-cluster-x-k8s-io-v1beta1-machinedeployment
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: default.machinedeployment.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - cluster.x-k8s.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - machinedeployments
-  sideEffects: None
-- admissionReviewVersions:
-  - v1
-  - v1beta1
-  clientConfig:
-    service:
-      name: capi-webhook-service
-      namespace: capi-system
-      path: /mutate-cluster-x-k8s-io-v1beta1-machinehealthcheck
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: default.machinehealthcheck.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - cluster.x-k8s.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - machinehealthchecks
-  sideEffects: None
-- admissionReviewVersions:
-  - v1
-  - v1beta1
-  clientConfig:
-    service:
-      name: capi-webhook-service
-      namespace: capi-system
-      path: /mutate-cluster-x-k8s-io-v1beta1-machineset
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: default.machineset.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - cluster.x-k8s.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - machinesets
-  sideEffects: None
-- admissionReviewVersions:
-  - v1
-  - v1beta1
-  clientConfig:
-    service:
-      name: capi-webhook-service
-      namespace: capi-system
-      path: /mutate-runtime-cluster-x-k8s-io-v1alpha1-extensionconfig
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: default.extensionconfig.runtime.addons.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - runtime.cluster.x-k8s.io
-    apiVersions:
-    - v1alpha1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - extensionconfigs
-  sideEffects: None
-- admissionReviewVersions:
-  - v1
-  - v1beta1
-  clientConfig:
-    service:
-      name: capi-webhook-service
-      namespace: capi-system
-      path: /mutate-cluster-x-k8s-io-v1beta1-machinepool
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: default.machinepool.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - cluster.x-k8s.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - machinepools
-  sideEffects: None
-- admissionReviewVersions:
-  - v1
-  - v1beta1
-  clientConfig:
-    service:
-      name: capi-webhook-service
-      namespace: capi-system
-      path: /mutate-addons-cluster-x-k8s-io-v1beta1-clusterresourceset
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: default.clusterresourceset.addons.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - addons.cluster.x-k8s.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - clusterresourcesets
-  sideEffects: None
----
-apiVersion: admissionregistration.k8s.io/v1
-kind: ValidatingWebhookConfiguration
-metadata:
-  annotations:
-    cert-manager.io/inject-ca-from: capi-system/capi-serving-cert
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: cluster-api
-    clusterctl.cluster.x-k8s.io: ""
-  name: capi-validating-webhook-configuration
-webhooks:
-- admissionReviewVersions:
-  - v1
-  - v1beta1
-  clientConfig:
-    service:
-      name: capi-webhook-service
-      namespace: capi-system
-      path: /validate-cluster-x-k8s-io-v1beta1-cluster
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: validation.cluster.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - cluster.x-k8s.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    - DELETE
-    resources:
-    - clusters
-  sideEffects: None
-- admissionReviewVersions:
-  - v1
-  - v1beta1
-  clientConfig:
-    service:
-      name: capi-webhook-service
-      namespace: capi-system
-      path: /validate-cluster-x-k8s-io-v1beta1-clusterclass
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: validation.clusterclass.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - cluster.x-k8s.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    - DELETE
-    resources:
-    - clusterclasses
-  sideEffects: None
-- admissionReviewVersions:
-  - v1
-  - v1beta1
-  clientConfig:
-    service:
-      name: capi-webhook-service
-      namespace: capi-system
-      path: /validate-cluster-x-k8s-io-v1beta1-machine
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: validation.machine.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - cluster.x-k8s.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - machines
-  sideEffects: None
-- admissionReviewVersions:
-  - v1
-  - v1beta1
-  clientConfig:
-    service:
-      name: capi-webhook-service
-      namespace: capi-system
-      path: /validate-cluster-x-k8s-io-v1beta1-machinedeployment
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: validation.machinedeployment.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - cluster.x-k8s.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - machinedeployments
-  sideEffects: None
-- admissionReviewVersions:
-  - v1
-  - v1beta1
-  clientConfig:
-    service:
-      name: capi-webhook-service
-      namespace: capi-system
-      path: /validate-cluster-x-k8s-io-v1beta1-machinedrainrule
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: validation.machinedrainrule.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - cluster.x-k8s.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - machinedrainrules
-  sideEffects: None
-- admissionReviewVersions:
-  - v1
-  - v1beta1
-  clientConfig:
-    service:
-      name: capi-webhook-service
-      namespace: capi-system
-      path: /validate-cluster-x-k8s-io-v1beta1-machinehealthcheck
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: validation.machinehealthcheck.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - cluster.x-k8s.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - machinehealthchecks
-  sideEffects: None
-- admissionReviewVersions:
-  - v1
-  - v1beta1
-  clientConfig:
-    service:
-      name: capi-webhook-service
-      namespace: capi-system
-      path: /validate-cluster-x-k8s-io-v1beta1-machineset
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: validation.machineset.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - cluster.x-k8s.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - machinesets
-  sideEffects: None
-- admissionReviewVersions:
-  - v1
-  - v1beta1
-  clientConfig:
-    service:
-      name: capi-webhook-service
-      namespace: capi-system
-      path: /validate-runtime-cluster-x-k8s-io-v1alpha1-extensionconfig
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: validation.extensionconfig.runtime.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - runtime.cluster.x-k8s.io
-    apiVersions:
-    - v1alpha1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - extensionconfigs
-  sideEffects: None
-- admissionReviewVersions:
-  - v1
-  - v1beta1
-  clientConfig:
-    service:
-      name: capi-webhook-service
-      namespace: capi-system
-      path: /validate-cluster-x-k8s-io-v1beta1-machinepool
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: validation.machinepool.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - cluster.x-k8s.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - machinepools
-  sideEffects: None
-- admissionReviewVersions:
-  - v1
-  - v1beta1
-  clientConfig:
-    service:
-      name: capi-webhook-service
-      namespace: capi-system
-      path: /validate-addons-cluster-x-k8s-io-v1beta1-clusterresourceset
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: validation.clusterresourceset.addons.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - addons.cluster.x-k8s.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - clusterresourcesets
-  sideEffects: None
-- admissionReviewVersions:
-  - v1
-  - v1beta1
-  clientConfig:
-    service:
-      name: capi-webhook-service
-      namespace: capi-system
-      path: /validate-addons-cluster-x-k8s-io-v1beta1-clusterresourcesetbinding
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: validation.clusterresourcesetbinding.addons.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - addons.cluster.x-k8s.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - clusterresourcesetbindings
-  sideEffects: None
-- admissionReviewVersions:
-  - v1
-  - v1beta1
-  clientConfig:
-    service:
-      name: capi-webhook-service
-      namespace: capi-system
-      path: /validate-ipam-cluster-x-k8s-io-v1beta1-ipaddress
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: validation.ipaddress.ipam.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - ipam.cluster.x-k8s.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    - DELETE
-    resources:
-    - ipaddresses
-  sideEffects: None
-- admissionReviewVersions:
-  - v1
-  - v1beta1
-  clientConfig:
-    service:
-      name: capi-webhook-service
-      namespace: capi-system
-      path: /validate-ipam-cluster-x-k8s-io-v1beta1-ipaddressclaim
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: validation.ipaddressclaim.ipam.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - ipam.cluster.x-k8s.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    - DELETE
-    resources:
-    - ipaddressclaims
-  sideEffects: None
diff --git a/installers/flux/templates/sw-catalogs/infra-controllers/capi/manifests/providers/bootstrap/kubeadm/bootstrap.yaml b/installers/flux/templates/sw-catalogs/infra-controllers/capi/manifests/providers/bootstrap/kubeadm/bootstrap.yaml
deleted file mode 100644 (file)
index 65bf20b..0000000
+++ /dev/null
@@ -1,7998 +0,0 @@
-apiVersion: v1
-kind: Namespace
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: bootstrap-kubeadm
-    clusterctl.cluster.x-k8s.io: ""
-    control-plane: controller-manager
-  name: capi-kubeadm-bootstrap-system
----
-apiVersion: cert-manager.io/v1
-kind: Issuer
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: bootstrap-kubeadm
-    clusterctl.cluster.x-k8s.io: ""
-  name: capi-kubeadm-bootstrap-selfsigned-issuer
-  namespace: capi-kubeadm-bootstrap-system
-spec:
-  selfSigned: {}
----
-apiVersion: cert-manager.io/v1
-kind: Certificate
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: bootstrap-kubeadm
-    clusterctl.cluster.x-k8s.io: ""
-  name: capi-kubeadm-bootstrap-serving-cert
-  namespace: capi-kubeadm-bootstrap-system
-spec:
-  dnsNames:
-  - capi-kubeadm-bootstrap-webhook-service.capi-kubeadm-bootstrap-system.svc
-  - capi-kubeadm-bootstrap-webhook-service.capi-kubeadm-bootstrap-system.svc.cluster.local
-  issuerRef:
-    kind: Issuer
-    name: capi-kubeadm-bootstrap-selfsigned-issuer
-  secretName: capi-kubeadm-bootstrap-webhook-service-cert
-  subject:
-    organizations:
-    - k8s-sig-cluster-lifecycle
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  annotations:
-    cert-manager.io/inject-ca-from: capi-kubeadm-bootstrap-system/capi-kubeadm-bootstrap-serving-cert
-    controller-gen.kubebuilder.io/version: v0.16.1
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: bootstrap-kubeadm
-    cluster.x-k8s.io/v1beta1: v1beta1
-    clusterctl.cluster.x-k8s.io: ""
-  name: kubeadmconfigs.bootstrap.cluster.x-k8s.io
-spec:
-  conversion:
-    strategy: Webhook
-    webhook:
-      clientConfig:
-        service:
-          name: capi-kubeadm-bootstrap-webhook-service
-          namespace: capi-kubeadm-bootstrap-system
-          path: /convert
-      conversionReviewVersions:
-      - v1
-      - v1beta1
-  group: bootstrap.cluster.x-k8s.io
-  names:
-    categories:
-    - cluster-api
-    kind: KubeadmConfig
-    listKind: KubeadmConfigList
-    plural: kubeadmconfigs
-    singular: kubeadmconfig
-  scope: Namespaced
-  versions:
-  - deprecated: true
-    name: v1alpha3
-    schema:
-      openAPIV3Schema:
-        description: |-
-          KubeadmConfig is the Schema for the kubeadmconfigs API.
-
-          Deprecated: This type will be removed in one of the next releases.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: |-
-              KubeadmConfigSpec defines the desired state of KubeadmConfig.
-              Either ClusterConfiguration and InitConfiguration should be defined or the JoinConfiguration should be defined.
-            properties:
-              clusterConfiguration:
-                description: clusterConfiguration along with InitConfiguration are
-                  the configurations necessary for the init command
-                properties:
-                  apiServer:
-                    description: APIServer contains extra settings for the API server
-                      control plane component
-                    properties:
-                      certSANs:
-                        description: CertSANs sets extra Subject Alternative Names
-                          for the API Server signing cert.
-                        items:
-                          type: string
-                        type: array
-                      extraArgs:
-                        additionalProperties:
-                          type: string
-                        description: ExtraArgs is an extra set of flags to pass to
-                          the control plane component.
-                        type: object
-                      extraVolumes:
-                        description: ExtraVolumes is an extra set of host volumes,
-                          mounted to the control plane component.
-                        items:
-                          description: |-
-                            HostPathMount contains elements describing volumes that are mounted from the
-                            host.
-                          properties:
-                            hostPath:
-                              description: |-
-                                HostPath is the path in the host that will be mounted inside
-                                the pod.
-                              type: string
-                            mountPath:
-                              description: MountPath is the path inside the pod where
-                                hostPath will be mounted.
-                              type: string
-                            name:
-                              description: Name of the volume inside the pod template.
-                              type: string
-                            pathType:
-                              description: PathType is the type of the HostPath.
-                              type: string
-                            readOnly:
-                              description: ReadOnly controls write access to the volume
-                              type: boolean
-                          required:
-                          - hostPath
-                          - mountPath
-                          - name
-                          type: object
-                        type: array
-                      timeoutForControlPlane:
-                        description: TimeoutForControlPlane controls the timeout that
-                          we use for API server to appear
-                        type: string
-                    type: object
-                  apiVersion:
-                    description: |-
-                      APIVersion defines the versioned schema of this representation of an object.
-                      Servers should convert recognized schemas to the latest internal value, and
-                      may reject unrecognized values.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-                    type: string
-                  certificatesDir:
-                    description: |-
-                      CertificatesDir specifies where to store or look for all required certificates.
-                      NB: if not provided, this will default to `/etc/kubernetes/pki`
-                    type: string
-                  clusterName:
-                    description: The cluster name
-                    type: string
-                  controlPlaneEndpoint:
-                    description: |-
-                      ControlPlaneEndpoint sets a stable IP address or DNS name for the control plane; it
-                      can be a valid IP address or a RFC-1123 DNS subdomain, both with optional TCP port.
-                      In case the ControlPlaneEndpoint is not specified, the AdvertiseAddress + BindPort
-                      are used; in case the ControlPlaneEndpoint is specified but without a TCP port,
-                      the BindPort is used.
-                      Possible usages are:
-                      e.g. In a cluster with more than one control plane instances, this field should be
-                      assigned the address of the external load balancer in front of the
-                      control plane instances.
-                      e.g.  in environments with enforced node recycling, the ControlPlaneEndpoint
-                      could be used for assigning a stable DNS to the control plane.
-                      NB: This value defaults to the first value in the Cluster object status.apiEndpoints array.
-                    type: string
-                  controllerManager:
-                    description: ControllerManager contains extra settings for the
-                      controller manager control plane component
-                    properties:
-                      extraArgs:
-                        additionalProperties:
-                          type: string
-                        description: ExtraArgs is an extra set of flags to pass to
-                          the control plane component.
-                        type: object
-                      extraVolumes:
-                        description: ExtraVolumes is an extra set of host volumes,
-                          mounted to the control plane component.
-                        items:
-                          description: |-
-                            HostPathMount contains elements describing volumes that are mounted from the
-                            host.
-                          properties:
-                            hostPath:
-                              description: |-
-                                HostPath is the path in the host that will be mounted inside
-                                the pod.
-                              type: string
-                            mountPath:
-                              description: MountPath is the path inside the pod where
-                                hostPath will be mounted.
-                              type: string
-                            name:
-                              description: Name of the volume inside the pod template.
-                              type: string
-                            pathType:
-                              description: PathType is the type of the HostPath.
-                              type: string
-                            readOnly:
-                              description: ReadOnly controls write access to the volume
-                              type: boolean
-                          required:
-                          - hostPath
-                          - mountPath
-                          - name
-                          type: object
-                        type: array
-                    type: object
-                  dns:
-                    description: DNS defines the options for the DNS add-on installed
-                      in the cluster.
-                    properties:
-                      imageRepository:
-                        description: |-
-                          ImageRepository sets the container registry to pull images from.
-                          if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
-                        type: string
-                      imageTag:
-                        description: |-
-                          ImageTag allows to specify a tag for the image.
-                          In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
-                        type: string
-                      type:
-                        description: Type defines the DNS add-on to be used
-                        type: string
-                    type: object
-                  etcd:
-                    description: |-
-                      Etcd holds configuration for etcd.
-                      NB: This value defaults to a Local (stacked) etcd
-                    properties:
-                      external:
-                        description: |-
-                          External describes how to connect to an external etcd cluster
-                          Local and External are mutually exclusive
-                        properties:
-                          caFile:
-                            description: |-
-                              CAFile is an SSL Certificate Authority file used to secure etcd communication.
-                              Required if using a TLS connection.
-                            type: string
-                          certFile:
-                            description: |-
-                              CertFile is an SSL certification file used to secure etcd communication.
-                              Required if using a TLS connection.
-                            type: string
-                          endpoints:
-                            description: Endpoints of etcd members. Required for ExternalEtcd.
-                            items:
-                              type: string
-                            type: array
-                          keyFile:
-                            description: |-
-                              KeyFile is an SSL key file used to secure etcd communication.
-                              Required if using a TLS connection.
-                            type: string
-                        required:
-                        - caFile
-                        - certFile
-                        - endpoints
-                        - keyFile
-                        type: object
-                      local:
-                        description: |-
-                          Local provides configuration knobs for configuring the local etcd instance
-                          Local and External are mutually exclusive
-                        properties:
-                          dataDir:
-                            description: |-
-                              DataDir is the directory etcd will place its data.
-                              Defaults to "/var/lib/etcd".
-                            type: string
-                          extraArgs:
-                            additionalProperties:
-                              type: string
-                            description: |-
-                              ExtraArgs are extra arguments provided to the etcd binary
-                              when run inside a static pod.
-                            type: object
-                          imageRepository:
-                            description: |-
-                              ImageRepository sets the container registry to pull images from.
-                              if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
-                            type: string
-                          imageTag:
-                            description: |-
-                              ImageTag allows to specify a tag for the image.
-                              In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
-                            type: string
-                          peerCertSANs:
-                            description: PeerCertSANs sets extra Subject Alternative
-                              Names for the etcd peer signing cert.
-                            items:
-                              type: string
-                            type: array
-                          serverCertSANs:
-                            description: ServerCertSANs sets extra Subject Alternative
-                              Names for the etcd server signing cert.
-                            items:
-                              type: string
-                            type: array
-                        type: object
-                    type: object
-                  featureGates:
-                    additionalProperties:
-                      type: boolean
-                    description: FeatureGates enabled by the user.
-                    type: object
-                  imageRepository:
-                    description: |-
-                      ImageRepository sets the container registry to pull images from.
-                      If empty, `k8s.gcr.io` will be used by default; in case of kubernetes version is a CI build (kubernetes version starts with `ci/` or `ci-cross/`)
-                      `gcr.io/k8s-staging-ci-images` will be used as a default for control plane components and for kube-proxy, while `k8s.gcr.io`
-                      will be used for all the other images.
-                    type: string
-                  kind:
-                    description: |-
-                      Kind is a string value representing the REST resource this object represents.
-                      Servers may infer this from the endpoint the client submits requests to.
-                      Cannot be updated.
-                      In CamelCase.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                    type: string
-                  kubernetesVersion:
-                    description: |-
-                      KubernetesVersion is the target version of the control plane.
-                      NB: This value defaults to the Machine object spec.version
-                    type: string
-                  networking:
-                    description: |-
-                      Networking holds configuration for the networking topology of the cluster.
-                      NB: This value defaults to the Cluster object spec.clusterNetwork.
-                    properties:
-                      dnsDomain:
-                        description: DNSDomain is the dns domain used by k8s services.
-                          Defaults to "cluster.local".
-                        type: string
-                      podSubnet:
-                        description: |-
-                          PodSubnet is the subnet used by pods.
-                          If unset, the API server will not allocate CIDR ranges for every node.
-                          Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.services.cidrBlocks if that is set
-                        type: string
-                      serviceSubnet:
-                        description: |-
-                          ServiceSubnet is the subnet used by k8s services.
-                          Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.pods.cidrBlocks, or
-                          to "10.96.0.0/12" if that's unset.
-                        type: string
-                    type: object
-                  scheduler:
-                    description: Scheduler contains extra settings for the scheduler
-                      control plane component
-                    properties:
-                      extraArgs:
-                        additionalProperties:
-                          type: string
-                        description: ExtraArgs is an extra set of flags to pass to
-                          the control plane component.
-                        type: object
-                      extraVolumes:
-                        description: ExtraVolumes is an extra set of host volumes,
-                          mounted to the control plane component.
-                        items:
-                          description: |-
-                            HostPathMount contains elements describing volumes that are mounted from the
-                            host.
-                          properties:
-                            hostPath:
-                              description: |-
-                                HostPath is the path in the host that will be mounted inside
-                                the pod.
-                              type: string
-                            mountPath:
-                              description: MountPath is the path inside the pod where
-                                hostPath will be mounted.
-                              type: string
-                            name:
-                              description: Name of the volume inside the pod template.
-                              type: string
-                            pathType:
-                              description: PathType is the type of the HostPath.
-                              type: string
-                            readOnly:
-                              description: ReadOnly controls write access to the volume
-                              type: boolean
-                          required:
-                          - hostPath
-                          - mountPath
-                          - name
-                          type: object
-                        type: array
-                    type: object
-                  useHyperKubeImage:
-                    description: UseHyperKubeImage controls if hyperkube should be
-                      used for Kubernetes components instead of their respective separate
-                      images
-                    type: boolean
-                type: object
-              diskSetup:
-                description: diskSetup specifies options for the creation of partition
-                  tables and file systems on devices.
-                properties:
-                  filesystems:
-                    description: filesystems specifies the list of file systems to
-                      setup.
-                    items:
-                      description: Filesystem defines the file systems to be created.
-                      properties:
-                        device:
-                          description: device specifies the device name
-                          type: string
-                        extraOpts:
-                          description: extraOpts defined extra options to add to the
-                            command for creating the file system.
-                          items:
-                            type: string
-                          type: array
-                        filesystem:
-                          description: filesystem specifies the file system type.
-                          type: string
-                        label:
-                          description: label specifies the file system label to be
-                            used. If set to None, no label is used.
-                          type: string
-                        overwrite:
-                          description: |-
-                            overwrite defines whether or not to overwrite any existing filesystem.
-                            If true, any pre-existing file system will be destroyed. Use with Caution.
-                          type: boolean
-                        partition:
-                          description: 'partition specifies the partition to use.
-                            The valid options are: "auto|any", "auto", "any", "none",
-                            and <NUM>, where NUM is the actual partition number.'
-                          type: string
-                        replaceFS:
-                          description: |-
-                            replaceFS is a special directive, used for Microsoft Azure that instructs cloud-init to replace a file system of <FS_TYPE>.
-                            NOTE: unless you define a label, this requires the use of the 'any' partition directive.
-                          type: string
-                      required:
-                      - device
-                      - filesystem
-                      - label
-                      type: object
-                    type: array
-                  partitions:
-                    description: partitions specifies the list of the partitions to
-                      setup.
-                    items:
-                      description: Partition defines how to create and layout a partition.
-                      properties:
-                        device:
-                          description: device is the name of the device.
-                          type: string
-                        layout:
-                          description: |-
-                            layout specifies the device layout.
-                            If it is true, a single partition will be created for the entire device.
-                            When layout is false, it means don't partition or ignore existing partitioning.
-                          type: boolean
-                        overwrite:
-                          description: |-
-                            overwrite describes whether to skip checks and create the partition if a partition or filesystem is found on the device.
-                            Use with caution. Default is 'false'.
-                          type: boolean
-                        tableType:
-                          description: |-
-                            tableType specifies the tupe of partition table. The following are supported:
-                            'mbr': default and setups a MS-DOS partition table
-                            'gpt': setups a GPT partition table
-                          type: string
-                      required:
-                      - device
-                      - layout
-                      type: object
-                    type: array
-                type: object
-              files:
-                description: files specifies extra files to be passed to user_data
-                  upon creation.
-                items:
-                  description: File defines the input for generating write_files in
-                    cloud-init.
-                  properties:
-                    content:
-                      description: content is the actual content of the file.
-                      type: string
-                    contentFrom:
-                      description: contentFrom is a referenced source of content to
-                        populate the file.
-                      properties:
-                        secret:
-                          description: secret represents a secret that should populate
-                            this file.
-                          properties:
-                            key:
-                              description: key is the key in the secret's data map
-                                for this value.
-                              type: string
-                            name:
-                              description: name of the secret in the KubeadmBootstrapConfig's
-                                namespace to use.
-                              type: string
-                          required:
-                          - key
-                          - name
-                          type: object
-                      required:
-                      - secret
-                      type: object
-                    encoding:
-                      description: encoding specifies the encoding of the file contents.
-                      enum:
-                      - base64
-                      - gzip
-                      - gzip+base64
-                      type: string
-                    owner:
-                      description: owner specifies the ownership of the file, e.g.
-                        "root:root".
-                      type: string
-                    path:
-                      description: path specifies the full path on disk where to store
-                        the file.
-                      type: string
-                    permissions:
-                      description: permissions specifies the permissions to assign
-                        to the file, e.g. "0640".
-                      type: string
-                  required:
-                  - path
-                  type: object
-                type: array
-              format:
-                description: format specifies the output format of the bootstrap data
-                enum:
-                - cloud-config
-                type: string
-              initConfiguration:
-                description: initConfiguration along with ClusterConfiguration are
-                  the configurations necessary for the init command
-                properties:
-                  apiVersion:
-                    description: |-
-                      APIVersion defines the versioned schema of this representation of an object.
-                      Servers should convert recognized schemas to the latest internal value, and
-                      may reject unrecognized values.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-                    type: string
-                  bootstrapTokens:
-                    description: |-
-                      BootstrapTokens is respected at `kubeadm init` time and describes a set of Bootstrap Tokens to create.
-                      This information IS NOT uploaded to the kubeadm cluster configmap, partly because of its sensitive nature
-                    items:
-                      description: BootstrapToken describes one bootstrap token, stored
-                        as a Secret in the cluster.
-                      properties:
-                        description:
-                          description: |-
-                            Description sets a human-friendly message why this token exists and what it's used
-                            for, so other administrators can know its purpose.
-                          type: string
-                        expires:
-                          description: |-
-                            Expires specifies the timestamp when this token expires. Defaults to being set
-                            dynamically at runtime based on the TTL. Expires and TTL are mutually exclusive.
-                          format: date-time
-                          type: string
-                        groups:
-                          description: |-
-                            Groups specifies the extra groups that this token will authenticate as when/if
-                            used for authentication
-                          items:
-                            type: string
-                          type: array
-                        token:
-                          description: |-
-                            Token is used for establishing bidirectional trust between nodes and control-planes.
-                            Used for joining nodes in the cluster.
-                          type: string
-                        ttl:
-                          description: |-
-                            TTL defines the time to live for this token. Defaults to 24h.
-                            Expires and TTL are mutually exclusive.
-                          type: string
-                        usages:
-                          description: |-
-                            Usages describes the ways in which this token can be used. Can by default be used
-                            for establishing bidirectional trust, but that can be changed here.
-                          items:
-                            type: string
-                          type: array
-                      required:
-                      - token
-                      type: object
-                    type: array
-                  kind:
-                    description: |-
-                      Kind is a string value representing the REST resource this object represents.
-                      Servers may infer this from the endpoint the client submits requests to.
-                      Cannot be updated.
-                      In CamelCase.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                    type: string
-                  localAPIEndpoint:
-                    description: |-
-                      LocalAPIEndpoint represents the endpoint of the API server instance that's deployed on this control plane node
-                      In HA setups, this differs from ClusterConfiguration.ControlPlaneEndpoint in the sense that ControlPlaneEndpoint
-                      is the global endpoint for the cluster, which then loadbalances the requests to each individual API server. This
-                      configuration object lets you customize what IP/DNS name and port the local API server advertises it's accessible
-                      on. By default, kubeadm tries to auto-detect the IP of the default interface and use that, but in case that process
-                      fails you may set the desired value here.
-                    properties:
-                      advertiseAddress:
-                        description: AdvertiseAddress sets the IP address for the
-                          API server to advertise.
-                        type: string
-                      bindPort:
-                        description: |-
-                          BindPort sets the secure port for the API Server to bind to.
-                          Defaults to 6443.
-                        format: int32
-                        type: integer
-                    required:
-                    - advertiseAddress
-                    - bindPort
-                    type: object
-                  nodeRegistration:
-                    description: |-
-                      NodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
-                      When used in the context of control plane nodes, NodeRegistration should remain consistent
-                      across both InitConfiguration and JoinConfiguration
-                    properties:
-                      criSocket:
-                        description: CRISocket is used to retrieve container runtime
-                          info. This information will be annotated to the Node API
-                          object, for later re-use
-                        type: string
-                      kubeletExtraArgs:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          KubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
-                          kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
-                          Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
-                        type: object
-                      name:
-                        description: |-
-                          Name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
-                          This field is also used in the CommonName field of the kubelet's client certificate to the API server.
-                          Defaults to the hostname of the node if not provided.
-                        type: string
-                      taints:
-                        description: |-
-                          Taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
-                          it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
-                          empty slice, i.e. `taints: {}` in the YAML file. This field is solely used for Node registration.
-                        items:
-                          description: |-
-                            The node this Taint is attached to has the "effect" on
-                            any pod that does not tolerate the Taint.
-                          properties:
-                            effect:
-                              description: |-
-                                Required. The effect of the taint on pods
-                                that do not tolerate the taint.
-                                Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
-                              type: string
-                            key:
-                              description: Required. The taint key to be applied to
-                                a node.
-                              type: string
-                            timeAdded:
-                              description: |-
-                                TimeAdded represents the time at which the taint was added.
-                                It is only written for NoExecute taints.
-                              format: date-time
-                              type: string
-                            value:
-                              description: The taint value corresponding to the taint
-                                key.
-                              type: string
-                          required:
-                          - effect
-                          - key
-                          type: object
-                        type: array
-                    type: object
-                type: object
-              joinConfiguration:
-                description: joinConfiguration is the kubeadm configuration for the
-                  join command
-                properties:
-                  apiVersion:
-                    description: |-
-                      APIVersion defines the versioned schema of this representation of an object.
-                      Servers should convert recognized schemas to the latest internal value, and
-                      may reject unrecognized values.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-                    type: string
-                  caCertPath:
-                    description: |-
-                      CACertPath is the path to the SSL certificate authority used to
-                      secure comunications between node and control-plane.
-                      Defaults to "/etc/kubernetes/pki/ca.crt".
-                    type: string
-                  controlPlane:
-                    description: |-
-                      ControlPlane defines the additional control plane instance to be deployed on the joining node.
-                      If nil, no additional control plane instance will be deployed.
-                    properties:
-                      localAPIEndpoint:
-                        description: LocalAPIEndpoint represents the endpoint of the
-                          API server instance to be deployed on this node.
-                        properties:
-                          advertiseAddress:
-                            description: AdvertiseAddress sets the IP address for
-                              the API server to advertise.
-                            type: string
-                          bindPort:
-                            description: |-
-                              BindPort sets the secure port for the API Server to bind to.
-                              Defaults to 6443.
-                            format: int32
-                            type: integer
-                        required:
-                        - advertiseAddress
-                        - bindPort
-                        type: object
-                    type: object
-                  discovery:
-                    description: Discovery specifies the options for the kubelet to
-                      use during the TLS Bootstrap process
-                    properties:
-                      bootstrapToken:
-                        description: |-
-                          BootstrapToken is used to set the options for bootstrap token based discovery
-                          BootstrapToken and File are mutually exclusive
-                        properties:
-                          apiServerEndpoint:
-                            description: APIServerEndpoint is an IP or domain name
-                              to the API server from which info will be fetched.
-                            type: string
-                          caCertHashes:
-                            description: |-
-                              CACertHashes specifies a set of public key pins to verify
-                              when token-based discovery is used. The root CA found during discovery
-                              must match one of these values. Specifying an empty set disables root CA
-                              pinning, which can be unsafe. Each hash is specified as "<type>:<value>",
-                              where the only currently supported type is "sha256". This is a hex-encoded
-                              SHA-256 hash of the Subject Public Key Info (SPKI) object in DER-encoded
-                              ASN.1. These hashes can be calculated using, for example, OpenSSL:
-                              openssl x509 -pubkey -in ca.crt openssl rsa -pubin -outform der 2>&/dev/null | openssl dgst -sha256 -hex
-                            items:
-                              type: string
-                            type: array
-                          token:
-                            description: |-
-                              Token is a token used to validate cluster information
-                              fetched from the control-plane.
-                            type: string
-                          unsafeSkipCAVerification:
-                            description: |-
-                              UnsafeSkipCAVerification allows token-based discovery
-                              without CA verification via CACertHashes. This can weaken
-                              the security of kubeadm since other nodes can impersonate the control-plane.
-                            type: boolean
-                        required:
-                        - token
-                        - unsafeSkipCAVerification
-                        type: object
-                      file:
-                        description: |-
-                          File is used to specify a file or URL to a kubeconfig file from which to load cluster information
-                          BootstrapToken and File are mutually exclusive
-                        properties:
-                          kubeConfigPath:
-                            description: KubeConfigPath is used to specify the actual
-                              file path or URL to the kubeconfig file from which to
-                              load cluster information
-                            type: string
-                        required:
-                        - kubeConfigPath
-                        type: object
-                      timeout:
-                        description: Timeout modifies the discovery timeout
-                        type: string
-                      tlsBootstrapToken:
-                        description: |-
-                          TLSBootstrapToken is a token used for TLS bootstrapping.
-                          If .BootstrapToken is set, this field is defaulted to .BootstrapToken.Token, but can be overridden.
-                          If .File is set, this field **must be set** in case the KubeConfigFile does not contain any other authentication information
-                        type: string
-                    type: object
-                  kind:
-                    description: |-
-                      Kind is a string value representing the REST resource this object represents.
-                      Servers may infer this from the endpoint the client submits requests to.
-                      Cannot be updated.
-                      In CamelCase.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                    type: string
-                  nodeRegistration:
-                    description: |-
-                      NodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
-                      When used in the context of control plane nodes, NodeRegistration should remain consistent
-                      across both InitConfiguration and JoinConfiguration
-                    properties:
-                      criSocket:
-                        description: CRISocket is used to retrieve container runtime
-                          info. This information will be annotated to the Node API
-                          object, for later re-use
-                        type: string
-                      kubeletExtraArgs:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          KubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
-                          kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
-                          Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
-                        type: object
-                      name:
-                        description: |-
-                          Name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
-                          This field is also used in the CommonName field of the kubelet's client certificate to the API server.
-                          Defaults to the hostname of the node if not provided.
-                        type: string
-                      taints:
-                        description: |-
-                          Taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
-                          it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
-                          empty slice, i.e. `taints: {}` in the YAML file. This field is solely used for Node registration.
-                        items:
-                          description: |-
-                            The node this Taint is attached to has the "effect" on
-                            any pod that does not tolerate the Taint.
-                          properties:
-                            effect:
-                              description: |-
-                                Required. The effect of the taint on pods
-                                that do not tolerate the taint.
-                                Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
-                              type: string
-                            key:
-                              description: Required. The taint key to be applied to
-                                a node.
-                              type: string
-                            timeAdded:
-                              description: |-
-                                TimeAdded represents the time at which the taint was added.
-                                It is only written for NoExecute taints.
-                              format: date-time
-                              type: string
-                            value:
-                              description: The taint value corresponding to the taint
-                                key.
-                              type: string
-                          required:
-                          - effect
-                          - key
-                          type: object
-                        type: array
-                    type: object
-                type: object
-              mounts:
-                description: mounts specifies a list of mount points to be setup.
-                items:
-                  description: MountPoints defines input for generated mounts in cloud-init.
-                  items:
-                    type: string
-                  type: array
-                type: array
-              ntp:
-                description: ntp specifies NTP configuration
-                properties:
-                  enabled:
-                    description: enabled specifies whether NTP should be enabled
-                    type: boolean
-                  servers:
-                    description: servers specifies which NTP servers to use
-                    items:
-                      type: string
-                    type: array
-                type: object
-              postKubeadmCommands:
-                description: postKubeadmCommands specifies extra commands to run after
-                  kubeadm runs
-                items:
-                  type: string
-                type: array
-              preKubeadmCommands:
-                description: preKubeadmCommands specifies extra commands to run before
-                  kubeadm runs
-                items:
-                  type: string
-                type: array
-              useExperimentalRetryJoin:
-                description: |-
-                  useExperimentalRetryJoin replaces a basic kubeadm command with a shell
-                  script with retries for joins.
-
-                  This is meant to be an experimental temporary workaround on some environments
-                  where joins fail due to timing (and other issues). The long term goal is to add retries to
-                  kubeadm proper and use that functionality.
-
-                  This will add about 40KB to userdata
-
-                  For more information, refer to https://github.com/kubernetes-sigs/cluster-api/pull/2763#discussion_r397306055.
-                type: boolean
-              users:
-                description: users specifies extra users to add
-                items:
-                  description: User defines the input for a generated user in cloud-init.
-                  properties:
-                    gecos:
-                      description: gecos specifies the gecos to use for the user
-                      type: string
-                    groups:
-                      description: groups specifies the additional groups for the
-                        user
-                      type: string
-                    homeDir:
-                      description: homeDir specifies the home directory to use for
-                        the user
-                      type: string
-                    inactive:
-                      description: inactive specifies whether to mark the user as
-                        inactive
-                      type: boolean
-                    lockPassword:
-                      description: lockPassword specifies if password login should
-                        be disabled
-                      type: boolean
-                    name:
-                      description: name specifies the user name
-                      type: string
-                    passwd:
-                      description: passwd specifies a hashed password for the user
-                      type: string
-                    primaryGroup:
-                      description: primaryGroup specifies the primary group for the
-                        user
-                      type: string
-                    shell:
-                      description: shell specifies the user's shell
-                      type: string
-                    sshAuthorizedKeys:
-                      description: sshAuthorizedKeys specifies a list of ssh authorized
-                        keys for the user
-                      items:
-                        type: string
-                      type: array
-                    sudo:
-                      description: sudo specifies a sudo role for the user
-                      type: string
-                  required:
-                  - name
-                  type: object
-                type: array
-              verbosity:
-                description: |-
-                  verbosity is the number for the kubeadm log level verbosity.
-                  It overrides the `--v` flag in kubeadm commands.
-                format: int32
-                type: integer
-            type: object
-          status:
-            description: KubeadmConfigStatus defines the observed state of KubeadmConfig.
-            properties:
-              bootstrapData:
-                description: |-
-                  bootstrapData will be a cloud-init script for now.
-
-                  Deprecated: Switch to DataSecretName.
-                format: byte
-                type: string
-              conditions:
-                description: conditions defines current service state of the KubeadmConfig.
-                items:
-                  description: Condition defines an observation of a Cluster API resource
-                    operational state.
-                  properties:
-                    lastTransitionTime:
-                      description: |-
-                        Last time the condition transitioned from one status to another.
-                        This should be when the underlying condition changed. If that is not known, then using the time when
-                        the API field changed is acceptable.
-                      format: date-time
-                      type: string
-                    message:
-                      description: |-
-                        A human readable message indicating details about the transition.
-                        This field may be empty.
-                      type: string
-                    reason:
-                      description: |-
-                        The reason for the condition's last transition in CamelCase.
-                        The specific API may choose whether or not this field is considered a guaranteed API.
-                        This field may not be empty.
-                      type: string
-                    severity:
-                      description: |-
-                        severity provides an explicit classification of Reason code, so the users or machines can immediately
-                        understand the current situation and act accordingly.
-                        The Severity field MUST be set only when Status=False.
-                      type: string
-                    status:
-                      description: status of the condition, one of True, False, Unknown.
-                      type: string
-                    type:
-                      description: |-
-                        type of condition in CamelCase or in foo.example.com/CamelCase.
-                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
-                        can be useful (see .node.status.conditions), the ability to deconflict is important.
-                      type: string
-                  required:
-                  - status
-                  - type
-                  type: object
-                type: array
-              dataSecretName:
-                description: dataSecretName is the name of the secret that stores
-                  the bootstrap data script.
-                type: string
-              failureMessage:
-                description: failureMessage will be set on non-retryable errors
-                type: string
-              failureReason:
-                description: failureReason will be set on non-retryable errors
-                type: string
-              observedGeneration:
-                description: observedGeneration is the latest generation observed
-                  by the controller.
-                format: int64
-                type: integer
-              ready:
-                description: ready indicates the BootstrapData field is ready to be
-                  consumed
-                type: boolean
-            type: object
-        type: object
-    served: false
-    storage: false
-    subresources:
-      status: {}
-  - additionalPrinterColumns:
-    - description: Time duration since creation of KubeadmConfig
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    deprecated: true
-    name: v1alpha4
-    schema:
-      openAPIV3Schema:
-        description: |-
-          KubeadmConfig is the Schema for the kubeadmconfigs API.
-
-          Deprecated: This type will be removed in one of the next releases.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: |-
-              KubeadmConfigSpec defines the desired state of KubeadmConfig.
-              Either ClusterConfiguration and InitConfiguration should be defined or the JoinConfiguration should be defined.
-            properties:
-              clusterConfiguration:
-                description: clusterConfiguration along with InitConfiguration are
-                  the configurations necessary for the init command
-                properties:
-                  apiServer:
-                    description: apiServer contains extra settings for the API server
-                      control plane component
-                    properties:
-                      certSANs:
-                        description: certSANs sets extra Subject Alternative Names
-                          for the API Server signing cert.
-                        items:
-                          type: string
-                        type: array
-                      extraArgs:
-                        additionalProperties:
-                          type: string
-                        description: extraArgs is an extra set of flags to pass to
-                          the control plane component.
-                        type: object
-                      extraVolumes:
-                        description: extraVolumes is an extra set of host volumes,
-                          mounted to the control plane component.
-                        items:
-                          description: |-
-                            HostPathMount contains elements describing volumes that are mounted from the
-                            host.
-                          properties:
-                            hostPath:
-                              description: |-
-                                hostPath is the path in the host that will be mounted inside
-                                the pod.
-                              type: string
-                            mountPath:
-                              description: mountPath is the path inside the pod where
-                                hostPath will be mounted.
-                              type: string
-                            name:
-                              description: name of the volume inside the pod template.
-                              type: string
-                            pathType:
-                              description: pathType is the type of the HostPath.
-                              type: string
-                            readOnly:
-                              description: readOnly controls write access to the volume
-                              type: boolean
-                          required:
-                          - hostPath
-                          - mountPath
-                          - name
-                          type: object
-                        type: array
-                      timeoutForControlPlane:
-                        description: timeoutForControlPlane controls the timeout that
-                          we use for API server to appear
-                        type: string
-                    type: object
-                  apiVersion:
-                    description: |-
-                      APIVersion defines the versioned schema of this representation of an object.
-                      Servers should convert recognized schemas to the latest internal value, and
-                      may reject unrecognized values.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-                    type: string
-                  certificatesDir:
-                    description: |-
-                      certificatesDir specifies where to store or look for all required certificates.
-                      NB: if not provided, this will default to `/etc/kubernetes/pki`
-                    type: string
-                  clusterName:
-                    description: The cluster name
-                    type: string
-                  controlPlaneEndpoint:
-                    description: |-
-                      controlPlaneEndpoint sets a stable IP address or DNS name for the control plane; it
-                      can be a valid IP address or a RFC-1123 DNS subdomain, both with optional TCP port.
-                      In case the ControlPlaneEndpoint is not specified, the AdvertiseAddress + BindPort
-                      are used; in case the ControlPlaneEndpoint is specified but without a TCP port,
-                      the BindPort is used.
-                      Possible usages are:
-                      e.g. In a cluster with more than one control plane instances, this field should be
-                      assigned the address of the external load balancer in front of the
-                      control plane instances.
-                      e.g.  in environments with enforced node recycling, the ControlPlaneEndpoint
-                      could be used for assigning a stable DNS to the control plane.
-                      NB: This value defaults to the first value in the Cluster object status.apiEndpoints array.
-                    type: string
-                  controllerManager:
-                    description: controllerManager contains extra settings for the
-                      controller manager control plane component
-                    properties:
-                      extraArgs:
-                        additionalProperties:
-                          type: string
-                        description: extraArgs is an extra set of flags to pass to
-                          the control plane component.
-                        type: object
-                      extraVolumes:
-                        description: extraVolumes is an extra set of host volumes,
-                          mounted to the control plane component.
-                        items:
-                          description: |-
-                            HostPathMount contains elements describing volumes that are mounted from the
-                            host.
-                          properties:
-                            hostPath:
-                              description: |-
-                                hostPath is the path in the host that will be mounted inside
-                                the pod.
-                              type: string
-                            mountPath:
-                              description: mountPath is the path inside the pod where
-                                hostPath will be mounted.
-                              type: string
-                            name:
-                              description: name of the volume inside the pod template.
-                              type: string
-                            pathType:
-                              description: pathType is the type of the HostPath.
-                              type: string
-                            readOnly:
-                              description: readOnly controls write access to the volume
-                              type: boolean
-                          required:
-                          - hostPath
-                          - mountPath
-                          - name
-                          type: object
-                        type: array
-                    type: object
-                  dns:
-                    description: dns defines the options for the DNS add-on installed
-                      in the cluster.
-                    properties:
-                      imageRepository:
-                        description: |-
-                          imageRepository sets the container registry to pull images from.
-                          if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
-                        type: string
-                      imageTag:
-                        description: |-
-                          imageTag allows to specify a tag for the image.
-                          In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
-                        type: string
-                    type: object
-                  etcd:
-                    description: |-
-                      etcd holds configuration for etcd.
-                      NB: This value defaults to a Local (stacked) etcd
-                    properties:
-                      external:
-                        description: |-
-                          external describes how to connect to an external etcd cluster
-                          Local and External are mutually exclusive
-                        properties:
-                          caFile:
-                            description: |-
-                              caFile is an SSL Certificate Authority file used to secure etcd communication.
-                              Required if using a TLS connection.
-                            type: string
-                          certFile:
-                            description: |-
-                              certFile is an SSL certification file used to secure etcd communication.
-                              Required if using a TLS connection.
-                            type: string
-                          endpoints:
-                            description: endpoints of etcd members. Required for ExternalEtcd.
-                            items:
-                              type: string
-                            type: array
-                          keyFile:
-                            description: |-
-                              keyFile is an SSL key file used to secure etcd communication.
-                              Required if using a TLS connection.
-                            type: string
-                        required:
-                        - caFile
-                        - certFile
-                        - endpoints
-                        - keyFile
-                        type: object
-                      local:
-                        description: |-
-                          local provides configuration knobs for configuring the local etcd instance
-                          Local and External are mutually exclusive
-                        properties:
-                          dataDir:
-                            description: |-
-                              dataDir is the directory etcd will place its data.
-                              Defaults to "/var/lib/etcd".
-                            type: string
-                          extraArgs:
-                            additionalProperties:
-                              type: string
-                            description: |-
-                              extraArgs are extra arguments provided to the etcd binary
-                              when run inside a static pod.
-                            type: object
-                          imageRepository:
-                            description: |-
-                              imageRepository sets the container registry to pull images from.
-                              if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
-                            type: string
-                          imageTag:
-                            description: |-
-                              imageTag allows to specify a tag for the image.
-                              In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
-                            type: string
-                          peerCertSANs:
-                            description: peerCertSANs sets extra Subject Alternative
-                              Names for the etcd peer signing cert.
-                            items:
-                              type: string
-                            type: array
-                          serverCertSANs:
-                            description: serverCertSANs sets extra Subject Alternative
-                              Names for the etcd server signing cert.
-                            items:
-                              type: string
-                            type: array
-                        type: object
-                    type: object
-                  featureGates:
-                    additionalProperties:
-                      type: boolean
-                    description: featureGates enabled by the user.
-                    type: object
-                  imageRepository:
-                    description: |-
-                      imageRepository sets the container registry to pull images from.
-                      If empty, `registry.k8s.io` will be used by default; in case of kubernetes version is a CI build (kubernetes version starts with `ci/` or `ci-cross/`)
-                      `gcr.io/k8s-staging-ci-images` will be used as a default for control plane components and for kube-proxy, while `registry.k8s.io`
-                      will be used for all the other images.
-                    type: string
-                  kind:
-                    description: |-
-                      Kind is a string value representing the REST resource this object represents.
-                      Servers may infer this from the endpoint the client submits requests to.
-                      Cannot be updated.
-                      In CamelCase.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                    type: string
-                  kubernetesVersion:
-                    description: |-
-                      kubernetesVersion is the target version of the control plane.
-                      NB: This value defaults to the Machine object spec.version
-                    type: string
-                  networking:
-                    description: |-
-                      networking holds configuration for the networking topology of the cluster.
-                      NB: This value defaults to the Cluster object spec.clusterNetwork.
-                    properties:
-                      dnsDomain:
-                        description: dnsDomain is the dns domain used by k8s services.
-                          Defaults to "cluster.local".
-                        type: string
-                      podSubnet:
-                        description: |-
-                          podSubnet is the subnet used by pods.
-                          If unset, the API server will not allocate CIDR ranges for every node.
-                          Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.services.cidrBlocks if that is set
-                        type: string
-                      serviceSubnet:
-                        description: |-
-                          serviceSubnet is the subnet used by k8s services.
-                          Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.pods.cidrBlocks, or
-                          to "10.96.0.0/12" if that's unset.
-                        type: string
-                    type: object
-                  scheduler:
-                    description: scheduler contains extra settings for the scheduler
-                      control plane component
-                    properties:
-                      extraArgs:
-                        additionalProperties:
-                          type: string
-                        description: extraArgs is an extra set of flags to pass to
-                          the control plane component.
-                        type: object
-                      extraVolumes:
-                        description: extraVolumes is an extra set of host volumes,
-                          mounted to the control plane component.
-                        items:
-                          description: |-
-                            HostPathMount contains elements describing volumes that are mounted from the
-                            host.
-                          properties:
-                            hostPath:
-                              description: |-
-                                hostPath is the path in the host that will be mounted inside
-                                the pod.
-                              type: string
-                            mountPath:
-                              description: mountPath is the path inside the pod where
-                                hostPath will be mounted.
-                              type: string
-                            name:
-                              description: name of the volume inside the pod template.
-                              type: string
-                            pathType:
-                              description: pathType is the type of the HostPath.
-                              type: string
-                            readOnly:
-                              description: readOnly controls write access to the volume
-                              type: boolean
-                          required:
-                          - hostPath
-                          - mountPath
-                          - name
-                          type: object
-                        type: array
-                    type: object
-                type: object
-              diskSetup:
-                description: diskSetup specifies options for the creation of partition
-                  tables and file systems on devices.
-                properties:
-                  filesystems:
-                    description: filesystems specifies the list of file systems to
-                      setup.
-                    items:
-                      description: Filesystem defines the file systems to be created.
-                      properties:
-                        device:
-                          description: device specifies the device name
-                          type: string
-                        extraOpts:
-                          description: extraOpts defined extra options to add to the
-                            command for creating the file system.
-                          items:
-                            type: string
-                          type: array
-                        filesystem:
-                          description: filesystem specifies the file system type.
-                          type: string
-                        label:
-                          description: label specifies the file system label to be
-                            used. If set to None, no label is used.
-                          type: string
-                        overwrite:
-                          description: |-
-                            overwrite defines whether or not to overwrite any existing filesystem.
-                            If true, any pre-existing file system will be destroyed. Use with Caution.
-                          type: boolean
-                        partition:
-                          description: 'partition specifies the partition to use.
-                            The valid options are: "auto|any", "auto", "any", "none",
-                            and <NUM>, where NUM is the actual partition number.'
-                          type: string
-                        replaceFS:
-                          description: |-
-                            replaceFS is a special directive, used for Microsoft Azure that instructs cloud-init to replace a file system of <FS_TYPE>.
-                            NOTE: unless you define a label, this requires the use of the 'any' partition directive.
-                          type: string
-                      required:
-                      - device
-                      - filesystem
-                      - label
-                      type: object
-                    type: array
-                  partitions:
-                    description: partitions specifies the list of the partitions to
-                      setup.
-                    items:
-                      description: Partition defines how to create and layout a partition.
-                      properties:
-                        device:
-                          description: device is the name of the device.
-                          type: string
-                        layout:
-                          description: |-
-                            layout specifies the device layout.
-                            If it is true, a single partition will be created for the entire device.
-                            When layout is false, it means don't partition or ignore existing partitioning.
-                          type: boolean
-                        overwrite:
-                          description: |-
-                            overwrite describes whether to skip checks and create the partition if a partition or filesystem is found on the device.
-                            Use with caution. Default is 'false'.
-                          type: boolean
-                        tableType:
-                          description: |-
-                            tableType specifies the tupe of partition table. The following are supported:
-                            'mbr': default and setups a MS-DOS partition table
-                            'gpt': setups a GPT partition table
-                          type: string
-                      required:
-                      - device
-                      - layout
-                      type: object
-                    type: array
-                type: object
-              files:
-                description: files specifies extra files to be passed to user_data
-                  upon creation.
-                items:
-                  description: File defines the input for generating write_files in
-                    cloud-init.
-                  properties:
-                    content:
-                      description: content is the actual content of the file.
-                      type: string
-                    contentFrom:
-                      description: contentFrom is a referenced source of content to
-                        populate the file.
-                      properties:
-                        secret:
-                          description: secret represents a secret that should populate
-                            this file.
-                          properties:
-                            key:
-                              description: key is the key in the secret's data map
-                                for this value.
-                              type: string
-                            name:
-                              description: name of the secret in the KubeadmBootstrapConfig's
-                                namespace to use.
-                              type: string
-                          required:
-                          - key
-                          - name
-                          type: object
-                      required:
-                      - secret
-                      type: object
-                    encoding:
-                      description: encoding specifies the encoding of the file contents.
-                      enum:
-                      - base64
-                      - gzip
-                      - gzip+base64
-                      type: string
-                    owner:
-                      description: owner specifies the ownership of the file, e.g.
-                        "root:root".
-                      type: string
-                    path:
-                      description: path specifies the full path on disk where to store
-                        the file.
-                      type: string
-                    permissions:
-                      description: permissions specifies the permissions to assign
-                        to the file, e.g. "0640".
-                      type: string
-                  required:
-                  - path
-                  type: object
-                type: array
-              format:
-                description: format specifies the output format of the bootstrap data
-                enum:
-                - cloud-config
-                type: string
-              initConfiguration:
-                description: initConfiguration along with ClusterConfiguration are
-                  the configurations necessary for the init command
-                properties:
-                  apiVersion:
-                    description: |-
-                      APIVersion defines the versioned schema of this representation of an object.
-                      Servers should convert recognized schemas to the latest internal value, and
-                      may reject unrecognized values.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-                    type: string
-                  bootstrapTokens:
-                    description: |-
-                      bootstrapTokens is respected at `kubeadm init` time and describes a set of Bootstrap Tokens to create.
-                      This information IS NOT uploaded to the kubeadm cluster configmap, partly because of its sensitive nature
-                    items:
-                      description: BootstrapToken describes one bootstrap token, stored
-                        as a Secret in the cluster.
-                      properties:
-                        description:
-                          description: |-
-                            description sets a human-friendly message why this token exists and what it's used
-                            for, so other administrators can know its purpose.
-                          type: string
-                        expires:
-                          description: |-
-                            expires specifies the timestamp when this token expires. Defaults to being set
-                            dynamically at runtime based on the TTL. Expires and TTL are mutually exclusive.
-                          format: date-time
-                          type: string
-                        groups:
-                          description: |-
-                            groups specifies the extra groups that this token will authenticate as when/if
-                            used for authentication
-                          items:
-                            type: string
-                          type: array
-                        token:
-                          description: |-
-                            token is used for establishing bidirectional trust between nodes and control-planes.
-                            Used for joining nodes in the cluster.
-                          type: string
-                        ttl:
-                          description: |-
-                            ttl defines the time to live for this token. Defaults to 24h.
-                            Expires and TTL are mutually exclusive.
-                          type: string
-                        usages:
-                          description: |-
-                            usages describes the ways in which this token can be used. Can by default be used
-                            for establishing bidirectional trust, but that can be changed here.
-                          items:
-                            type: string
-                          type: array
-                      required:
-                      - token
-                      type: object
-                    type: array
-                  kind:
-                    description: |-
-                      Kind is a string value representing the REST resource this object represents.
-                      Servers may infer this from the endpoint the client submits requests to.
-                      Cannot be updated.
-                      In CamelCase.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                    type: string
-                  localAPIEndpoint:
-                    description: |-
-                      localAPIEndpoint represents the endpoint of the API server instance that's deployed on this control plane node
-                      In HA setups, this differs from ClusterConfiguration.ControlPlaneEndpoint in the sense that ControlPlaneEndpoint
-                      is the global endpoint for the cluster, which then loadbalances the requests to each individual API server. This
-                      configuration object lets you customize what IP/DNS name and port the local API server advertises it's accessible
-                      on. By default, kubeadm tries to auto-detect the IP of the default interface and use that, but in case that process
-                      fails you may set the desired value here.
-                    properties:
-                      advertiseAddress:
-                        description: advertiseAddress sets the IP address for the
-                          API server to advertise.
-                        type: string
-                      bindPort:
-                        description: |-
-                          bindPort sets the secure port for the API Server to bind to.
-                          Defaults to 6443.
-                        format: int32
-                        type: integer
-                    type: object
-                  nodeRegistration:
-                    description: |-
-                      nodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
-                      When used in the context of control plane nodes, NodeRegistration should remain consistent
-                      across both InitConfiguration and JoinConfiguration
-                    properties:
-                      criSocket:
-                        description: criSocket is used to retrieve container runtime
-                          info. This information will be annotated to the Node API
-                          object, for later re-use
-                        type: string
-                      ignorePreflightErrors:
-                        description: ignorePreflightErrors provides a slice of pre-flight
-                          errors to be ignored when the current node is registered.
-                        items:
-                          type: string
-                        type: array
-                      kubeletExtraArgs:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          kubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
-                          kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
-                          Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
-                        type: object
-                      name:
-                        description: |-
-                          name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
-                          This field is also used in the CommonName field of the kubelet's client certificate to the API server.
-                          Defaults to the hostname of the node if not provided.
-                        type: string
-                      taints:
-                        description: |-
-                          taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
-                          it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
-                          empty slice, i.e. `taints: {}` in the YAML file. This field is solely used for Node registration.
-                        items:
-                          description: |-
-                            The node this Taint is attached to has the "effect" on
-                            any pod that does not tolerate the Taint.
-                          properties:
-                            effect:
-                              description: |-
-                                Required. The effect of the taint on pods
-                                that do not tolerate the taint.
-                                Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
-                              type: string
-                            key:
-                              description: Required. The taint key to be applied to
-                                a node.
-                              type: string
-                            timeAdded:
-                              description: |-
-                                TimeAdded represents the time at which the taint was added.
-                                It is only written for NoExecute taints.
-                              format: date-time
-                              type: string
-                            value:
-                              description: The taint value corresponding to the taint
-                                key.
-                              type: string
-                          required:
-                          - effect
-                          - key
-                          type: object
-                        type: array
-                    type: object
-                type: object
-              joinConfiguration:
-                description: joinConfiguration is the kubeadm configuration for the
-                  join command
-                properties:
-                  apiVersion:
-                    description: |-
-                      APIVersion defines the versioned schema of this representation of an object.
-                      Servers should convert recognized schemas to the latest internal value, and
-                      may reject unrecognized values.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-                    type: string
-                  caCertPath:
-                    description: |-
-                      caCertPath is the path to the SSL certificate authority used to
-                      secure comunications between node and control-plane.
-                      Defaults to "/etc/kubernetes/pki/ca.crt".
-                    type: string
-                  controlPlane:
-                    description: |-
-                      controlPlane defines the additional control plane instance to be deployed on the joining node.
-                      If nil, no additional control plane instance will be deployed.
-                    properties:
-                      localAPIEndpoint:
-                        description: localAPIEndpoint represents the endpoint of the
-                          API server instance to be deployed on this node.
-                        properties:
-                          advertiseAddress:
-                            description: advertiseAddress sets the IP address for
-                              the API server to advertise.
-                            type: string
-                          bindPort:
-                            description: |-
-                              bindPort sets the secure port for the API Server to bind to.
-                              Defaults to 6443.
-                            format: int32
-                            type: integer
-                        type: object
-                    type: object
-                  discovery:
-                    description: discovery specifies the options for the kubelet to
-                      use during the TLS Bootstrap process
-                    properties:
-                      bootstrapToken:
-                        description: |-
-                          bootstrapToken is used to set the options for bootstrap token based discovery
-                          BootstrapToken and File are mutually exclusive
-                        properties:
-                          apiServerEndpoint:
-                            description: apiServerEndpoint is an IP or domain name
-                              to the API server from which info will be fetched.
-                            type: string
-                          caCertHashes:
-                            description: |-
-                              caCertHashes specifies a set of public key pins to verify
-                              when token-based discovery is used. The root CA found during discovery
-                              must match one of these values. Specifying an empty set disables root CA
-                              pinning, which can be unsafe. Each hash is specified as "<type>:<value>",
-                              where the only currently supported type is "sha256". This is a hex-encoded
-                              SHA-256 hash of the Subject Public Key Info (SPKI) object in DER-encoded
-                              ASN.1. These hashes can be calculated using, for example, OpenSSL:
-                              openssl x509 -pubkey -in ca.crt openssl rsa -pubin -outform der 2>&/dev/null | openssl dgst -sha256 -hex
-                            items:
-                              type: string
-                            type: array
-                          token:
-                            description: |-
-                              token is a token used to validate cluster information
-                              fetched from the control-plane.
-                            type: string
-                          unsafeSkipCAVerification:
-                            description: |-
-                              unsafeSkipCAVerification allows token-based discovery
-                              without CA verification via CACertHashes. This can weaken
-                              the security of kubeadm since other nodes can impersonate the control-plane.
-                            type: boolean
-                        required:
-                        - token
-                        type: object
-                      file:
-                        description: |-
-                          file is used to specify a file or URL to a kubeconfig file from which to load cluster information
-                          BootstrapToken and File are mutually exclusive
-                        properties:
-                          kubeConfigPath:
-                            description: kubeConfigPath is used to specify the actual
-                              file path or URL to the kubeconfig file from which to
-                              load cluster information
-                            type: string
-                        required:
-                        - kubeConfigPath
-                        type: object
-                      timeout:
-                        description: timeout modifies the discovery timeout
-                        type: string
-                      tlsBootstrapToken:
-                        description: |-
-                          tlsBootstrapToken is a token used for TLS bootstrapping.
-                          If .BootstrapToken is set, this field is defaulted to .BootstrapToken.Token, but can be overridden.
-                          If .File is set, this field **must be set** in case the KubeConfigFile does not contain any other authentication information
-                        type: string
-                    type: object
-                  kind:
-                    description: |-
-                      Kind is a string value representing the REST resource this object represents.
-                      Servers may infer this from the endpoint the client submits requests to.
-                      Cannot be updated.
-                      In CamelCase.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                    type: string
-                  nodeRegistration:
-                    description: |-
-                      nodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
-                      When used in the context of control plane nodes, NodeRegistration should remain consistent
-                      across both InitConfiguration and JoinConfiguration
-                    properties:
-                      criSocket:
-                        description: criSocket is used to retrieve container runtime
-                          info. This information will be annotated to the Node API
-                          object, for later re-use
-                        type: string
-                      ignorePreflightErrors:
-                        description: ignorePreflightErrors provides a slice of pre-flight
-                          errors to be ignored when the current node is registered.
-                        items:
-                          type: string
-                        type: array
-                      kubeletExtraArgs:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          kubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
-                          kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
-                          Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
-                        type: object
-                      name:
-                        description: |-
-                          name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
-                          This field is also used in the CommonName field of the kubelet's client certificate to the API server.
-                          Defaults to the hostname of the node if not provided.
-                        type: string
-                      taints:
-                        description: |-
-                          taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
-                          it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
-                          empty slice, i.e. `taints: {}` in the YAML file. This field is solely used for Node registration.
-                        items:
-                          description: |-
-                            The node this Taint is attached to has the "effect" on
-                            any pod that does not tolerate the Taint.
-                          properties:
-                            effect:
-                              description: |-
-                                Required. The effect of the taint on pods
-                                that do not tolerate the taint.
-                                Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
-                              type: string
-                            key:
-                              description: Required. The taint key to be applied to
-                                a node.
-                              type: string
-                            timeAdded:
-                              description: |-
-                                TimeAdded represents the time at which the taint was added.
-                                It is only written for NoExecute taints.
-                              format: date-time
-                              type: string
-                            value:
-                              description: The taint value corresponding to the taint
-                                key.
-                              type: string
-                          required:
-                          - effect
-                          - key
-                          type: object
-                        type: array
-                    type: object
-                type: object
-              mounts:
-                description: mounts specifies a list of mount points to be setup.
-                items:
-                  description: MountPoints defines input for generated mounts in cloud-init.
-                  items:
-                    type: string
-                  type: array
-                type: array
-              ntp:
-                description: ntp specifies NTP configuration
-                properties:
-                  enabled:
-                    description: enabled specifies whether NTP should be enabled
-                    type: boolean
-                  servers:
-                    description: servers specifies which NTP servers to use
-                    items:
-                      type: string
-                    type: array
-                type: object
-              postKubeadmCommands:
-                description: postKubeadmCommands specifies extra commands to run after
-                  kubeadm runs
-                items:
-                  type: string
-                type: array
-              preKubeadmCommands:
-                description: preKubeadmCommands specifies extra commands to run before
-                  kubeadm runs
-                items:
-                  type: string
-                type: array
-              useExperimentalRetryJoin:
-                description: |-
-                  useExperimentalRetryJoin replaces a basic kubeadm command with a shell
-                  script with retries for joins.
-
-                  This is meant to be an experimental temporary workaround on some environments
-                  where joins fail due to timing (and other issues). The long term goal is to add retries to
-                  kubeadm proper and use that functionality.
-
-                  This will add about 40KB to userdata
-
-                  For more information, refer to https://github.com/kubernetes-sigs/cluster-api/pull/2763#discussion_r397306055.
-                type: boolean
-              users:
-                description: users specifies extra users to add
-                items:
-                  description: User defines the input for a generated user in cloud-init.
-                  properties:
-                    gecos:
-                      description: gecos specifies the gecos to use for the user
-                      type: string
-                    groups:
-                      description: groups specifies the additional groups for the
-                        user
-                      type: string
-                    homeDir:
-                      description: homeDir specifies the home directory to use for
-                        the user
-                      type: string
-                    inactive:
-                      description: inactive specifies whether to mark the user as
-                        inactive
-                      type: boolean
-                    lockPassword:
-                      description: lockPassword specifies if password login should
-                        be disabled
-                      type: boolean
-                    name:
-                      description: name specifies the user name
-                      type: string
-                    passwd:
-                      description: passwd specifies a hashed password for the user
-                      type: string
-                    primaryGroup:
-                      description: primaryGroup specifies the primary group for the
-                        user
-                      type: string
-                    shell:
-                      description: shell specifies the user's shell
-                      type: string
-                    sshAuthorizedKeys:
-                      description: sshAuthorizedKeys specifies a list of ssh authorized
-                        keys for the user
-                      items:
-                        type: string
-                      type: array
-                    sudo:
-                      description: sudo specifies a sudo role for the user
-                      type: string
-                  required:
-                  - name
-                  type: object
-                type: array
-              verbosity:
-                description: |-
-                  verbosity is the number for the kubeadm log level verbosity.
-                  It overrides the `--v` flag in kubeadm commands.
-                format: int32
-                type: integer
-            type: object
-          status:
-            description: KubeadmConfigStatus defines the observed state of KubeadmConfig.
-            properties:
-              conditions:
-                description: conditions defines current service state of the KubeadmConfig.
-                items:
-                  description: Condition defines an observation of a Cluster API resource
-                    operational state.
-                  properties:
-                    lastTransitionTime:
-                      description: |-
-                        Last time the condition transitioned from one status to another.
-                        This should be when the underlying condition changed. If that is not known, then using the time when
-                        the API field changed is acceptable.
-                      format: date-time
-                      type: string
-                    message:
-                      description: |-
-                        A human readable message indicating details about the transition.
-                        This field may be empty.
-                      type: string
-                    reason:
-                      description: |-
-                        The reason for the condition's last transition in CamelCase.
-                        The specific API may choose whether or not this field is considered a guaranteed API.
-                        This field may not be empty.
-                      type: string
-                    severity:
-                      description: |-
-                        severity provides an explicit classification of Reason code, so the users or machines can immediately
-                        understand the current situation and act accordingly.
-                        The Severity field MUST be set only when Status=False.
-                      type: string
-                    status:
-                      description: status of the condition, one of True, False, Unknown.
-                      type: string
-                    type:
-                      description: |-
-                        type of condition in CamelCase or in foo.example.com/CamelCase.
-                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
-                        can be useful (see .node.status.conditions), the ability to deconflict is important.
-                      type: string
-                  required:
-                  - status
-                  - type
-                  type: object
-                type: array
-              dataSecretName:
-                description: dataSecretName is the name of the secret that stores
-                  the bootstrap data script.
-                type: string
-              failureMessage:
-                description: failureMessage will be set on non-retryable errors
-                type: string
-              failureReason:
-                description: failureReason will be set on non-retryable errors
-                type: string
-              observedGeneration:
-                description: observedGeneration is the latest generation observed
-                  by the controller.
-                format: int64
-                type: integer
-              ready:
-                description: ready indicates the BootstrapData field is ready to be
-                  consumed
-                type: boolean
-            type: object
-        type: object
-    served: false
-    storage: false
-    subresources:
-      status: {}
-  - additionalPrinterColumns:
-    - description: Cluster
-      jsonPath: .metadata.labels['cluster\.x-k8s\.io/cluster-name']
-      name: Cluster
-      type: string
-    - description: Time duration since creation of KubeadmConfig
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    name: v1beta1
-    schema:
-      openAPIV3Schema:
-        description: KubeadmConfig is the Schema for the kubeadmconfigs API.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: |-
-              KubeadmConfigSpec defines the desired state of KubeadmConfig.
-              Either ClusterConfiguration and InitConfiguration should be defined or the JoinConfiguration should be defined.
-            properties:
-              clusterConfiguration:
-                description: clusterConfiguration along with InitConfiguration are
-                  the configurations necessary for the init command
-                properties:
-                  apiServer:
-                    description: apiServer contains extra settings for the API server
-                      control plane component
-                    properties:
-                      certSANs:
-                        description: certSANs sets extra Subject Alternative Names
-                          for the API Server signing cert.
-                        items:
-                          type: string
-                        type: array
-                      extraArgs:
-                        additionalProperties:
-                          type: string
-                        description: extraArgs is an extra set of flags to pass to
-                          the control plane component.
-                        type: object
-                      extraEnvs:
-                        description: |-
-                          extraEnvs is an extra set of environment variables to pass to the control plane component.
-                          Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default.
-                          This option takes effect only on Kubernetes >=1.31.0.
-                        items:
-                          description: EnvVar represents an environment variable present
-                            in a Container.
-                          properties:
-                            name:
-                              description: Name of the environment variable. Must
-                                be a C_IDENTIFIER.
-                              type: string
-                            value:
-                              description: |-
-                                Variable references $(VAR_NAME) are expanded
-                                using the previously defined environment variables in the container and
-                                any service environment variables. If a variable cannot be resolved,
-                                the reference in the input string will be unchanged. Double $ are reduced
-                                to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
-                                "$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
-                                Escaped references will never be expanded, regardless of whether the variable
-                                exists or not.
-                                Defaults to "".
-                              type: string
-                            valueFrom:
-                              description: Source for the environment variable's value.
-                                Cannot be used if value is not empty.
-                              properties:
-                                configMapKeyRef:
-                                  description: Selects a key of a ConfigMap.
-                                  properties:
-                                    key:
-                                      description: The key to select.
-                                      type: string
-                                    name:
-                                      default: ""
-                                      description: |-
-                                        Name of the referent.
-                                        This field is effectively required, but due to backwards compatibility is
-                                        allowed to be empty. Instances of this type with an empty value here are
-                                        almost certainly wrong.
-                                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                      type: string
-                                    optional:
-                                      description: Specify whether the ConfigMap or
-                                        its key must be defined
-                                      type: boolean
-                                  required:
-                                  - key
-                                  type: object
-                                  x-kubernetes-map-type: atomic
-                                fieldRef:
-                                  description: |-
-                                    Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
-                                    spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
-                                  properties:
-                                    apiVersion:
-                                      description: Version of the schema the FieldPath
-                                        is written in terms of, defaults to "v1".
-                                      type: string
-                                    fieldPath:
-                                      description: Path of the field to select in
-                                        the specified API version.
-                                      type: string
-                                  required:
-                                  - fieldPath
-                                  type: object
-                                  x-kubernetes-map-type: atomic
-                                resourceFieldRef:
-                                  description: |-
-                                    Selects a resource of the container: only resources limits and requests
-                                    (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
-                                  properties:
-                                    containerName:
-                                      description: 'Container name: required for volumes,
-                                        optional for env vars'
-                                      type: string
-                                    divisor:
-                                      anyOf:
-                                      - type: integer
-                                      - type: string
-                                      description: Specifies the output format of
-                                        the exposed resources, defaults to "1"
-                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
-                                      x-kubernetes-int-or-string: true
-                                    resource:
-                                      description: 'Required: resource to select'
-                                      type: string
-                                  required:
-                                  - resource
-                                  type: object
-                                  x-kubernetes-map-type: atomic
-                                secretKeyRef:
-                                  description: Selects a key of a secret in the pod's
-                                    namespace
-                                  properties:
-                                    key:
-                                      description: The key of the secret to select
-                                        from.  Must be a valid secret key.
-                                      type: string
-                                    name:
-                                      default: ""
-                                      description: |-
-                                        Name of the referent.
-                                        This field is effectively required, but due to backwards compatibility is
-                                        allowed to be empty. Instances of this type with an empty value here are
-                                        almost certainly wrong.
-                                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                      type: string
-                                    optional:
-                                      description: Specify whether the Secret or its
-                                        key must be defined
-                                      type: boolean
-                                  required:
-                                  - key
-                                  type: object
-                                  x-kubernetes-map-type: atomic
-                              type: object
-                          required:
-                          - name
-                          type: object
-                        type: array
-                      extraVolumes:
-                        description: extraVolumes is an extra set of host volumes,
-                          mounted to the control plane component.
-                        items:
-                          description: |-
-                            HostPathMount contains elements describing volumes that are mounted from the
-                            host.
-                          properties:
-                            hostPath:
-                              description: |-
-                                hostPath is the path in the host that will be mounted inside
-                                the pod.
-                              type: string
-                            mountPath:
-                              description: mountPath is the path inside the pod where
-                                hostPath will be mounted.
-                              type: string
-                            name:
-                              description: name of the volume inside the pod template.
-                              type: string
-                            pathType:
-                              description: pathType is the type of the HostPath.
-                              type: string
-                            readOnly:
-                              description: readOnly controls write access to the volume
-                              type: boolean
-                          required:
-                          - hostPath
-                          - mountPath
-                          - name
-                          type: object
-                        type: array
-                      timeoutForControlPlane:
-                        description: timeoutForControlPlane controls the timeout that
-                          we use for API server to appear
-                        type: string
-                    type: object
-                  apiVersion:
-                    description: |-
-                      APIVersion defines the versioned schema of this representation of an object.
-                      Servers should convert recognized schemas to the latest internal value, and
-                      may reject unrecognized values.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-                    type: string
-                  certificatesDir:
-                    description: |-
-                      certificatesDir specifies where to store or look for all required certificates.
-                      NB: if not provided, this will default to `/etc/kubernetes/pki`
-                    type: string
-                  clusterName:
-                    description: The cluster name
-                    type: string
-                  controlPlaneEndpoint:
-                    description: |-
-                      controlPlaneEndpoint sets a stable IP address or DNS name for the control plane; it
-                      can be a valid IP address or a RFC-1123 DNS subdomain, both with optional TCP port.
-                      In case the ControlPlaneEndpoint is not specified, the AdvertiseAddress + BindPort
-                      are used; in case the ControlPlaneEndpoint is specified but without a TCP port,
-                      the BindPort is used.
-                      Possible usages are:
-                      e.g. In a cluster with more than one control plane instances, this field should be
-                      assigned the address of the external load balancer in front of the
-                      control plane instances.
-                      e.g.  in environments with enforced node recycling, the ControlPlaneEndpoint
-                      could be used for assigning a stable DNS to the control plane.
-                      NB: This value defaults to the first value in the Cluster object status.apiEndpoints array.
-                    type: string
-                  controllerManager:
-                    description: controllerManager contains extra settings for the
-                      controller manager control plane component
-                    properties:
-                      extraArgs:
-                        additionalProperties:
-                          type: string
-                        description: extraArgs is an extra set of flags to pass to
-                          the control plane component.
-                        type: object
-                      extraEnvs:
-                        description: |-
-                          extraEnvs is an extra set of environment variables to pass to the control plane component.
-                          Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default.
-                          This option takes effect only on Kubernetes >=1.31.0.
-                        items:
-                          description: EnvVar represents an environment variable present
-                            in a Container.
-                          properties:
-                            name:
-                              description: Name of the environment variable. Must
-                                be a C_IDENTIFIER.
-                              type: string
-                            value:
-                              description: |-
-                                Variable references $(VAR_NAME) are expanded
-                                using the previously defined environment variables in the container and
-                                any service environment variables. If a variable cannot be resolved,
-                                the reference in the input string will be unchanged. Double $ are reduced
-                                to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
-                                "$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
-                                Escaped references will never be expanded, regardless of whether the variable
-                                exists or not.
-                                Defaults to "".
-                              type: string
-                            valueFrom:
-                              description: Source for the environment variable's value.
-                                Cannot be used if value is not empty.
-                              properties:
-                                configMapKeyRef:
-                                  description: Selects a key of a ConfigMap.
-                                  properties:
-                                    key:
-                                      description: The key to select.
-                                      type: string
-                                    name:
-                                      default: ""
-                                      description: |-
-                                        Name of the referent.
-                                        This field is effectively required, but due to backwards compatibility is
-                                        allowed to be empty. Instances of this type with an empty value here are
-                                        almost certainly wrong.
-                                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                      type: string
-                                    optional:
-                                      description: Specify whether the ConfigMap or
-                                        its key must be defined
-                                      type: boolean
-                                  required:
-                                  - key
-                                  type: object
-                                  x-kubernetes-map-type: atomic
-                                fieldRef:
-                                  description: |-
-                                    Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
-                                    spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
-                                  properties:
-                                    apiVersion:
-                                      description: Version of the schema the FieldPath
-                                        is written in terms of, defaults to "v1".
-                                      type: string
-                                    fieldPath:
-                                      description: Path of the field to select in
-                                        the specified API version.
-                                      type: string
-                                  required:
-                                  - fieldPath
-                                  type: object
-                                  x-kubernetes-map-type: atomic
-                                resourceFieldRef:
-                                  description: |-
-                                    Selects a resource of the container: only resources limits and requests
-                                    (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
-                                  properties:
-                                    containerName:
-                                      description: 'Container name: required for volumes,
-                                        optional for env vars'
-                                      type: string
-                                    divisor:
-                                      anyOf:
-                                      - type: integer
-                                      - type: string
-                                      description: Specifies the output format of
-                                        the exposed resources, defaults to "1"
-                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
-                                      x-kubernetes-int-or-string: true
-                                    resource:
-                                      description: 'Required: resource to select'
-                                      type: string
-                                  required:
-                                  - resource
-                                  type: object
-                                  x-kubernetes-map-type: atomic
-                                secretKeyRef:
-                                  description: Selects a key of a secret in the pod's
-                                    namespace
-                                  properties:
-                                    key:
-                                      description: The key of the secret to select
-                                        from.  Must be a valid secret key.
-                                      type: string
-                                    name:
-                                      default: ""
-                                      description: |-
-                                        Name of the referent.
-                                        This field is effectively required, but due to backwards compatibility is
-                                        allowed to be empty. Instances of this type with an empty value here are
-                                        almost certainly wrong.
-                                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                      type: string
-                                    optional:
-                                      description: Specify whether the Secret or its
-                                        key must be defined
-                                      type: boolean
-                                  required:
-                                  - key
-                                  type: object
-                                  x-kubernetes-map-type: atomic
-                              type: object
-                          required:
-                          - name
-                          type: object
-                        type: array
-                      extraVolumes:
-                        description: extraVolumes is an extra set of host volumes,
-                          mounted to the control plane component.
-                        items:
-                          description: |-
-                            HostPathMount contains elements describing volumes that are mounted from the
-                            host.
-                          properties:
-                            hostPath:
-                              description: |-
-                                hostPath is the path in the host that will be mounted inside
-                                the pod.
-                              type: string
-                            mountPath:
-                              description: mountPath is the path inside the pod where
-                                hostPath will be mounted.
-                              type: string
-                            name:
-                              description: name of the volume inside the pod template.
-                              type: string
-                            pathType:
-                              description: pathType is the type of the HostPath.
-                              type: string
-                            readOnly:
-                              description: readOnly controls write access to the volume
-                              type: boolean
-                          required:
-                          - hostPath
-                          - mountPath
-                          - name
-                          type: object
-                        type: array
-                    type: object
-                  dns:
-                    description: dns defines the options for the DNS add-on installed
-                      in the cluster.
-                    properties:
-                      imageRepository:
-                        description: |-
-                          imageRepository sets the container registry to pull images from.
-                          if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
-                        type: string
-                      imageTag:
-                        description: |-
-                          imageTag allows to specify a tag for the image.
-                          In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
-                        type: string
-                    type: object
-                  etcd:
-                    description: |-
-                      etcd holds configuration for etcd.
-                      NB: This value defaults to a Local (stacked) etcd
-                    properties:
-                      external:
-                        description: |-
-                          external describes how to connect to an external etcd cluster
-                          Local and External are mutually exclusive
-                        properties:
-                          caFile:
-                            description: |-
-                              caFile is an SSL Certificate Authority file used to secure etcd communication.
-                              Required if using a TLS connection.
-                            type: string
-                          certFile:
-                            description: |-
-                              certFile is an SSL certification file used to secure etcd communication.
-                              Required if using a TLS connection.
-                            type: string
-                          endpoints:
-                            description: endpoints of etcd members. Required for ExternalEtcd.
-                            items:
-                              type: string
-                            type: array
-                          keyFile:
-                            description: |-
-                              keyFile is an SSL key file used to secure etcd communication.
-                              Required if using a TLS connection.
-                            type: string
-                        required:
-                        - caFile
-                        - certFile
-                        - endpoints
-                        - keyFile
-                        type: object
-                      local:
-                        description: |-
-                          local provides configuration knobs for configuring the local etcd instance
-                          Local and External are mutually exclusive
-                        properties:
-                          dataDir:
-                            description: |-
-                              dataDir is the directory etcd will place its data.
-                              Defaults to "/var/lib/etcd".
-                            type: string
-                          extraArgs:
-                            additionalProperties:
-                              type: string
-                            description: |-
-                              extraArgs are extra arguments provided to the etcd binary
-                              when run inside a static pod.
-                            type: object
-                          extraEnvs:
-                            description: |-
-                              extraEnvs is an extra set of environment variables to pass to the control plane component.
-                              Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default.
-                              This option takes effect only on Kubernetes >=1.31.0.
-                            items:
-                              description: EnvVar represents an environment variable
-                                present in a Container.
-                              properties:
-                                name:
-                                  description: Name of the environment variable. Must
-                                    be a C_IDENTIFIER.
-                                  type: string
-                                value:
-                                  description: |-
-                                    Variable references $(VAR_NAME) are expanded
-                                    using the previously defined environment variables in the container and
-                                    any service environment variables. If a variable cannot be resolved,
-                                    the reference in the input string will be unchanged. Double $ are reduced
-                                    to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
-                                    "$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
-                                    Escaped references will never be expanded, regardless of whether the variable
-                                    exists or not.
-                                    Defaults to "".
-                                  type: string
-                                valueFrom:
-                                  description: Source for the environment variable's
-                                    value. Cannot be used if value is not empty.
-                                  properties:
-                                    configMapKeyRef:
-                                      description: Selects a key of a ConfigMap.
-                                      properties:
-                                        key:
-                                          description: The key to select.
-                                          type: string
-                                        name:
-                                          default: ""
-                                          description: |-
-                                            Name of the referent.
-                                            This field is effectively required, but due to backwards compatibility is
-                                            allowed to be empty. Instances of this type with an empty value here are
-                                            almost certainly wrong.
-                                            More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                          type: string
-                                        optional:
-                                          description: Specify whether the ConfigMap
-                                            or its key must be defined
-                                          type: boolean
-                                      required:
-                                      - key
-                                      type: object
-                                      x-kubernetes-map-type: atomic
-                                    fieldRef:
-                                      description: |-
-                                        Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
-                                        spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
-                                      properties:
-                                        apiVersion:
-                                          description: Version of the schema the FieldPath
-                                            is written in terms of, defaults to "v1".
-                                          type: string
-                                        fieldPath:
-                                          description: Path of the field to select
-                                            in the specified API version.
-                                          type: string
-                                      required:
-                                      - fieldPath
-                                      type: object
-                                      x-kubernetes-map-type: atomic
-                                    resourceFieldRef:
-                                      description: |-
-                                        Selects a resource of the container: only resources limits and requests
-                                        (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
-                                      properties:
-                                        containerName:
-                                          description: 'Container name: required for
-                                            volumes, optional for env vars'
-                                          type: string
-                                        divisor:
-                                          anyOf:
-                                          - type: integer
-                                          - type: string
-                                          description: Specifies the output format
-                                            of the exposed resources, defaults to
-                                            "1"
-                                          pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
-                                          x-kubernetes-int-or-string: true
-                                        resource:
-                                          description: 'Required: resource to select'
-                                          type: string
-                                      required:
-                                      - resource
-                                      type: object
-                                      x-kubernetes-map-type: atomic
-                                    secretKeyRef:
-                                      description: Selects a key of a secret in the
-                                        pod's namespace
-                                      properties:
-                                        key:
-                                          description: The key of the secret to select
-                                            from.  Must be a valid secret key.
-                                          type: string
-                                        name:
-                                          default: ""
-                                          description: |-
-                                            Name of the referent.
-                                            This field is effectively required, but due to backwards compatibility is
-                                            allowed to be empty. Instances of this type with an empty value here are
-                                            almost certainly wrong.
-                                            More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                          type: string
-                                        optional:
-                                          description: Specify whether the Secret
-                                            or its key must be defined
-                                          type: boolean
-                                      required:
-                                      - key
-                                      type: object
-                                      x-kubernetes-map-type: atomic
-                                  type: object
-                              required:
-                              - name
-                              type: object
-                            type: array
-                          imageRepository:
-                            description: |-
-                              imageRepository sets the container registry to pull images from.
-                              if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
-                            type: string
-                          imageTag:
-                            description: |-
-                              imageTag allows to specify a tag for the image.
-                              In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
-                            type: string
-                          peerCertSANs:
-                            description: peerCertSANs sets extra Subject Alternative
-                              Names for the etcd peer signing cert.
-                            items:
-                              type: string
-                            type: array
-                          serverCertSANs:
-                            description: serverCertSANs sets extra Subject Alternative
-                              Names for the etcd server signing cert.
-                            items:
-                              type: string
-                            type: array
-                        type: object
-                    type: object
-                  featureGates:
-                    additionalProperties:
-                      type: boolean
-                    description: featureGates enabled by the user.
-                    type: object
-                  imageRepository:
-                    description: |-
-                      imageRepository sets the container registry to pull images from.
-                      * If not set, the default registry of kubeadm will be used, i.e.
-                        * registry.k8s.io (new registry): >= v1.22.17, >= v1.23.15, >= v1.24.9, >= v1.25.0
-                        * k8s.gcr.io (old registry): all older versions
-                        Please note that when imageRepository is not set we don't allow upgrades to
-                        versions >= v1.22.0 which use the old registry (k8s.gcr.io). Please use
-                        a newer patch version with the new registry instead (i.e. >= v1.22.17,
-                        >= v1.23.15, >= v1.24.9, >= v1.25.0).
-                      * If the version is a CI build (kubernetes version starts with `ci/` or `ci-cross/`)
-                       `gcr.io/k8s-staging-ci-images` will be used as a default for control plane components
-                        and for kube-proxy, while `registry.k8s.io` will be used for all the other images.
-                    type: string
-                  kind:
-                    description: |-
-                      Kind is a string value representing the REST resource this object represents.
-                      Servers may infer this from the endpoint the client submits requests to.
-                      Cannot be updated.
-                      In CamelCase.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                    type: string
-                  kubernetesVersion:
-                    description: |-
-                      kubernetesVersion is the target version of the control plane.
-                      NB: This value defaults to the Machine object spec.version
-                    type: string
-                  networking:
-                    description: |-
-                      networking holds configuration for the networking topology of the cluster.
-                      NB: This value defaults to the Cluster object spec.clusterNetwork.
-                    properties:
-                      dnsDomain:
-                        description: dnsDomain is the dns domain used by k8s services.
-                          Defaults to "cluster.local".
-                        type: string
-                      podSubnet:
-                        description: |-
-                          podSubnet is the subnet used by pods.
-                          If unset, the API server will not allocate CIDR ranges for every node.
-                          Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.services.cidrBlocks if that is set
-                        type: string
-                      serviceSubnet:
-                        description: |-
-                          serviceSubnet is the subnet used by k8s services.
-                          Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.pods.cidrBlocks, or
-                          to "10.96.0.0/12" if that's unset.
-                        type: string
-                    type: object
-                  scheduler:
-                    description: scheduler contains extra settings for the scheduler
-                      control plane component
-                    properties:
-                      extraArgs:
-                        additionalProperties:
-                          type: string
-                        description: extraArgs is an extra set of flags to pass to
-                          the control plane component.
-                        type: object
-                      extraEnvs:
-                        description: |-
-                          extraEnvs is an extra set of environment variables to pass to the control plane component.
-                          Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default.
-                          This option takes effect only on Kubernetes >=1.31.0.
-                        items:
-                          description: EnvVar represents an environment variable present
-                            in a Container.
-                          properties:
-                            name:
-                              description: Name of the environment variable. Must
-                                be a C_IDENTIFIER.
-                              type: string
-                            value:
-                              description: |-
-                                Variable references $(VAR_NAME) are expanded
-                                using the previously defined environment variables in the container and
-                                any service environment variables. If a variable cannot be resolved,
-                                the reference in the input string will be unchanged. Double $ are reduced
-                                to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
-                                "$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
-                                Escaped references will never be expanded, regardless of whether the variable
-                                exists or not.
-                                Defaults to "".
-                              type: string
-                            valueFrom:
-                              description: Source for the environment variable's value.
-                                Cannot be used if value is not empty.
-                              properties:
-                                configMapKeyRef:
-                                  description: Selects a key of a ConfigMap.
-                                  properties:
-                                    key:
-                                      description: The key to select.
-                                      type: string
-                                    name:
-                                      default: ""
-                                      description: |-
-                                        Name of the referent.
-                                        This field is effectively required, but due to backwards compatibility is
-                                        allowed to be empty. Instances of this type with an empty value here are
-                                        almost certainly wrong.
-                                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                      type: string
-                                    optional:
-                                      description: Specify whether the ConfigMap or
-                                        its key must be defined
-                                      type: boolean
-                                  required:
-                                  - key
-                                  type: object
-                                  x-kubernetes-map-type: atomic
-                                fieldRef:
-                                  description: |-
-                                    Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
-                                    spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
-                                  properties:
-                                    apiVersion:
-                                      description: Version of the schema the FieldPath
-                                        is written in terms of, defaults to "v1".
-                                      type: string
-                                    fieldPath:
-                                      description: Path of the field to select in
-                                        the specified API version.
-                                      type: string
-                                  required:
-                                  - fieldPath
-                                  type: object
-                                  x-kubernetes-map-type: atomic
-                                resourceFieldRef:
-                                  description: |-
-                                    Selects a resource of the container: only resources limits and requests
-                                    (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
-                                  properties:
-                                    containerName:
-                                      description: 'Container name: required for volumes,
-                                        optional for env vars'
-                                      type: string
-                                    divisor:
-                                      anyOf:
-                                      - type: integer
-                                      - type: string
-                                      description: Specifies the output format of
-                                        the exposed resources, defaults to "1"
-                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
-                                      x-kubernetes-int-or-string: true
-                                    resource:
-                                      description: 'Required: resource to select'
-                                      type: string
-                                  required:
-                                  - resource
-                                  type: object
-                                  x-kubernetes-map-type: atomic
-                                secretKeyRef:
-                                  description: Selects a key of a secret in the pod's
-                                    namespace
-                                  properties:
-                                    key:
-                                      description: The key of the secret to select
-                                        from.  Must be a valid secret key.
-                                      type: string
-                                    name:
-                                      default: ""
-                                      description: |-
-                                        Name of the referent.
-                                        This field is effectively required, but due to backwards compatibility is
-                                        allowed to be empty. Instances of this type with an empty value here are
-                                        almost certainly wrong.
-                                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                      type: string
-                                    optional:
-                                      description: Specify whether the Secret or its
-                                        key must be defined
-                                      type: boolean
-                                  required:
-                                  - key
-                                  type: object
-                                  x-kubernetes-map-type: atomic
-                              type: object
-                          required:
-                          - name
-                          type: object
-                        type: array
-                      extraVolumes:
-                        description: extraVolumes is an extra set of host volumes,
-                          mounted to the control plane component.
-                        items:
-                          description: |-
-                            HostPathMount contains elements describing volumes that are mounted from the
-                            host.
-                          properties:
-                            hostPath:
-                              description: |-
-                                hostPath is the path in the host that will be mounted inside
-                                the pod.
-                              type: string
-                            mountPath:
-                              description: mountPath is the path inside the pod where
-                                hostPath will be mounted.
-                              type: string
-                            name:
-                              description: name of the volume inside the pod template.
-                              type: string
-                            pathType:
-                              description: pathType is the type of the HostPath.
-                              type: string
-                            readOnly:
-                              description: readOnly controls write access to the volume
-                              type: boolean
-                          required:
-                          - hostPath
-                          - mountPath
-                          - name
-                          type: object
-                        type: array
-                    type: object
-                type: object
-              diskSetup:
-                description: diskSetup specifies options for the creation of partition
-                  tables and file systems on devices.
-                properties:
-                  filesystems:
-                    description: filesystems specifies the list of file systems to
-                      setup.
-                    items:
-                      description: Filesystem defines the file systems to be created.
-                      properties:
-                        device:
-                          description: device specifies the device name
-                          type: string
-                        extraOpts:
-                          description: extraOpts defined extra options to add to the
-                            command for creating the file system.
-                          items:
-                            type: string
-                          type: array
-                        filesystem:
-                          description: filesystem specifies the file system type.
-                          type: string
-                        label:
-                          description: label specifies the file system label to be
-                            used. If set to None, no label is used.
-                          type: string
-                        overwrite:
-                          description: |-
-                            overwrite defines whether or not to overwrite any existing filesystem.
-                            If true, any pre-existing file system will be destroyed. Use with Caution.
-                          type: boolean
-                        partition:
-                          description: 'partition specifies the partition to use.
-                            The valid options are: "auto|any", "auto", "any", "none",
-                            and <NUM>, where NUM is the actual partition number.'
-                          type: string
-                        replaceFS:
-                          description: |-
-                            replaceFS is a special directive, used for Microsoft Azure that instructs cloud-init to replace a file system of <FS_TYPE>.
-                            NOTE: unless you define a label, this requires the use of the 'any' partition directive.
-                          type: string
-                      required:
-                      - device
-                      - filesystem
-                      - label
-                      type: object
-                    type: array
-                  partitions:
-                    description: partitions specifies the list of the partitions to
-                      setup.
-                    items:
-                      description: Partition defines how to create and layout a partition.
-                      properties:
-                        device:
-                          description: device is the name of the device.
-                          type: string
-                        layout:
-                          description: |-
-                            layout specifies the device layout.
-                            If it is true, a single partition will be created for the entire device.
-                            When layout is false, it means don't partition or ignore existing partitioning.
-                          type: boolean
-                        overwrite:
-                          description: |-
-                            overwrite describes whether to skip checks and create the partition if a partition or filesystem is found on the device.
-                            Use with caution. Default is 'false'.
-                          type: boolean
-                        tableType:
-                          description: |-
-                            tableType specifies the tupe of partition table. The following are supported:
-                            'mbr': default and setups a MS-DOS partition table
-                            'gpt': setups a GPT partition table
-                          type: string
-                      required:
-                      - device
-                      - layout
-                      type: object
-                    type: array
-                type: object
-              files:
-                description: files specifies extra files to be passed to user_data
-                  upon creation.
-                items:
-                  description: File defines the input for generating write_files in
-                    cloud-init.
-                  properties:
-                    append:
-                      description: append specifies whether to append Content to existing
-                        file if Path exists.
-                      type: boolean
-                    content:
-                      description: content is the actual content of the file.
-                      type: string
-                    contentFrom:
-                      description: contentFrom is a referenced source of content to
-                        populate the file.
-                      properties:
-                        secret:
-                          description: secret represents a secret that should populate
-                            this file.
-                          properties:
-                            key:
-                              description: key is the key in the secret's data map
-                                for this value.
-                              type: string
-                            name:
-                              description: name of the secret in the KubeadmBootstrapConfig's
-                                namespace to use.
-                              type: string
-                          required:
-                          - key
-                          - name
-                          type: object
-                      required:
-                      - secret
-                      type: object
-                    encoding:
-                      description: encoding specifies the encoding of the file contents.
-                      enum:
-                      - base64
-                      - gzip
-                      - gzip+base64
-                      type: string
-                    owner:
-                      description: owner specifies the ownership of the file, e.g.
-                        "root:root".
-                      type: string
-                    path:
-                      description: path specifies the full path on disk where to store
-                        the file.
-                      type: string
-                    permissions:
-                      description: permissions specifies the permissions to assign
-                        to the file, e.g. "0640".
-                      type: string
-                  required:
-                  - path
-                  type: object
-                type: array
-              format:
-                description: format specifies the output format of the bootstrap data
-                enum:
-                - cloud-config
-                - ignition
-                type: string
-              ignition:
-                description: ignition contains Ignition specific configuration.
-                properties:
-                  containerLinuxConfig:
-                    description: containerLinuxConfig contains CLC specific configuration.
-                    properties:
-                      additionalConfig:
-                        description: |-
-                          additionalConfig contains additional configuration to be merged with the Ignition
-                          configuration generated by the bootstrapper controller. More info: https://coreos.github.io/ignition/operator-notes/#config-merging
-
-                          The data format is documented here: https://kinvolk.io/docs/flatcar-container-linux/latest/provisioning/cl-config/
-                        type: string
-                      strict:
-                        description: strict controls if AdditionalConfig should be
-                          strictly parsed. If so, warnings are treated as errors.
-                        type: boolean
-                    type: object
-                type: object
-              initConfiguration:
-                description: initConfiguration along with ClusterConfiguration are
-                  the configurations necessary for the init command
-                properties:
-                  apiVersion:
-                    description: |-
-                      APIVersion defines the versioned schema of this representation of an object.
-                      Servers should convert recognized schemas to the latest internal value, and
-                      may reject unrecognized values.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-                    type: string
-                  bootstrapTokens:
-                    description: |-
-                      bootstrapTokens is respected at `kubeadm init` time and describes a set of Bootstrap Tokens to create.
-                      This information IS NOT uploaded to the kubeadm cluster configmap, partly because of its sensitive nature
-                    items:
-                      description: BootstrapToken describes one bootstrap token, stored
-                        as a Secret in the cluster.
-                      properties:
-                        description:
-                          description: |-
-                            description sets a human-friendly message why this token exists and what it's used
-                            for, so other administrators can know its purpose.
-                          type: string
-                        expires:
-                          description: |-
-                            expires specifies the timestamp when this token expires. Defaults to being set
-                            dynamically at runtime based on the TTL. Expires and TTL are mutually exclusive.
-                          format: date-time
-                          type: string
-                        groups:
-                          description: |-
-                            groups specifies the extra groups that this token will authenticate as when/if
-                            used for authentication
-                          items:
-                            type: string
-                          type: array
-                        token:
-                          description: |-
-                            token is used for establishing bidirectional trust between nodes and control-planes.
-                            Used for joining nodes in the cluster.
-                          type: string
-                        ttl:
-                          description: |-
-                            ttl defines the time to live for this token. Defaults to 24h.
-                            Expires and TTL are mutually exclusive.
-                          type: string
-                        usages:
-                          description: |-
-                            usages describes the ways in which this token can be used. Can by default be used
-                            for establishing bidirectional trust, but that can be changed here.
-                          items:
-                            type: string
-                          type: array
-                      required:
-                      - token
-                      type: object
-                    type: array
-                  kind:
-                    description: |-
-                      Kind is a string value representing the REST resource this object represents.
-                      Servers may infer this from the endpoint the client submits requests to.
-                      Cannot be updated.
-                      In CamelCase.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                    type: string
-                  localAPIEndpoint:
-                    description: |-
-                      localAPIEndpoint represents the endpoint of the API server instance that's deployed on this control plane node
-                      In HA setups, this differs from ClusterConfiguration.ControlPlaneEndpoint in the sense that ControlPlaneEndpoint
-                      is the global endpoint for the cluster, which then loadbalances the requests to each individual API server. This
-                      configuration object lets you customize what IP/DNS name and port the local API server advertises it's accessible
-                      on. By default, kubeadm tries to auto-detect the IP of the default interface and use that, but in case that process
-                      fails you may set the desired value here.
-                    properties:
-                      advertiseAddress:
-                        description: advertiseAddress sets the IP address for the
-                          API server to advertise.
-                        type: string
-                      bindPort:
-                        description: |-
-                          bindPort sets the secure port for the API Server to bind to.
-                          Defaults to 6443.
-                        format: int32
-                        type: integer
-                    type: object
-                  nodeRegistration:
-                    description: |-
-                      nodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
-                      When used in the context of control plane nodes, NodeRegistration should remain consistent
-                      across both InitConfiguration and JoinConfiguration
-                    properties:
-                      criSocket:
-                        description: criSocket is used to retrieve container runtime
-                          info. This information will be annotated to the Node API
-                          object, for later re-use
-                        type: string
-                      ignorePreflightErrors:
-                        description: ignorePreflightErrors provides a slice of pre-flight
-                          errors to be ignored when the current node is registered.
-                        items:
-                          type: string
-                        type: array
-                      imagePullPolicy:
-                        description: |-
-                          imagePullPolicy specifies the policy for image pulling
-                          during kubeadm "init" and "join" operations. The value of
-                          this field must be one of "Always", "IfNotPresent" or
-                          "Never". Defaults to "IfNotPresent". This can be used only
-                          with Kubernetes version equal to 1.22 and later.
-                        enum:
-                        - Always
-                        - IfNotPresent
-                        - Never
-                        type: string
-                      imagePullSerial:
-                        description: |-
-                          imagePullSerial specifies if image pulling performed by kubeadm must be done serially or in parallel.
-                          This option takes effect only on Kubernetes >=1.31.0.
-                          Default: true (defaulted in kubeadm)
-                        type: boolean
-                      kubeletExtraArgs:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          kubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
-                          kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
-                          Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
-                        type: object
-                      name:
-                        description: |-
-                          name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
-                          This field is also used in the CommonName field of the kubelet's client certificate to the API server.
-                          Defaults to the hostname of the node if not provided.
-                        type: string
-                      taints:
-                        description: |-
-                          taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
-                          it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
-                          empty slice, i.e. `taints: []` in the YAML file. This field is solely used for Node registration.
-                        items:
-                          description: |-
-                            The node this Taint is attached to has the "effect" on
-                            any pod that does not tolerate the Taint.
-                          properties:
-                            effect:
-                              description: |-
-                                Required. The effect of the taint on pods
-                                that do not tolerate the taint.
-                                Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
-                              type: string
-                            key:
-                              description: Required. The taint key to be applied to
-                                a node.
-                              type: string
-                            timeAdded:
-                              description: |-
-                                TimeAdded represents the time at which the taint was added.
-                                It is only written for NoExecute taints.
-                              format: date-time
-                              type: string
-                            value:
-                              description: The taint value corresponding to the taint
-                                key.
-                              type: string
-                          required:
-                          - effect
-                          - key
-                          type: object
-                        type: array
-                    type: object
-                  patches:
-                    description: |-
-                      patches contains options related to applying patches to components deployed by kubeadm during
-                      "kubeadm init". The minimum kubernetes version needed to support Patches is v1.22
-                    properties:
-                      directory:
-                        description: |-
-                          directory is a path to a directory that contains files named "target[suffix][+patchtype].extension".
-                          For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "target" can be one of
-                          "kube-apiserver", "kube-controller-manager", "kube-scheduler", "etcd". "patchtype" can be one
-                          of "strategic" "merge" or "json" and they match the patch formats supported by kubectl.
-                          The default "patchtype" is "strategic". "extension" must be either "json" or "yaml".
-                          "suffix" is an optional string that can be used to determine which patches are applied
-                          first alpha-numerically.
-                          These files can be written into the target directory via KubeadmConfig.Files which
-                          specifies additional files to be created on the machine, either with content inline or
-                          by referencing a secret.
-                        type: string
-                    type: object
-                  skipPhases:
-                    description: |-
-                      skipPhases is a list of phases to skip during command execution.
-                      The list of phases can be obtained with the "kubeadm init --help" command.
-                      This option takes effect only on Kubernetes >=1.22.0.
-                    items:
-                      type: string
-                    type: array
-                type: object
-              joinConfiguration:
-                description: joinConfiguration is the kubeadm configuration for the
-                  join command
-                properties:
-                  apiVersion:
-                    description: |-
-                      APIVersion defines the versioned schema of this representation of an object.
-                      Servers should convert recognized schemas to the latest internal value, and
-                      may reject unrecognized values.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-                    type: string
-                  caCertPath:
-                    description: |-
-                      caCertPath is the path to the SSL certificate authority used to
-                      secure comunications between node and control-plane.
-                      Defaults to "/etc/kubernetes/pki/ca.crt".
-                    type: string
-                  controlPlane:
-                    description: |-
-                      controlPlane defines the additional control plane instance to be deployed on the joining node.
-                      If nil, no additional control plane instance will be deployed.
-                    properties:
-                      localAPIEndpoint:
-                        description: localAPIEndpoint represents the endpoint of the
-                          API server instance to be deployed on this node.
-                        properties:
-                          advertiseAddress:
-                            description: advertiseAddress sets the IP address for
-                              the API server to advertise.
-                            type: string
-                          bindPort:
-                            description: |-
-                              bindPort sets the secure port for the API Server to bind to.
-                              Defaults to 6443.
-                            format: int32
-                            type: integer
-                        type: object
-                    type: object
-                  discovery:
-                    description: discovery specifies the options for the kubelet to
-                      use during the TLS Bootstrap process
-                    properties:
-                      bootstrapToken:
-                        description: |-
-                          bootstrapToken is used to set the options for bootstrap token based discovery
-                          BootstrapToken and File are mutually exclusive
-                        properties:
-                          apiServerEndpoint:
-                            description: apiServerEndpoint is an IP or domain name
-                              to the API server from which info will be fetched.
-                            type: string
-                          caCertHashes:
-                            description: |-
-                              caCertHashes specifies a set of public key pins to verify
-                              when token-based discovery is used. The root CA found during discovery
-                              must match one of these values. Specifying an empty set disables root CA
-                              pinning, which can be unsafe. Each hash is specified as "<type>:<value>",
-                              where the only currently supported type is "sha256". This is a hex-encoded
-                              SHA-256 hash of the Subject Public Key Info (SPKI) object in DER-encoded
-                              ASN.1. These hashes can be calculated using, for example, OpenSSL:
-                              openssl x509 -pubkey -in ca.crt openssl rsa -pubin -outform der 2>&/dev/null | openssl dgst -sha256 -hex
-                            items:
-                              type: string
-                            type: array
-                          token:
-                            description: |-
-                              token is a token used to validate cluster information
-                              fetched from the control-plane.
-                            type: string
-                          unsafeSkipCAVerification:
-                            description: |-
-                              unsafeSkipCAVerification allows token-based discovery
-                              without CA verification via CACertHashes. This can weaken
-                              the security of kubeadm since other nodes can impersonate the control-plane.
-                            type: boolean
-                        required:
-                        - token
-                        type: object
-                      file:
-                        description: |-
-                          file is used to specify a file or URL to a kubeconfig file from which to load cluster information
-                          BootstrapToken and File are mutually exclusive
-                        properties:
-                          kubeConfig:
-                            description: |-
-                              kubeConfig is used (optionally) to generate a KubeConfig based on the KubeadmConfig's information.
-                              The file is generated at the path specified in KubeConfigPath.
-
-                              Host address (server field) information is automatically populated based on the Cluster's ControlPlaneEndpoint.
-                              Certificate Authority (certificate-authority-data field) is gathered from the cluster's CA secret.
-                            properties:
-                              cluster:
-                                description: |-
-                                  cluster contains information about how to communicate with the kubernetes cluster.
-
-                                  By default the following fields are automatically populated:
-                                  - Server with the Cluster's ControlPlaneEndpoint.
-                                  - CertificateAuthorityData with the Cluster's CA certificate.
-                                properties:
-                                  certificateAuthorityData:
-                                    description: |-
-                                      certificateAuthorityData contains PEM-encoded certificate authority certificates.
-
-                                      Defaults to the Cluster's CA certificate if empty.
-                                    format: byte
-                                    type: string
-                                  insecureSkipTLSVerify:
-                                    description: insecureSkipTLSVerify skips the validity
-                                      check for the server's certificate. This will
-                                      make your HTTPS connections insecure.
-                                    type: boolean
-                                  proxyURL:
-                                    description: |-
-                                      proxyURL is the URL to the proxy to be used for all requests made by this
-                                      client. URLs with "http", "https", and "socks5" schemes are supported.  If
-                                      this configuration is not provided or the empty string, the client
-                                      attempts to construct a proxy configuration from http_proxy and
-                                      https_proxy environment variables. If these environment variables are not
-                                      set, the client does not attempt to proxy requests.
-
-                                      socks5 proxying does not currently support spdy streaming endpoints (exec,
-                                      attach, port forward).
-                                    type: string
-                                  server:
-                                    description: |-
-                                      server is the address of the kubernetes cluster (https://hostname:port).
-
-                                      Defaults to https:// + Cluster.Spec.ControlPlaneEndpoint.
-                                    type: string
-                                  tlsServerName:
-                                    description: tlsServerName is used to check server
-                                      certificate. If TLSServerName is empty, the
-                                      hostname used to contact the server is used.
-                                    type: string
-                                type: object
-                              user:
-                                description: |-
-                                  user contains information that describes identity information.
-                                  This is used to tell the kubernetes cluster who you are.
-                                properties:
-                                  authProvider:
-                                    description: authProvider specifies a custom authentication
-                                      plugin for the kubernetes cluster.
-                                    properties:
-                                      config:
-                                        additionalProperties:
-                                          type: string
-                                        description: config holds the parameters for
-                                          the authentication plugin.
-                                        type: object
-                                      name:
-                                        description: name is the name of the authentication
-                                          plugin.
-                                        type: string
-                                    required:
-                                    - name
-                                    type: object
-                                  exec:
-                                    description: exec specifies a custom exec-based
-                                      authentication plugin for the kubernetes cluster.
-                                    properties:
-                                      apiVersion:
-                                        description: |-
-                                          Preferred input version of the ExecInfo. The returned ExecCredentials MUST use
-                                          the same encoding version as the input.
-                                          Defaults to client.authentication.k8s.io/v1 if not set.
-                                        type: string
-                                      args:
-                                        description: Arguments to pass to the command
-                                          when executing it.
-                                        items:
-                                          type: string
-                                        type: array
-                                      command:
-                                        description: command to execute.
-                                        type: string
-                                      env:
-                                        description: |-
-                                          env defines additional environment variables to expose to the process. These
-                                          are unioned with the host's environment, as well as variables client-go uses
-                                          to pass argument to the plugin.
-                                        items:
-                                          description: |-
-                                            KubeConfigAuthExecEnv is used for setting environment variables when executing an exec-based
-                                            credential plugin.
-                                          properties:
-                                            name:
-                                              type: string
-                                            value:
-                                              type: string
-                                          required:
-                                          - name
-                                          - value
-                                          type: object
-                                        type: array
-                                      provideClusterInfo:
-                                        description: |-
-                                          provideClusterInfo determines whether or not to provide cluster information,
-                                          which could potentially contain very large CA data, to this exec plugin as a
-                                          part of the KUBERNETES_EXEC_INFO environment variable. By default, it is set
-                                          to false. Package k8s.io/client-go/tools/auth/exec provides helper methods for
-                                          reading this environment variable.
-                                        type: boolean
-                                    required:
-                                    - command
-                                    type: object
-                                type: object
-                            required:
-                            - user
-                            type: object
-                          kubeConfigPath:
-                            description: kubeConfigPath is used to specify the actual
-                              file path or URL to the kubeconfig file from which to
-                              load cluster information
-                            type: string
-                        required:
-                        - kubeConfigPath
-                        type: object
-                      timeout:
-                        description: timeout modifies the discovery timeout
-                        type: string
-                      tlsBootstrapToken:
-                        description: |-
-                          tlsBootstrapToken is a token used for TLS bootstrapping.
-                          If .BootstrapToken is set, this field is defaulted to .BootstrapToken.Token, but can be overridden.
-                          If .File is set, this field **must be set** in case the KubeConfigFile does not contain any other authentication information
-                        type: string
-                    type: object
-                  kind:
-                    description: |-
-                      Kind is a string value representing the REST resource this object represents.
-                      Servers may infer this from the endpoint the client submits requests to.
-                      Cannot be updated.
-                      In CamelCase.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                    type: string
-                  nodeRegistration:
-                    description: |-
-                      nodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
-                      When used in the context of control plane nodes, NodeRegistration should remain consistent
-                      across both InitConfiguration and JoinConfiguration
-                    properties:
-                      criSocket:
-                        description: criSocket is used to retrieve container runtime
-                          info. This information will be annotated to the Node API
-                          object, for later re-use
-                        type: string
-                      ignorePreflightErrors:
-                        description: ignorePreflightErrors provides a slice of pre-flight
-                          errors to be ignored when the current node is registered.
-                        items:
-                          type: string
-                        type: array
-                      imagePullPolicy:
-                        description: |-
-                          imagePullPolicy specifies the policy for image pulling
-                          during kubeadm "init" and "join" operations. The value of
-                          this field must be one of "Always", "IfNotPresent" or
-                          "Never". Defaults to "IfNotPresent". This can be used only
-                          with Kubernetes version equal to 1.22 and later.
-                        enum:
-                        - Always
-                        - IfNotPresent
-                        - Never
-                        type: string
-                      imagePullSerial:
-                        description: |-
-                          imagePullSerial specifies if image pulling performed by kubeadm must be done serially or in parallel.
-                          This option takes effect only on Kubernetes >=1.31.0.
-                          Default: true (defaulted in kubeadm)
-                        type: boolean
-                      kubeletExtraArgs:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          kubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
-                          kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
-                          Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
-                        type: object
-                      name:
-                        description: |-
-                          name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
-                          This field is also used in the CommonName field of the kubelet's client certificate to the API server.
-                          Defaults to the hostname of the node if not provided.
-                        type: string
-                      taints:
-                        description: |-
-                          taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
-                          it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
-                          empty slice, i.e. `taints: []` in the YAML file. This field is solely used for Node registration.
-                        items:
-                          description: |-
-                            The node this Taint is attached to has the "effect" on
-                            any pod that does not tolerate the Taint.
-                          properties:
-                            effect:
-                              description: |-
-                                Required. The effect of the taint on pods
-                                that do not tolerate the taint.
-                                Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
-                              type: string
-                            key:
-                              description: Required. The taint key to be applied to
-                                a node.
-                              type: string
-                            timeAdded:
-                              description: |-
-                                TimeAdded represents the time at which the taint was added.
-                                It is only written for NoExecute taints.
-                              format: date-time
-                              type: string
-                            value:
-                              description: The taint value corresponding to the taint
-                                key.
-                              type: string
-                          required:
-                          - effect
-                          - key
-                          type: object
-                        type: array
-                    type: object
-                  patches:
-                    description: |-
-                      patches contains options related to applying patches to components deployed by kubeadm during
-                      "kubeadm join". The minimum kubernetes version needed to support Patches is v1.22
-                    properties:
-                      directory:
-                        description: |-
-                          directory is a path to a directory that contains files named "target[suffix][+patchtype].extension".
-                          For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "target" can be one of
-                          "kube-apiserver", "kube-controller-manager", "kube-scheduler", "etcd". "patchtype" can be one
-                          of "strategic" "merge" or "json" and they match the patch formats supported by kubectl.
-                          The default "patchtype" is "strategic". "extension" must be either "json" or "yaml".
-                          "suffix" is an optional string that can be used to determine which patches are applied
-                          first alpha-numerically.
-                          These files can be written into the target directory via KubeadmConfig.Files which
-                          specifies additional files to be created on the machine, either with content inline or
-                          by referencing a secret.
-                        type: string
-                    type: object
-                  skipPhases:
-                    description: |-
-                      skipPhases is a list of phases to skip during command execution.
-                      The list of phases can be obtained with the "kubeadm init --help" command.
-                      This option takes effect only on Kubernetes >=1.22.0.
-                    items:
-                      type: string
-                    type: array
-                type: object
-              mounts:
-                description: mounts specifies a list of mount points to be setup.
-                items:
-                  description: MountPoints defines input for generated mounts in cloud-init.
-                  items:
-                    type: string
-                  type: array
-                type: array
-              ntp:
-                description: ntp specifies NTP configuration
-                properties:
-                  enabled:
-                    description: enabled specifies whether NTP should be enabled
-                    type: boolean
-                  servers:
-                    description: servers specifies which NTP servers to use
-                    items:
-                      type: string
-                    type: array
-                type: object
-              postKubeadmCommands:
-                description: postKubeadmCommands specifies extra commands to run after
-                  kubeadm runs
-                items:
-                  type: string
-                type: array
-              preKubeadmCommands:
-                description: preKubeadmCommands specifies extra commands to run before
-                  kubeadm runs
-                items:
-                  type: string
-                type: array
-              useExperimentalRetryJoin:
-                description: |-
-                  useExperimentalRetryJoin replaces a basic kubeadm command with a shell
-                  script with retries for joins.
-
-                  This is meant to be an experimental temporary workaround on some environments
-                  where joins fail due to timing (and other issues). The long term goal is to add retries to
-                  kubeadm proper and use that functionality.
-
-                  This will add about 40KB to userdata
-
-                  For more information, refer to https://github.com/kubernetes-sigs/cluster-api/pull/2763#discussion_r397306055.
-
-                  Deprecated: This experimental fix is no longer needed and this field will be removed in a future release.
-                  When removing also remove from staticcheck exclude-rules for SA1019 in golangci.yml
-                type: boolean
-              users:
-                description: users specifies extra users to add
-                items:
-                  description: User defines the input for a generated user in cloud-init.
-                  properties:
-                    gecos:
-                      description: gecos specifies the gecos to use for the user
-                      type: string
-                    groups:
-                      description: groups specifies the additional groups for the
-                        user
-                      type: string
-                    homeDir:
-                      description: homeDir specifies the home directory to use for
-                        the user
-                      type: string
-                    inactive:
-                      description: inactive specifies whether to mark the user as
-                        inactive
-                      type: boolean
-                    lockPassword:
-                      description: lockPassword specifies if password login should
-                        be disabled
-                      type: boolean
-                    name:
-                      description: name specifies the user name
-                      type: string
-                    passwd:
-                      description: passwd specifies a hashed password for the user
-                      type: string
-                    passwdFrom:
-                      description: passwdFrom is a referenced source of passwd to
-                        populate the passwd.
-                      properties:
-                        secret:
-                          description: secret represents a secret that should populate
-                            this password.
-                          properties:
-                            key:
-                              description: key is the key in the secret's data map
-                                for this value.
-                              type: string
-                            name:
-                              description: name of the secret in the KubeadmBootstrapConfig's
-                                namespace to use.
-                              type: string
-                          required:
-                          - key
-                          - name
-                          type: object
-                      required:
-                      - secret
-                      type: object
-                    primaryGroup:
-                      description: primaryGroup specifies the primary group for the
-                        user
-                      type: string
-                    shell:
-                      description: shell specifies the user's shell
-                      type: string
-                    sshAuthorizedKeys:
-                      description: sshAuthorizedKeys specifies a list of ssh authorized
-                        keys for the user
-                      items:
-                        type: string
-                      type: array
-                    sudo:
-                      description: sudo specifies a sudo role for the user
-                      type: string
-                  required:
-                  - name
-                  type: object
-                type: array
-              verbosity:
-                description: |-
-                  verbosity is the number for the kubeadm log level verbosity.
-                  It overrides the `--v` flag in kubeadm commands.
-                format: int32
-                type: integer
-            type: object
-          status:
-            description: KubeadmConfigStatus defines the observed state of KubeadmConfig.
-            properties:
-              conditions:
-                description: conditions defines current service state of the KubeadmConfig.
-                items:
-                  description: Condition defines an observation of a Cluster API resource
-                    operational state.
-                  properties:
-                    lastTransitionTime:
-                      description: |-
-                        Last time the condition transitioned from one status to another.
-                        This should be when the underlying condition changed. If that is not known, then using the time when
-                        the API field changed is acceptable.
-                      format: date-time
-                      type: string
-                    message:
-                      description: |-
-                        A human readable message indicating details about the transition.
-                        This field may be empty.
-                      type: string
-                    reason:
-                      description: |-
-                        The reason for the condition's last transition in CamelCase.
-                        The specific API may choose whether or not this field is considered a guaranteed API.
-                        This field may be empty.
-                      type: string
-                    severity:
-                      description: |-
-                        severity provides an explicit classification of Reason code, so the users or machines can immediately
-                        understand the current situation and act accordingly.
-                        The Severity field MUST be set only when Status=False.
-                      type: string
-                    status:
-                      description: status of the condition, one of True, False, Unknown.
-                      type: string
-                    type:
-                      description: |-
-                        type of condition in CamelCase or in foo.example.com/CamelCase.
-                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
-                        can be useful (see .node.status.conditions), the ability to deconflict is important.
-                      type: string
-                  required:
-                  - lastTransitionTime
-                  - status
-                  - type
-                  type: object
-                type: array
-              dataSecretName:
-                description: dataSecretName is the name of the secret that stores
-                  the bootstrap data script.
-                type: string
-              failureMessage:
-                description: |-
-                  failureMessage will be set on non-retryable errors
-
-                  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.
-                type: string
-              failureReason:
-                description: |-
-                  failureReason will be set on non-retryable errors
-
-                  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.
-                type: string
-              observedGeneration:
-                description: observedGeneration is the latest generation observed
-                  by the controller.
-                format: int64
-                type: integer
-              ready:
-                description: ready indicates the BootstrapData field is ready to be
-                  consumed
-                type: boolean
-              v1beta2:
-                description: v1beta2 groups all the fields that will be added or modified
-                  in KubeadmConfig's status with the V1Beta2 version.
-                properties:
-                  conditions:
-                    description: |-
-                      conditions represents the observations of a KubeadmConfig's current state.
-                      Known condition types are Ready, DataSecretAvailable, CertificatesAvailable.
-                    items:
-                      description: Condition contains details for one aspect of the
-                        current state of this API Resource.
-                      properties:
-                        lastTransitionTime:
-                          description: |-
-                            lastTransitionTime is the last time the condition transitioned from one status to another.
-                            This should be when the underlying condition changed.  If that is not known, then using the time when the API field changed is acceptable.
-                          format: date-time
-                          type: string
-                        message:
-                          description: |-
-                            message is a human readable message indicating details about the transition.
-                            This may be an empty string.
-                          maxLength: 32768
-                          type: string
-                        observedGeneration:
-                          description: |-
-                            observedGeneration represents the .metadata.generation that the condition was set based upon.
-                            For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
-                            with respect to the current state of the instance.
-                          format: int64
-                          minimum: 0
-                          type: integer
-                        reason:
-                          description: |-
-                            reason contains a programmatic identifier indicating the reason for the condition's last transition.
-                            Producers of specific condition types may define expected values and meanings for this field,
-                            and whether the values are considered a guaranteed API.
-                            The value should be a CamelCase string.
-                            This field may not be empty.
-                          maxLength: 1024
-                          minLength: 1
-                          pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
-                          type: string
-                        status:
-                          description: status of the condition, one of True, False,
-                            Unknown.
-                          enum:
-                          - "True"
-                          - "False"
-                          - Unknown
-                          type: string
-                        type:
-                          description: type of condition in CamelCase or in foo.example.com/CamelCase.
-                          maxLength: 316
-                          pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-                          type: string
-                      required:
-                      - lastTransitionTime
-                      - message
-                      - reason
-                      - status
-                      - type
-                      type: object
-                    maxItems: 32
-                    type: array
-                    x-kubernetes-list-map-keys:
-                    - type
-                    x-kubernetes-list-type: map
-                type: object
-            type: object
-        type: object
-    served: true
-    storage: true
-    subresources:
-      status: {}
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: null
-  storedVersions: null
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  annotations:
-    cert-manager.io/inject-ca-from: capi-kubeadm-bootstrap-system/capi-kubeadm-bootstrap-serving-cert
-    controller-gen.kubebuilder.io/version: v0.16.1
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: bootstrap-kubeadm
-    cluster.x-k8s.io/v1beta1: v1beta1
-    clusterctl.cluster.x-k8s.io: ""
-  name: kubeadmconfigtemplates.bootstrap.cluster.x-k8s.io
-spec:
-  conversion:
-    strategy: Webhook
-    webhook:
-      clientConfig:
-        service:
-          name: capi-kubeadm-bootstrap-webhook-service
-          namespace: capi-kubeadm-bootstrap-system
-          path: /convert
-      conversionReviewVersions:
-      - v1
-      - v1beta1
-  group: bootstrap.cluster.x-k8s.io
-  names:
-    categories:
-    - cluster-api
-    kind: KubeadmConfigTemplate
-    listKind: KubeadmConfigTemplateList
-    plural: kubeadmconfigtemplates
-    singular: kubeadmconfigtemplate
-  scope: Namespaced
-  versions:
-  - deprecated: true
-    name: v1alpha3
-    schema:
-      openAPIV3Schema:
-        description: |-
-          KubeadmConfigTemplate is the Schema for the kubeadmconfigtemplates API.
-
-          Deprecated: This type will be removed in one of the next releases.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: KubeadmConfigTemplateSpec defines the desired state of KubeadmConfigTemplate.
-            properties:
-              template:
-                description: KubeadmConfigTemplateResource defines the Template structure.
-                properties:
-                  spec:
-                    description: |-
-                      KubeadmConfigSpec defines the desired state of KubeadmConfig.
-                      Either ClusterConfiguration and InitConfiguration should be defined or the JoinConfiguration should be defined.
-                    properties:
-                      clusterConfiguration:
-                        description: clusterConfiguration along with InitConfiguration
-                          are the configurations necessary for the init command
-                        properties:
-                          apiServer:
-                            description: APIServer contains extra settings for the
-                              API server control plane component
-                            properties:
-                              certSANs:
-                                description: CertSANs sets extra Subject Alternative
-                                  Names for the API Server signing cert.
-                                items:
-                                  type: string
-                                type: array
-                              extraArgs:
-                                additionalProperties:
-                                  type: string
-                                description: ExtraArgs is an extra set of flags to
-                                  pass to the control plane component.
-                                type: object
-                              extraVolumes:
-                                description: ExtraVolumes is an extra set of host
-                                  volumes, mounted to the control plane component.
-                                items:
-                                  description: |-
-                                    HostPathMount contains elements describing volumes that are mounted from the
-                                    host.
-                                  properties:
-                                    hostPath:
-                                      description: |-
-                                        HostPath is the path in the host that will be mounted inside
-                                        the pod.
-                                      type: string
-                                    mountPath:
-                                      description: MountPath is the path inside the
-                                        pod where hostPath will be mounted.
-                                      type: string
-                                    name:
-                                      description: Name of the volume inside the pod
-                                        template.
-                                      type: string
-                                    pathType:
-                                      description: PathType is the type of the HostPath.
-                                      type: string
-                                    readOnly:
-                                      description: ReadOnly controls write access
-                                        to the volume
-                                      type: boolean
-                                  required:
-                                  - hostPath
-                                  - mountPath
-                                  - name
-                                  type: object
-                                type: array
-                              timeoutForControlPlane:
-                                description: TimeoutForControlPlane controls the timeout
-                                  that we use for API server to appear
-                                type: string
-                            type: object
-                          apiVersion:
-                            description: |-
-                              APIVersion defines the versioned schema of this representation of an object.
-                              Servers should convert recognized schemas to the latest internal value, and
-                              may reject unrecognized values.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-                            type: string
-                          certificatesDir:
-                            description: |-
-                              CertificatesDir specifies where to store or look for all required certificates.
-                              NB: if not provided, this will default to `/etc/kubernetes/pki`
-                            type: string
-                          clusterName:
-                            description: The cluster name
-                            type: string
-                          controlPlaneEndpoint:
-                            description: |-
-                              ControlPlaneEndpoint sets a stable IP address or DNS name for the control plane; it
-                              can be a valid IP address or a RFC-1123 DNS subdomain, both with optional TCP port.
-                              In case the ControlPlaneEndpoint is not specified, the AdvertiseAddress + BindPort
-                              are used; in case the ControlPlaneEndpoint is specified but without a TCP port,
-                              the BindPort is used.
-                              Possible usages are:
-                              e.g. In a cluster with more than one control plane instances, this field should be
-                              assigned the address of the external load balancer in front of the
-                              control plane instances.
-                              e.g.  in environments with enforced node recycling, the ControlPlaneEndpoint
-                              could be used for assigning a stable DNS to the control plane.
-                              NB: This value defaults to the first value in the Cluster object status.apiEndpoints array.
-                            type: string
-                          controllerManager:
-                            description: ControllerManager contains extra settings
-                              for the controller manager control plane component
-                            properties:
-                              extraArgs:
-                                additionalProperties:
-                                  type: string
-                                description: ExtraArgs is an extra set of flags to
-                                  pass to the control plane component.
-                                type: object
-                              extraVolumes:
-                                description: ExtraVolumes is an extra set of host
-                                  volumes, mounted to the control plane component.
-                                items:
-                                  description: |-
-                                    HostPathMount contains elements describing volumes that are mounted from the
-                                    host.
-                                  properties:
-                                    hostPath:
-                                      description: |-
-                                        HostPath is the path in the host that will be mounted inside
-                                        the pod.
-                                      type: string
-                                    mountPath:
-                                      description: MountPath is the path inside the
-                                        pod where hostPath will be mounted.
-                                      type: string
-                                    name:
-                                      description: Name of the volume inside the pod
-                                        template.
-                                      type: string
-                                    pathType:
-                                      description: PathType is the type of the HostPath.
-                                      type: string
-                                    readOnly:
-                                      description: ReadOnly controls write access
-                                        to the volume
-                                      type: boolean
-                                  required:
-                                  - hostPath
-                                  - mountPath
-                                  - name
-                                  type: object
-                                type: array
-                            type: object
-                          dns:
-                            description: DNS defines the options for the DNS add-on
-                              installed in the cluster.
-                            properties:
-                              imageRepository:
-                                description: |-
-                                  ImageRepository sets the container registry to pull images from.
-                                  if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
-                                type: string
-                              imageTag:
-                                description: |-
-                                  ImageTag allows to specify a tag for the image.
-                                  In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
-                                type: string
-                              type:
-                                description: Type defines the DNS add-on to be used
-                                type: string
-                            type: object
-                          etcd:
-                            description: |-
-                              Etcd holds configuration for etcd.
-                              NB: This value defaults to a Local (stacked) etcd
-                            properties:
-                              external:
-                                description: |-
-                                  External describes how to connect to an external etcd cluster
-                                  Local and External are mutually exclusive
-                                properties:
-                                  caFile:
-                                    description: |-
-                                      CAFile is an SSL Certificate Authority file used to secure etcd communication.
-                                      Required if using a TLS connection.
-                                    type: string
-                                  certFile:
-                                    description: |-
-                                      CertFile is an SSL certification file used to secure etcd communication.
-                                      Required if using a TLS connection.
-                                    type: string
-                                  endpoints:
-                                    description: Endpoints of etcd members. Required
-                                      for ExternalEtcd.
-                                    items:
-                                      type: string
-                                    type: array
-                                  keyFile:
-                                    description: |-
-                                      KeyFile is an SSL key file used to secure etcd communication.
-                                      Required if using a TLS connection.
-                                    type: string
-                                required:
-                                - caFile
-                                - certFile
-                                - endpoints
-                                - keyFile
-                                type: object
-                              local:
-                                description: |-
-                                  Local provides configuration knobs for configuring the local etcd instance
-                                  Local and External are mutually exclusive
-                                properties:
-                                  dataDir:
-                                    description: |-
-                                      DataDir is the directory etcd will place its data.
-                                      Defaults to "/var/lib/etcd".
-                                    type: string
-                                  extraArgs:
-                                    additionalProperties:
-                                      type: string
-                                    description: |-
-                                      ExtraArgs are extra arguments provided to the etcd binary
-                                      when run inside a static pod.
-                                    type: object
-                                  imageRepository:
-                                    description: |-
-                                      ImageRepository sets the container registry to pull images from.
-                                      if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
-                                    type: string
-                                  imageTag:
-                                    description: |-
-                                      ImageTag allows to specify a tag for the image.
-                                      In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
-                                    type: string
-                                  peerCertSANs:
-                                    description: PeerCertSANs sets extra Subject Alternative
-                                      Names for the etcd peer signing cert.
-                                    items:
-                                      type: string
-                                    type: array
-                                  serverCertSANs:
-                                    description: ServerCertSANs sets extra Subject
-                                      Alternative Names for the etcd server signing
-                                      cert.
-                                    items:
-                                      type: string
-                                    type: array
-                                type: object
-                            type: object
-                          featureGates:
-                            additionalProperties:
-                              type: boolean
-                            description: FeatureGates enabled by the user.
-                            type: object
-                          imageRepository:
-                            description: |-
-                              ImageRepository sets the container registry to pull images from.
-                              If empty, `k8s.gcr.io` will be used by default; in case of kubernetes version is a CI build (kubernetes version starts with `ci/` or `ci-cross/`)
-                              `gcr.io/k8s-staging-ci-images` will be used as a default for control plane components and for kube-proxy, while `k8s.gcr.io`
-                              will be used for all the other images.
-                            type: string
-                          kind:
-                            description: |-
-                              Kind is a string value representing the REST resource this object represents.
-                              Servers may infer this from the endpoint the client submits requests to.
-                              Cannot be updated.
-                              In CamelCase.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                            type: string
-                          kubernetesVersion:
-                            description: |-
-                              KubernetesVersion is the target version of the control plane.
-                              NB: This value defaults to the Machine object spec.version
-                            type: string
-                          networking:
-                            description: |-
-                              Networking holds configuration for the networking topology of the cluster.
-                              NB: This value defaults to the Cluster object spec.clusterNetwork.
-                            properties:
-                              dnsDomain:
-                                description: DNSDomain is the dns domain used by k8s
-                                  services. Defaults to "cluster.local".
-                                type: string
-                              podSubnet:
-                                description: |-
-                                  PodSubnet is the subnet used by pods.
-                                  If unset, the API server will not allocate CIDR ranges for every node.
-                                  Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.services.cidrBlocks if that is set
-                                type: string
-                              serviceSubnet:
-                                description: |-
-                                  ServiceSubnet is the subnet used by k8s services.
-                                  Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.pods.cidrBlocks, or
-                                  to "10.96.0.0/12" if that's unset.
-                                type: string
-                            type: object
-                          scheduler:
-                            description: Scheduler contains extra settings for the
-                              scheduler control plane component
-                            properties:
-                              extraArgs:
-                                additionalProperties:
-                                  type: string
-                                description: ExtraArgs is an extra set of flags to
-                                  pass to the control plane component.
-                                type: object
-                              extraVolumes:
-                                description: ExtraVolumes is an extra set of host
-                                  volumes, mounted to the control plane component.
-                                items:
-                                  description: |-
-                                    HostPathMount contains elements describing volumes that are mounted from the
-                                    host.
-                                  properties:
-                                    hostPath:
-                                      description: |-
-                                        HostPath is the path in the host that will be mounted inside
-                                        the pod.
-                                      type: string
-                                    mountPath:
-                                      description: MountPath is the path inside the
-                                        pod where hostPath will be mounted.
-                                      type: string
-                                    name:
-                                      description: Name of the volume inside the pod
-                                        template.
-                                      type: string
-                                    pathType:
-                                      description: PathType is the type of the HostPath.
-                                      type: string
-                                    readOnly:
-                                      description: ReadOnly controls write access
-                                        to the volume
-                                      type: boolean
-                                  required:
-                                  - hostPath
-                                  - mountPath
-                                  - name
-                                  type: object
-                                type: array
-                            type: object
-                          useHyperKubeImage:
-                            description: UseHyperKubeImage controls if hyperkube should
-                              be used for Kubernetes components instead of their respective
-                              separate images
-                            type: boolean
-                        type: object
-                      diskSetup:
-                        description: diskSetup specifies options for the creation
-                          of partition tables and file systems on devices.
-                        properties:
-                          filesystems:
-                            description: filesystems specifies the list of file systems
-                              to setup.
-                            items:
-                              description: Filesystem defines the file systems to
-                                be created.
-                              properties:
-                                device:
-                                  description: device specifies the device name
-                                  type: string
-                                extraOpts:
-                                  description: extraOpts defined extra options to
-                                    add to the command for creating the file system.
-                                  items:
-                                    type: string
-                                  type: array
-                                filesystem:
-                                  description: filesystem specifies the file system
-                                    type.
-                                  type: string
-                                label:
-                                  description: label specifies the file system label
-                                    to be used. If set to None, no label is used.
-                                  type: string
-                                overwrite:
-                                  description: |-
-                                    overwrite defines whether or not to overwrite any existing filesystem.
-                                    If true, any pre-existing file system will be destroyed. Use with Caution.
-                                  type: boolean
-                                partition:
-                                  description: 'partition specifies the partition
-                                    to use. The valid options are: "auto|any", "auto",
-                                    "any", "none", and <NUM>, where NUM is the actual
-                                    partition number.'
-                                  type: string
-                                replaceFS:
-                                  description: |-
-                                    replaceFS is a special directive, used for Microsoft Azure that instructs cloud-init to replace a file system of <FS_TYPE>.
-                                    NOTE: unless you define a label, this requires the use of the 'any' partition directive.
-                                  type: string
-                              required:
-                              - device
-                              - filesystem
-                              - label
-                              type: object
-                            type: array
-                          partitions:
-                            description: partitions specifies the list of the partitions
-                              to setup.
-                            items:
-                              description: Partition defines how to create and layout
-                                a partition.
-                              properties:
-                                device:
-                                  description: device is the name of the device.
-                                  type: string
-                                layout:
-                                  description: |-
-                                    layout specifies the device layout.
-                                    If it is true, a single partition will be created for the entire device.
-                                    When layout is false, it means don't partition or ignore existing partitioning.
-                                  type: boolean
-                                overwrite:
-                                  description: |-
-                                    overwrite describes whether to skip checks and create the partition if a partition or filesystem is found on the device.
-                                    Use with caution. Default is 'false'.
-                                  type: boolean
-                                tableType:
-                                  description: |-
-                                    tableType specifies the tupe of partition table. The following are supported:
-                                    'mbr': default and setups a MS-DOS partition table
-                                    'gpt': setups a GPT partition table
-                                  type: string
-                              required:
-                              - device
-                              - layout
-                              type: object
-                            type: array
-                        type: object
-                      files:
-                        description: files specifies extra files to be passed to user_data
-                          upon creation.
-                        items:
-                          description: File defines the input for generating write_files
-                            in cloud-init.
-                          properties:
-                            content:
-                              description: content is the actual content of the file.
-                              type: string
-                            contentFrom:
-                              description: contentFrom is a referenced source of content
-                                to populate the file.
-                              properties:
-                                secret:
-                                  description: secret represents a secret that should
-                                    populate this file.
-                                  properties:
-                                    key:
-                                      description: key is the key in the secret's
-                                        data map for this value.
-                                      type: string
-                                    name:
-                                      description: name of the secret in the KubeadmBootstrapConfig's
-                                        namespace to use.
-                                      type: string
-                                  required:
-                                  - key
-                                  - name
-                                  type: object
-                              required:
-                              - secret
-                              type: object
-                            encoding:
-                              description: encoding specifies the encoding of the
-                                file contents.
-                              enum:
-                              - base64
-                              - gzip
-                              - gzip+base64
-                              type: string
-                            owner:
-                              description: owner specifies the ownership of the file,
-                                e.g. "root:root".
-                              type: string
-                            path:
-                              description: path specifies the full path on disk where
-                                to store the file.
-                              type: string
-                            permissions:
-                              description: permissions specifies the permissions to
-                                assign to the file, e.g. "0640".
-                              type: string
-                          required:
-                          - path
-                          type: object
-                        type: array
-                      format:
-                        description: format specifies the output format of the bootstrap
-                          data
-                        enum:
-                        - cloud-config
-                        type: string
-                      initConfiguration:
-                        description: initConfiguration along with ClusterConfiguration
-                          are the configurations necessary for the init command
-                        properties:
-                          apiVersion:
-                            description: |-
-                              APIVersion defines the versioned schema of this representation of an object.
-                              Servers should convert recognized schemas to the latest internal value, and
-                              may reject unrecognized values.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-                            type: string
-                          bootstrapTokens:
-                            description: |-
-                              BootstrapTokens is respected at `kubeadm init` time and describes a set of Bootstrap Tokens to create.
-                              This information IS NOT uploaded to the kubeadm cluster configmap, partly because of its sensitive nature
-                            items:
-                              description: BootstrapToken describes one bootstrap
-                                token, stored as a Secret in the cluster.
-                              properties:
-                                description:
-                                  description: |-
-                                    Description sets a human-friendly message why this token exists and what it's used
-                                    for, so other administrators can know its purpose.
-                                  type: string
-                                expires:
-                                  description: |-
-                                    Expires specifies the timestamp when this token expires. Defaults to being set
-                                    dynamically at runtime based on the TTL. Expires and TTL are mutually exclusive.
-                                  format: date-time
-                                  type: string
-                                groups:
-                                  description: |-
-                                    Groups specifies the extra groups that this token will authenticate as when/if
-                                    used for authentication
-                                  items:
-                                    type: string
-                                  type: array
-                                token:
-                                  description: |-
-                                    Token is used for establishing bidirectional trust between nodes and control-planes.
-                                    Used for joining nodes in the cluster.
-                                  type: string
-                                ttl:
-                                  description: |-
-                                    TTL defines the time to live for this token. Defaults to 24h.
-                                    Expires and TTL are mutually exclusive.
-                                  type: string
-                                usages:
-                                  description: |-
-                                    Usages describes the ways in which this token can be used. Can by default be used
-                                    for establishing bidirectional trust, but that can be changed here.
-                                  items:
-                                    type: string
-                                  type: array
-                              required:
-                              - token
-                              type: object
-                            type: array
-                          kind:
-                            description: |-
-                              Kind is a string value representing the REST resource this object represents.
-                              Servers may infer this from the endpoint the client submits requests to.
-                              Cannot be updated.
-                              In CamelCase.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                            type: string
-                          localAPIEndpoint:
-                            description: |-
-                              LocalAPIEndpoint represents the endpoint of the API server instance that's deployed on this control plane node
-                              In HA setups, this differs from ClusterConfiguration.ControlPlaneEndpoint in the sense that ControlPlaneEndpoint
-                              is the global endpoint for the cluster, which then loadbalances the requests to each individual API server. This
-                              configuration object lets you customize what IP/DNS name and port the local API server advertises it's accessible
-                              on. By default, kubeadm tries to auto-detect the IP of the default interface and use that, but in case that process
-                              fails you may set the desired value here.
-                            properties:
-                              advertiseAddress:
-                                description: AdvertiseAddress sets the IP address
-                                  for the API server to advertise.
-                                type: string
-                              bindPort:
-                                description: |-
-                                  BindPort sets the secure port for the API Server to bind to.
-                                  Defaults to 6443.
-                                format: int32
-                                type: integer
-                            required:
-                            - advertiseAddress
-                            - bindPort
-                            type: object
-                          nodeRegistration:
-                            description: |-
-                              NodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
-                              When used in the context of control plane nodes, NodeRegistration should remain consistent
-                              across both InitConfiguration and JoinConfiguration
-                            properties:
-                              criSocket:
-                                description: CRISocket is used to retrieve container
-                                  runtime info. This information will be annotated
-                                  to the Node API object, for later re-use
-                                type: string
-                              kubeletExtraArgs:
-                                additionalProperties:
-                                  type: string
-                                description: |-
-                                  KubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
-                                  kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
-                                  Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
-                                type: object
-                              name:
-                                description: |-
-                                  Name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
-                                  This field is also used in the CommonName field of the kubelet's client certificate to the API server.
-                                  Defaults to the hostname of the node if not provided.
-                                type: string
-                              taints:
-                                description: |-
-                                  Taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
-                                  it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
-                                  empty slice, i.e. `taints: {}` in the YAML file. This field is solely used for Node registration.
-                                items:
-                                  description: |-
-                                    The node this Taint is attached to has the "effect" on
-                                    any pod that does not tolerate the Taint.
-                                  properties:
-                                    effect:
-                                      description: |-
-                                        Required. The effect of the taint on pods
-                                        that do not tolerate the taint.
-                                        Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
-                                      type: string
-                                    key:
-                                      description: Required. The taint key to be applied
-                                        to a node.
-                                      type: string
-                                    timeAdded:
-                                      description: |-
-                                        TimeAdded represents the time at which the taint was added.
-                                        It is only written for NoExecute taints.
-                                      format: date-time
-                                      type: string
-                                    value:
-                                      description: The taint value corresponding to
-                                        the taint key.
-                                      type: string
-                                  required:
-                                  - effect
-                                  - key
-                                  type: object
-                                type: array
-                            type: object
-                        type: object
-                      joinConfiguration:
-                        description: joinConfiguration is the kubeadm configuration
-                          for the join command
-                        properties:
-                          apiVersion:
-                            description: |-
-                              APIVersion defines the versioned schema of this representation of an object.
-                              Servers should convert recognized schemas to the latest internal value, and
-                              may reject unrecognized values.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-                            type: string
-                          caCertPath:
-                            description: |-
-                              CACertPath is the path to the SSL certificate authority used to
-                              secure comunications between node and control-plane.
-                              Defaults to "/etc/kubernetes/pki/ca.crt".
-                            type: string
-                          controlPlane:
-                            description: |-
-                              ControlPlane defines the additional control plane instance to be deployed on the joining node.
-                              If nil, no additional control plane instance will be deployed.
-                            properties:
-                              localAPIEndpoint:
-                                description: LocalAPIEndpoint represents the endpoint
-                                  of the API server instance to be deployed on this
-                                  node.
-                                properties:
-                                  advertiseAddress:
-                                    description: AdvertiseAddress sets the IP address
-                                      for the API server to advertise.
-                                    type: string
-                                  bindPort:
-                                    description: |-
-                                      BindPort sets the secure port for the API Server to bind to.
-                                      Defaults to 6443.
-                                    format: int32
-                                    type: integer
-                                required:
-                                - advertiseAddress
-                                - bindPort
-                                type: object
-                            type: object
-                          discovery:
-                            description: Discovery specifies the options for the kubelet
-                              to use during the TLS Bootstrap process
-                            properties:
-                              bootstrapToken:
-                                description: |-
-                                  BootstrapToken is used to set the options for bootstrap token based discovery
-                                  BootstrapToken and File are mutually exclusive
-                                properties:
-                                  apiServerEndpoint:
-                                    description: APIServerEndpoint is an IP or domain
-                                      name to the API server from which info will
-                                      be fetched.
-                                    type: string
-                                  caCertHashes:
-                                    description: |-
-                                      CACertHashes specifies a set of public key pins to verify
-                                      when token-based discovery is used. The root CA found during discovery
-                                      must match one of these values. Specifying an empty set disables root CA
-                                      pinning, which can be unsafe. Each hash is specified as "<type>:<value>",
-                                      where the only currently supported type is "sha256". This is a hex-encoded
-                                      SHA-256 hash of the Subject Public Key Info (SPKI) object in DER-encoded
-                                      ASN.1. These hashes can be calculated using, for example, OpenSSL:
-                                      openssl x509 -pubkey -in ca.crt openssl rsa -pubin -outform der 2>&/dev/null | openssl dgst -sha256 -hex
-                                    items:
-                                      type: string
-                                    type: array
-                                  token:
-                                    description: |-
-                                      Token is a token used to validate cluster information
-                                      fetched from the control-plane.
-                                    type: string
-                                  unsafeSkipCAVerification:
-                                    description: |-
-                                      UnsafeSkipCAVerification allows token-based discovery
-                                      without CA verification via CACertHashes. This can weaken
-                                      the security of kubeadm since other nodes can impersonate the control-plane.
-                                    type: boolean
-                                required:
-                                - token
-                                - unsafeSkipCAVerification
-                                type: object
-                              file:
-                                description: |-
-                                  File is used to specify a file or URL to a kubeconfig file from which to load cluster information
-                                  BootstrapToken and File are mutually exclusive
-                                properties:
-                                  kubeConfigPath:
-                                    description: KubeConfigPath is used to specify
-                                      the actual file path or URL to the kubeconfig
-                                      file from which to load cluster information
-                                    type: string
-                                required:
-                                - kubeConfigPath
-                                type: object
-                              timeout:
-                                description: Timeout modifies the discovery timeout
-                                type: string
-                              tlsBootstrapToken:
-                                description: |-
-                                  TLSBootstrapToken is a token used for TLS bootstrapping.
-                                  If .BootstrapToken is set, this field is defaulted to .BootstrapToken.Token, but can be overridden.
-                                  If .File is set, this field **must be set** in case the KubeConfigFile does not contain any other authentication information
-                                type: string
-                            type: object
-                          kind:
-                            description: |-
-                              Kind is a string value representing the REST resource this object represents.
-                              Servers may infer this from the endpoint the client submits requests to.
-                              Cannot be updated.
-                              In CamelCase.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                            type: string
-                          nodeRegistration:
-                            description: |-
-                              NodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
-                              When used in the context of control plane nodes, NodeRegistration should remain consistent
-                              across both InitConfiguration and JoinConfiguration
-                            properties:
-                              criSocket:
-                                description: CRISocket is used to retrieve container
-                                  runtime info. This information will be annotated
-                                  to the Node API object, for later re-use
-                                type: string
-                              kubeletExtraArgs:
-                                additionalProperties:
-                                  type: string
-                                description: |-
-                                  KubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
-                                  kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
-                                  Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
-                                type: object
-                              name:
-                                description: |-
-                                  Name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
-                                  This field is also used in the CommonName field of the kubelet's client certificate to the API server.
-                                  Defaults to the hostname of the node if not provided.
-                                type: string
-                              taints:
-                                description: |-
-                                  Taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
-                                  it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
-                                  empty slice, i.e. `taints: {}` in the YAML file. This field is solely used for Node registration.
-                                items:
-                                  description: |-
-                                    The node this Taint is attached to has the "effect" on
-                                    any pod that does not tolerate the Taint.
-                                  properties:
-                                    effect:
-                                      description: |-
-                                        Required. The effect of the taint on pods
-                                        that do not tolerate the taint.
-                                        Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
-                                      type: string
-                                    key:
-                                      description: Required. The taint key to be applied
-                                        to a node.
-                                      type: string
-                                    timeAdded:
-                                      description: |-
-                                        TimeAdded represents the time at which the taint was added.
-                                        It is only written for NoExecute taints.
-                                      format: date-time
-                                      type: string
-                                    value:
-                                      description: The taint value corresponding to
-                                        the taint key.
-                                      type: string
-                                  required:
-                                  - effect
-                                  - key
-                                  type: object
-                                type: array
-                            type: object
-                        type: object
-                      mounts:
-                        description: mounts specifies a list of mount points to be
-                          setup.
-                        items:
-                          description: MountPoints defines input for generated mounts
-                            in cloud-init.
-                          items:
-                            type: string
-                          type: array
-                        type: array
-                      ntp:
-                        description: ntp specifies NTP configuration
-                        properties:
-                          enabled:
-                            description: enabled specifies whether NTP should be enabled
-                            type: boolean
-                          servers:
-                            description: servers specifies which NTP servers to use
-                            items:
-                              type: string
-                            type: array
-                        type: object
-                      postKubeadmCommands:
-                        description: postKubeadmCommands specifies extra commands
-                          to run after kubeadm runs
-                        items:
-                          type: string
-                        type: array
-                      preKubeadmCommands:
-                        description: preKubeadmCommands specifies extra commands to
-                          run before kubeadm runs
-                        items:
-                          type: string
-                        type: array
-                      useExperimentalRetryJoin:
-                        description: |-
-                          useExperimentalRetryJoin replaces a basic kubeadm command with a shell
-                          script with retries for joins.
-
-                          This is meant to be an experimental temporary workaround on some environments
-                          where joins fail due to timing (and other issues). The long term goal is to add retries to
-                          kubeadm proper and use that functionality.
-
-                          This will add about 40KB to userdata
-
-                          For more information, refer to https://github.com/kubernetes-sigs/cluster-api/pull/2763#discussion_r397306055.
-                        type: boolean
-                      users:
-                        description: users specifies extra users to add
-                        items:
-                          description: User defines the input for a generated user
-                            in cloud-init.
-                          properties:
-                            gecos:
-                              description: gecos specifies the gecos to use for the
-                                user
-                              type: string
-                            groups:
-                              description: groups specifies the additional groups
-                                for the user
-                              type: string
-                            homeDir:
-                              description: homeDir specifies the home directory to
-                                use for the user
-                              type: string
-                            inactive:
-                              description: inactive specifies whether to mark the
-                                user as inactive
-                              type: boolean
-                            lockPassword:
-                              description: lockPassword specifies if password login
-                                should be disabled
-                              type: boolean
-                            name:
-                              description: name specifies the user name
-                              type: string
-                            passwd:
-                              description: passwd specifies a hashed password for
-                                the user
-                              type: string
-                            primaryGroup:
-                              description: primaryGroup specifies the primary group
-                                for the user
-                              type: string
-                            shell:
-                              description: shell specifies the user's shell
-                              type: string
-                            sshAuthorizedKeys:
-                              description: sshAuthorizedKeys specifies a list of ssh
-                                authorized keys for the user
-                              items:
-                                type: string
-                              type: array
-                            sudo:
-                              description: sudo specifies a sudo role for the user
-                              type: string
-                          required:
-                          - name
-                          type: object
-                        type: array
-                      verbosity:
-                        description: |-
-                          verbosity is the number for the kubeadm log level verbosity.
-                          It overrides the `--v` flag in kubeadm commands.
-                        format: int32
-                        type: integer
-                    type: object
-                type: object
-            required:
-            - template
-            type: object
-        type: object
-    served: false
-    storage: false
-  - additionalPrinterColumns:
-    - description: Time duration since creation of KubeadmConfigTemplate
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    deprecated: true
-    name: v1alpha4
-    schema:
-      openAPIV3Schema:
-        description: |-
-          KubeadmConfigTemplate is the Schema for the kubeadmconfigtemplates API.
-
-          Deprecated: This type will be removed in one of the next releases.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: KubeadmConfigTemplateSpec defines the desired state of KubeadmConfigTemplate.
-            properties:
-              template:
-                description: KubeadmConfigTemplateResource defines the Template structure.
-                properties:
-                  spec:
-                    description: |-
-                      KubeadmConfigSpec defines the desired state of KubeadmConfig.
-                      Either ClusterConfiguration and InitConfiguration should be defined or the JoinConfiguration should be defined.
-                    properties:
-                      clusterConfiguration:
-                        description: clusterConfiguration along with InitConfiguration
-                          are the configurations necessary for the init command
-                        properties:
-                          apiServer:
-                            description: apiServer contains extra settings for the
-                              API server control plane component
-                            properties:
-                              certSANs:
-                                description: certSANs sets extra Subject Alternative
-                                  Names for the API Server signing cert.
-                                items:
-                                  type: string
-                                type: array
-                              extraArgs:
-                                additionalProperties:
-                                  type: string
-                                description: extraArgs is an extra set of flags to
-                                  pass to the control plane component.
-                                type: object
-                              extraVolumes:
-                                description: extraVolumes is an extra set of host
-                                  volumes, mounted to the control plane component.
-                                items:
-                                  description: |-
-                                    HostPathMount contains elements describing volumes that are mounted from the
-                                    host.
-                                  properties:
-                                    hostPath:
-                                      description: |-
-                                        hostPath is the path in the host that will be mounted inside
-                                        the pod.
-                                      type: string
-                                    mountPath:
-                                      description: mountPath is the path inside the
-                                        pod where hostPath will be mounted.
-                                      type: string
-                                    name:
-                                      description: name of the volume inside the pod
-                                        template.
-                                      type: string
-                                    pathType:
-                                      description: pathType is the type of the HostPath.
-                                      type: string
-                                    readOnly:
-                                      description: readOnly controls write access
-                                        to the volume
-                                      type: boolean
-                                  required:
-                                  - hostPath
-                                  - mountPath
-                                  - name
-                                  type: object
-                                type: array
-                              timeoutForControlPlane:
-                                description: timeoutForControlPlane controls the timeout
-                                  that we use for API server to appear
-                                type: string
-                            type: object
-                          apiVersion:
-                            description: |-
-                              APIVersion defines the versioned schema of this representation of an object.
-                              Servers should convert recognized schemas to the latest internal value, and
-                              may reject unrecognized values.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-                            type: string
-                          certificatesDir:
-                            description: |-
-                              certificatesDir specifies where to store or look for all required certificates.
-                              NB: if not provided, this will default to `/etc/kubernetes/pki`
-                            type: string
-                          clusterName:
-                            description: The cluster name
-                            type: string
-                          controlPlaneEndpoint:
-                            description: |-
-                              controlPlaneEndpoint sets a stable IP address or DNS name for the control plane; it
-                              can be a valid IP address or a RFC-1123 DNS subdomain, both with optional TCP port.
-                              In case the ControlPlaneEndpoint is not specified, the AdvertiseAddress + BindPort
-                              are used; in case the ControlPlaneEndpoint is specified but without a TCP port,
-                              the BindPort is used.
-                              Possible usages are:
-                              e.g. In a cluster with more than one control plane instances, this field should be
-                              assigned the address of the external load balancer in front of the
-                              control plane instances.
-                              e.g.  in environments with enforced node recycling, the ControlPlaneEndpoint
-                              could be used for assigning a stable DNS to the control plane.
-                              NB: This value defaults to the first value in the Cluster object status.apiEndpoints array.
-                            type: string
-                          controllerManager:
-                            description: controllerManager contains extra settings
-                              for the controller manager control plane component
-                            properties:
-                              extraArgs:
-                                additionalProperties:
-                                  type: string
-                                description: extraArgs is an extra set of flags to
-                                  pass to the control plane component.
-                                type: object
-                              extraVolumes:
-                                description: extraVolumes is an extra set of host
-                                  volumes, mounted to the control plane component.
-                                items:
-                                  description: |-
-                                    HostPathMount contains elements describing volumes that are mounted from the
-                                    host.
-                                  properties:
-                                    hostPath:
-                                      description: |-
-                                        hostPath is the path in the host that will be mounted inside
-                                        the pod.
-                                      type: string
-                                    mountPath:
-                                      description: mountPath is the path inside the
-                                        pod where hostPath will be mounted.
-                                      type: string
-                                    name:
-                                      description: name of the volume inside the pod
-                                        template.
-                                      type: string
-                                    pathType:
-                                      description: pathType is the type of the HostPath.
-                                      type: string
-                                    readOnly:
-                                      description: readOnly controls write access
-                                        to the volume
-                                      type: boolean
-                                  required:
-                                  - hostPath
-                                  - mountPath
-                                  - name
-                                  type: object
-                                type: array
-                            type: object
-                          dns:
-                            description: dns defines the options for the DNS add-on
-                              installed in the cluster.
-                            properties:
-                              imageRepository:
-                                description: |-
-                                  imageRepository sets the container registry to pull images from.
-                                  if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
-                                type: string
-                              imageTag:
-                                description: |-
-                                  imageTag allows to specify a tag for the image.
-                                  In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
-                                type: string
-                            type: object
-                          etcd:
-                            description: |-
-                              etcd holds configuration for etcd.
-                              NB: This value defaults to a Local (stacked) etcd
-                            properties:
-                              external:
-                                description: |-
-                                  external describes how to connect to an external etcd cluster
-                                  Local and External are mutually exclusive
-                                properties:
-                                  caFile:
-                                    description: |-
-                                      caFile is an SSL Certificate Authority file used to secure etcd communication.
-                                      Required if using a TLS connection.
-                                    type: string
-                                  certFile:
-                                    description: |-
-                                      certFile is an SSL certification file used to secure etcd communication.
-                                      Required if using a TLS connection.
-                                    type: string
-                                  endpoints:
-                                    description: endpoints of etcd members. Required
-                                      for ExternalEtcd.
-                                    items:
-                                      type: string
-                                    type: array
-                                  keyFile:
-                                    description: |-
-                                      keyFile is an SSL key file used to secure etcd communication.
-                                      Required if using a TLS connection.
-                                    type: string
-                                required:
-                                - caFile
-                                - certFile
-                                - endpoints
-                                - keyFile
-                                type: object
-                              local:
-                                description: |-
-                                  local provides configuration knobs for configuring the local etcd instance
-                                  Local and External are mutually exclusive
-                                properties:
-                                  dataDir:
-                                    description: |-
-                                      dataDir is the directory etcd will place its data.
-                                      Defaults to "/var/lib/etcd".
-                                    type: string
-                                  extraArgs:
-                                    additionalProperties:
-                                      type: string
-                                    description: |-
-                                      extraArgs are extra arguments provided to the etcd binary
-                                      when run inside a static pod.
-                                    type: object
-                                  imageRepository:
-                                    description: |-
-                                      imageRepository sets the container registry to pull images from.
-                                      if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
-                                    type: string
-                                  imageTag:
-                                    description: |-
-                                      imageTag allows to specify a tag for the image.
-                                      In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
-                                    type: string
-                                  peerCertSANs:
-                                    description: peerCertSANs sets extra Subject Alternative
-                                      Names for the etcd peer signing cert.
-                                    items:
-                                      type: string
-                                    type: array
-                                  serverCertSANs:
-                                    description: serverCertSANs sets extra Subject
-                                      Alternative Names for the etcd server signing
-                                      cert.
-                                    items:
-                                      type: string
-                                    type: array
-                                type: object
-                            type: object
-                          featureGates:
-                            additionalProperties:
-                              type: boolean
-                            description: featureGates enabled by the user.
-                            type: object
-                          imageRepository:
-                            description: |-
-                              imageRepository sets the container registry to pull images from.
-                              If empty, `registry.k8s.io` will be used by default; in case of kubernetes version is a CI build (kubernetes version starts with `ci/` or `ci-cross/`)
-                              `gcr.io/k8s-staging-ci-images` will be used as a default for control plane components and for kube-proxy, while `registry.k8s.io`
-                              will be used for all the other images.
-                            type: string
-                          kind:
-                            description: |-
-                              Kind is a string value representing the REST resource this object represents.
-                              Servers may infer this from the endpoint the client submits requests to.
-                              Cannot be updated.
-                              In CamelCase.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                            type: string
-                          kubernetesVersion:
-                            description: |-
-                              kubernetesVersion is the target version of the control plane.
-                              NB: This value defaults to the Machine object spec.version
-                            type: string
-                          networking:
-                            description: |-
-                              networking holds configuration for the networking topology of the cluster.
-                              NB: This value defaults to the Cluster object spec.clusterNetwork.
-                            properties:
-                              dnsDomain:
-                                description: dnsDomain is the dns domain used by k8s
-                                  services. Defaults to "cluster.local".
-                                type: string
-                              podSubnet:
-                                description: |-
-                                  podSubnet is the subnet used by pods.
-                                  If unset, the API server will not allocate CIDR ranges for every node.
-                                  Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.services.cidrBlocks if that is set
-                                type: string
-                              serviceSubnet:
-                                description: |-
-                                  serviceSubnet is the subnet used by k8s services.
-                                  Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.pods.cidrBlocks, or
-                                  to "10.96.0.0/12" if that's unset.
-                                type: string
-                            type: object
-                          scheduler:
-                            description: scheduler contains extra settings for the
-                              scheduler control plane component
-                            properties:
-                              extraArgs:
-                                additionalProperties:
-                                  type: string
-                                description: extraArgs is an extra set of flags to
-                                  pass to the control plane component.
-                                type: object
-                              extraVolumes:
-                                description: extraVolumes is an extra set of host
-                                  volumes, mounted to the control plane component.
-                                items:
-                                  description: |-
-                                    HostPathMount contains elements describing volumes that are mounted from the
-                                    host.
-                                  properties:
-                                    hostPath:
-                                      description: |-
-                                        hostPath is the path in the host that will be mounted inside
-                                        the pod.
-                                      type: string
-                                    mountPath:
-                                      description: mountPath is the path inside the
-                                        pod where hostPath will be mounted.
-                                      type: string
-                                    name:
-                                      description: name of the volume inside the pod
-                                        template.
-                                      type: string
-                                    pathType:
-                                      description: pathType is the type of the HostPath.
-                                      type: string
-                                    readOnly:
-                                      description: readOnly controls write access
-                                        to the volume
-                                      type: boolean
-                                  required:
-                                  - hostPath
-                                  - mountPath
-                                  - name
-                                  type: object
-                                type: array
-                            type: object
-                        type: object
-                      diskSetup:
-                        description: diskSetup specifies options for the creation
-                          of partition tables and file systems on devices.
-                        properties:
-                          filesystems:
-                            description: filesystems specifies the list of file systems
-                              to setup.
-                            items:
-                              description: Filesystem defines the file systems to
-                                be created.
-                              properties:
-                                device:
-                                  description: device specifies the device name
-                                  type: string
-                                extraOpts:
-                                  description: extraOpts defined extra options to
-                                    add to the command for creating the file system.
-                                  items:
-                                    type: string
-                                  type: array
-                                filesystem:
-                                  description: filesystem specifies the file system
-                                    type.
-                                  type: string
-                                label:
-                                  description: label specifies the file system label
-                                    to be used. If set to None, no label is used.
-                                  type: string
-                                overwrite:
-                                  description: |-
-                                    overwrite defines whether or not to overwrite any existing filesystem.
-                                    If true, any pre-existing file system will be destroyed. Use with Caution.
-                                  type: boolean
-                                partition:
-                                  description: 'partition specifies the partition
-                                    to use. The valid options are: "auto|any", "auto",
-                                    "any", "none", and <NUM>, where NUM is the actual
-                                    partition number.'
-                                  type: string
-                                replaceFS:
-                                  description: |-
-                                    replaceFS is a special directive, used for Microsoft Azure that instructs cloud-init to replace a file system of <FS_TYPE>.
-                                    NOTE: unless you define a label, this requires the use of the 'any' partition directive.
-                                  type: string
-                              required:
-                              - device
-                              - filesystem
-                              - label
-                              type: object
-                            type: array
-                          partitions:
-                            description: partitions specifies the list of the partitions
-                              to setup.
-                            items:
-                              description: Partition defines how to create and layout
-                                a partition.
-                              properties:
-                                device:
-                                  description: device is the name of the device.
-                                  type: string
-                                layout:
-                                  description: |-
-                                    layout specifies the device layout.
-                                    If it is true, a single partition will be created for the entire device.
-                                    When layout is false, it means don't partition or ignore existing partitioning.
-                                  type: boolean
-                                overwrite:
-                                  description: |-
-                                    overwrite describes whether to skip checks and create the partition if a partition or filesystem is found on the device.
-                                    Use with caution. Default is 'false'.
-                                  type: boolean
-                                tableType:
-                                  description: |-
-                                    tableType specifies the tupe of partition table. The following are supported:
-                                    'mbr': default and setups a MS-DOS partition table
-                                    'gpt': setups a GPT partition table
-                                  type: string
-                              required:
-                              - device
-                              - layout
-                              type: object
-                            type: array
-                        type: object
-                      files:
-                        description: files specifies extra files to be passed to user_data
-                          upon creation.
-                        items:
-                          description: File defines the input for generating write_files
-                            in cloud-init.
-                          properties:
-                            content:
-                              description: content is the actual content of the file.
-                              type: string
-                            contentFrom:
-                              description: contentFrom is a referenced source of content
-                                to populate the file.
-                              properties:
-                                secret:
-                                  description: secret represents a secret that should
-                                    populate this file.
-                                  properties:
-                                    key:
-                                      description: key is the key in the secret's
-                                        data map for this value.
-                                      type: string
-                                    name:
-                                      description: name of the secret in the KubeadmBootstrapConfig's
-                                        namespace to use.
-                                      type: string
-                                  required:
-                                  - key
-                                  - name
-                                  type: object
-                              required:
-                              - secret
-                              type: object
-                            encoding:
-                              description: encoding specifies the encoding of the
-                                file contents.
-                              enum:
-                              - base64
-                              - gzip
-                              - gzip+base64
-                              type: string
-                            owner:
-                              description: owner specifies the ownership of the file,
-                                e.g. "root:root".
-                              type: string
-                            path:
-                              description: path specifies the full path on disk where
-                                to store the file.
-                              type: string
-                            permissions:
-                              description: permissions specifies the permissions to
-                                assign to the file, e.g. "0640".
-                              type: string
-                          required:
-                          - path
-                          type: object
-                        type: array
-                      format:
-                        description: format specifies the output format of the bootstrap
-                          data
-                        enum:
-                        - cloud-config
-                        type: string
-                      initConfiguration:
-                        description: initConfiguration along with ClusterConfiguration
-                          are the configurations necessary for the init command
-                        properties:
-                          apiVersion:
-                            description: |-
-                              APIVersion defines the versioned schema of this representation of an object.
-                              Servers should convert recognized schemas to the latest internal value, and
-                              may reject unrecognized values.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-                            type: string
-                          bootstrapTokens:
-                            description: |-
-                              bootstrapTokens is respected at `kubeadm init` time and describes a set of Bootstrap Tokens to create.
-                              This information IS NOT uploaded to the kubeadm cluster configmap, partly because of its sensitive nature
-                            items:
-                              description: BootstrapToken describes one bootstrap
-                                token, stored as a Secret in the cluster.
-                              properties:
-                                description:
-                                  description: |-
-                                    description sets a human-friendly message why this token exists and what it's used
-                                    for, so other administrators can know its purpose.
-                                  type: string
-                                expires:
-                                  description: |-
-                                    expires specifies the timestamp when this token expires. Defaults to being set
-                                    dynamically at runtime based on the TTL. Expires and TTL are mutually exclusive.
-                                  format: date-time
-                                  type: string
-                                groups:
-                                  description: |-
-                                    groups specifies the extra groups that this token will authenticate as when/if
-                                    used for authentication
-                                  items:
-                                    type: string
-                                  type: array
-                                token:
-                                  description: |-
-                                    token is used for establishing bidirectional trust between nodes and control-planes.
-                                    Used for joining nodes in the cluster.
-                                  type: string
-                                ttl:
-                                  description: |-
-                                    ttl defines the time to live for this token. Defaults to 24h.
-                                    Expires and TTL are mutually exclusive.
-                                  type: string
-                                usages:
-                                  description: |-
-                                    usages describes the ways in which this token can be used. Can by default be used
-                                    for establishing bidirectional trust, but that can be changed here.
-                                  items:
-                                    type: string
-                                  type: array
-                              required:
-                              - token
-                              type: object
-                            type: array
-                          kind:
-                            description: |-
-                              Kind is a string value representing the REST resource this object represents.
-                              Servers may infer this from the endpoint the client submits requests to.
-                              Cannot be updated.
-                              In CamelCase.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                            type: string
-                          localAPIEndpoint:
-                            description: |-
-                              localAPIEndpoint represents the endpoint of the API server instance that's deployed on this control plane node
-                              In HA setups, this differs from ClusterConfiguration.ControlPlaneEndpoint in the sense that ControlPlaneEndpoint
-                              is the global endpoint for the cluster, which then loadbalances the requests to each individual API server. This
-                              configuration object lets you customize what IP/DNS name and port the local API server advertises it's accessible
-                              on. By default, kubeadm tries to auto-detect the IP of the default interface and use that, but in case that process
-                              fails you may set the desired value here.
-                            properties:
-                              advertiseAddress:
-                                description: advertiseAddress sets the IP address
-                                  for the API server to advertise.
-                                type: string
-                              bindPort:
-                                description: |-
-                                  bindPort sets the secure port for the API Server to bind to.
-                                  Defaults to 6443.
-                                format: int32
-                                type: integer
-                            type: object
-                          nodeRegistration:
-                            description: |-
-                              nodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
-                              When used in the context of control plane nodes, NodeRegistration should remain consistent
-                              across both InitConfiguration and JoinConfiguration
-                            properties:
-                              criSocket:
-                                description: criSocket is used to retrieve container
-                                  runtime info. This information will be annotated
-                                  to the Node API object, for later re-use
-                                type: string
-                              ignorePreflightErrors:
-                                description: ignorePreflightErrors provides a slice
-                                  of pre-flight errors to be ignored when the current
-                                  node is registered.
-                                items:
-                                  type: string
-                                type: array
-                              kubeletExtraArgs:
-                                additionalProperties:
-                                  type: string
-                                description: |-
-                                  kubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
-                                  kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
-                                  Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
-                                type: object
-                              name:
-                                description: |-
-                                  name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
-                                  This field is also used in the CommonName field of the kubelet's client certificate to the API server.
-                                  Defaults to the hostname of the node if not provided.
-                                type: string
-                              taints:
-                                description: |-
-                                  taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
-                                  it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
-                                  empty slice, i.e. `taints: {}` in the YAML file. This field is solely used for Node registration.
-                                items:
-                                  description: |-
-                                    The node this Taint is attached to has the "effect" on
-                                    any pod that does not tolerate the Taint.
-                                  properties:
-                                    effect:
-                                      description: |-
-                                        Required. The effect of the taint on pods
-                                        that do not tolerate the taint.
-                                        Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
-                                      type: string
-                                    key:
-                                      description: Required. The taint key to be applied
-                                        to a node.
-                                      type: string
-                                    timeAdded:
-                                      description: |-
-                                        TimeAdded represents the time at which the taint was added.
-                                        It is only written for NoExecute taints.
-                                      format: date-time
-                                      type: string
-                                    value:
-                                      description: The taint value corresponding to
-                                        the taint key.
-                                      type: string
-                                  required:
-                                  - effect
-                                  - key
-                                  type: object
-                                type: array
-                            type: object
-                        type: object
-                      joinConfiguration:
-                        description: joinConfiguration is the kubeadm configuration
-                          for the join command
-                        properties:
-                          apiVersion:
-                            description: |-
-                              APIVersion defines the versioned schema of this representation of an object.
-                              Servers should convert recognized schemas to the latest internal value, and
-                              may reject unrecognized values.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-                            type: string
-                          caCertPath:
-                            description: |-
-                              caCertPath is the path to the SSL certificate authority used to
-                              secure comunications between node and control-plane.
-                              Defaults to "/etc/kubernetes/pki/ca.crt".
-                            type: string
-                          controlPlane:
-                            description: |-
-                              controlPlane defines the additional control plane instance to be deployed on the joining node.
-                              If nil, no additional control plane instance will be deployed.
-                            properties:
-                              localAPIEndpoint:
-                                description: localAPIEndpoint represents the endpoint
-                                  of the API server instance to be deployed on this
-                                  node.
-                                properties:
-                                  advertiseAddress:
-                                    description: advertiseAddress sets the IP address
-                                      for the API server to advertise.
-                                    type: string
-                                  bindPort:
-                                    description: |-
-                                      bindPort sets the secure port for the API Server to bind to.
-                                      Defaults to 6443.
-                                    format: int32
-                                    type: integer
-                                type: object
-                            type: object
-                          discovery:
-                            description: discovery specifies the options for the kubelet
-                              to use during the TLS Bootstrap process
-                            properties:
-                              bootstrapToken:
-                                description: |-
-                                  bootstrapToken is used to set the options for bootstrap token based discovery
-                                  BootstrapToken and File are mutually exclusive
-                                properties:
-                                  apiServerEndpoint:
-                                    description: apiServerEndpoint is an IP or domain
-                                      name to the API server from which info will
-                                      be fetched.
-                                    type: string
-                                  caCertHashes:
-                                    description: |-
-                                      caCertHashes specifies a set of public key pins to verify
-                                      when token-based discovery is used. The root CA found during discovery
-                                      must match one of these values. Specifying an empty set disables root CA
-                                      pinning, which can be unsafe. Each hash is specified as "<type>:<value>",
-                                      where the only currently supported type is "sha256". This is a hex-encoded
-                                      SHA-256 hash of the Subject Public Key Info (SPKI) object in DER-encoded
-                                      ASN.1. These hashes can be calculated using, for example, OpenSSL:
-                                      openssl x509 -pubkey -in ca.crt openssl rsa -pubin -outform der 2>&/dev/null | openssl dgst -sha256 -hex
-                                    items:
-                                      type: string
-                                    type: array
-                                  token:
-                                    description: |-
-                                      token is a token used to validate cluster information
-                                      fetched from the control-plane.
-                                    type: string
-                                  unsafeSkipCAVerification:
-                                    description: |-
-                                      unsafeSkipCAVerification allows token-based discovery
-                                      without CA verification via CACertHashes. This can weaken
-                                      the security of kubeadm since other nodes can impersonate the control-plane.
-                                    type: boolean
-                                required:
-                                - token
-                                type: object
-                              file:
-                                description: |-
-                                  file is used to specify a file or URL to a kubeconfig file from which to load cluster information
-                                  BootstrapToken and File are mutually exclusive
-                                properties:
-                                  kubeConfigPath:
-                                    description: kubeConfigPath is used to specify
-                                      the actual file path or URL to the kubeconfig
-                                      file from which to load cluster information
-                                    type: string
-                                required:
-                                - kubeConfigPath
-                                type: object
-                              timeout:
-                                description: timeout modifies the discovery timeout
-                                type: string
-                              tlsBootstrapToken:
-                                description: |-
-                                  tlsBootstrapToken is a token used for TLS bootstrapping.
-                                  If .BootstrapToken is set, this field is defaulted to .BootstrapToken.Token, but can be overridden.
-                                  If .File is set, this field **must be set** in case the KubeConfigFile does not contain any other authentication information
-                                type: string
-                            type: object
-                          kind:
-                            description: |-
-                              Kind is a string value representing the REST resource this object represents.
-                              Servers may infer this from the endpoint the client submits requests to.
-                              Cannot be updated.
-                              In CamelCase.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                            type: string
-                          nodeRegistration:
-                            description: |-
-                              nodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
-                              When used in the context of control plane nodes, NodeRegistration should remain consistent
-                              across both InitConfiguration and JoinConfiguration
-                            properties:
-                              criSocket:
-                                description: criSocket is used to retrieve container
-                                  runtime info. This information will be annotated
-                                  to the Node API object, for later re-use
-                                type: string
-                              ignorePreflightErrors:
-                                description: ignorePreflightErrors provides a slice
-                                  of pre-flight errors to be ignored when the current
-                                  node is registered.
-                                items:
-                                  type: string
-                                type: array
-                              kubeletExtraArgs:
-                                additionalProperties:
-                                  type: string
-                                description: |-
-                                  kubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
-                                  kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
-                                  Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
-                                type: object
-                              name:
-                                description: |-
-                                  name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
-                                  This field is also used in the CommonName field of the kubelet's client certificate to the API server.
-                                  Defaults to the hostname of the node if not provided.
-                                type: string
-                              taints:
-                                description: |-
-                                  taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
-                                  it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
-                                  empty slice, i.e. `taints: {}` in the YAML file. This field is solely used for Node registration.
-                                items:
-                                  description: |-
-                                    The node this Taint is attached to has the "effect" on
-                                    any pod that does not tolerate the Taint.
-                                  properties:
-                                    effect:
-                                      description: |-
-                                        Required. The effect of the taint on pods
-                                        that do not tolerate the taint.
-                                        Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
-                                      type: string
-                                    key:
-                                      description: Required. The taint key to be applied
-                                        to a node.
-                                      type: string
-                                    timeAdded:
-                                      description: |-
-                                        TimeAdded represents the time at which the taint was added.
-                                        It is only written for NoExecute taints.
-                                      format: date-time
-                                      type: string
-                                    value:
-                                      description: The taint value corresponding to
-                                        the taint key.
-                                      type: string
-                                  required:
-                                  - effect
-                                  - key
-                                  type: object
-                                type: array
-                            type: object
-                        type: object
-                      mounts:
-                        description: mounts specifies a list of mount points to be
-                          setup.
-                        items:
-                          description: MountPoints defines input for generated mounts
-                            in cloud-init.
-                          items:
-                            type: string
-                          type: array
-                        type: array
-                      ntp:
-                        description: ntp specifies NTP configuration
-                        properties:
-                          enabled:
-                            description: enabled specifies whether NTP should be enabled
-                            type: boolean
-                          servers:
-                            description: servers specifies which NTP servers to use
-                            items:
-                              type: string
-                            type: array
-                        type: object
-                      postKubeadmCommands:
-                        description: postKubeadmCommands specifies extra commands
-                          to run after kubeadm runs
-                        items:
-                          type: string
-                        type: array
-                      preKubeadmCommands:
-                        description: preKubeadmCommands specifies extra commands to
-                          run before kubeadm runs
-                        items:
-                          type: string
-                        type: array
-                      useExperimentalRetryJoin:
-                        description: |-
-                          useExperimentalRetryJoin replaces a basic kubeadm command with a shell
-                          script with retries for joins.
-
-                          This is meant to be an experimental temporary workaround on some environments
-                          where joins fail due to timing (and other issues). The long term goal is to add retries to
-                          kubeadm proper and use that functionality.
-
-                          This will add about 40KB to userdata
-
-                          For more information, refer to https://github.com/kubernetes-sigs/cluster-api/pull/2763#discussion_r397306055.
-                        type: boolean
-                      users:
-                        description: users specifies extra users to add
-                        items:
-                          description: User defines the input for a generated user
-                            in cloud-init.
-                          properties:
-                            gecos:
-                              description: gecos specifies the gecos to use for the
-                                user
-                              type: string
-                            groups:
-                              description: groups specifies the additional groups
-                                for the user
-                              type: string
-                            homeDir:
-                              description: homeDir specifies the home directory to
-                                use for the user
-                              type: string
-                            inactive:
-                              description: inactive specifies whether to mark the
-                                user as inactive
-                              type: boolean
-                            lockPassword:
-                              description: lockPassword specifies if password login
-                                should be disabled
-                              type: boolean
-                            name:
-                              description: name specifies the user name
-                              type: string
-                            passwd:
-                              description: passwd specifies a hashed password for
-                                the user
-                              type: string
-                            primaryGroup:
-                              description: primaryGroup specifies the primary group
-                                for the user
-                              type: string
-                            shell:
-                              description: shell specifies the user's shell
-                              type: string
-                            sshAuthorizedKeys:
-                              description: sshAuthorizedKeys specifies a list of ssh
-                                authorized keys for the user
-                              items:
-                                type: string
-                              type: array
-                            sudo:
-                              description: sudo specifies a sudo role for the user
-                              type: string
-                          required:
-                          - name
-                          type: object
-                        type: array
-                      verbosity:
-                        description: |-
-                          verbosity is the number for the kubeadm log level verbosity.
-                          It overrides the `--v` flag in kubeadm commands.
-                        format: int32
-                        type: integer
-                    type: object
-                type: object
-            required:
-            - template
-            type: object
-        type: object
-    served: false
-    storage: false
-    subresources: {}
-  - additionalPrinterColumns:
-    - description: Time duration since creation of KubeadmConfigTemplate
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    name: v1beta1
-    schema:
-      openAPIV3Schema:
-        description: KubeadmConfigTemplate is the Schema for the kubeadmconfigtemplates
-          API.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: KubeadmConfigTemplateSpec defines the desired state of KubeadmConfigTemplate.
-            properties:
-              template:
-                description: KubeadmConfigTemplateResource defines the Template structure.
-                properties:
-                  metadata:
-                    description: |-
-                      Standard object's metadata.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
-                    properties:
-                      annotations:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          annotations is an unstructured key value map stored with a resource that may be
-                          set by external tools to store and retrieve arbitrary metadata. They are not
-                          queryable and should be preserved when modifying objects.
-                          More info: http://kubernetes.io/docs/user-guide/annotations
-                        type: object
-                      labels:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          Map of string keys and values that can be used to organize and categorize
-                          (scope and select) objects. May match selectors of replication controllers
-                          and services.
-                          More info: http://kubernetes.io/docs/user-guide/labels
-                        type: object
-                    type: object
-                  spec:
-                    description: |-
-                      KubeadmConfigSpec defines the desired state of KubeadmConfig.
-                      Either ClusterConfiguration and InitConfiguration should be defined or the JoinConfiguration should be defined.
-                    properties:
-                      clusterConfiguration:
-                        description: clusterConfiguration along with InitConfiguration
-                          are the configurations necessary for the init command
-                        properties:
-                          apiServer:
-                            description: apiServer contains extra settings for the
-                              API server control plane component
-                            properties:
-                              certSANs:
-                                description: certSANs sets extra Subject Alternative
-                                  Names for the API Server signing cert.
-                                items:
-                                  type: string
-                                type: array
-                              extraArgs:
-                                additionalProperties:
-                                  type: string
-                                description: extraArgs is an extra set of flags to
-                                  pass to the control plane component.
-                                type: object
-                              extraEnvs:
-                                description: |-
-                                  extraEnvs is an extra set of environment variables to pass to the control plane component.
-                                  Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default.
-                                  This option takes effect only on Kubernetes >=1.31.0.
-                                items:
-                                  description: EnvVar represents an environment variable
-                                    present in a Container.
-                                  properties:
-                                    name:
-                                      description: Name of the environment variable.
-                                        Must be a C_IDENTIFIER.
-                                      type: string
-                                    value:
-                                      description: |-
-                                        Variable references $(VAR_NAME) are expanded
-                                        using the previously defined environment variables in the container and
-                                        any service environment variables. If a variable cannot be resolved,
-                                        the reference in the input string will be unchanged. Double $ are reduced
-                                        to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
-                                        "$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
-                                        Escaped references will never be expanded, regardless of whether the variable
-                                        exists or not.
-                                        Defaults to "".
-                                      type: string
-                                    valueFrom:
-                                      description: Source for the environment variable's
-                                        value. Cannot be used if value is not empty.
-                                      properties:
-                                        configMapKeyRef:
-                                          description: Selects a key of a ConfigMap.
-                                          properties:
-                                            key:
-                                              description: The key to select.
-                                              type: string
-                                            name:
-                                              default: ""
-                                              description: |-
-                                                Name of the referent.
-                                                This field is effectively required, but due to backwards compatibility is
-                                                allowed to be empty. Instances of this type with an empty value here are
-                                                almost certainly wrong.
-                                                More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                              type: string
-                                            optional:
-                                              description: Specify whether the ConfigMap
-                                                or its key must be defined
-                                              type: boolean
-                                          required:
-                                          - key
-                                          type: object
-                                          x-kubernetes-map-type: atomic
-                                        fieldRef:
-                                          description: |-
-                                            Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
-                                            spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
-                                          properties:
-                                            apiVersion:
-                                              description: Version of the schema the
-                                                FieldPath is written in terms of,
-                                                defaults to "v1".
-                                              type: string
-                                            fieldPath:
-                                              description: Path of the field to select
-                                                in the specified API version.
-                                              type: string
-                                          required:
-                                          - fieldPath
-                                          type: object
-                                          x-kubernetes-map-type: atomic
-                                        resourceFieldRef:
-                                          description: |-
-                                            Selects a resource of the container: only resources limits and requests
-                                            (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
-                                          properties:
-                                            containerName:
-                                              description: 'Container name: required
-                                                for volumes, optional for env vars'
-                                              type: string
-                                            divisor:
-                                              anyOf:
-                                              - type: integer
-                                              - type: string
-                                              description: Specifies the output format
-                                                of the exposed resources, defaults
-                                                to "1"
-                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
-                                              x-kubernetes-int-or-string: true
-                                            resource:
-                                              description: 'Required: resource to
-                                                select'
-                                              type: string
-                                          required:
-                                          - resource
-                                          type: object
-                                          x-kubernetes-map-type: atomic
-                                        secretKeyRef:
-                                          description: Selects a key of a secret in
-                                            the pod's namespace
-                                          properties:
-                                            key:
-                                              description: The key of the secret to
-                                                select from.  Must be a valid secret
-                                                key.
-                                              type: string
-                                            name:
-                                              default: ""
-                                              description: |-
-                                                Name of the referent.
-                                                This field is effectively required, but due to backwards compatibility is
-                                                allowed to be empty. Instances of this type with an empty value here are
-                                                almost certainly wrong.
-                                                More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                              type: string
-                                            optional:
-                                              description: Specify whether the Secret
-                                                or its key must be defined
-                                              type: boolean
-                                          required:
-                                          - key
-                                          type: object
-                                          x-kubernetes-map-type: atomic
-                                      type: object
-                                  required:
-                                  - name
-                                  type: object
-                                type: array
-                              extraVolumes:
-                                description: extraVolumes is an extra set of host
-                                  volumes, mounted to the control plane component.
-                                items:
-                                  description: |-
-                                    HostPathMount contains elements describing volumes that are mounted from the
-                                    host.
-                                  properties:
-                                    hostPath:
-                                      description: |-
-                                        hostPath is the path in the host that will be mounted inside
-                                        the pod.
-                                      type: string
-                                    mountPath:
-                                      description: mountPath is the path inside the
-                                        pod where hostPath will be mounted.
-                                      type: string
-                                    name:
-                                      description: name of the volume inside the pod
-                                        template.
-                                      type: string
-                                    pathType:
-                                      description: pathType is the type of the HostPath.
-                                      type: string
-                                    readOnly:
-                                      description: readOnly controls write access
-                                        to the volume
-                                      type: boolean
-                                  required:
-                                  - hostPath
-                                  - mountPath
-                                  - name
-                                  type: object
-                                type: array
-                              timeoutForControlPlane:
-                                description: timeoutForControlPlane controls the timeout
-                                  that we use for API server to appear
-                                type: string
-                            type: object
-                          apiVersion:
-                            description: |-
-                              APIVersion defines the versioned schema of this representation of an object.
-                              Servers should convert recognized schemas to the latest internal value, and
-                              may reject unrecognized values.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-                            type: string
-                          certificatesDir:
-                            description: |-
-                              certificatesDir specifies where to store or look for all required certificates.
-                              NB: if not provided, this will default to `/etc/kubernetes/pki`
-                            type: string
-                          clusterName:
-                            description: The cluster name
-                            type: string
-                          controlPlaneEndpoint:
-                            description: |-
-                              controlPlaneEndpoint sets a stable IP address or DNS name for the control plane; it
-                              can be a valid IP address or a RFC-1123 DNS subdomain, both with optional TCP port.
-                              In case the ControlPlaneEndpoint is not specified, the AdvertiseAddress + BindPort
-                              are used; in case the ControlPlaneEndpoint is specified but without a TCP port,
-                              the BindPort is used.
-                              Possible usages are:
-                              e.g. In a cluster with more than one control plane instances, this field should be
-                              assigned the address of the external load balancer in front of the
-                              control plane instances.
-                              e.g.  in environments with enforced node recycling, the ControlPlaneEndpoint
-                              could be used for assigning a stable DNS to the control plane.
-                              NB: This value defaults to the first value in the Cluster object status.apiEndpoints array.
-                            type: string
-                          controllerManager:
-                            description: controllerManager contains extra settings
-                              for the controller manager control plane component
-                            properties:
-                              extraArgs:
-                                additionalProperties:
-                                  type: string
-                                description: extraArgs is an extra set of flags to
-                                  pass to the control plane component.
-                                type: object
-                              extraEnvs:
-                                description: |-
-                                  extraEnvs is an extra set of environment variables to pass to the control plane component.
-                                  Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default.
-                                  This option takes effect only on Kubernetes >=1.31.0.
-                                items:
-                                  description: EnvVar represents an environment variable
-                                    present in a Container.
-                                  properties:
-                                    name:
-                                      description: Name of the environment variable.
-                                        Must be a C_IDENTIFIER.
-                                      type: string
-                                    value:
-                                      description: |-
-                                        Variable references $(VAR_NAME) are expanded
-                                        using the previously defined environment variables in the container and
-                                        any service environment variables. If a variable cannot be resolved,
-                                        the reference in the input string will be unchanged. Double $ are reduced
-                                        to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
-                                        "$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
-                                        Escaped references will never be expanded, regardless of whether the variable
-                                        exists or not.
-                                        Defaults to "".
-                                      type: string
-                                    valueFrom:
-                                      description: Source for the environment variable's
-                                        value. Cannot be used if value is not empty.
-                                      properties:
-                                        configMapKeyRef:
-                                          description: Selects a key of a ConfigMap.
-                                          properties:
-                                            key:
-                                              description: The key to select.
-                                              type: string
-                                            name:
-                                              default: ""
-                                              description: |-
-                                                Name of the referent.
-                                                This field is effectively required, but due to backwards compatibility is
-                                                allowed to be empty. Instances of this type with an empty value here are
-                                                almost certainly wrong.
-                                                More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                              type: string
-                                            optional:
-                                              description: Specify whether the ConfigMap
-                                                or its key must be defined
-                                              type: boolean
-                                          required:
-                                          - key
-                                          type: object
-                                          x-kubernetes-map-type: atomic
-                                        fieldRef:
-                                          description: |-
-                                            Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
-                                            spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
-                                          properties:
-                                            apiVersion:
-                                              description: Version of the schema the
-                                                FieldPath is written in terms of,
-                                                defaults to "v1".
-                                              type: string
-                                            fieldPath:
-                                              description: Path of the field to select
-                                                in the specified API version.
-                                              type: string
-                                          required:
-                                          - fieldPath
-                                          type: object
-                                          x-kubernetes-map-type: atomic
-                                        resourceFieldRef:
-                                          description: |-
-                                            Selects a resource of the container: only resources limits and requests
-                                            (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
-                                          properties:
-                                            containerName:
-                                              description: 'Container name: required
-                                                for volumes, optional for env vars'
-                                              type: string
-                                            divisor:
-                                              anyOf:
-                                              - type: integer
-                                              - type: string
-                                              description: Specifies the output format
-                                                of the exposed resources, defaults
-                                                to "1"
-                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
-                                              x-kubernetes-int-or-string: true
-                                            resource:
-                                              description: 'Required: resource to
-                                                select'
-                                              type: string
-                                          required:
-                                          - resource
-                                          type: object
-                                          x-kubernetes-map-type: atomic
-                                        secretKeyRef:
-                                          description: Selects a key of a secret in
-                                            the pod's namespace
-                                          properties:
-                                            key:
-                                              description: The key of the secret to
-                                                select from.  Must be a valid secret
-                                                key.
-                                              type: string
-                                            name:
-                                              default: ""
-                                              description: |-
-                                                Name of the referent.
-                                                This field is effectively required, but due to backwards compatibility is
-                                                allowed to be empty. Instances of this type with an empty value here are
-                                                almost certainly wrong.
-                                                More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                              type: string
-                                            optional:
-                                              description: Specify whether the Secret
-                                                or its key must be defined
-                                              type: boolean
-                                          required:
-                                          - key
-                                          type: object
-                                          x-kubernetes-map-type: atomic
-                                      type: object
-                                  required:
-                                  - name
-                                  type: object
-                                type: array
-                              extraVolumes:
-                                description: extraVolumes is an extra set of host
-                                  volumes, mounted to the control plane component.
-                                items:
-                                  description: |-
-                                    HostPathMount contains elements describing volumes that are mounted from the
-                                    host.
-                                  properties:
-                                    hostPath:
-                                      description: |-
-                                        hostPath is the path in the host that will be mounted inside
-                                        the pod.
-                                      type: string
-                                    mountPath:
-                                      description: mountPath is the path inside the
-                                        pod where hostPath will be mounted.
-                                      type: string
-                                    name:
-                                      description: name of the volume inside the pod
-                                        template.
-                                      type: string
-                                    pathType:
-                                      description: pathType is the type of the HostPath.
-                                      type: string
-                                    readOnly:
-                                      description: readOnly controls write access
-                                        to the volume
-                                      type: boolean
-                                  required:
-                                  - hostPath
-                                  - mountPath
-                                  - name
-                                  type: object
-                                type: array
-                            type: object
-                          dns:
-                            description: dns defines the options for the DNS add-on
-                              installed in the cluster.
-                            properties:
-                              imageRepository:
-                                description: |-
-                                  imageRepository sets the container registry to pull images from.
-                                  if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
-                                type: string
-                              imageTag:
-                                description: |-
-                                  imageTag allows to specify a tag for the image.
-                                  In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
-                                type: string
-                            type: object
-                          etcd:
-                            description: |-
-                              etcd holds configuration for etcd.
-                              NB: This value defaults to a Local (stacked) etcd
-                            properties:
-                              external:
-                                description: |-
-                                  external describes how to connect to an external etcd cluster
-                                  Local and External are mutually exclusive
-                                properties:
-                                  caFile:
-                                    description: |-
-                                      caFile is an SSL Certificate Authority file used to secure etcd communication.
-                                      Required if using a TLS connection.
-                                    type: string
-                                  certFile:
-                                    description: |-
-                                      certFile is an SSL certification file used to secure etcd communication.
-                                      Required if using a TLS connection.
-                                    type: string
-                                  endpoints:
-                                    description: endpoints of etcd members. Required
-                                      for ExternalEtcd.
-                                    items:
-                                      type: string
-                                    type: array
-                                  keyFile:
-                                    description: |-
-                                      keyFile is an SSL key file used to secure etcd communication.
-                                      Required if using a TLS connection.
-                                    type: string
-                                required:
-                                - caFile
-                                - certFile
-                                - endpoints
-                                - keyFile
-                                type: object
-                              local:
-                                description: |-
-                                  local provides configuration knobs for configuring the local etcd instance
-                                  Local and External are mutually exclusive
-                                properties:
-                                  dataDir:
-                                    description: |-
-                                      dataDir is the directory etcd will place its data.
-                                      Defaults to "/var/lib/etcd".
-                                    type: string
-                                  extraArgs:
-                                    additionalProperties:
-                                      type: string
-                                    description: |-
-                                      extraArgs are extra arguments provided to the etcd binary
-                                      when run inside a static pod.
-                                    type: object
-                                  extraEnvs:
-                                    description: |-
-                                      extraEnvs is an extra set of environment variables to pass to the control plane component.
-                                      Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default.
-                                      This option takes effect only on Kubernetes >=1.31.0.
-                                    items:
-                                      description: EnvVar represents an environment
-                                        variable present in a Container.
-                                      properties:
-                                        name:
-                                          description: Name of the environment variable.
-                                            Must be a C_IDENTIFIER.
-                                          type: string
-                                        value:
-                                          description: |-
-                                            Variable references $(VAR_NAME) are expanded
-                                            using the previously defined environment variables in the container and
-                                            any service environment variables. If a variable cannot be resolved,
-                                            the reference in the input string will be unchanged. Double $ are reduced
-                                            to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
-                                            "$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
-                                            Escaped references will never be expanded, regardless of whether the variable
-                                            exists or not.
-                                            Defaults to "".
-                                          type: string
-                                        valueFrom:
-                                          description: Source for the environment
-                                            variable's value. Cannot be used if value
-                                            is not empty.
-                                          properties:
-                                            configMapKeyRef:
-                                              description: Selects a key of a ConfigMap.
-                                              properties:
-                                                key:
-                                                  description: The key to select.
-                                                  type: string
-                                                name:
-                                                  default: ""
-                                                  description: |-
-                                                    Name of the referent.
-                                                    This field is effectively required, but due to backwards compatibility is
-                                                    allowed to be empty. Instances of this type with an empty value here are
-                                                    almost certainly wrong.
-                                                    More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                                  type: string
-                                                optional:
-                                                  description: Specify whether the
-                                                    ConfigMap or its key must be defined
-                                                  type: boolean
-                                              required:
-                                              - key
-                                              type: object
-                                              x-kubernetes-map-type: atomic
-                                            fieldRef:
-                                              description: |-
-                                                Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
-                                                spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
-                                              properties:
-                                                apiVersion:
-                                                  description: Version of the schema
-                                                    the FieldPath is written in terms
-                                                    of, defaults to "v1".
-                                                  type: string
-                                                fieldPath:
-                                                  description: Path of the field to
-                                                    select in the specified API version.
-                                                  type: string
-                                              required:
-                                              - fieldPath
-                                              type: object
-                                              x-kubernetes-map-type: atomic
-                                            resourceFieldRef:
-                                              description: |-
-                                                Selects a resource of the container: only resources limits and requests
-                                                (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
-                                              properties:
-                                                containerName:
-                                                  description: 'Container name: required
-                                                    for volumes, optional for env
-                                                    vars'
-                                                  type: string
-                                                divisor:
-                                                  anyOf:
-                                                  - type: integer
-                                                  - type: string
-                                                  description: Specifies the output
-                                                    format of the exposed resources,
-                                                    defaults to "1"
-                                                  pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
-                                                  x-kubernetes-int-or-string: true
-                                                resource:
-                                                  description: 'Required: resource
-                                                    to select'
-                                                  type: string
-                                              required:
-                                              - resource
-                                              type: object
-                                              x-kubernetes-map-type: atomic
-                                            secretKeyRef:
-                                              description: Selects a key of a secret
-                                                in the pod's namespace
-                                              properties:
-                                                key:
-                                                  description: The key of the secret
-                                                    to select from.  Must be a valid
-                                                    secret key.
-                                                  type: string
-                                                name:
-                                                  default: ""
-                                                  description: |-
-                                                    Name of the referent.
-                                                    This field is effectively required, but due to backwards compatibility is
-                                                    allowed to be empty. Instances of this type with an empty value here are
-                                                    almost certainly wrong.
-                                                    More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                                  type: string
-                                                optional:
-                                                  description: Specify whether the
-                                                    Secret or its key must be defined
-                                                  type: boolean
-                                              required:
-                                              - key
-                                              type: object
-                                              x-kubernetes-map-type: atomic
-                                          type: object
-                                      required:
-                                      - name
-                                      type: object
-                                    type: array
-                                  imageRepository:
-                                    description: |-
-                                      imageRepository sets the container registry to pull images from.
-                                      if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
-                                    type: string
-                                  imageTag:
-                                    description: |-
-                                      imageTag allows to specify a tag for the image.
-                                      In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
-                                    type: string
-                                  peerCertSANs:
-                                    description: peerCertSANs sets extra Subject Alternative
-                                      Names for the etcd peer signing cert.
-                                    items:
-                                      type: string
-                                    type: array
-                                  serverCertSANs:
-                                    description: serverCertSANs sets extra Subject
-                                      Alternative Names for the etcd server signing
-                                      cert.
-                                    items:
-                                      type: string
-                                    type: array
-                                type: object
-                            type: object
-                          featureGates:
-                            additionalProperties:
-                              type: boolean
-                            description: featureGates enabled by the user.
-                            type: object
-                          imageRepository:
-                            description: |-
-                              imageRepository sets the container registry to pull images from.
-                              * If not set, the default registry of kubeadm will be used, i.e.
-                                * registry.k8s.io (new registry): >= v1.22.17, >= v1.23.15, >= v1.24.9, >= v1.25.0
-                                * k8s.gcr.io (old registry): all older versions
-                                Please note that when imageRepository is not set we don't allow upgrades to
-                                versions >= v1.22.0 which use the old registry (k8s.gcr.io). Please use
-                                a newer patch version with the new registry instead (i.e. >= v1.22.17,
-                                >= v1.23.15, >= v1.24.9, >= v1.25.0).
-                              * If the version is a CI build (kubernetes version starts with `ci/` or `ci-cross/`)
-                               `gcr.io/k8s-staging-ci-images` will be used as a default for control plane components
-                                and for kube-proxy, while `registry.k8s.io` will be used for all the other images.
-                            type: string
-                          kind:
-                            description: |-
-                              Kind is a string value representing the REST resource this object represents.
-                              Servers may infer this from the endpoint the client submits requests to.
-                              Cannot be updated.
-                              In CamelCase.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                            type: string
-                          kubernetesVersion:
-                            description: |-
-                              kubernetesVersion is the target version of the control plane.
-                              NB: This value defaults to the Machine object spec.version
-                            type: string
-                          networking:
-                            description: |-
-                              networking holds configuration for the networking topology of the cluster.
-                              NB: This value defaults to the Cluster object spec.clusterNetwork.
-                            properties:
-                              dnsDomain:
-                                description: dnsDomain is the dns domain used by k8s
-                                  services. Defaults to "cluster.local".
-                                type: string
-                              podSubnet:
-                                description: |-
-                                  podSubnet is the subnet used by pods.
-                                  If unset, the API server will not allocate CIDR ranges for every node.
-                                  Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.services.cidrBlocks if that is set
-                                type: string
-                              serviceSubnet:
-                                description: |-
-                                  serviceSubnet is the subnet used by k8s services.
-                                  Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.pods.cidrBlocks, or
-                                  to "10.96.0.0/12" if that's unset.
-                                type: string
-                            type: object
-                          scheduler:
-                            description: scheduler contains extra settings for the
-                              scheduler control plane component
-                            properties:
-                              extraArgs:
-                                additionalProperties:
-                                  type: string
-                                description: extraArgs is an extra set of flags to
-                                  pass to the control plane component.
-                                type: object
-                              extraEnvs:
-                                description: |-
-                                  extraEnvs is an extra set of environment variables to pass to the control plane component.
-                                  Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default.
-                                  This option takes effect only on Kubernetes >=1.31.0.
-                                items:
-                                  description: EnvVar represents an environment variable
-                                    present in a Container.
-                                  properties:
-                                    name:
-                                      description: Name of the environment variable.
-                                        Must be a C_IDENTIFIER.
-                                      type: string
-                                    value:
-                                      description: |-
-                                        Variable references $(VAR_NAME) are expanded
-                                        using the previously defined environment variables in the container and
-                                        any service environment variables. If a variable cannot be resolved,
-                                        the reference in the input string will be unchanged. Double $ are reduced
-                                        to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
-                                        "$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
-                                        Escaped references will never be expanded, regardless of whether the variable
-                                        exists or not.
-                                        Defaults to "".
-                                      type: string
-                                    valueFrom:
-                                      description: Source for the environment variable's
-                                        value. Cannot be used if value is not empty.
-                                      properties:
-                                        configMapKeyRef:
-                                          description: Selects a key of a ConfigMap.
-                                          properties:
-                                            key:
-                                              description: The key to select.
-                                              type: string
-                                            name:
-                                              default: ""
-                                              description: |-
-                                                Name of the referent.
-                                                This field is effectively required, but due to backwards compatibility is
-                                                allowed to be empty. Instances of this type with an empty value here are
-                                                almost certainly wrong.
-                                                More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                              type: string
-                                            optional:
-                                              description: Specify whether the ConfigMap
-                                                or its key must be defined
-                                              type: boolean
-                                          required:
-                                          - key
-                                          type: object
-                                          x-kubernetes-map-type: atomic
-                                        fieldRef:
-                                          description: |-
-                                            Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
-                                            spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
-                                          properties:
-                                            apiVersion:
-                                              description: Version of the schema the
-                                                FieldPath is written in terms of,
-                                                defaults to "v1".
-                                              type: string
-                                            fieldPath:
-                                              description: Path of the field to select
-                                                in the specified API version.
-                                              type: string
-                                          required:
-                                          - fieldPath
-                                          type: object
-                                          x-kubernetes-map-type: atomic
-                                        resourceFieldRef:
-                                          description: |-
-                                            Selects a resource of the container: only resources limits and requests
-                                            (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
-                                          properties:
-                                            containerName:
-                                              description: 'Container name: required
-                                                for volumes, optional for env vars'
-                                              type: string
-                                            divisor:
-                                              anyOf:
-                                              - type: integer
-                                              - type: string
-                                              description: Specifies the output format
-                                                of the exposed resources, defaults
-                                                to "1"
-                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
-                                              x-kubernetes-int-or-string: true
-                                            resource:
-                                              description: 'Required: resource to
-                                                select'
-                                              type: string
-                                          required:
-                                          - resource
-                                          type: object
-                                          x-kubernetes-map-type: atomic
-                                        secretKeyRef:
-                                          description: Selects a key of a secret in
-                                            the pod's namespace
-                                          properties:
-                                            key:
-                                              description: The key of the secret to
-                                                select from.  Must be a valid secret
-                                                key.
-                                              type: string
-                                            name:
-                                              default: ""
-                                              description: |-
-                                                Name of the referent.
-                                                This field is effectively required, but due to backwards compatibility is
-                                                allowed to be empty. Instances of this type with an empty value here are
-                                                almost certainly wrong.
-                                                More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                              type: string
-                                            optional:
-                                              description: Specify whether the Secret
-                                                or its key must be defined
-                                              type: boolean
-                                          required:
-                                          - key
-                                          type: object
-                                          x-kubernetes-map-type: atomic
-                                      type: object
-                                  required:
-                                  - name
-                                  type: object
-                                type: array
-                              extraVolumes:
-                                description: extraVolumes is an extra set of host
-                                  volumes, mounted to the control plane component.
-                                items:
-                                  description: |-
-                                    HostPathMount contains elements describing volumes that are mounted from the
-                                    host.
-                                  properties:
-                                    hostPath:
-                                      description: |-
-                                        hostPath is the path in the host that will be mounted inside
-                                        the pod.
-                                      type: string
-                                    mountPath:
-                                      description: mountPath is the path inside the
-                                        pod where hostPath will be mounted.
-                                      type: string
-                                    name:
-                                      description: name of the volume inside the pod
-                                        template.
-                                      type: string
-                                    pathType:
-                                      description: pathType is the type of the HostPath.
-                                      type: string
-                                    readOnly:
-                                      description: readOnly controls write access
-                                        to the volume
-                                      type: boolean
-                                  required:
-                                  - hostPath
-                                  - mountPath
-                                  - name
-                                  type: object
-                                type: array
-                            type: object
-                        type: object
-                      diskSetup:
-                        description: diskSetup specifies options for the creation
-                          of partition tables and file systems on devices.
-                        properties:
-                          filesystems:
-                            description: filesystems specifies the list of file systems
-                              to setup.
-                            items:
-                              description: Filesystem defines the file systems to
-                                be created.
-                              properties:
-                                device:
-                                  description: device specifies the device name
-                                  type: string
-                                extraOpts:
-                                  description: extraOpts defined extra options to
-                                    add to the command for creating the file system.
-                                  items:
-                                    type: string
-                                  type: array
-                                filesystem:
-                                  description: filesystem specifies the file system
-                                    type.
-                                  type: string
-                                label:
-                                  description: label specifies the file system label
-                                    to be used. If set to None, no label is used.
-                                  type: string
-                                overwrite:
-                                  description: |-
-                                    overwrite defines whether or not to overwrite any existing filesystem.
-                                    If true, any pre-existing file system will be destroyed. Use with Caution.
-                                  type: boolean
-                                partition:
-                                  description: 'partition specifies the partition
-                                    to use. The valid options are: "auto|any", "auto",
-                                    "any", "none", and <NUM>, where NUM is the actual
-                                    partition number.'
-                                  type: string
-                                replaceFS:
-                                  description: |-
-                                    replaceFS is a special directive, used for Microsoft Azure that instructs cloud-init to replace a file system of <FS_TYPE>.
-                                    NOTE: unless you define a label, this requires the use of the 'any' partition directive.
-                                  type: string
-                              required:
-                              - device
-                              - filesystem
-                              - label
-                              type: object
-                            type: array
-                          partitions:
-                            description: partitions specifies the list of the partitions
-                              to setup.
-                            items:
-                              description: Partition defines how to create and layout
-                                a partition.
-                              properties:
-                                device:
-                                  description: device is the name of the device.
-                                  type: string
-                                layout:
-                                  description: |-
-                                    layout specifies the device layout.
-                                    If it is true, a single partition will be created for the entire device.
-                                    When layout is false, it means don't partition or ignore existing partitioning.
-                                  type: boolean
-                                overwrite:
-                                  description: |-
-                                    overwrite describes whether to skip checks and create the partition if a partition or filesystem is found on the device.
-                                    Use with caution. Default is 'false'.
-                                  type: boolean
-                                tableType:
-                                  description: |-
-                                    tableType specifies the tupe of partition table. The following are supported:
-                                    'mbr': default and setups a MS-DOS partition table
-                                    'gpt': setups a GPT partition table
-                                  type: string
-                              required:
-                              - device
-                              - layout
-                              type: object
-                            type: array
-                        type: object
-                      files:
-                        description: files specifies extra files to be passed to user_data
-                          upon creation.
-                        items:
-                          description: File defines the input for generating write_files
-                            in cloud-init.
-                          properties:
-                            append:
-                              description: append specifies whether to append Content
-                                to existing file if Path exists.
-                              type: boolean
-                            content:
-                              description: content is the actual content of the file.
-                              type: string
-                            contentFrom:
-                              description: contentFrom is a referenced source of content
-                                to populate the file.
-                              properties:
-                                secret:
-                                  description: secret represents a secret that should
-                                    populate this file.
-                                  properties:
-                                    key:
-                                      description: key is the key in the secret's
-                                        data map for this value.
-                                      type: string
-                                    name:
-                                      description: name of the secret in the KubeadmBootstrapConfig's
-                                        namespace to use.
-                                      type: string
-                                  required:
-                                  - key
-                                  - name
-                                  type: object
-                              required:
-                              - secret
-                              type: object
-                            encoding:
-                              description: encoding specifies the encoding of the
-                                file contents.
-                              enum:
-                              - base64
-                              - gzip
-                              - gzip+base64
-                              type: string
-                            owner:
-                              description: owner specifies the ownership of the file,
-                                e.g. "root:root".
-                              type: string
-                            path:
-                              description: path specifies the full path on disk where
-                                to store the file.
-                              type: string
-                            permissions:
-                              description: permissions specifies the permissions to
-                                assign to the file, e.g. "0640".
-                              type: string
-                          required:
-                          - path
-                          type: object
-                        type: array
-                      format:
-                        description: format specifies the output format of the bootstrap
-                          data
-                        enum:
-                        - cloud-config
-                        - ignition
-                        type: string
-                      ignition:
-                        description: ignition contains Ignition specific configuration.
-                        properties:
-                          containerLinuxConfig:
-                            description: containerLinuxConfig contains CLC specific
-                              configuration.
-                            properties:
-                              additionalConfig:
-                                description: |-
-                                  additionalConfig contains additional configuration to be merged with the Ignition
-                                  configuration generated by the bootstrapper controller. More info: https://coreos.github.io/ignition/operator-notes/#config-merging
-
-                                  The data format is documented here: https://kinvolk.io/docs/flatcar-container-linux/latest/provisioning/cl-config/
-                                type: string
-                              strict:
-                                description: strict controls if AdditionalConfig should
-                                  be strictly parsed. If so, warnings are treated
-                                  as errors.
-                                type: boolean
-                            type: object
-                        type: object
-                      initConfiguration:
-                        description: initConfiguration along with ClusterConfiguration
-                          are the configurations necessary for the init command
-                        properties:
-                          apiVersion:
-                            description: |-
-                              APIVersion defines the versioned schema of this representation of an object.
-                              Servers should convert recognized schemas to the latest internal value, and
-                              may reject unrecognized values.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-                            type: string
-                          bootstrapTokens:
-                            description: |-
-                              bootstrapTokens is respected at `kubeadm init` time and describes a set of Bootstrap Tokens to create.
-                              This information IS NOT uploaded to the kubeadm cluster configmap, partly because of its sensitive nature
-                            items:
-                              description: BootstrapToken describes one bootstrap
-                                token, stored as a Secret in the cluster.
-                              properties:
-                                description:
-                                  description: |-
-                                    description sets a human-friendly message why this token exists and what it's used
-                                    for, so other administrators can know its purpose.
-                                  type: string
-                                expires:
-                                  description: |-
-                                    expires specifies the timestamp when this token expires. Defaults to being set
-                                    dynamically at runtime based on the TTL. Expires and TTL are mutually exclusive.
-                                  format: date-time
-                                  type: string
-                                groups:
-                                  description: |-
-                                    groups specifies the extra groups that this token will authenticate as when/if
-                                    used for authentication
-                                  items:
-                                    type: string
-                                  type: array
-                                token:
-                                  description: |-
-                                    token is used for establishing bidirectional trust between nodes and control-planes.
-                                    Used for joining nodes in the cluster.
-                                  type: string
-                                ttl:
-                                  description: |-
-                                    ttl defines the time to live for this token. Defaults to 24h.
-                                    Expires and TTL are mutually exclusive.
-                                  type: string
-                                usages:
-                                  description: |-
-                                    usages describes the ways in which this token can be used. Can by default be used
-                                    for establishing bidirectional trust, but that can be changed here.
-                                  items:
-                                    type: string
-                                  type: array
-                              required:
-                              - token
-                              type: object
-                            type: array
-                          kind:
-                            description: |-
-                              Kind is a string value representing the REST resource this object represents.
-                              Servers may infer this from the endpoint the client submits requests to.
-                              Cannot be updated.
-                              In CamelCase.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                            type: string
-                          localAPIEndpoint:
-                            description: |-
-                              localAPIEndpoint represents the endpoint of the API server instance that's deployed on this control plane node
-                              In HA setups, this differs from ClusterConfiguration.ControlPlaneEndpoint in the sense that ControlPlaneEndpoint
-                              is the global endpoint for the cluster, which then loadbalances the requests to each individual API server. This
-                              configuration object lets you customize what IP/DNS name and port the local API server advertises it's accessible
-                              on. By default, kubeadm tries to auto-detect the IP of the default interface and use that, but in case that process
-                              fails you may set the desired value here.
-                            properties:
-                              advertiseAddress:
-                                description: advertiseAddress sets the IP address
-                                  for the API server to advertise.
-                                type: string
-                              bindPort:
-                                description: |-
-                                  bindPort sets the secure port for the API Server to bind to.
-                                  Defaults to 6443.
-                                format: int32
-                                type: integer
-                            type: object
-                          nodeRegistration:
-                            description: |-
-                              nodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
-                              When used in the context of control plane nodes, NodeRegistration should remain consistent
-                              across both InitConfiguration and JoinConfiguration
-                            properties:
-                              criSocket:
-                                description: criSocket is used to retrieve container
-                                  runtime info. This information will be annotated
-                                  to the Node API object, for later re-use
-                                type: string
-                              ignorePreflightErrors:
-                                description: ignorePreflightErrors provides a slice
-                                  of pre-flight errors to be ignored when the current
-                                  node is registered.
-                                items:
-                                  type: string
-                                type: array
-                              imagePullPolicy:
-                                description: |-
-                                  imagePullPolicy specifies the policy for image pulling
-                                  during kubeadm "init" and "join" operations. The value of
-                                  this field must be one of "Always", "IfNotPresent" or
-                                  "Never". Defaults to "IfNotPresent". This can be used only
-                                  with Kubernetes version equal to 1.22 and later.
-                                enum:
-                                - Always
-                                - IfNotPresent
-                                - Never
-                                type: string
-                              imagePullSerial:
-                                description: |-
-                                  imagePullSerial specifies if image pulling performed by kubeadm must be done serially or in parallel.
-                                  This option takes effect only on Kubernetes >=1.31.0.
-                                  Default: true (defaulted in kubeadm)
-                                type: boolean
-                              kubeletExtraArgs:
-                                additionalProperties:
-                                  type: string
-                                description: |-
-                                  kubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
-                                  kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
-                                  Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
-                                type: object
-                              name:
-                                description: |-
-                                  name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
-                                  This field is also used in the CommonName field of the kubelet's client certificate to the API server.
-                                  Defaults to the hostname of the node if not provided.
-                                type: string
-                              taints:
-                                description: |-
-                                  taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
-                                  it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
-                                  empty slice, i.e. `taints: []` in the YAML file. This field is solely used for Node registration.
-                                items:
-                                  description: |-
-                                    The node this Taint is attached to has the "effect" on
-                                    any pod that does not tolerate the Taint.
-                                  properties:
-                                    effect:
-                                      description: |-
-                                        Required. The effect of the taint on pods
-                                        that do not tolerate the taint.
-                                        Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
-                                      type: string
-                                    key:
-                                      description: Required. The taint key to be applied
-                                        to a node.
-                                      type: string
-                                    timeAdded:
-                                      description: |-
-                                        TimeAdded represents the time at which the taint was added.
-                                        It is only written for NoExecute taints.
-                                      format: date-time
-                                      type: string
-                                    value:
-                                      description: The taint value corresponding to
-                                        the taint key.
-                                      type: string
-                                  required:
-                                  - effect
-                                  - key
-                                  type: object
-                                type: array
-                            type: object
-                          patches:
-                            description: |-
-                              patches contains options related to applying patches to components deployed by kubeadm during
-                              "kubeadm init". The minimum kubernetes version needed to support Patches is v1.22
-                            properties:
-                              directory:
-                                description: |-
-                                  directory is a path to a directory that contains files named "target[suffix][+patchtype].extension".
-                                  For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "target" can be one of
-                                  "kube-apiserver", "kube-controller-manager", "kube-scheduler", "etcd". "patchtype" can be one
-                                  of "strategic" "merge" or "json" and they match the patch formats supported by kubectl.
-                                  The default "patchtype" is "strategic". "extension" must be either "json" or "yaml".
-                                  "suffix" is an optional string that can be used to determine which patches are applied
-                                  first alpha-numerically.
-                                  These files can be written into the target directory via KubeadmConfig.Files which
-                                  specifies additional files to be created on the machine, either with content inline or
-                                  by referencing a secret.
-                                type: string
-                            type: object
-                          skipPhases:
-                            description: |-
-                              skipPhases is a list of phases to skip during command execution.
-                              The list of phases can be obtained with the "kubeadm init --help" command.
-                              This option takes effect only on Kubernetes >=1.22.0.
-                            items:
-                              type: string
-                            type: array
-                        type: object
-                      joinConfiguration:
-                        description: joinConfiguration is the kubeadm configuration
-                          for the join command
-                        properties:
-                          apiVersion:
-                            description: |-
-                              APIVersion defines the versioned schema of this representation of an object.
-                              Servers should convert recognized schemas to the latest internal value, and
-                              may reject unrecognized values.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-                            type: string
-                          caCertPath:
-                            description: |-
-                              caCertPath is the path to the SSL certificate authority used to
-                              secure comunications between node and control-plane.
-                              Defaults to "/etc/kubernetes/pki/ca.crt".
-                            type: string
-                          controlPlane:
-                            description: |-
-                              controlPlane defines the additional control plane instance to be deployed on the joining node.
-                              If nil, no additional control plane instance will be deployed.
-                            properties:
-                              localAPIEndpoint:
-                                description: localAPIEndpoint represents the endpoint
-                                  of the API server instance to be deployed on this
-                                  node.
-                                properties:
-                                  advertiseAddress:
-                                    description: advertiseAddress sets the IP address
-                                      for the API server to advertise.
-                                    type: string
-                                  bindPort:
-                                    description: |-
-                                      bindPort sets the secure port for the API Server to bind to.
-                                      Defaults to 6443.
-                                    format: int32
-                                    type: integer
-                                type: object
-                            type: object
-                          discovery:
-                            description: discovery specifies the options for the kubelet
-                              to use during the TLS Bootstrap process
-                            properties:
-                              bootstrapToken:
-                                description: |-
-                                  bootstrapToken is used to set the options for bootstrap token based discovery
-                                  BootstrapToken and File are mutually exclusive
-                                properties:
-                                  apiServerEndpoint:
-                                    description: apiServerEndpoint is an IP or domain
-                                      name to the API server from which info will
-                                      be fetched.
-                                    type: string
-                                  caCertHashes:
-                                    description: |-
-                                      caCertHashes specifies a set of public key pins to verify
-                                      when token-based discovery is used. The root CA found during discovery
-                                      must match one of these values. Specifying an empty set disables root CA
-                                      pinning, which can be unsafe. Each hash is specified as "<type>:<value>",
-                                      where the only currently supported type is "sha256". This is a hex-encoded
-                                      SHA-256 hash of the Subject Public Key Info (SPKI) object in DER-encoded
-                                      ASN.1. These hashes can be calculated using, for example, OpenSSL:
-                                      openssl x509 -pubkey -in ca.crt openssl rsa -pubin -outform der 2>&/dev/null | openssl dgst -sha256 -hex
-                                    items:
-                                      type: string
-                                    type: array
-                                  token:
-                                    description: |-
-                                      token is a token used to validate cluster information
-                                      fetched from the control-plane.
-                                    type: string
-                                  unsafeSkipCAVerification:
-                                    description: |-
-                                      unsafeSkipCAVerification allows token-based discovery
-                                      without CA verification via CACertHashes. This can weaken
-                                      the security of kubeadm since other nodes can impersonate the control-plane.
-                                    type: boolean
-                                required:
-                                - token
-                                type: object
-                              file:
-                                description: |-
-                                  file is used to specify a file or URL to a kubeconfig file from which to load cluster information
-                                  BootstrapToken and File are mutually exclusive
-                                properties:
-                                  kubeConfig:
-                                    description: |-
-                                      kubeConfig is used (optionally) to generate a KubeConfig based on the KubeadmConfig's information.
-                                      The file is generated at the path specified in KubeConfigPath.
-
-                                      Host address (server field) information is automatically populated based on the Cluster's ControlPlaneEndpoint.
-                                      Certificate Authority (certificate-authority-data field) is gathered from the cluster's CA secret.
-                                    properties:
-                                      cluster:
-                                        description: |-
-                                          cluster contains information about how to communicate with the kubernetes cluster.
-
-                                          By default the following fields are automatically populated:
-                                          - Server with the Cluster's ControlPlaneEndpoint.
-                                          - CertificateAuthorityData with the Cluster's CA certificate.
-                                        properties:
-                                          certificateAuthorityData:
-                                            description: |-
-                                              certificateAuthorityData contains PEM-encoded certificate authority certificates.
-
-                                              Defaults to the Cluster's CA certificate if empty.
-                                            format: byte
-                                            type: string
-                                          insecureSkipTLSVerify:
-                                            description: insecureSkipTLSVerify skips
-                                              the validity check for the server's
-                                              certificate. This will make your HTTPS
-                                              connections insecure.
-                                            type: boolean
-                                          proxyURL:
-                                            description: |-
-                                              proxyURL is the URL to the proxy to be used for all requests made by this
-                                              client. URLs with "http", "https", and "socks5" schemes are supported.  If
-                                              this configuration is not provided or the empty string, the client
-                                              attempts to construct a proxy configuration from http_proxy and
-                                              https_proxy environment variables. If these environment variables are not
-                                              set, the client does not attempt to proxy requests.
-
-                                              socks5 proxying does not currently support spdy streaming endpoints (exec,
-                                              attach, port forward).
-                                            type: string
-                                          server:
-                                            description: |-
-                                              server is the address of the kubernetes cluster (https://hostname:port).
-
-                                              Defaults to https:// + Cluster.Spec.ControlPlaneEndpoint.
-                                            type: string
-                                          tlsServerName:
-                                            description: tlsServerName is used to
-                                              check server certificate. If TLSServerName
-                                              is empty, the hostname used to contact
-                                              the server is used.
-                                            type: string
-                                        type: object
-                                      user:
-                                        description: |-
-                                          user contains information that describes identity information.
-                                          This is used to tell the kubernetes cluster who you are.
-                                        properties:
-                                          authProvider:
-                                            description: authProvider specifies a
-                                              custom authentication plugin for the
-                                              kubernetes cluster.
-                                            properties:
-                                              config:
-                                                additionalProperties:
-                                                  type: string
-                                                description: config holds the parameters
-                                                  for the authentication plugin.
-                                                type: object
-                                              name:
-                                                description: name is the name of the
-                                                  authentication plugin.
-                                                type: string
-                                            required:
-                                            - name
-                                            type: object
-                                          exec:
-                                            description: exec specifies a custom exec-based
-                                              authentication plugin for the kubernetes
-                                              cluster.
-                                            properties:
-                                              apiVersion:
-                                                description: |-
-                                                  Preferred input version of the ExecInfo. The returned ExecCredentials MUST use
-                                                  the same encoding version as the input.
-                                                  Defaults to client.authentication.k8s.io/v1 if not set.
-                                                type: string
-                                              args:
-                                                description: Arguments to pass to
-                                                  the command when executing it.
-                                                items:
-                                                  type: string
-                                                type: array
-                                              command:
-                                                description: command to execute.
-                                                type: string
-                                              env:
-                                                description: |-
-                                                  env defines additional environment variables to expose to the process. These
-                                                  are unioned with the host's environment, as well as variables client-go uses
-                                                  to pass argument to the plugin.
-                                                items:
-                                                  description: |-
-                                                    KubeConfigAuthExecEnv is used for setting environment variables when executing an exec-based
-                                                    credential plugin.
-                                                  properties:
-                                                    name:
-                                                      type: string
-                                                    value:
-                                                      type: string
-                                                  required:
-                                                  - name
-                                                  - value
-                                                  type: object
-                                                type: array
-                                              provideClusterInfo:
-                                                description: |-
-                                                  provideClusterInfo determines whether or not to provide cluster information,
-                                                  which could potentially contain very large CA data, to this exec plugin as a
-                                                  part of the KUBERNETES_EXEC_INFO environment variable. By default, it is set
-                                                  to false. Package k8s.io/client-go/tools/auth/exec provides helper methods for
-                                                  reading this environment variable.
-                                                type: boolean
-                                            required:
-                                            - command
-                                            type: object
-                                        type: object
-                                    required:
-                                    - user
-                                    type: object
-                                  kubeConfigPath:
-                                    description: kubeConfigPath is used to specify
-                                      the actual file path or URL to the kubeconfig
-                                      file from which to load cluster information
-                                    type: string
-                                required:
-                                - kubeConfigPath
-                                type: object
-                              timeout:
-                                description: timeout modifies the discovery timeout
-                                type: string
-                              tlsBootstrapToken:
-                                description: |-
-                                  tlsBootstrapToken is a token used for TLS bootstrapping.
-                                  If .BootstrapToken is set, this field is defaulted to .BootstrapToken.Token, but can be overridden.
-                                  If .File is set, this field **must be set** in case the KubeConfigFile does not contain any other authentication information
-                                type: string
-                            type: object
-                          kind:
-                            description: |-
-                              Kind is a string value representing the REST resource this object represents.
-                              Servers may infer this from the endpoint the client submits requests to.
-                              Cannot be updated.
-                              In CamelCase.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                            type: string
-                          nodeRegistration:
-                            description: |-
-                              nodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
-                              When used in the context of control plane nodes, NodeRegistration should remain consistent
-                              across both InitConfiguration and JoinConfiguration
-                            properties:
-                              criSocket:
-                                description: criSocket is used to retrieve container
-                                  runtime info. This information will be annotated
-                                  to the Node API object, for later re-use
-                                type: string
-                              ignorePreflightErrors:
-                                description: ignorePreflightErrors provides a slice
-                                  of pre-flight errors to be ignored when the current
-                                  node is registered.
-                                items:
-                                  type: string
-                                type: array
-                              imagePullPolicy:
-                                description: |-
-                                  imagePullPolicy specifies the policy for image pulling
-                                  during kubeadm "init" and "join" operations. The value of
-                                  this field must be one of "Always", "IfNotPresent" or
-                                  "Never". Defaults to "IfNotPresent". This can be used only
-                                  with Kubernetes version equal to 1.22 and later.
-                                enum:
-                                - Always
-                                - IfNotPresent
-                                - Never
-                                type: string
-                              imagePullSerial:
-                                description: |-
-                                  imagePullSerial specifies if image pulling performed by kubeadm must be done serially or in parallel.
-                                  This option takes effect only on Kubernetes >=1.31.0.
-                                  Default: true (defaulted in kubeadm)
-                                type: boolean
-                              kubeletExtraArgs:
-                                additionalProperties:
-                                  type: string
-                                description: |-
-                                  kubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
-                                  kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
-                                  Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
-                                type: object
-                              name:
-                                description: |-
-                                  name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
-                                  This field is also used in the CommonName field of the kubelet's client certificate to the API server.
-                                  Defaults to the hostname of the node if not provided.
-                                type: string
-                              taints:
-                                description: |-
-                                  taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
-                                  it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
-                                  empty slice, i.e. `taints: []` in the YAML file. This field is solely used for Node registration.
-                                items:
-                                  description: |-
-                                    The node this Taint is attached to has the "effect" on
-                                    any pod that does not tolerate the Taint.
-                                  properties:
-                                    effect:
-                                      description: |-
-                                        Required. The effect of the taint on pods
-                                        that do not tolerate the taint.
-                                        Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
-                                      type: string
-                                    key:
-                                      description: Required. The taint key to be applied
-                                        to a node.
-                                      type: string
-                                    timeAdded:
-                                      description: |-
-                                        TimeAdded represents the time at which the taint was added.
-                                        It is only written for NoExecute taints.
-                                      format: date-time
-                                      type: string
-                                    value:
-                                      description: The taint value corresponding to
-                                        the taint key.
-                                      type: string
-                                  required:
-                                  - effect
-                                  - key
-                                  type: object
-                                type: array
-                            type: object
-                          patches:
-                            description: |-
-                              patches contains options related to applying patches to components deployed by kubeadm during
-                              "kubeadm join". The minimum kubernetes version needed to support Patches is v1.22
-                            properties:
-                              directory:
-                                description: |-
-                                  directory is a path to a directory that contains files named "target[suffix][+patchtype].extension".
-                                  For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "target" can be one of
-                                  "kube-apiserver", "kube-controller-manager", "kube-scheduler", "etcd". "patchtype" can be one
-                                  of "strategic" "merge" or "json" and they match the patch formats supported by kubectl.
-                                  The default "patchtype" is "strategic". "extension" must be either "json" or "yaml".
-                                  "suffix" is an optional string that can be used to determine which patches are applied
-                                  first alpha-numerically.
-                                  These files can be written into the target directory via KubeadmConfig.Files which
-                                  specifies additional files to be created on the machine, either with content inline or
-                                  by referencing a secret.
-                                type: string
-                            type: object
-                          skipPhases:
-                            description: |-
-                              skipPhases is a list of phases to skip during command execution.
-                              The list of phases can be obtained with the "kubeadm init --help" command.
-                              This option takes effect only on Kubernetes >=1.22.0.
-                            items:
-                              type: string
-                            type: array
-                        type: object
-                      mounts:
-                        description: mounts specifies a list of mount points to be
-                          setup.
-                        items:
-                          description: MountPoints defines input for generated mounts
-                            in cloud-init.
-                          items:
-                            type: string
-                          type: array
-                        type: array
-                      ntp:
-                        description: ntp specifies NTP configuration
-                        properties:
-                          enabled:
-                            description: enabled specifies whether NTP should be enabled
-                            type: boolean
-                          servers:
-                            description: servers specifies which NTP servers to use
-                            items:
-                              type: string
-                            type: array
-                        type: object
-                      postKubeadmCommands:
-                        description: postKubeadmCommands specifies extra commands
-                          to run after kubeadm runs
-                        items:
-                          type: string
-                        type: array
-                      preKubeadmCommands:
-                        description: preKubeadmCommands specifies extra commands to
-                          run before kubeadm runs
-                        items:
-                          type: string
-                        type: array
-                      useExperimentalRetryJoin:
-                        description: |-
-                          useExperimentalRetryJoin replaces a basic kubeadm command with a shell
-                          script with retries for joins.
-
-                          This is meant to be an experimental temporary workaround on some environments
-                          where joins fail due to timing (and other issues). The long term goal is to add retries to
-                          kubeadm proper and use that functionality.
-
-                          This will add about 40KB to userdata
-
-                          For more information, refer to https://github.com/kubernetes-sigs/cluster-api/pull/2763#discussion_r397306055.
-
-                          Deprecated: This experimental fix is no longer needed and this field will be removed in a future release.
-                          When removing also remove from staticcheck exclude-rules for SA1019 in golangci.yml
-                        type: boolean
-                      users:
-                        description: users specifies extra users to add
-                        items:
-                          description: User defines the input for a generated user
-                            in cloud-init.
-                          properties:
-                            gecos:
-                              description: gecos specifies the gecos to use for the
-                                user
-                              type: string
-                            groups:
-                              description: groups specifies the additional groups
-                                for the user
-                              type: string
-                            homeDir:
-                              description: homeDir specifies the home directory to
-                                use for the user
-                              type: string
-                            inactive:
-                              description: inactive specifies whether to mark the
-                                user as inactive
-                              type: boolean
-                            lockPassword:
-                              description: lockPassword specifies if password login
-                                should be disabled
-                              type: boolean
-                            name:
-                              description: name specifies the user name
-                              type: string
-                            passwd:
-                              description: passwd specifies a hashed password for
-                                the user
-                              type: string
-                            passwdFrom:
-                              description: passwdFrom is a referenced source of passwd
-                                to populate the passwd.
-                              properties:
-                                secret:
-                                  description: secret represents a secret that should
-                                    populate this password.
-                                  properties:
-                                    key:
-                                      description: key is the key in the secret's
-                                        data map for this value.
-                                      type: string
-                                    name:
-                                      description: name of the secret in the KubeadmBootstrapConfig's
-                                        namespace to use.
-                                      type: string
-                                  required:
-                                  - key
-                                  - name
-                                  type: object
-                              required:
-                              - secret
-                              type: object
-                            primaryGroup:
-                              description: primaryGroup specifies the primary group
-                                for the user
-                              type: string
-                            shell:
-                              description: shell specifies the user's shell
-                              type: string
-                            sshAuthorizedKeys:
-                              description: sshAuthorizedKeys specifies a list of ssh
-                                authorized keys for the user
-                              items:
-                                type: string
-                              type: array
-                            sudo:
-                              description: sudo specifies a sudo role for the user
-                              type: string
-                          required:
-                          - name
-                          type: object
-                        type: array
-                      verbosity:
-                        description: |-
-                          verbosity is the number for the kubeadm log level verbosity.
-                          It overrides the `--v` flag in kubeadm commands.
-                        format: int32
-                        type: integer
-                    type: object
-                type: object
-            required:
-            - template
-            type: object
-        type: object
-    served: true
-    storage: true
-    subresources: {}
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: null
-  storedVersions: null
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: bootstrap-kubeadm
-    clusterctl.cluster.x-k8s.io: ""
-  name: capi-kubeadm-bootstrap-manager
-  namespace: capi-kubeadm-bootstrap-system
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: Role
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: bootstrap-kubeadm
-    clusterctl.cluster.x-k8s.io: ""
-  name: capi-kubeadm-bootstrap-leader-election-role
-  namespace: capi-kubeadm-bootstrap-system
-rules:
-- apiGroups:
-  - ""
-  resources:
-  - events
-  verbs:
-  - create
-- apiGroups:
-  - coordination.k8s.io
-  resources:
-  - leases
-  verbs:
-  - get
-  - list
-  - watch
-  - create
-  - update
-  - patch
-  - delete
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: bootstrap-kubeadm
-    clusterctl.cluster.x-k8s.io: ""
-  name: capi-kubeadm-bootstrap-manager-role
-rules:
-- apiGroups:
-  - ""
-  resources:
-  - configmaps
-  - secrets
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - authentication.k8s.io
-  resources:
-  - tokenreviews
-  verbs:
-  - create
-- apiGroups:
-  - authorization.k8s.io
-  resources:
-  - subjectaccessreviews
-  verbs:
-  - create
-- apiGroups:
-  - bootstrap.cluster.x-k8s.io
-  resources:
-  - kubeadmconfigs
-  - kubeadmconfigs/finalizers
-  - kubeadmconfigs/status
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - cluster.x-k8s.io
-  resources:
-  - clusters
-  - clusters/status
-  - machinepools
-  - machinepools/status
-  - machines
-  - machines/status
-  - machinesets
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - ""
-  resources:
-  - events
-  verbs:
-  - create
-  - patch
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: RoleBinding
-metadata:
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: bootstrap-kubeadm
-    clusterctl.cluster.x-k8s.io: ""
-  name: capi-kubeadm-bootstrap-leader-election-rolebinding
-  namespace: capi-kubeadm-bootstrap-system
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: Role
-  name: capi-kubeadm-bootstrap-leader-election-role
-subjects:
-- kind: ServiceAccount
-  name: capi-kubeadm-bootstrap-manager
-  namespace: capi-kubeadm-bootstrap-system
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: bootstrap-kubeadm
-    clusterctl.cluster.x-k8s.io: ""
-  name: capi-kubeadm-bootstrap-manager-rolebinding
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: ClusterRole
-  name: capi-kubeadm-bootstrap-manager-role
-subjects:
-- kind: ServiceAccount
-  name: capi-kubeadm-bootstrap-manager
-  namespace: capi-kubeadm-bootstrap-system
----
-apiVersion: v1
-kind: Service
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: bootstrap-kubeadm
-    clusterctl.cluster.x-k8s.io: ""
-  name: capi-kubeadm-bootstrap-webhook-service
-  namespace: capi-kubeadm-bootstrap-system
-spec:
-  ports:
-  - port: 443
-    targetPort: webhook-server
-  selector:
-    cluster.x-k8s.io/provider: bootstrap-kubeadm
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: bootstrap-kubeadm
-    clusterctl.cluster.x-k8s.io: ""
-    control-plane: controller-manager
-  name: capi-kubeadm-bootstrap-controller-manager
-  namespace: capi-kubeadm-bootstrap-system
-spec:
-  replicas: 1
-  selector:
-    matchLabels:
-      cluster.x-k8s.io/provider: bootstrap-kubeadm
-      control-plane: controller-manager
-  strategy: {}
-  template:
-    metadata:
-      creationTimestamp: null
-      labels:
-        cluster.x-k8s.io/provider: bootstrap-kubeadm
-        control-plane: controller-manager
-    spec:
-      containers:
-      - args:
-        - --leader-elect
-        - --diagnostics-address=:8443
-        - --insecure-diagnostics=false
-        - --feature-gates=MachinePool=true,KubeadmBootstrapFormatIgnition=false
-        - --bootstrap-token-ttl=15m
-        command:
-        - /manager
-        env:
-        - name: POD_NAMESPACE
-          valueFrom:
-            fieldRef:
-              fieldPath: metadata.namespace
-        - name: POD_NAME
-          valueFrom:
-            fieldRef:
-              fieldPath: metadata.name
-        - name: POD_UID
-          valueFrom:
-            fieldRef:
-              fieldPath: metadata.uid
-        image: registry.k8s.io/cluster-api/kubeadm-bootstrap-controller:v1.9.5
-        imagePullPolicy: IfNotPresent
-        livenessProbe:
-          httpGet:
-            path: /healthz
-            port: healthz
-        name: manager
-        ports:
-        - containerPort: 9443
-          name: webhook-server
-          protocol: TCP
-        - containerPort: 9440
-          name: healthz
-          protocol: TCP
-        - containerPort: 8443
-          name: metrics
-          protocol: TCP
-        readinessProbe:
-          httpGet:
-            path: /readyz
-            port: healthz
-        resources: {}
-        securityContext:
-          allowPrivilegeEscalation: false
-          capabilities:
-            drop:
-            - ALL
-          privileged: false
-          runAsGroup: 65532
-          runAsUser: 65532
-        terminationMessagePolicy: FallbackToLogsOnError
-        volumeMounts:
-        - mountPath: /tmp/k8s-webhook-server/serving-certs
-          name: cert
-          readOnly: true
-      securityContext:
-        runAsNonRoot: true
-        seccompProfile:
-          type: RuntimeDefault
-      serviceAccountName: capi-kubeadm-bootstrap-manager
-      terminationGracePeriodSeconds: 10
-      tolerations:
-      - effect: NoSchedule
-        key: node-role.kubernetes.io/master
-      - effect: NoSchedule
-        key: node-role.kubernetes.io/control-plane
-      volumes:
-      - name: cert
-        secret:
-          secretName: capi-kubeadm-bootstrap-webhook-service-cert
-status: {}
----
-apiVersion: admissionregistration.k8s.io/v1
-kind: MutatingWebhookConfiguration
-metadata:
-  annotations:
-    cert-manager.io/inject-ca-from: capi-kubeadm-bootstrap-system/capi-kubeadm-bootstrap-serving-cert
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: bootstrap-kubeadm
-    clusterctl.cluster.x-k8s.io: ""
-  name: capi-kubeadm-bootstrap-mutating-webhook-configuration
-webhooks:
-- admissionReviewVersions:
-  - v1
-  - v1beta1
-  clientConfig:
-    service:
-      name: capi-kubeadm-bootstrap-webhook-service
-      namespace: capi-kubeadm-bootstrap-system
-      path: /mutate-bootstrap-cluster-x-k8s-io-v1beta1-kubeadmconfig
-  failurePolicy: Fail
-  name: default.kubeadmconfig.bootstrap.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - bootstrap.cluster.x-k8s.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - kubeadmconfigs
-  sideEffects: None
-- admissionReviewVersions:
-  - v1
-  - v1beta1
-  clientConfig:
-    service:
-      name: capi-kubeadm-bootstrap-webhook-service
-      namespace: capi-kubeadm-bootstrap-system
-      path: /mutate-bootstrap-cluster-x-k8s-io-v1beta1-kubeadmconfigtemplate
-  failurePolicy: Fail
-  name: default.kubeadmconfigtemplate.bootstrap.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - bootstrap.cluster.x-k8s.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - kubeadmconfigtemplates
-  sideEffects: None
----
-apiVersion: admissionregistration.k8s.io/v1
-kind: ValidatingWebhookConfiguration
-metadata:
-  annotations:
-    cert-manager.io/inject-ca-from: capi-kubeadm-bootstrap-system/capi-kubeadm-bootstrap-serving-cert
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: bootstrap-kubeadm
-    clusterctl.cluster.x-k8s.io: ""
-  name: capi-kubeadm-bootstrap-validating-webhook-configuration
-webhooks:
-- admissionReviewVersions:
-  - v1
-  - v1beta1
-  clientConfig:
-    service:
-      name: capi-kubeadm-bootstrap-webhook-service
-      namespace: capi-kubeadm-bootstrap-system
-      path: /validate-bootstrap-cluster-x-k8s-io-v1beta1-kubeadmconfig
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: validation.kubeadmconfig.bootstrap.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - bootstrap.cluster.x-k8s.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - kubeadmconfigs
-  sideEffects: None
-- admissionReviewVersions:
-  - v1
-  - v1beta1
-  clientConfig:
-    service:
-      name: capi-kubeadm-bootstrap-webhook-service
-      namespace: capi-kubeadm-bootstrap-system
-      path: /validate-bootstrap-cluster-x-k8s-io-v1beta1-kubeadmconfigtemplate
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: validation.kubeadmconfigtemplate.bootstrap.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - bootstrap.cluster.x-k8s.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - kubeadmconfigtemplates
-  sideEffects: None
diff --git a/installers/flux/templates/sw-catalogs/infra-controllers/capi/manifests/providers/control-plane/kubeadm/control-plane.yaml b/installers/flux/templates/sw-catalogs/infra-controllers/capi/manifests/providers/control-plane/kubeadm/control-plane.yaml
deleted file mode 100644 (file)
index a69dcb1..0000000
+++ /dev/null
@@ -1,8280 +0,0 @@
-apiVersion: v1
-kind: Namespace
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: control-plane-kubeadm
-    clusterctl.cluster.x-k8s.io: ""
-    control-plane: controller-manager
-  name: capi-kubeadm-control-plane-system
----
-apiVersion: cert-manager.io/v1
-kind: Issuer
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: control-plane-kubeadm
-    clusterctl.cluster.x-k8s.io: ""
-  name: capi-kubeadm-control-plane-selfsigned-issuer
-  namespace: capi-kubeadm-control-plane-system
-spec:
-  selfSigned: {}
----
-apiVersion: cert-manager.io/v1
-kind: Certificate
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: control-plane-kubeadm
-    clusterctl.cluster.x-k8s.io: ""
-  name: capi-kubeadm-control-plane-serving-cert
-  namespace: capi-kubeadm-control-plane-system
-spec:
-  dnsNames:
-  - capi-kubeadm-control-plane-webhook-service.capi-kubeadm-control-plane-system.svc
-  - capi-kubeadm-control-plane-webhook-service.capi-kubeadm-control-plane-system.svc.cluster.local
-  issuerRef:
-    kind: Issuer
-    name: capi-kubeadm-control-plane-selfsigned-issuer
-  secretName: capi-kubeadm-control-plane-webhook-service-cert
-  subject:
-    organizations:
-    - k8s-sig-cluster-lifecycle
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  annotations:
-    cert-manager.io/inject-ca-from: capi-kubeadm-control-plane-system/capi-kubeadm-control-plane-serving-cert
-    controller-gen.kubebuilder.io/version: v0.16.1
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: control-plane-kubeadm
-    cluster.x-k8s.io/v1beta1: v1beta1
-    clusterctl.cluster.x-k8s.io: ""
-  name: kubeadmcontrolplanes.controlplane.cluster.x-k8s.io
-spec:
-  conversion:
-    strategy: Webhook
-    webhook:
-      clientConfig:
-        service:
-          name: capi-kubeadm-control-plane-webhook-service
-          namespace: capi-kubeadm-control-plane-system
-          path: /convert
-      conversionReviewVersions:
-      - v1
-      - v1beta1
-  group: controlplane.cluster.x-k8s.io
-  names:
-    categories:
-    - cluster-api
-    kind: KubeadmControlPlane
-    listKind: KubeadmControlPlaneList
-    plural: kubeadmcontrolplanes
-    shortNames:
-    - kcp
-    singular: kubeadmcontrolplane
-  scope: Namespaced
-  versions:
-  - additionalPrinterColumns:
-    - description: This denotes whether or not the control plane has the uploaded
-        kubeadm-config configmap
-      jsonPath: .status.initialized
-      name: Initialized
-      type: boolean
-    - description: KubeadmControlPlane API Server is ready to receive requests
-      jsonPath: .status.ready
-      name: API Server Available
-      type: boolean
-    - description: Kubernetes version associated with this control plane
-      jsonPath: .spec.version
-      name: Version
-      type: string
-    - description: Total number of non-terminated machines targeted by this control
-        plane
-      jsonPath: .status.replicas
-      name: Replicas
-      type: integer
-    - description: Total number of fully running and ready control plane machines
-      jsonPath: .status.readyReplicas
-      name: Ready
-      type: integer
-    - description: Total number of non-terminated machines targeted by this control
-        plane that have the desired template spec
-      jsonPath: .status.updatedReplicas
-      name: Updated
-      type: integer
-    - description: Total number of unavailable machines targeted by this control plane
-      jsonPath: .status.unavailableReplicas
-      name: Unavailable
-      type: integer
-    deprecated: true
-    name: v1alpha3
-    schema:
-      openAPIV3Schema:
-        description: |-
-          KubeadmControlPlane is the Schema for the KubeadmControlPlane API.
-
-          Deprecated: This type will be removed in one of the next releases.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: KubeadmControlPlaneSpec defines the desired state of KubeadmControlPlane.
-            properties:
-              infrastructureTemplate:
-                description: |-
-                  infrastructureTemplate is a required reference to a custom resource
-                  offered by an infrastructure provider.
-                properties:
-                  apiVersion:
-                    description: API version of the referent.
-                    type: string
-                  fieldPath:
-                    description: |-
-                      If referring to a piece of an object instead of an entire object, this string
-                      should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                      For example, if the object reference is to a container within a pod, this would take on a value like:
-                      "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                      the event) or if no container name is specified "spec.containers[2]" (container with
-                      index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                      referencing a part of an object.
-                    type: string
-                  kind:
-                    description: |-
-                      Kind of the referent.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                    type: string
-                  name:
-                    description: |-
-                      Name of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                    type: string
-                  namespace:
-                    description: |-
-                      Namespace of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                    type: string
-                  resourceVersion:
-                    description: |-
-                      Specific resourceVersion to which this reference is made, if any.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                    type: string
-                  uid:
-                    description: |-
-                      UID of the referent.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                    type: string
-                type: object
-                x-kubernetes-map-type: atomic
-              kubeadmConfigSpec:
-                description: |-
-                  kubeadmConfigSpec is a KubeadmConfigSpec
-                  to use for initializing and joining machines to the control plane.
-                properties:
-                  clusterConfiguration:
-                    description: clusterConfiguration along with InitConfiguration
-                      are the configurations necessary for the init command
-                    properties:
-                      apiServer:
-                        description: APIServer contains extra settings for the API
-                          server control plane component
-                        properties:
-                          certSANs:
-                            description: CertSANs sets extra Subject Alternative Names
-                              for the API Server signing cert.
-                            items:
-                              type: string
-                            type: array
-                          extraArgs:
-                            additionalProperties:
-                              type: string
-                            description: ExtraArgs is an extra set of flags to pass
-                              to the control plane component.
-                            type: object
-                          extraVolumes:
-                            description: ExtraVolumes is an extra set of host volumes,
-                              mounted to the control plane component.
-                            items:
-                              description: |-
-                                HostPathMount contains elements describing volumes that are mounted from the
-                                host.
-                              properties:
-                                hostPath:
-                                  description: |-
-                                    HostPath is the path in the host that will be mounted inside
-                                    the pod.
-                                  type: string
-                                mountPath:
-                                  description: MountPath is the path inside the pod
-                                    where hostPath will be mounted.
-                                  type: string
-                                name:
-                                  description: Name of the volume inside the pod template.
-                                  type: string
-                                pathType:
-                                  description: PathType is the type of the HostPath.
-                                  type: string
-                                readOnly:
-                                  description: ReadOnly controls write access to the
-                                    volume
-                                  type: boolean
-                              required:
-                              - hostPath
-                              - mountPath
-                              - name
-                              type: object
-                            type: array
-                          timeoutForControlPlane:
-                            description: TimeoutForControlPlane controls the timeout
-                              that we use for API server to appear
-                            type: string
-                        type: object
-                      apiVersion:
-                        description: |-
-                          APIVersion defines the versioned schema of this representation of an object.
-                          Servers should convert recognized schemas to the latest internal value, and
-                          may reject unrecognized values.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-                        type: string
-                      certificatesDir:
-                        description: |-
-                          CertificatesDir specifies where to store or look for all required certificates.
-                          NB: if not provided, this will default to `/etc/kubernetes/pki`
-                        type: string
-                      clusterName:
-                        description: The cluster name
-                        type: string
-                      controlPlaneEndpoint:
-                        description: |-
-                          ControlPlaneEndpoint sets a stable IP address or DNS name for the control plane; it
-                          can be a valid IP address or a RFC-1123 DNS subdomain, both with optional TCP port.
-                          In case the ControlPlaneEndpoint is not specified, the AdvertiseAddress + BindPort
-                          are used; in case the ControlPlaneEndpoint is specified but without a TCP port,
-                          the BindPort is used.
-                          Possible usages are:
-                          e.g. In a cluster with more than one control plane instances, this field should be
-                          assigned the address of the external load balancer in front of the
-                          control plane instances.
-                          e.g.  in environments with enforced node recycling, the ControlPlaneEndpoint
-                          could be used for assigning a stable DNS to the control plane.
-                          NB: This value defaults to the first value in the Cluster object status.apiEndpoints array.
-                        type: string
-                      controllerManager:
-                        description: ControllerManager contains extra settings for
-                          the controller manager control plane component
-                        properties:
-                          extraArgs:
-                            additionalProperties:
-                              type: string
-                            description: ExtraArgs is an extra set of flags to pass
-                              to the control plane component.
-                            type: object
-                          extraVolumes:
-                            description: ExtraVolumes is an extra set of host volumes,
-                              mounted to the control plane component.
-                            items:
-                              description: |-
-                                HostPathMount contains elements describing volumes that are mounted from the
-                                host.
-                              properties:
-                                hostPath:
-                                  description: |-
-                                    HostPath is the path in the host that will be mounted inside
-                                    the pod.
-                                  type: string
-                                mountPath:
-                                  description: MountPath is the path inside the pod
-                                    where hostPath will be mounted.
-                                  type: string
-                                name:
-                                  description: Name of the volume inside the pod template.
-                                  type: string
-                                pathType:
-                                  description: PathType is the type of the HostPath.
-                                  type: string
-                                readOnly:
-                                  description: ReadOnly controls write access to the
-                                    volume
-                                  type: boolean
-                              required:
-                              - hostPath
-                              - mountPath
-                              - name
-                              type: object
-                            type: array
-                        type: object
-                      dns:
-                        description: DNS defines the options for the DNS add-on installed
-                          in the cluster.
-                        properties:
-                          imageRepository:
-                            description: |-
-                              ImageRepository sets the container registry to pull images from.
-                              if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
-                            type: string
-                          imageTag:
-                            description: |-
-                              ImageTag allows to specify a tag for the image.
-                              In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
-                            type: string
-                          type:
-                            description: Type defines the DNS add-on to be used
-                            type: string
-                        type: object
-                      etcd:
-                        description: |-
-                          Etcd holds configuration for etcd.
-                          NB: This value defaults to a Local (stacked) etcd
-                        properties:
-                          external:
-                            description: |-
-                              External describes how to connect to an external etcd cluster
-                              Local and External are mutually exclusive
-                            properties:
-                              caFile:
-                                description: |-
-                                  CAFile is an SSL Certificate Authority file used to secure etcd communication.
-                                  Required if using a TLS connection.
-                                type: string
-                              certFile:
-                                description: |-
-                                  CertFile is an SSL certification file used to secure etcd communication.
-                                  Required if using a TLS connection.
-                                type: string
-                              endpoints:
-                                description: Endpoints of etcd members. Required for
-                                  ExternalEtcd.
-                                items:
-                                  type: string
-                                type: array
-                              keyFile:
-                                description: |-
-                                  KeyFile is an SSL key file used to secure etcd communication.
-                                  Required if using a TLS connection.
-                                type: string
-                            required:
-                            - caFile
-                            - certFile
-                            - endpoints
-                            - keyFile
-                            type: object
-                          local:
-                            description: |-
-                              Local provides configuration knobs for configuring the local etcd instance
-                              Local and External are mutually exclusive
-                            properties:
-                              dataDir:
-                                description: |-
-                                  DataDir is the directory etcd will place its data.
-                                  Defaults to "/var/lib/etcd".
-                                type: string
-                              extraArgs:
-                                additionalProperties:
-                                  type: string
-                                description: |-
-                                  ExtraArgs are extra arguments provided to the etcd binary
-                                  when run inside a static pod.
-                                type: object
-                              imageRepository:
-                                description: |-
-                                  ImageRepository sets the container registry to pull images from.
-                                  if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
-                                type: string
-                              imageTag:
-                                description: |-
-                                  ImageTag allows to specify a tag for the image.
-                                  In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
-                                type: string
-                              peerCertSANs:
-                                description: PeerCertSANs sets extra Subject Alternative
-                                  Names for the etcd peer signing cert.
-                                items:
-                                  type: string
-                                type: array
-                              serverCertSANs:
-                                description: ServerCertSANs sets extra Subject Alternative
-                                  Names for the etcd server signing cert.
-                                items:
-                                  type: string
-                                type: array
-                            type: object
-                        type: object
-                      featureGates:
-                        additionalProperties:
-                          type: boolean
-                        description: FeatureGates enabled by the user.
-                        type: object
-                      imageRepository:
-                        description: |-
-                          ImageRepository sets the container registry to pull images from.
-                          If empty, `k8s.gcr.io` will be used by default; in case of kubernetes version is a CI build (kubernetes version starts with `ci/` or `ci-cross/`)
-                          `gcr.io/k8s-staging-ci-images` will be used as a default for control plane components and for kube-proxy, while `k8s.gcr.io`
-                          will be used for all the other images.
-                        type: string
-                      kind:
-                        description: |-
-                          Kind is a string value representing the REST resource this object represents.
-                          Servers may infer this from the endpoint the client submits requests to.
-                          Cannot be updated.
-                          In CamelCase.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                        type: string
-                      kubernetesVersion:
-                        description: |-
-                          KubernetesVersion is the target version of the control plane.
-                          NB: This value defaults to the Machine object spec.version
-                        type: string
-                      networking:
-                        description: |-
-                          Networking holds configuration for the networking topology of the cluster.
-                          NB: This value defaults to the Cluster object spec.clusterNetwork.
-                        properties:
-                          dnsDomain:
-                            description: DNSDomain is the dns domain used by k8s services.
-                              Defaults to "cluster.local".
-                            type: string
-                          podSubnet:
-                            description: |-
-                              PodSubnet is the subnet used by pods.
-                              If unset, the API server will not allocate CIDR ranges for every node.
-                              Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.services.cidrBlocks if that is set
-                            type: string
-                          serviceSubnet:
-                            description: |-
-                              ServiceSubnet is the subnet used by k8s services.
-                              Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.pods.cidrBlocks, or
-                              to "10.96.0.0/12" if that's unset.
-                            type: string
-                        type: object
-                      scheduler:
-                        description: Scheduler contains extra settings for the scheduler
-                          control plane component
-                        properties:
-                          extraArgs:
-                            additionalProperties:
-                              type: string
-                            description: ExtraArgs is an extra set of flags to pass
-                              to the control plane component.
-                            type: object
-                          extraVolumes:
-                            description: ExtraVolumes is an extra set of host volumes,
-                              mounted to the control plane component.
-                            items:
-                              description: |-
-                                HostPathMount contains elements describing volumes that are mounted from the
-                                host.
-                              properties:
-                                hostPath:
-                                  description: |-
-                                    HostPath is the path in the host that will be mounted inside
-                                    the pod.
-                                  type: string
-                                mountPath:
-                                  description: MountPath is the path inside the pod
-                                    where hostPath will be mounted.
-                                  type: string
-                                name:
-                                  description: Name of the volume inside the pod template.
-                                  type: string
-                                pathType:
-                                  description: PathType is the type of the HostPath.
-                                  type: string
-                                readOnly:
-                                  description: ReadOnly controls write access to the
-                                    volume
-                                  type: boolean
-                              required:
-                              - hostPath
-                              - mountPath
-                              - name
-                              type: object
-                            type: array
-                        type: object
-                      useHyperKubeImage:
-                        description: UseHyperKubeImage controls if hyperkube should
-                          be used for Kubernetes components instead of their respective
-                          separate images
-                        type: boolean
-                    type: object
-                  diskSetup:
-                    description: diskSetup specifies options for the creation of partition
-                      tables and file systems on devices.
-                    properties:
-                      filesystems:
-                        description: filesystems specifies the list of file systems
-                          to setup.
-                        items:
-                          description: Filesystem defines the file systems to be created.
-                          properties:
-                            device:
-                              description: device specifies the device name
-                              type: string
-                            extraOpts:
-                              description: extraOpts defined extra options to add
-                                to the command for creating the file system.
-                              items:
-                                type: string
-                              type: array
-                            filesystem:
-                              description: filesystem specifies the file system type.
-                              type: string
-                            label:
-                              description: label specifies the file system label to
-                                be used. If set to None, no label is used.
-                              type: string
-                            overwrite:
-                              description: |-
-                                overwrite defines whether or not to overwrite any existing filesystem.
-                                If true, any pre-existing file system will be destroyed. Use with Caution.
-                              type: boolean
-                            partition:
-                              description: 'partition specifies the partition to use.
-                                The valid options are: "auto|any", "auto", "any",
-                                "none", and <NUM>, where NUM is the actual partition
-                                number.'
-                              type: string
-                            replaceFS:
-                              description: |-
-                                replaceFS is a special directive, used for Microsoft Azure that instructs cloud-init to replace a file system of <FS_TYPE>.
-                                NOTE: unless you define a label, this requires the use of the 'any' partition directive.
-                              type: string
-                          required:
-                          - device
-                          - filesystem
-                          - label
-                          type: object
-                        type: array
-                      partitions:
-                        description: partitions specifies the list of the partitions
-                          to setup.
-                        items:
-                          description: Partition defines how to create and layout
-                            a partition.
-                          properties:
-                            device:
-                              description: device is the name of the device.
-                              type: string
-                            layout:
-                              description: |-
-                                layout specifies the device layout.
-                                If it is true, a single partition will be created for the entire device.
-                                When layout is false, it means don't partition or ignore existing partitioning.
-                              type: boolean
-                            overwrite:
-                              description: |-
-                                overwrite describes whether to skip checks and create the partition if a partition or filesystem is found on the device.
-                                Use with caution. Default is 'false'.
-                              type: boolean
-                            tableType:
-                              description: |-
-                                tableType specifies the tupe of partition table. The following are supported:
-                                'mbr': default and setups a MS-DOS partition table
-                                'gpt': setups a GPT partition table
-                              type: string
-                          required:
-                          - device
-                          - layout
-                          type: object
-                        type: array
-                    type: object
-                  files:
-                    description: files specifies extra files to be passed to user_data
-                      upon creation.
-                    items:
-                      description: File defines the input for generating write_files
-                        in cloud-init.
-                      properties:
-                        content:
-                          description: content is the actual content of the file.
-                          type: string
-                        contentFrom:
-                          description: contentFrom is a referenced source of content
-                            to populate the file.
-                          properties:
-                            secret:
-                              description: secret represents a secret that should
-                                populate this file.
-                              properties:
-                                key:
-                                  description: key is the key in the secret's data
-                                    map for this value.
-                                  type: string
-                                name:
-                                  description: name of the secret in the KubeadmBootstrapConfig's
-                                    namespace to use.
-                                  type: string
-                              required:
-                              - key
-                              - name
-                              type: object
-                          required:
-                          - secret
-                          type: object
-                        encoding:
-                          description: encoding specifies the encoding of the file
-                            contents.
-                          enum:
-                          - base64
-                          - gzip
-                          - gzip+base64
-                          type: string
-                        owner:
-                          description: owner specifies the ownership of the file,
-                            e.g. "root:root".
-                          type: string
-                        path:
-                          description: path specifies the full path on disk where
-                            to store the file.
-                          type: string
-                        permissions:
-                          description: permissions specifies the permissions to assign
-                            to the file, e.g. "0640".
-                          type: string
-                      required:
-                      - path
-                      type: object
-                    type: array
-                  format:
-                    description: format specifies the output format of the bootstrap
-                      data
-                    enum:
-                    - cloud-config
-                    type: string
-                  initConfiguration:
-                    description: initConfiguration along with ClusterConfiguration
-                      are the configurations necessary for the init command
-                    properties:
-                      apiVersion:
-                        description: |-
-                          APIVersion defines the versioned schema of this representation of an object.
-                          Servers should convert recognized schemas to the latest internal value, and
-                          may reject unrecognized values.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-                        type: string
-                      bootstrapTokens:
-                        description: |-
-                          BootstrapTokens is respected at `kubeadm init` time and describes a set of Bootstrap Tokens to create.
-                          This information IS NOT uploaded to the kubeadm cluster configmap, partly because of its sensitive nature
-                        items:
-                          description: BootstrapToken describes one bootstrap token,
-                            stored as a Secret in the cluster.
-                          properties:
-                            description:
-                              description: |-
-                                Description sets a human-friendly message why this token exists and what it's used
-                                for, so other administrators can know its purpose.
-                              type: string
-                            expires:
-                              description: |-
-                                Expires specifies the timestamp when this token expires. Defaults to being set
-                                dynamically at runtime based on the TTL. Expires and TTL are mutually exclusive.
-                              format: date-time
-                              type: string
-                            groups:
-                              description: |-
-                                Groups specifies the extra groups that this token will authenticate as when/if
-                                used for authentication
-                              items:
-                                type: string
-                              type: array
-                            token:
-                              description: |-
-                                Token is used for establishing bidirectional trust between nodes and control-planes.
-                                Used for joining nodes in the cluster.
-                              type: string
-                            ttl:
-                              description: |-
-                                TTL defines the time to live for this token. Defaults to 24h.
-                                Expires and TTL are mutually exclusive.
-                              type: string
-                            usages:
-                              description: |-
-                                Usages describes the ways in which this token can be used. Can by default be used
-                                for establishing bidirectional trust, but that can be changed here.
-                              items:
-                                type: string
-                              type: array
-                          required:
-                          - token
-                          type: object
-                        type: array
-                      kind:
-                        description: |-
-                          Kind is a string value representing the REST resource this object represents.
-                          Servers may infer this from the endpoint the client submits requests to.
-                          Cannot be updated.
-                          In CamelCase.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                        type: string
-                      localAPIEndpoint:
-                        description: |-
-                          LocalAPIEndpoint represents the endpoint of the API server instance that's deployed on this control plane node
-                          In HA setups, this differs from ClusterConfiguration.ControlPlaneEndpoint in the sense that ControlPlaneEndpoint
-                          is the global endpoint for the cluster, which then loadbalances the requests to each individual API server. This
-                          configuration object lets you customize what IP/DNS name and port the local API server advertises it's accessible
-                          on. By default, kubeadm tries to auto-detect the IP of the default interface and use that, but in case that process
-                          fails you may set the desired value here.
-                        properties:
-                          advertiseAddress:
-                            description: AdvertiseAddress sets the IP address for
-                              the API server to advertise.
-                            type: string
-                          bindPort:
-                            description: |-
-                              BindPort sets the secure port for the API Server to bind to.
-                              Defaults to 6443.
-                            format: int32
-                            type: integer
-                        required:
-                        - advertiseAddress
-                        - bindPort
-                        type: object
-                      nodeRegistration:
-                        description: |-
-                          NodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
-                          When used in the context of control plane nodes, NodeRegistration should remain consistent
-                          across both InitConfiguration and JoinConfiguration
-                        properties:
-                          criSocket:
-                            description: CRISocket is used to retrieve container runtime
-                              info. This information will be annotated to the Node
-                              API object, for later re-use
-                            type: string
-                          kubeletExtraArgs:
-                            additionalProperties:
-                              type: string
-                            description: |-
-                              KubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
-                              kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
-                              Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
-                            type: object
-                          name:
-                            description: |-
-                              Name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
-                              This field is also used in the CommonName field of the kubelet's client certificate to the API server.
-                              Defaults to the hostname of the node if not provided.
-                            type: string
-                          taints:
-                            description: |-
-                              Taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
-                              it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
-                              empty slice, i.e. `taints: {}` in the YAML file. This field is solely used for Node registration.
-                            items:
-                              description: |-
-                                The node this Taint is attached to has the "effect" on
-                                any pod that does not tolerate the Taint.
-                              properties:
-                                effect:
-                                  description: |-
-                                    Required. The effect of the taint on pods
-                                    that do not tolerate the taint.
-                                    Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
-                                  type: string
-                                key:
-                                  description: Required. The taint key to be applied
-                                    to a node.
-                                  type: string
-                                timeAdded:
-                                  description: |-
-                                    TimeAdded represents the time at which the taint was added.
-                                    It is only written for NoExecute taints.
-                                  format: date-time
-                                  type: string
-                                value:
-                                  description: The taint value corresponding to the
-                                    taint key.
-                                  type: string
-                              required:
-                              - effect
-                              - key
-                              type: object
-                            type: array
-                        type: object
-                    type: object
-                  joinConfiguration:
-                    description: joinConfiguration is the kubeadm configuration for
-                      the join command
-                    properties:
-                      apiVersion:
-                        description: |-
-                          APIVersion defines the versioned schema of this representation of an object.
-                          Servers should convert recognized schemas to the latest internal value, and
-                          may reject unrecognized values.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-                        type: string
-                      caCertPath:
-                        description: |-
-                          CACertPath is the path to the SSL certificate authority used to
-                          secure comunications between node and control-plane.
-                          Defaults to "/etc/kubernetes/pki/ca.crt".
-                        type: string
-                      controlPlane:
-                        description: |-
-                          ControlPlane defines the additional control plane instance to be deployed on the joining node.
-                          If nil, no additional control plane instance will be deployed.
-                        properties:
-                          localAPIEndpoint:
-                            description: LocalAPIEndpoint represents the endpoint
-                              of the API server instance to be deployed on this node.
-                            properties:
-                              advertiseAddress:
-                                description: AdvertiseAddress sets the IP address
-                                  for the API server to advertise.
-                                type: string
-                              bindPort:
-                                description: |-
-                                  BindPort sets the secure port for the API Server to bind to.
-                                  Defaults to 6443.
-                                format: int32
-                                type: integer
-                            required:
-                            - advertiseAddress
-                            - bindPort
-                            type: object
-                        type: object
-                      discovery:
-                        description: Discovery specifies the options for the kubelet
-                          to use during the TLS Bootstrap process
-                        properties:
-                          bootstrapToken:
-                            description: |-
-                              BootstrapToken is used to set the options for bootstrap token based discovery
-                              BootstrapToken and File are mutually exclusive
-                            properties:
-                              apiServerEndpoint:
-                                description: APIServerEndpoint is an IP or domain
-                                  name to the API server from which info will be fetched.
-                                type: string
-                              caCertHashes:
-                                description: |-
-                                  CACertHashes specifies a set of public key pins to verify
-                                  when token-based discovery is used. The root CA found during discovery
-                                  must match one of these values. Specifying an empty set disables root CA
-                                  pinning, which can be unsafe. Each hash is specified as "<type>:<value>",
-                                  where the only currently supported type is "sha256". This is a hex-encoded
-                                  SHA-256 hash of the Subject Public Key Info (SPKI) object in DER-encoded
-                                  ASN.1. These hashes can be calculated using, for example, OpenSSL:
-                                  openssl x509 -pubkey -in ca.crt openssl rsa -pubin -outform der 2>&/dev/null | openssl dgst -sha256 -hex
-                                items:
-                                  type: string
-                                type: array
-                              token:
-                                description: |-
-                                  Token is a token used to validate cluster information
-                                  fetched from the control-plane.
-                                type: string
-                              unsafeSkipCAVerification:
-                                description: |-
-                                  UnsafeSkipCAVerification allows token-based discovery
-                                  without CA verification via CACertHashes. This can weaken
-                                  the security of kubeadm since other nodes can impersonate the control-plane.
-                                type: boolean
-                            required:
-                            - token
-                            - unsafeSkipCAVerification
-                            type: object
-                          file:
-                            description: |-
-                              File is used to specify a file or URL to a kubeconfig file from which to load cluster information
-                              BootstrapToken and File are mutually exclusive
-                            properties:
-                              kubeConfigPath:
-                                description: KubeConfigPath is used to specify the
-                                  actual file path or URL to the kubeconfig file from
-                                  which to load cluster information
-                                type: string
-                            required:
-                            - kubeConfigPath
-                            type: object
-                          timeout:
-                            description: Timeout modifies the discovery timeout
-                            type: string
-                          tlsBootstrapToken:
-                            description: |-
-                              TLSBootstrapToken is a token used for TLS bootstrapping.
-                              If .BootstrapToken is set, this field is defaulted to .BootstrapToken.Token, but can be overridden.
-                              If .File is set, this field **must be set** in case the KubeConfigFile does not contain any other authentication information
-                            type: string
-                        type: object
-                      kind:
-                        description: |-
-                          Kind is a string value representing the REST resource this object represents.
-                          Servers may infer this from the endpoint the client submits requests to.
-                          Cannot be updated.
-                          In CamelCase.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                        type: string
-                      nodeRegistration:
-                        description: |-
-                          NodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
-                          When used in the context of control plane nodes, NodeRegistration should remain consistent
-                          across both InitConfiguration and JoinConfiguration
-                        properties:
-                          criSocket:
-                            description: CRISocket is used to retrieve container runtime
-                              info. This information will be annotated to the Node
-                              API object, for later re-use
-                            type: string
-                          kubeletExtraArgs:
-                            additionalProperties:
-                              type: string
-                            description: |-
-                              KubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
-                              kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
-                              Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
-                            type: object
-                          name:
-                            description: |-
-                              Name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
-                              This field is also used in the CommonName field of the kubelet's client certificate to the API server.
-                              Defaults to the hostname of the node if not provided.
-                            type: string
-                          taints:
-                            description: |-
-                              Taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
-                              it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
-                              empty slice, i.e. `taints: {}` in the YAML file. This field is solely used for Node registration.
-                            items:
-                              description: |-
-                                The node this Taint is attached to has the "effect" on
-                                any pod that does not tolerate the Taint.
-                              properties:
-                                effect:
-                                  description: |-
-                                    Required. The effect of the taint on pods
-                                    that do not tolerate the taint.
-                                    Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
-                                  type: string
-                                key:
-                                  description: Required. The taint key to be applied
-                                    to a node.
-                                  type: string
-                                timeAdded:
-                                  description: |-
-                                    TimeAdded represents the time at which the taint was added.
-                                    It is only written for NoExecute taints.
-                                  format: date-time
-                                  type: string
-                                value:
-                                  description: The taint value corresponding to the
-                                    taint key.
-                                  type: string
-                              required:
-                              - effect
-                              - key
-                              type: object
-                            type: array
-                        type: object
-                    type: object
-                  mounts:
-                    description: mounts specifies a list of mount points to be setup.
-                    items:
-                      description: MountPoints defines input for generated mounts
-                        in cloud-init.
-                      items:
-                        type: string
-                      type: array
-                    type: array
-                  ntp:
-                    description: ntp specifies NTP configuration
-                    properties:
-                      enabled:
-                        description: enabled specifies whether NTP should be enabled
-                        type: boolean
-                      servers:
-                        description: servers specifies which NTP servers to use
-                        items:
-                          type: string
-                        type: array
-                    type: object
-                  postKubeadmCommands:
-                    description: postKubeadmCommands specifies extra commands to run
-                      after kubeadm runs
-                    items:
-                      type: string
-                    type: array
-                  preKubeadmCommands:
-                    description: preKubeadmCommands specifies extra commands to run
-                      before kubeadm runs
-                    items:
-                      type: string
-                    type: array
-                  useExperimentalRetryJoin:
-                    description: |-
-                      useExperimentalRetryJoin replaces a basic kubeadm command with a shell
-                      script with retries for joins.
-
-                      This is meant to be an experimental temporary workaround on some environments
-                      where joins fail due to timing (and other issues). The long term goal is to add retries to
-                      kubeadm proper and use that functionality.
-
-                      This will add about 40KB to userdata
-
-                      For more information, refer to https://github.com/kubernetes-sigs/cluster-api/pull/2763#discussion_r397306055.
-                    type: boolean
-                  users:
-                    description: users specifies extra users to add
-                    items:
-                      description: User defines the input for a generated user in
-                        cloud-init.
-                      properties:
-                        gecos:
-                          description: gecos specifies the gecos to use for the user
-                          type: string
-                        groups:
-                          description: groups specifies the additional groups for
-                            the user
-                          type: string
-                        homeDir:
-                          description: homeDir specifies the home directory to use
-                            for the user
-                          type: string
-                        inactive:
-                          description: inactive specifies whether to mark the user
-                            as inactive
-                          type: boolean
-                        lockPassword:
-                          description: lockPassword specifies if password login should
-                            be disabled
-                          type: boolean
-                        name:
-                          description: name specifies the user name
-                          type: string
-                        passwd:
-                          description: passwd specifies a hashed password for the
-                            user
-                          type: string
-                        primaryGroup:
-                          description: primaryGroup specifies the primary group for
-                            the user
-                          type: string
-                        shell:
-                          description: shell specifies the user's shell
-                          type: string
-                        sshAuthorizedKeys:
-                          description: sshAuthorizedKeys specifies a list of ssh authorized
-                            keys for the user
-                          items:
-                            type: string
-                          type: array
-                        sudo:
-                          description: sudo specifies a sudo role for the user
-                          type: string
-                      required:
-                      - name
-                      type: object
-                    type: array
-                  verbosity:
-                    description: |-
-                      verbosity is the number for the kubeadm log level verbosity.
-                      It overrides the `--v` flag in kubeadm commands.
-                    format: int32
-                    type: integer
-                type: object
-              nodeDrainTimeout:
-                description: |-
-                  nodeDrainTimeout is the total amount of time that the controller will spend on draining a controlplane node
-                  The default value is 0, meaning that the node can be drained without any time limitations.
-                  NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
-                type: string
-              replicas:
-                description: |-
-                  Number of desired machines. Defaults to 1. When stacked etcd is used only
-                  odd numbers are permitted, as per [etcd best practice](https://etcd.io/docs/v3.3.12/faq/#why-an-odd-number-of-cluster-members).
-                  This is a pointer to distinguish between explicit zero and not specified.
-                format: int32
-                type: integer
-              rolloutStrategy:
-                description: |-
-                  The RolloutStrategy to use to replace control plane machines with
-                  new ones.
-                properties:
-                  rollingUpdate:
-                    description: |-
-                      Rolling update config params. Present only if
-                      RolloutStrategyType = RollingUpdate.
-                    properties:
-                      maxSurge:
-                        anyOf:
-                        - type: integer
-                        - type: string
-                        description: |-
-                          The maximum number of control planes that can be scheduled above or under the
-                          desired number of control planes.
-                          Value can be an absolute number 1 or 0.
-                          Defaults to 1.
-                          Example: when this is set to 1, the control plane can be scaled
-                          up immediately when the rolling update starts.
-                        x-kubernetes-int-or-string: true
-                    type: object
-                  type:
-                    description: |-
-                      type of rollout. Currently the only supported strategy is
-                      "RollingUpdate".
-                      Default is RollingUpdate.
-                    type: string
-                type: object
-              upgradeAfter:
-                description: |-
-                  upgradeAfter is a field to indicate an upgrade should be performed
-                  after the specified time even if no changes have been made to the
-                  KubeadmControlPlane
-                format: date-time
-                type: string
-              version:
-                description: version defines the desired Kubernetes version.
-                type: string
-            required:
-            - infrastructureTemplate
-            - kubeadmConfigSpec
-            - version
-            type: object
-          status:
-            description: KubeadmControlPlaneStatus defines the observed state of KubeadmControlPlane.
-            properties:
-              conditions:
-                description: conditions defines current service state of the KubeadmControlPlane.
-                items:
-                  description: Condition defines an observation of a Cluster API resource
-                    operational state.
-                  properties:
-                    lastTransitionTime:
-                      description: |-
-                        Last time the condition transitioned from one status to another.
-                        This should be when the underlying condition changed. If that is not known, then using the time when
-                        the API field changed is acceptable.
-                      format: date-time
-                      type: string
-                    message:
-                      description: |-
-                        A human readable message indicating details about the transition.
-                        This field may be empty.
-                      type: string
-                    reason:
-                      description: |-
-                        The reason for the condition's last transition in CamelCase.
-                        The specific API may choose whether or not this field is considered a guaranteed API.
-                        This field may not be empty.
-                      type: string
-                    severity:
-                      description: |-
-                        severity provides an explicit classification of Reason code, so the users or machines can immediately
-                        understand the current situation and act accordingly.
-                        The Severity field MUST be set only when Status=False.
-                      type: string
-                    status:
-                      description: status of the condition, one of True, False, Unknown.
-                      type: string
-                    type:
-                      description: |-
-                        type of condition in CamelCase or in foo.example.com/CamelCase.
-                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
-                        can be useful (see .node.status.conditions), the ability to deconflict is important.
-                      type: string
-                  required:
-                  - status
-                  - type
-                  type: object
-                type: array
-              failureMessage:
-                description: |-
-                  ErrorMessage indicates that there is a terminal problem reconciling the
-                  state, and will be set to a descriptive error message.
-                type: string
-              failureReason:
-                description: |-
-                  failureReason indicates that there is a terminal problem reconciling the
-                  state, and will be set to a token value suitable for
-                  programmatic interpretation.
-                type: string
-              initialized:
-                description: |-
-                  initialized denotes whether or not the control plane has the
-                  uploaded kubeadm-config configmap.
-                type: boolean
-              observedGeneration:
-                description: observedGeneration is the latest generation observed
-                  by the controller.
-                format: int64
-                type: integer
-              ready:
-                description: |-
-                  ready denotes that the KubeadmControlPlane API Server is ready to
-                  receive requests.
-                type: boolean
-              readyReplicas:
-                description: Total number of fully running and ready control plane
-                  machines.
-                format: int32
-                type: integer
-              replicas:
-                description: |-
-                  Total number of non-terminated machines targeted by this control plane
-                  (their labels match the selector).
-                format: int32
-                type: integer
-              selector:
-                description: |-
-                  selector is the label selector in string format to avoid introspection
-                  by clients, and is used to provide the CRD-based integration for the
-                  scale subresource and additional integrations for things like kubectl
-                  describe.. The string will be in the same format as the query-param syntax.
-                  More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors
-                type: string
-              unavailableReplicas:
-                description: |-
-                  Total number of unavailable machines targeted by this control plane.
-                  This is the total number of machines that are still required for
-                  the deployment to have 100% available capacity. They may either
-                  be machines that are running but not yet ready or machines
-                  that still have not been created.
-                format: int32
-                type: integer
-              updatedReplicas:
-                description: |-
-                  Total number of non-terminated machines targeted by this control plane
-                  that have the desired template spec.
-                format: int32
-                type: integer
-            type: object
-        type: object
-    served: false
-    storage: false
-    subresources:
-      scale:
-        labelSelectorPath: .status.selector
-        specReplicasPath: .spec.replicas
-        statusReplicasPath: .status.replicas
-      status: {}
-  - additionalPrinterColumns:
-    - description: Time duration since creation of KubeadmControlPlane
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    - description: This denotes whether or not the control plane has the uploaded
-        kubeadm-config configmap
-      jsonPath: .status.initialized
-      name: Initialized
-      type: boolean
-    - description: KubeadmControlPlane API Server is ready to receive requests
-      jsonPath: .status.ready
-      name: API Server Available
-      type: boolean
-    - description: Kubernetes version associated with this control plane
-      jsonPath: .spec.version
-      name: Version
-      type: string
-    - description: Total number of non-terminated machines targeted by this control
-        plane
-      jsonPath: .status.replicas
-      name: Replicas
-      type: integer
-    - description: Total number of fully running and ready control plane machines
-      jsonPath: .status.readyReplicas
-      name: Ready
-      type: integer
-    - description: Total number of non-terminated machines targeted by this control
-        plane that have the desired template spec
-      jsonPath: .status.updatedReplicas
-      name: Updated
-      type: integer
-    - description: Total number of unavailable machines targeted by this control plane
-      jsonPath: .status.unavailableReplicas
-      name: Unavailable
-      type: integer
-    deprecated: true
-    name: v1alpha4
-    schema:
-      openAPIV3Schema:
-        description: |-
-          KubeadmControlPlane is the Schema for the KubeadmControlPlane API.
-
-          Deprecated: This type will be removed in one of the next releases.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: KubeadmControlPlaneSpec defines the desired state of KubeadmControlPlane.
-            properties:
-              kubeadmConfigSpec:
-                description: |-
-                  kubeadmConfigSpec is a KubeadmConfigSpec
-                  to use for initializing and joining machines to the control plane.
-                properties:
-                  clusterConfiguration:
-                    description: clusterConfiguration along with InitConfiguration
-                      are the configurations necessary for the init command
-                    properties:
-                      apiServer:
-                        description: apiServer contains extra settings for the API
-                          server control plane component
-                        properties:
-                          certSANs:
-                            description: certSANs sets extra Subject Alternative Names
-                              for the API Server signing cert.
-                            items:
-                              type: string
-                            type: array
-                          extraArgs:
-                            additionalProperties:
-                              type: string
-                            description: extraArgs is an extra set of flags to pass
-                              to the control plane component.
-                            type: object
-                          extraVolumes:
-                            description: extraVolumes is an extra set of host volumes,
-                              mounted to the control plane component.
-                            items:
-                              description: |-
-                                HostPathMount contains elements describing volumes that are mounted from the
-                                host.
-                              properties:
-                                hostPath:
-                                  description: |-
-                                    hostPath is the path in the host that will be mounted inside
-                                    the pod.
-                                  type: string
-                                mountPath:
-                                  description: mountPath is the path inside the pod
-                                    where hostPath will be mounted.
-                                  type: string
-                                name:
-                                  description: name of the volume inside the pod template.
-                                  type: string
-                                pathType:
-                                  description: pathType is the type of the HostPath.
-                                  type: string
-                                readOnly:
-                                  description: readOnly controls write access to the
-                                    volume
-                                  type: boolean
-                              required:
-                              - hostPath
-                              - mountPath
-                              - name
-                              type: object
-                            type: array
-                          timeoutForControlPlane:
-                            description: timeoutForControlPlane controls the timeout
-                              that we use for API server to appear
-                            type: string
-                        type: object
-                      apiVersion:
-                        description: |-
-                          APIVersion defines the versioned schema of this representation of an object.
-                          Servers should convert recognized schemas to the latest internal value, and
-                          may reject unrecognized values.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-                        type: string
-                      certificatesDir:
-                        description: |-
-                          certificatesDir specifies where to store or look for all required certificates.
-                          NB: if not provided, this will default to `/etc/kubernetes/pki`
-                        type: string
-                      clusterName:
-                        description: The cluster name
-                        type: string
-                      controlPlaneEndpoint:
-                        description: |-
-                          controlPlaneEndpoint sets a stable IP address or DNS name for the control plane; it
-                          can be a valid IP address or a RFC-1123 DNS subdomain, both with optional TCP port.
-                          In case the ControlPlaneEndpoint is not specified, the AdvertiseAddress + BindPort
-                          are used; in case the ControlPlaneEndpoint is specified but without a TCP port,
-                          the BindPort is used.
-                          Possible usages are:
-                          e.g. In a cluster with more than one control plane instances, this field should be
-                          assigned the address of the external load balancer in front of the
-                          control plane instances.
-                          e.g.  in environments with enforced node recycling, the ControlPlaneEndpoint
-                          could be used for assigning a stable DNS to the control plane.
-                          NB: This value defaults to the first value in the Cluster object status.apiEndpoints array.
-                        type: string
-                      controllerManager:
-                        description: controllerManager contains extra settings for
-                          the controller manager control plane component
-                        properties:
-                          extraArgs:
-                            additionalProperties:
-                              type: string
-                            description: extraArgs is an extra set of flags to pass
-                              to the control plane component.
-                            type: object
-                          extraVolumes:
-                            description: extraVolumes is an extra set of host volumes,
-                              mounted to the control plane component.
-                            items:
-                              description: |-
-                                HostPathMount contains elements describing volumes that are mounted from the
-                                host.
-                              properties:
-                                hostPath:
-                                  description: |-
-                                    hostPath is the path in the host that will be mounted inside
-                                    the pod.
-                                  type: string
-                                mountPath:
-                                  description: mountPath is the path inside the pod
-                                    where hostPath will be mounted.
-                                  type: string
-                                name:
-                                  description: name of the volume inside the pod template.
-                                  type: string
-                                pathType:
-                                  description: pathType is the type of the HostPath.
-                                  type: string
-                                readOnly:
-                                  description: readOnly controls write access to the
-                                    volume
-                                  type: boolean
-                              required:
-                              - hostPath
-                              - mountPath
-                              - name
-                              type: object
-                            type: array
-                        type: object
-                      dns:
-                        description: dns defines the options for the DNS add-on installed
-                          in the cluster.
-                        properties:
-                          imageRepository:
-                            description: |-
-                              imageRepository sets the container registry to pull images from.
-                              if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
-                            type: string
-                          imageTag:
-                            description: |-
-                              imageTag allows to specify a tag for the image.
-                              In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
-                            type: string
-                        type: object
-                      etcd:
-                        description: |-
-                          etcd holds configuration for etcd.
-                          NB: This value defaults to a Local (stacked) etcd
-                        properties:
-                          external:
-                            description: |-
-                              external describes how to connect to an external etcd cluster
-                              Local and External are mutually exclusive
-                            properties:
-                              caFile:
-                                description: |-
-                                  caFile is an SSL Certificate Authority file used to secure etcd communication.
-                                  Required if using a TLS connection.
-                                type: string
-                              certFile:
-                                description: |-
-                                  certFile is an SSL certification file used to secure etcd communication.
-                                  Required if using a TLS connection.
-                                type: string
-                              endpoints:
-                                description: endpoints of etcd members. Required for
-                                  ExternalEtcd.
-                                items:
-                                  type: string
-                                type: array
-                              keyFile:
-                                description: |-
-                                  keyFile is an SSL key file used to secure etcd communication.
-                                  Required if using a TLS connection.
-                                type: string
-                            required:
-                            - caFile
-                            - certFile
-                            - endpoints
-                            - keyFile
-                            type: object
-                          local:
-                            description: |-
-                              local provides configuration knobs for configuring the local etcd instance
-                              Local and External are mutually exclusive
-                            properties:
-                              dataDir:
-                                description: |-
-                                  dataDir is the directory etcd will place its data.
-                                  Defaults to "/var/lib/etcd".
-                                type: string
-                              extraArgs:
-                                additionalProperties:
-                                  type: string
-                                description: |-
-                                  extraArgs are extra arguments provided to the etcd binary
-                                  when run inside a static pod.
-                                type: object
-                              imageRepository:
-                                description: |-
-                                  imageRepository sets the container registry to pull images from.
-                                  if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
-                                type: string
-                              imageTag:
-                                description: |-
-                                  imageTag allows to specify a tag for the image.
-                                  In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
-                                type: string
-                              peerCertSANs:
-                                description: peerCertSANs sets extra Subject Alternative
-                                  Names for the etcd peer signing cert.
-                                items:
-                                  type: string
-                                type: array
-                              serverCertSANs:
-                                description: serverCertSANs sets extra Subject Alternative
-                                  Names for the etcd server signing cert.
-                                items:
-                                  type: string
-                                type: array
-                            type: object
-                        type: object
-                      featureGates:
-                        additionalProperties:
-                          type: boolean
-                        description: featureGates enabled by the user.
-                        type: object
-                      imageRepository:
-                        description: |-
-                          imageRepository sets the container registry to pull images from.
-                          If empty, `registry.k8s.io` will be used by default; in case of kubernetes version is a CI build (kubernetes version starts with `ci/` or `ci-cross/`)
-                          `gcr.io/k8s-staging-ci-images` will be used as a default for control plane components and for kube-proxy, while `registry.k8s.io`
-                          will be used for all the other images.
-                        type: string
-                      kind:
-                        description: |-
-                          Kind is a string value representing the REST resource this object represents.
-                          Servers may infer this from the endpoint the client submits requests to.
-                          Cannot be updated.
-                          In CamelCase.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                        type: string
-                      kubernetesVersion:
-                        description: |-
-                          kubernetesVersion is the target version of the control plane.
-                          NB: This value defaults to the Machine object spec.version
-                        type: string
-                      networking:
-                        description: |-
-                          networking holds configuration for the networking topology of the cluster.
-                          NB: This value defaults to the Cluster object spec.clusterNetwork.
-                        properties:
-                          dnsDomain:
-                            description: dnsDomain is the dns domain used by k8s services.
-                              Defaults to "cluster.local".
-                            type: string
-                          podSubnet:
-                            description: |-
-                              podSubnet is the subnet used by pods.
-                              If unset, the API server will not allocate CIDR ranges for every node.
-                              Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.services.cidrBlocks if that is set
-                            type: string
-                          serviceSubnet:
-                            description: |-
-                              serviceSubnet is the subnet used by k8s services.
-                              Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.pods.cidrBlocks, or
-                              to "10.96.0.0/12" if that's unset.
-                            type: string
-                        type: object
-                      scheduler:
-                        description: scheduler contains extra settings for the scheduler
-                          control plane component
-                        properties:
-                          extraArgs:
-                            additionalProperties:
-                              type: string
-                            description: extraArgs is an extra set of flags to pass
-                              to the control plane component.
-                            type: object
-                          extraVolumes:
-                            description: extraVolumes is an extra set of host volumes,
-                              mounted to the control plane component.
-                            items:
-                              description: |-
-                                HostPathMount contains elements describing volumes that are mounted from the
-                                host.
-                              properties:
-                                hostPath:
-                                  description: |-
-                                    hostPath is the path in the host that will be mounted inside
-                                    the pod.
-                                  type: string
-                                mountPath:
-                                  description: mountPath is the path inside the pod
-                                    where hostPath will be mounted.
-                                  type: string
-                                name:
-                                  description: name of the volume inside the pod template.
-                                  type: string
-                                pathType:
-                                  description: pathType is the type of the HostPath.
-                                  type: string
-                                readOnly:
-                                  description: readOnly controls write access to the
-                                    volume
-                                  type: boolean
-                              required:
-                              - hostPath
-                              - mountPath
-                              - name
-                              type: object
-                            type: array
-                        type: object
-                    type: object
-                  diskSetup:
-                    description: diskSetup specifies options for the creation of partition
-                      tables and file systems on devices.
-                    properties:
-                      filesystems:
-                        description: filesystems specifies the list of file systems
-                          to setup.
-                        items:
-                          description: Filesystem defines the file systems to be created.
-                          properties:
-                            device:
-                              description: device specifies the device name
-                              type: string
-                            extraOpts:
-                              description: extraOpts defined extra options to add
-                                to the command for creating the file system.
-                              items:
-                                type: string
-                              type: array
-                            filesystem:
-                              description: filesystem specifies the file system type.
-                              type: string
-                            label:
-                              description: label specifies the file system label to
-                                be used. If set to None, no label is used.
-                              type: string
-                            overwrite:
-                              description: |-
-                                overwrite defines whether or not to overwrite any existing filesystem.
-                                If true, any pre-existing file system will be destroyed. Use with Caution.
-                              type: boolean
-                            partition:
-                              description: 'partition specifies the partition to use.
-                                The valid options are: "auto|any", "auto", "any",
-                                "none", and <NUM>, where NUM is the actual partition
-                                number.'
-                              type: string
-                            replaceFS:
-                              description: |-
-                                replaceFS is a special directive, used for Microsoft Azure that instructs cloud-init to replace a file system of <FS_TYPE>.
-                                NOTE: unless you define a label, this requires the use of the 'any' partition directive.
-                              type: string
-                          required:
-                          - device
-                          - filesystem
-                          - label
-                          type: object
-                        type: array
-                      partitions:
-                        description: partitions specifies the list of the partitions
-                          to setup.
-                        items:
-                          description: Partition defines how to create and layout
-                            a partition.
-                          properties:
-                            device:
-                              description: device is the name of the device.
-                              type: string
-                            layout:
-                              description: |-
-                                layout specifies the device layout.
-                                If it is true, a single partition will be created for the entire device.
-                                When layout is false, it means don't partition or ignore existing partitioning.
-                              type: boolean
-                            overwrite:
-                              description: |-
-                                overwrite describes whether to skip checks and create the partition if a partition or filesystem is found on the device.
-                                Use with caution. Default is 'false'.
-                              type: boolean
-                            tableType:
-                              description: |-
-                                tableType specifies the tupe of partition table. The following are supported:
-                                'mbr': default and setups a MS-DOS partition table
-                                'gpt': setups a GPT partition table
-                              type: string
-                          required:
-                          - device
-                          - layout
-                          type: object
-                        type: array
-                    type: object
-                  files:
-                    description: files specifies extra files to be passed to user_data
-                      upon creation.
-                    items:
-                      description: File defines the input for generating write_files
-                        in cloud-init.
-                      properties:
-                        content:
-                          description: content is the actual content of the file.
-                          type: string
-                        contentFrom:
-                          description: contentFrom is a referenced source of content
-                            to populate the file.
-                          properties:
-                            secret:
-                              description: secret represents a secret that should
-                                populate this file.
-                              properties:
-                                key:
-                                  description: key is the key in the secret's data
-                                    map for this value.
-                                  type: string
-                                name:
-                                  description: name of the secret in the KubeadmBootstrapConfig's
-                                    namespace to use.
-                                  type: string
-                              required:
-                              - key
-                              - name
-                              type: object
-                          required:
-                          - secret
-                          type: object
-                        encoding:
-                          description: encoding specifies the encoding of the file
-                            contents.
-                          enum:
-                          - base64
-                          - gzip
-                          - gzip+base64
-                          type: string
-                        owner:
-                          description: owner specifies the ownership of the file,
-                            e.g. "root:root".
-                          type: string
-                        path:
-                          description: path specifies the full path on disk where
-                            to store the file.
-                          type: string
-                        permissions:
-                          description: permissions specifies the permissions to assign
-                            to the file, e.g. "0640".
-                          type: string
-                      required:
-                      - path
-                      type: object
-                    type: array
-                  format:
-                    description: format specifies the output format of the bootstrap
-                      data
-                    enum:
-                    - cloud-config
-                    type: string
-                  initConfiguration:
-                    description: initConfiguration along with ClusterConfiguration
-                      are the configurations necessary for the init command
-                    properties:
-                      apiVersion:
-                        description: |-
-                          APIVersion defines the versioned schema of this representation of an object.
-                          Servers should convert recognized schemas to the latest internal value, and
-                          may reject unrecognized values.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-                        type: string
-                      bootstrapTokens:
-                        description: |-
-                          bootstrapTokens is respected at `kubeadm init` time and describes a set of Bootstrap Tokens to create.
-                          This information IS NOT uploaded to the kubeadm cluster configmap, partly because of its sensitive nature
-                        items:
-                          description: BootstrapToken describes one bootstrap token,
-                            stored as a Secret in the cluster.
-                          properties:
-                            description:
-                              description: |-
-                                description sets a human-friendly message why this token exists and what it's used
-                                for, so other administrators can know its purpose.
-                              type: string
-                            expires:
-                              description: |-
-                                expires specifies the timestamp when this token expires. Defaults to being set
-                                dynamically at runtime based on the TTL. Expires and TTL are mutually exclusive.
-                              format: date-time
-                              type: string
-                            groups:
-                              description: |-
-                                groups specifies the extra groups that this token will authenticate as when/if
-                                used for authentication
-                              items:
-                                type: string
-                              type: array
-                            token:
-                              description: |-
-                                token is used for establishing bidirectional trust between nodes and control-planes.
-                                Used for joining nodes in the cluster.
-                              type: string
-                            ttl:
-                              description: |-
-                                ttl defines the time to live for this token. Defaults to 24h.
-                                Expires and TTL are mutually exclusive.
-                              type: string
-                            usages:
-                              description: |-
-                                usages describes the ways in which this token can be used. Can by default be used
-                                for establishing bidirectional trust, but that can be changed here.
-                              items:
-                                type: string
-                              type: array
-                          required:
-                          - token
-                          type: object
-                        type: array
-                      kind:
-                        description: |-
-                          Kind is a string value representing the REST resource this object represents.
-                          Servers may infer this from the endpoint the client submits requests to.
-                          Cannot be updated.
-                          In CamelCase.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                        type: string
-                      localAPIEndpoint:
-                        description: |-
-                          localAPIEndpoint represents the endpoint of the API server instance that's deployed on this control plane node
-                          In HA setups, this differs from ClusterConfiguration.ControlPlaneEndpoint in the sense that ControlPlaneEndpoint
-                          is the global endpoint for the cluster, which then loadbalances the requests to each individual API server. This
-                          configuration object lets you customize what IP/DNS name and port the local API server advertises it's accessible
-                          on. By default, kubeadm tries to auto-detect the IP of the default interface and use that, but in case that process
-                          fails you may set the desired value here.
-                        properties:
-                          advertiseAddress:
-                            description: advertiseAddress sets the IP address for
-                              the API server to advertise.
-                            type: string
-                          bindPort:
-                            description: |-
-                              bindPort sets the secure port for the API Server to bind to.
-                              Defaults to 6443.
-                            format: int32
-                            type: integer
-                        type: object
-                      nodeRegistration:
-                        description: |-
-                          nodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
-                          When used in the context of control plane nodes, NodeRegistration should remain consistent
-                          across both InitConfiguration and JoinConfiguration
-                        properties:
-                          criSocket:
-                            description: criSocket is used to retrieve container runtime
-                              info. This information will be annotated to the Node
-                              API object, for later re-use
-                            type: string
-                          ignorePreflightErrors:
-                            description: ignorePreflightErrors provides a slice of
-                              pre-flight errors to be ignored when the current node
-                              is registered.
-                            items:
-                              type: string
-                            type: array
-                          kubeletExtraArgs:
-                            additionalProperties:
-                              type: string
-                            description: |-
-                              kubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
-                              kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
-                              Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
-                            type: object
-                          name:
-                            description: |-
-                              name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
-                              This field is also used in the CommonName field of the kubelet's client certificate to the API server.
-                              Defaults to the hostname of the node if not provided.
-                            type: string
-                          taints:
-                            description: |-
-                              taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
-                              it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
-                              empty slice, i.e. `taints: {}` in the YAML file. This field is solely used for Node registration.
-                            items:
-                              description: |-
-                                The node this Taint is attached to has the "effect" on
-                                any pod that does not tolerate the Taint.
-                              properties:
-                                effect:
-                                  description: |-
-                                    Required. The effect of the taint on pods
-                                    that do not tolerate the taint.
-                                    Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
-                                  type: string
-                                key:
-                                  description: Required. The taint key to be applied
-                                    to a node.
-                                  type: string
-                                timeAdded:
-                                  description: |-
-                                    TimeAdded represents the time at which the taint was added.
-                                    It is only written for NoExecute taints.
-                                  format: date-time
-                                  type: string
-                                value:
-                                  description: The taint value corresponding to the
-                                    taint key.
-                                  type: string
-                              required:
-                              - effect
-                              - key
-                              type: object
-                            type: array
-                        type: object
-                    type: object
-                  joinConfiguration:
-                    description: joinConfiguration is the kubeadm configuration for
-                      the join command
-                    properties:
-                      apiVersion:
-                        description: |-
-                          APIVersion defines the versioned schema of this representation of an object.
-                          Servers should convert recognized schemas to the latest internal value, and
-                          may reject unrecognized values.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-                        type: string
-                      caCertPath:
-                        description: |-
-                          caCertPath is the path to the SSL certificate authority used to
-                          secure comunications between node and control-plane.
-                          Defaults to "/etc/kubernetes/pki/ca.crt".
-                        type: string
-                      controlPlane:
-                        description: |-
-                          controlPlane defines the additional control plane instance to be deployed on the joining node.
-                          If nil, no additional control plane instance will be deployed.
-                        properties:
-                          localAPIEndpoint:
-                            description: localAPIEndpoint represents the endpoint
-                              of the API server instance to be deployed on this node.
-                            properties:
-                              advertiseAddress:
-                                description: advertiseAddress sets the IP address
-                                  for the API server to advertise.
-                                type: string
-                              bindPort:
-                                description: |-
-                                  bindPort sets the secure port for the API Server to bind to.
-                                  Defaults to 6443.
-                                format: int32
-                                type: integer
-                            type: object
-                        type: object
-                      discovery:
-                        description: discovery specifies the options for the kubelet
-                          to use during the TLS Bootstrap process
-                        properties:
-                          bootstrapToken:
-                            description: |-
-                              bootstrapToken is used to set the options for bootstrap token based discovery
-                              BootstrapToken and File are mutually exclusive
-                            properties:
-                              apiServerEndpoint:
-                                description: apiServerEndpoint is an IP or domain
-                                  name to the API server from which info will be fetched.
-                                type: string
-                              caCertHashes:
-                                description: |-
-                                  caCertHashes specifies a set of public key pins to verify
-                                  when token-based discovery is used. The root CA found during discovery
-                                  must match one of these values. Specifying an empty set disables root CA
-                                  pinning, which can be unsafe. Each hash is specified as "<type>:<value>",
-                                  where the only currently supported type is "sha256". This is a hex-encoded
-                                  SHA-256 hash of the Subject Public Key Info (SPKI) object in DER-encoded
-                                  ASN.1. These hashes can be calculated using, for example, OpenSSL:
-                                  openssl x509 -pubkey -in ca.crt openssl rsa -pubin -outform der 2>&/dev/null | openssl dgst -sha256 -hex
-                                items:
-                                  type: string
-                                type: array
-                              token:
-                                description: |-
-                                  token is a token used to validate cluster information
-                                  fetched from the control-plane.
-                                type: string
-                              unsafeSkipCAVerification:
-                                description: |-
-                                  unsafeSkipCAVerification allows token-based discovery
-                                  without CA verification via CACertHashes. This can weaken
-                                  the security of kubeadm since other nodes can impersonate the control-plane.
-                                type: boolean
-                            required:
-                            - token
-                            type: object
-                          file:
-                            description: |-
-                              file is used to specify a file or URL to a kubeconfig file from which to load cluster information
-                              BootstrapToken and File are mutually exclusive
-                            properties:
-                              kubeConfigPath:
-                                description: kubeConfigPath is used to specify the
-                                  actual file path or URL to the kubeconfig file from
-                                  which to load cluster information
-                                type: string
-                            required:
-                            - kubeConfigPath
-                            type: object
-                          timeout:
-                            description: timeout modifies the discovery timeout
-                            type: string
-                          tlsBootstrapToken:
-                            description: |-
-                              tlsBootstrapToken is a token used for TLS bootstrapping.
-                              If .BootstrapToken is set, this field is defaulted to .BootstrapToken.Token, but can be overridden.
-                              If .File is set, this field **must be set** in case the KubeConfigFile does not contain any other authentication information
-                            type: string
-                        type: object
-                      kind:
-                        description: |-
-                          Kind is a string value representing the REST resource this object represents.
-                          Servers may infer this from the endpoint the client submits requests to.
-                          Cannot be updated.
-                          In CamelCase.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                        type: string
-                      nodeRegistration:
-                        description: |-
-                          nodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
-                          When used in the context of control plane nodes, NodeRegistration should remain consistent
-                          across both InitConfiguration and JoinConfiguration
-                        properties:
-                          criSocket:
-                            description: criSocket is used to retrieve container runtime
-                              info. This information will be annotated to the Node
-                              API object, for later re-use
-                            type: string
-                          ignorePreflightErrors:
-                            description: ignorePreflightErrors provides a slice of
-                              pre-flight errors to be ignored when the current node
-                              is registered.
-                            items:
-                              type: string
-                            type: array
-                          kubeletExtraArgs:
-                            additionalProperties:
-                              type: string
-                            description: |-
-                              kubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
-                              kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
-                              Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
-                            type: object
-                          name:
-                            description: |-
-                              name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
-                              This field is also used in the CommonName field of the kubelet's client certificate to the API server.
-                              Defaults to the hostname of the node if not provided.
-                            type: string
-                          taints:
-                            description: |-
-                              taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
-                              it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
-                              empty slice, i.e. `taints: {}` in the YAML file. This field is solely used for Node registration.
-                            items:
-                              description: |-
-                                The node this Taint is attached to has the "effect" on
-                                any pod that does not tolerate the Taint.
-                              properties:
-                                effect:
-                                  description: |-
-                                    Required. The effect of the taint on pods
-                                    that do not tolerate the taint.
-                                    Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
-                                  type: string
-                                key:
-                                  description: Required. The taint key to be applied
-                                    to a node.
-                                  type: string
-                                timeAdded:
-                                  description: |-
-                                    TimeAdded represents the time at which the taint was added.
-                                    It is only written for NoExecute taints.
-                                  format: date-time
-                                  type: string
-                                value:
-                                  description: The taint value corresponding to the
-                                    taint key.
-                                  type: string
-                              required:
-                              - effect
-                              - key
-                              type: object
-                            type: array
-                        type: object
-                    type: object
-                  mounts:
-                    description: mounts specifies a list of mount points to be setup.
-                    items:
-                      description: MountPoints defines input for generated mounts
-                        in cloud-init.
-                      items:
-                        type: string
-                      type: array
-                    type: array
-                  ntp:
-                    description: ntp specifies NTP configuration
-                    properties:
-                      enabled:
-                        description: enabled specifies whether NTP should be enabled
-                        type: boolean
-                      servers:
-                        description: servers specifies which NTP servers to use
-                        items:
-                          type: string
-                        type: array
-                    type: object
-                  postKubeadmCommands:
-                    description: postKubeadmCommands specifies extra commands to run
-                      after kubeadm runs
-                    items:
-                      type: string
-                    type: array
-                  preKubeadmCommands:
-                    description: preKubeadmCommands specifies extra commands to run
-                      before kubeadm runs
-                    items:
-                      type: string
-                    type: array
-                  useExperimentalRetryJoin:
-                    description: |-
-                      useExperimentalRetryJoin replaces a basic kubeadm command with a shell
-                      script with retries for joins.
-
-                      This is meant to be an experimental temporary workaround on some environments
-                      where joins fail due to timing (and other issues). The long term goal is to add retries to
-                      kubeadm proper and use that functionality.
-
-                      This will add about 40KB to userdata
-
-                      For more information, refer to https://github.com/kubernetes-sigs/cluster-api/pull/2763#discussion_r397306055.
-                    type: boolean
-                  users:
-                    description: users specifies extra users to add
-                    items:
-                      description: User defines the input for a generated user in
-                        cloud-init.
-                      properties:
-                        gecos:
-                          description: gecos specifies the gecos to use for the user
-                          type: string
-                        groups:
-                          description: groups specifies the additional groups for
-                            the user
-                          type: string
-                        homeDir:
-                          description: homeDir specifies the home directory to use
-                            for the user
-                          type: string
-                        inactive:
-                          description: inactive specifies whether to mark the user
-                            as inactive
-                          type: boolean
-                        lockPassword:
-                          description: lockPassword specifies if password login should
-                            be disabled
-                          type: boolean
-                        name:
-                          description: name specifies the user name
-                          type: string
-                        passwd:
-                          description: passwd specifies a hashed password for the
-                            user
-                          type: string
-                        primaryGroup:
-                          description: primaryGroup specifies the primary group for
-                            the user
-                          type: string
-                        shell:
-                          description: shell specifies the user's shell
-                          type: string
-                        sshAuthorizedKeys:
-                          description: sshAuthorizedKeys specifies a list of ssh authorized
-                            keys for the user
-                          items:
-                            type: string
-                          type: array
-                        sudo:
-                          description: sudo specifies a sudo role for the user
-                          type: string
-                      required:
-                      - name
-                      type: object
-                    type: array
-                  verbosity:
-                    description: |-
-                      verbosity is the number for the kubeadm log level verbosity.
-                      It overrides the `--v` flag in kubeadm commands.
-                    format: int32
-                    type: integer
-                type: object
-              machineTemplate:
-                description: |-
-                  machineTemplate contains information about how machines
-                  should be shaped when creating or updating a control plane.
-                properties:
-                  infrastructureRef:
-                    description: |-
-                      infrastructureRef is a required reference to a custom resource
-                      offered by an infrastructure provider.
-                    properties:
-                      apiVersion:
-                        description: API version of the referent.
-                        type: string
-                      fieldPath:
-                        description: |-
-                          If referring to a piece of an object instead of an entire object, this string
-                          should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                          For example, if the object reference is to a container within a pod, this would take on a value like:
-                          "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                          the event) or if no container name is specified "spec.containers[2]" (container with
-                          index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                          referencing a part of an object.
-                        type: string
-                      kind:
-                        description: |-
-                          Kind of the referent.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                        type: string
-                      name:
-                        description: |-
-                          Name of the referent.
-                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                        type: string
-                      namespace:
-                        description: |-
-                          Namespace of the referent.
-                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                        type: string
-                      resourceVersion:
-                        description: |-
-                          Specific resourceVersion to which this reference is made, if any.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                        type: string
-                      uid:
-                        description: |-
-                          UID of the referent.
-                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                        type: string
-                    type: object
-                    x-kubernetes-map-type: atomic
-                  metadata:
-                    description: |-
-                      Standard object's metadata.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
-                    properties:
-                      annotations:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          annotations is an unstructured key value map stored with a resource that may be
-                          set by external tools to store and retrieve arbitrary metadata. They are not
-                          queryable and should be preserved when modifying objects.
-                          More info: http://kubernetes.io/docs/user-guide/annotations
-                        type: object
-                      labels:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          Map of string keys and values that can be used to organize and categorize
-                          (scope and select) objects. May match selectors of replication controllers
-                          and services.
-                          More info: http://kubernetes.io/docs/user-guide/labels
-                        type: object
-                    type: object
-                  nodeDrainTimeout:
-                    description: |-
-                      nodeDrainTimeout is the total amount of time that the controller will spend on draining a controlplane node
-                      The default value is 0, meaning that the node can be drained without any time limitations.
-                      NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
-                    type: string
-                required:
-                - infrastructureRef
-                type: object
-              replicas:
-                description: |-
-                  Number of desired machines. Defaults to 1. When stacked etcd is used only
-                  odd numbers are permitted, as per [etcd best practice](https://etcd.io/docs/v3.3.12/faq/#why-an-odd-number-of-cluster-members).
-                  This is a pointer to distinguish between explicit zero and not specified.
-                format: int32
-                type: integer
-              rolloutAfter:
-                description: |-
-                  rolloutAfter is a field to indicate a rollout should be performed
-                  after the specified time even if no changes have been made to the
-                  KubeadmControlPlane.
-                format: date-time
-                type: string
-              rolloutStrategy:
-                default:
-                  rollingUpdate:
-                    maxSurge: 1
-                  type: RollingUpdate
-                description: |-
-                  The RolloutStrategy to use to replace control plane machines with
-                  new ones.
-                properties:
-                  rollingUpdate:
-                    description: |-
-                      Rolling update config params. Present only if
-                      RolloutStrategyType = RollingUpdate.
-                    properties:
-                      maxSurge:
-                        anyOf:
-                        - type: integer
-                        - type: string
-                        description: |-
-                          The maximum number of control planes that can be scheduled above or under the
-                          desired number of control planes.
-                          Value can be an absolute number 1 or 0.
-                          Defaults to 1.
-                          Example: when this is set to 1, the control plane can be scaled
-                          up immediately when the rolling update starts.
-                        x-kubernetes-int-or-string: true
-                    type: object
-                  type:
-                    description: |-
-                      type of rollout. Currently the only supported strategy is
-                      "RollingUpdate".
-                      Default is RollingUpdate.
-                    type: string
-                type: object
-              version:
-                description: version defines the desired Kubernetes version.
-                type: string
-            required:
-            - kubeadmConfigSpec
-            - machineTemplate
-            - version
-            type: object
-          status:
-            description: KubeadmControlPlaneStatus defines the observed state of KubeadmControlPlane.
-            properties:
-              conditions:
-                description: conditions defines current service state of the KubeadmControlPlane.
-                items:
-                  description: Condition defines an observation of a Cluster API resource
-                    operational state.
-                  properties:
-                    lastTransitionTime:
-                      description: |-
-                        Last time the condition transitioned from one status to another.
-                        This should be when the underlying condition changed. If that is not known, then using the time when
-                        the API field changed is acceptable.
-                      format: date-time
-                      type: string
-                    message:
-                      description: |-
-                        A human readable message indicating details about the transition.
-                        This field may be empty.
-                      type: string
-                    reason:
-                      description: |-
-                        The reason for the condition's last transition in CamelCase.
-                        The specific API may choose whether or not this field is considered a guaranteed API.
-                        This field may not be empty.
-                      type: string
-                    severity:
-                      description: |-
-                        severity provides an explicit classification of Reason code, so the users or machines can immediately
-                        understand the current situation and act accordingly.
-                        The Severity field MUST be set only when Status=False.
-                      type: string
-                    status:
-                      description: status of the condition, one of True, False, Unknown.
-                      type: string
-                    type:
-                      description: |-
-                        type of condition in CamelCase or in foo.example.com/CamelCase.
-                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
-                        can be useful (see .node.status.conditions), the ability to deconflict is important.
-                      type: string
-                  required:
-                  - status
-                  - type
-                  type: object
-                type: array
-              failureMessage:
-                description: |-
-                  ErrorMessage indicates that there is a terminal problem reconciling the
-                  state, and will be set to a descriptive error message.
-                type: string
-              failureReason:
-                description: |-
-                  failureReason indicates that there is a terminal problem reconciling the
-                  state, and will be set to a token value suitable for
-                  programmatic interpretation.
-                type: string
-              initialized:
-                description: |-
-                  initialized denotes whether or not the control plane has the
-                  uploaded kubeadm-config configmap.
-                type: boolean
-              observedGeneration:
-                description: observedGeneration is the latest generation observed
-                  by the controller.
-                format: int64
-                type: integer
-              ready:
-                description: |-
-                  ready denotes that the KubeadmControlPlane API Server is ready to
-                  receive requests.
-                type: boolean
-              readyReplicas:
-                description: Total number of fully running and ready control plane
-                  machines.
-                format: int32
-                type: integer
-              replicas:
-                description: |-
-                  Total number of non-terminated machines targeted by this control plane
-                  (their labels match the selector).
-                format: int32
-                type: integer
-              selector:
-                description: |-
-                  selector is the label selector in string format to avoid introspection
-                  by clients, and is used to provide the CRD-based integration for the
-                  scale subresource and additional integrations for things like kubectl
-                  describe.. The string will be in the same format as the query-param syntax.
-                  More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors
-                type: string
-              unavailableReplicas:
-                description: |-
-                  Total number of unavailable machines targeted by this control plane.
-                  This is the total number of machines that are still required for
-                  the deployment to have 100% available capacity. They may either
-                  be machines that are running but not yet ready or machines
-                  that still have not been created.
-                format: int32
-                type: integer
-              updatedReplicas:
-                description: |-
-                  Total number of non-terminated machines targeted by this control plane
-                  that have the desired template spec.
-                format: int32
-                type: integer
-              version:
-                description: |-
-                  version represents the minimum Kubernetes version for the control plane machines
-                  in the cluster.
-                type: string
-            type: object
-        type: object
-    served: false
-    storage: false
-    subresources:
-      scale:
-        labelSelectorPath: .status.selector
-        specReplicasPath: .spec.replicas
-        statusReplicasPath: .status.replicas
-      status: {}
-  - additionalPrinterColumns:
-    - description: Cluster
-      jsonPath: .metadata.labels['cluster\.x-k8s\.io/cluster-name']
-      name: Cluster
-      type: string
-    - description: This denotes whether or not the control plane has the uploaded
-        kubeadm-config configmap
-      jsonPath: .status.initialized
-      name: Initialized
-      type: boolean
-    - description: KubeadmControlPlane API Server is ready to receive requests
-      jsonPath: .status.ready
-      name: API Server Available
-      type: boolean
-    - description: Total number of machines desired by this control plane
-      jsonPath: .spec.replicas
-      name: Desired
-      priority: 10
-      type: integer
-    - description: Total number of non-terminated machines targeted by this control
-        plane
-      jsonPath: .status.replicas
-      name: Replicas
-      type: integer
-    - description: Total number of fully running and ready control plane machines
-      jsonPath: .status.readyReplicas
-      name: Ready
-      type: integer
-    - description: Total number of non-terminated machines targeted by this control
-        plane that have the desired template spec
-      jsonPath: .status.updatedReplicas
-      name: Updated
-      type: integer
-    - description: Total number of unavailable machines targeted by this control plane
-      jsonPath: .status.unavailableReplicas
-      name: Unavailable
-      type: integer
-    - description: Time duration since creation of KubeadmControlPlane
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    - description: Kubernetes version associated with this control plane
-      jsonPath: .spec.version
-      name: Version
-      type: string
-    name: v1beta1
-    schema:
-      openAPIV3Schema:
-        description: KubeadmControlPlane is the Schema for the KubeadmControlPlane
-          API.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: KubeadmControlPlaneSpec defines the desired state of KubeadmControlPlane.
-            properties:
-              kubeadmConfigSpec:
-                description: |-
-                  kubeadmConfigSpec is a KubeadmConfigSpec
-                  to use for initializing and joining machines to the control plane.
-                properties:
-                  clusterConfiguration:
-                    description: clusterConfiguration along with InitConfiguration
-                      are the configurations necessary for the init command
-                    properties:
-                      apiServer:
-                        description: apiServer contains extra settings for the API
-                          server control plane component
-                        properties:
-                          certSANs:
-                            description: certSANs sets extra Subject Alternative Names
-                              for the API Server signing cert.
-                            items:
-                              type: string
-                            type: array
-                          extraArgs:
-                            additionalProperties:
-                              type: string
-                            description: extraArgs is an extra set of flags to pass
-                              to the control plane component.
-                            type: object
-                          extraEnvs:
-                            description: |-
-                              extraEnvs is an extra set of environment variables to pass to the control plane component.
-                              Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default.
-                              This option takes effect only on Kubernetes >=1.31.0.
-                            items:
-                              description: EnvVar represents an environment variable
-                                present in a Container.
-                              properties:
-                                name:
-                                  description: Name of the environment variable. Must
-                                    be a C_IDENTIFIER.
-                                  type: string
-                                value:
-                                  description: |-
-                                    Variable references $(VAR_NAME) are expanded
-                                    using the previously defined environment variables in the container and
-                                    any service environment variables. If a variable cannot be resolved,
-                                    the reference in the input string will be unchanged. Double $ are reduced
-                                    to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
-                                    "$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
-                                    Escaped references will never be expanded, regardless of whether the variable
-                                    exists or not.
-                                    Defaults to "".
-                                  type: string
-                                valueFrom:
-                                  description: Source for the environment variable's
-                                    value. Cannot be used if value is not empty.
-                                  properties:
-                                    configMapKeyRef:
-                                      description: Selects a key of a ConfigMap.
-                                      properties:
-                                        key:
-                                          description: The key to select.
-                                          type: string
-                                        name:
-                                          default: ""
-                                          description: |-
-                                            Name of the referent.
-                                            This field is effectively required, but due to backwards compatibility is
-                                            allowed to be empty. Instances of this type with an empty value here are
-                                            almost certainly wrong.
-                                            More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                          type: string
-                                        optional:
-                                          description: Specify whether the ConfigMap
-                                            or its key must be defined
-                                          type: boolean
-                                      required:
-                                      - key
-                                      type: object
-                                      x-kubernetes-map-type: atomic
-                                    fieldRef:
-                                      description: |-
-                                        Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
-                                        spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
-                                      properties:
-                                        apiVersion:
-                                          description: Version of the schema the FieldPath
-                                            is written in terms of, defaults to "v1".
-                                          type: string
-                                        fieldPath:
-                                          description: Path of the field to select
-                                            in the specified API version.
-                                          type: string
-                                      required:
-                                      - fieldPath
-                                      type: object
-                                      x-kubernetes-map-type: atomic
-                                    resourceFieldRef:
-                                      description: |-
-                                        Selects a resource of the container: only resources limits and requests
-                                        (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
-                                      properties:
-                                        containerName:
-                                          description: 'Container name: required for
-                                            volumes, optional for env vars'
-                                          type: string
-                                        divisor:
-                                          anyOf:
-                                          - type: integer
-                                          - type: string
-                                          description: Specifies the output format
-                                            of the exposed resources, defaults to
-                                            "1"
-                                          pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
-                                          x-kubernetes-int-or-string: true
-                                        resource:
-                                          description: 'Required: resource to select'
-                                          type: string
-                                      required:
-                                      - resource
-                                      type: object
-                                      x-kubernetes-map-type: atomic
-                                    secretKeyRef:
-                                      description: Selects a key of a secret in the
-                                        pod's namespace
-                                      properties:
-                                        key:
-                                          description: The key of the secret to select
-                                            from.  Must be a valid secret key.
-                                          type: string
-                                        name:
-                                          default: ""
-                                          description: |-
-                                            Name of the referent.
-                                            This field is effectively required, but due to backwards compatibility is
-                                            allowed to be empty. Instances of this type with an empty value here are
-                                            almost certainly wrong.
-                                            More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                          type: string
-                                        optional:
-                                          description: Specify whether the Secret
-                                            or its key must be defined
-                                          type: boolean
-                                      required:
-                                      - key
-                                      type: object
-                                      x-kubernetes-map-type: atomic
-                                  type: object
-                              required:
-                              - name
-                              type: object
-                            type: array
-                          extraVolumes:
-                            description: extraVolumes is an extra set of host volumes,
-                              mounted to the control plane component.
-                            items:
-                              description: |-
-                                HostPathMount contains elements describing volumes that are mounted from the
-                                host.
-                              properties:
-                                hostPath:
-                                  description: |-
-                                    hostPath is the path in the host that will be mounted inside
-                                    the pod.
-                                  type: string
-                                mountPath:
-                                  description: mountPath is the path inside the pod
-                                    where hostPath will be mounted.
-                                  type: string
-                                name:
-                                  description: name of the volume inside the pod template.
-                                  type: string
-                                pathType:
-                                  description: pathType is the type of the HostPath.
-                                  type: string
-                                readOnly:
-                                  description: readOnly controls write access to the
-                                    volume
-                                  type: boolean
-                              required:
-                              - hostPath
-                              - mountPath
-                              - name
-                              type: object
-                            type: array
-                          timeoutForControlPlane:
-                            description: timeoutForControlPlane controls the timeout
-                              that we use for API server to appear
-                            type: string
-                        type: object
-                      apiVersion:
-                        description: |-
-                          APIVersion defines the versioned schema of this representation of an object.
-                          Servers should convert recognized schemas to the latest internal value, and
-                          may reject unrecognized values.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-                        type: string
-                      certificatesDir:
-                        description: |-
-                          certificatesDir specifies where to store or look for all required certificates.
-                          NB: if not provided, this will default to `/etc/kubernetes/pki`
-                        type: string
-                      clusterName:
-                        description: The cluster name
-                        type: string
-                      controlPlaneEndpoint:
-                        description: |-
-                          controlPlaneEndpoint sets a stable IP address or DNS name for the control plane; it
-                          can be a valid IP address or a RFC-1123 DNS subdomain, both with optional TCP port.
-                          In case the ControlPlaneEndpoint is not specified, the AdvertiseAddress + BindPort
-                          are used; in case the ControlPlaneEndpoint is specified but without a TCP port,
-                          the BindPort is used.
-                          Possible usages are:
-                          e.g. In a cluster with more than one control plane instances, this field should be
-                          assigned the address of the external load balancer in front of the
-                          control plane instances.
-                          e.g.  in environments with enforced node recycling, the ControlPlaneEndpoint
-                          could be used for assigning a stable DNS to the control plane.
-                          NB: This value defaults to the first value in the Cluster object status.apiEndpoints array.
-                        type: string
-                      controllerManager:
-                        description: controllerManager contains extra settings for
-                          the controller manager control plane component
-                        properties:
-                          extraArgs:
-                            additionalProperties:
-                              type: string
-                            description: extraArgs is an extra set of flags to pass
-                              to the control plane component.
-                            type: object
-                          extraEnvs:
-                            description: |-
-                              extraEnvs is an extra set of environment variables to pass to the control plane component.
-                              Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default.
-                              This option takes effect only on Kubernetes >=1.31.0.
-                            items:
-                              description: EnvVar represents an environment variable
-                                present in a Container.
-                              properties:
-                                name:
-                                  description: Name of the environment variable. Must
-                                    be a C_IDENTIFIER.
-                                  type: string
-                                value:
-                                  description: |-
-                                    Variable references $(VAR_NAME) are expanded
-                                    using the previously defined environment variables in the container and
-                                    any service environment variables. If a variable cannot be resolved,
-                                    the reference in the input string will be unchanged. Double $ are reduced
-                                    to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
-                                    "$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
-                                    Escaped references will never be expanded, regardless of whether the variable
-                                    exists or not.
-                                    Defaults to "".
-                                  type: string
-                                valueFrom:
-                                  description: Source for the environment variable's
-                                    value. Cannot be used if value is not empty.
-                                  properties:
-                                    configMapKeyRef:
-                                      description: Selects a key of a ConfigMap.
-                                      properties:
-                                        key:
-                                          description: The key to select.
-                                          type: string
-                                        name:
-                                          default: ""
-                                          description: |-
-                                            Name of the referent.
-                                            This field is effectively required, but due to backwards compatibility is
-                                            allowed to be empty. Instances of this type with an empty value here are
-                                            almost certainly wrong.
-                                            More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                          type: string
-                                        optional:
-                                          description: Specify whether the ConfigMap
-                                            or its key must be defined
-                                          type: boolean
-                                      required:
-                                      - key
-                                      type: object
-                                      x-kubernetes-map-type: atomic
-                                    fieldRef:
-                                      description: |-
-                                        Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
-                                        spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
-                                      properties:
-                                        apiVersion:
-                                          description: Version of the schema the FieldPath
-                                            is written in terms of, defaults to "v1".
-                                          type: string
-                                        fieldPath:
-                                          description: Path of the field to select
-                                            in the specified API version.
-                                          type: string
-                                      required:
-                                      - fieldPath
-                                      type: object
-                                      x-kubernetes-map-type: atomic
-                                    resourceFieldRef:
-                                      description: |-
-                                        Selects a resource of the container: only resources limits and requests
-                                        (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
-                                      properties:
-                                        containerName:
-                                          description: 'Container name: required for
-                                            volumes, optional for env vars'
-                                          type: string
-                                        divisor:
-                                          anyOf:
-                                          - type: integer
-                                          - type: string
-                                          description: Specifies the output format
-                                            of the exposed resources, defaults to
-                                            "1"
-                                          pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
-                                          x-kubernetes-int-or-string: true
-                                        resource:
-                                          description: 'Required: resource to select'
-                                          type: string
-                                      required:
-                                      - resource
-                                      type: object
-                                      x-kubernetes-map-type: atomic
-                                    secretKeyRef:
-                                      description: Selects a key of a secret in the
-                                        pod's namespace
-                                      properties:
-                                        key:
-                                          description: The key of the secret to select
-                                            from.  Must be a valid secret key.
-                                          type: string
-                                        name:
-                                          default: ""
-                                          description: |-
-                                            Name of the referent.
-                                            This field is effectively required, but due to backwards compatibility is
-                                            allowed to be empty. Instances of this type with an empty value here are
-                                            almost certainly wrong.
-                                            More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                          type: string
-                                        optional:
-                                          description: Specify whether the Secret
-                                            or its key must be defined
-                                          type: boolean
-                                      required:
-                                      - key
-                                      type: object
-                                      x-kubernetes-map-type: atomic
-                                  type: object
-                              required:
-                              - name
-                              type: object
-                            type: array
-                          extraVolumes:
-                            description: extraVolumes is an extra set of host volumes,
-                              mounted to the control plane component.
-                            items:
-                              description: |-
-                                HostPathMount contains elements describing volumes that are mounted from the
-                                host.
-                              properties:
-                                hostPath:
-                                  description: |-
-                                    hostPath is the path in the host that will be mounted inside
-                                    the pod.
-                                  type: string
-                                mountPath:
-                                  description: mountPath is the path inside the pod
-                                    where hostPath will be mounted.
-                                  type: string
-                                name:
-                                  description: name of the volume inside the pod template.
-                                  type: string
-                                pathType:
-                                  description: pathType is the type of the HostPath.
-                                  type: string
-                                readOnly:
-                                  description: readOnly controls write access to the
-                                    volume
-                                  type: boolean
-                              required:
-                              - hostPath
-                              - mountPath
-                              - name
-                              type: object
-                            type: array
-                        type: object
-                      dns:
-                        description: dns defines the options for the DNS add-on installed
-                          in the cluster.
-                        properties:
-                          imageRepository:
-                            description: |-
-                              imageRepository sets the container registry to pull images from.
-                              if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
-                            type: string
-                          imageTag:
-                            description: |-
-                              imageTag allows to specify a tag for the image.
-                              In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
-                            type: string
-                        type: object
-                      etcd:
-                        description: |-
-                          etcd holds configuration for etcd.
-                          NB: This value defaults to a Local (stacked) etcd
-                        properties:
-                          external:
-                            description: |-
-                              external describes how to connect to an external etcd cluster
-                              Local and External are mutually exclusive
-                            properties:
-                              caFile:
-                                description: |-
-                                  caFile is an SSL Certificate Authority file used to secure etcd communication.
-                                  Required if using a TLS connection.
-                                type: string
-                              certFile:
-                                description: |-
-                                  certFile is an SSL certification file used to secure etcd communication.
-                                  Required if using a TLS connection.
-                                type: string
-                              endpoints:
-                                description: endpoints of etcd members. Required for
-                                  ExternalEtcd.
-                                items:
-                                  type: string
-                                type: array
-                              keyFile:
-                                description: |-
-                                  keyFile is an SSL key file used to secure etcd communication.
-                                  Required if using a TLS connection.
-                                type: string
-                            required:
-                            - caFile
-                            - certFile
-                            - endpoints
-                            - keyFile
-                            type: object
-                          local:
-                            description: |-
-                              local provides configuration knobs for configuring the local etcd instance
-                              Local and External are mutually exclusive
-                            properties:
-                              dataDir:
-                                description: |-
-                                  dataDir is the directory etcd will place its data.
-                                  Defaults to "/var/lib/etcd".
-                                type: string
-                              extraArgs:
-                                additionalProperties:
-                                  type: string
-                                description: |-
-                                  extraArgs are extra arguments provided to the etcd binary
-                                  when run inside a static pod.
-                                type: object
-                              extraEnvs:
-                                description: |-
-                                  extraEnvs is an extra set of environment variables to pass to the control plane component.
-                                  Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default.
-                                  This option takes effect only on Kubernetes >=1.31.0.
-                                items:
-                                  description: EnvVar represents an environment variable
-                                    present in a Container.
-                                  properties:
-                                    name:
-                                      description: Name of the environment variable.
-                                        Must be a C_IDENTIFIER.
-                                      type: string
-                                    value:
-                                      description: |-
-                                        Variable references $(VAR_NAME) are expanded
-                                        using the previously defined environment variables in the container and
-                                        any service environment variables. If a variable cannot be resolved,
-                                        the reference in the input string will be unchanged. Double $ are reduced
-                                        to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
-                                        "$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
-                                        Escaped references will never be expanded, regardless of whether the variable
-                                        exists or not.
-                                        Defaults to "".
-                                      type: string
-                                    valueFrom:
-                                      description: Source for the environment variable's
-                                        value. Cannot be used if value is not empty.
-                                      properties:
-                                        configMapKeyRef:
-                                          description: Selects a key of a ConfigMap.
-                                          properties:
-                                            key:
-                                              description: The key to select.
-                                              type: string
-                                            name:
-                                              default: ""
-                                              description: |-
-                                                Name of the referent.
-                                                This field is effectively required, but due to backwards compatibility is
-                                                allowed to be empty. Instances of this type with an empty value here are
-                                                almost certainly wrong.
-                                                More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                              type: string
-                                            optional:
-                                              description: Specify whether the ConfigMap
-                                                or its key must be defined
-                                              type: boolean
-                                          required:
-                                          - key
-                                          type: object
-                                          x-kubernetes-map-type: atomic
-                                        fieldRef:
-                                          description: |-
-                                            Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
-                                            spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
-                                          properties:
-                                            apiVersion:
-                                              description: Version of the schema the
-                                                FieldPath is written in terms of,
-                                                defaults to "v1".
-                                              type: string
-                                            fieldPath:
-                                              description: Path of the field to select
-                                                in the specified API version.
-                                              type: string
-                                          required:
-                                          - fieldPath
-                                          type: object
-                                          x-kubernetes-map-type: atomic
-                                        resourceFieldRef:
-                                          description: |-
-                                            Selects a resource of the container: only resources limits and requests
-                                            (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
-                                          properties:
-                                            containerName:
-                                              description: 'Container name: required
-                                                for volumes, optional for env vars'
-                                              type: string
-                                            divisor:
-                                              anyOf:
-                                              - type: integer
-                                              - type: string
-                                              description: Specifies the output format
-                                                of the exposed resources, defaults
-                                                to "1"
-                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
-                                              x-kubernetes-int-or-string: true
-                                            resource:
-                                              description: 'Required: resource to
-                                                select'
-                                              type: string
-                                          required:
-                                          - resource
-                                          type: object
-                                          x-kubernetes-map-type: atomic
-                                        secretKeyRef:
-                                          description: Selects a key of a secret in
-                                            the pod's namespace
-                                          properties:
-                                            key:
-                                              description: The key of the secret to
-                                                select from.  Must be a valid secret
-                                                key.
-                                              type: string
-                                            name:
-                                              default: ""
-                                              description: |-
-                                                Name of the referent.
-                                                This field is effectively required, but due to backwards compatibility is
-                                                allowed to be empty. Instances of this type with an empty value here are
-                                                almost certainly wrong.
-                                                More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                              type: string
-                                            optional:
-                                              description: Specify whether the Secret
-                                                or its key must be defined
-                                              type: boolean
-                                          required:
-                                          - key
-                                          type: object
-                                          x-kubernetes-map-type: atomic
-                                      type: object
-                                  required:
-                                  - name
-                                  type: object
-                                type: array
-                              imageRepository:
-                                description: |-
-                                  imageRepository sets the container registry to pull images from.
-                                  if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
-                                type: string
-                              imageTag:
-                                description: |-
-                                  imageTag allows to specify a tag for the image.
-                                  In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
-                                type: string
-                              peerCertSANs:
-                                description: peerCertSANs sets extra Subject Alternative
-                                  Names for the etcd peer signing cert.
-                                items:
-                                  type: string
-                                type: array
-                              serverCertSANs:
-                                description: serverCertSANs sets extra Subject Alternative
-                                  Names for the etcd server signing cert.
-                                items:
-                                  type: string
-                                type: array
-                            type: object
-                        type: object
-                      featureGates:
-                        additionalProperties:
-                          type: boolean
-                        description: featureGates enabled by the user.
-                        type: object
-                      imageRepository:
-                        description: |-
-                          imageRepository sets the container registry to pull images from.
-                          * If not set, the default registry of kubeadm will be used, i.e.
-                            * registry.k8s.io (new registry): >= v1.22.17, >= v1.23.15, >= v1.24.9, >= v1.25.0
-                            * k8s.gcr.io (old registry): all older versions
-                            Please note that when imageRepository is not set we don't allow upgrades to
-                            versions >= v1.22.0 which use the old registry (k8s.gcr.io). Please use
-                            a newer patch version with the new registry instead (i.e. >= v1.22.17,
-                            >= v1.23.15, >= v1.24.9, >= v1.25.0).
-                          * If the version is a CI build (kubernetes version starts with `ci/` or `ci-cross/`)
-                           `gcr.io/k8s-staging-ci-images` will be used as a default for control plane components
-                            and for kube-proxy, while `registry.k8s.io` will be used for all the other images.
-                        type: string
-                      kind:
-                        description: |-
-                          Kind is a string value representing the REST resource this object represents.
-                          Servers may infer this from the endpoint the client submits requests to.
-                          Cannot be updated.
-                          In CamelCase.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                        type: string
-                      kubernetesVersion:
-                        description: |-
-                          kubernetesVersion is the target version of the control plane.
-                          NB: This value defaults to the Machine object spec.version
-                        type: string
-                      networking:
-                        description: |-
-                          networking holds configuration for the networking topology of the cluster.
-                          NB: This value defaults to the Cluster object spec.clusterNetwork.
-                        properties:
-                          dnsDomain:
-                            description: dnsDomain is the dns domain used by k8s services.
-                              Defaults to "cluster.local".
-                            type: string
-                          podSubnet:
-                            description: |-
-                              podSubnet is the subnet used by pods.
-                              If unset, the API server will not allocate CIDR ranges for every node.
-                              Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.services.cidrBlocks if that is set
-                            type: string
-                          serviceSubnet:
-                            description: |-
-                              serviceSubnet is the subnet used by k8s services.
-                              Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.pods.cidrBlocks, or
-                              to "10.96.0.0/12" if that's unset.
-                            type: string
-                        type: object
-                      scheduler:
-                        description: scheduler contains extra settings for the scheduler
-                          control plane component
-                        properties:
-                          extraArgs:
-                            additionalProperties:
-                              type: string
-                            description: extraArgs is an extra set of flags to pass
-                              to the control plane component.
-                            type: object
-                          extraEnvs:
-                            description: |-
-                              extraEnvs is an extra set of environment variables to pass to the control plane component.
-                              Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default.
-                              This option takes effect only on Kubernetes >=1.31.0.
-                            items:
-                              description: EnvVar represents an environment variable
-                                present in a Container.
-                              properties:
-                                name:
-                                  description: Name of the environment variable. Must
-                                    be a C_IDENTIFIER.
-                                  type: string
-                                value:
-                                  description: |-
-                                    Variable references $(VAR_NAME) are expanded
-                                    using the previously defined environment variables in the container and
-                                    any service environment variables. If a variable cannot be resolved,
-                                    the reference in the input string will be unchanged. Double $ are reduced
-                                    to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
-                                    "$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
-                                    Escaped references will never be expanded, regardless of whether the variable
-                                    exists or not.
-                                    Defaults to "".
-                                  type: string
-                                valueFrom:
-                                  description: Source for the environment variable's
-                                    value. Cannot be used if value is not empty.
-                                  properties:
-                                    configMapKeyRef:
-                                      description: Selects a key of a ConfigMap.
-                                      properties:
-                                        key:
-                                          description: The key to select.
-                                          type: string
-                                        name:
-                                          default: ""
-                                          description: |-
-                                            Name of the referent.
-                                            This field is effectively required, but due to backwards compatibility is
-                                            allowed to be empty. Instances of this type with an empty value here are
-                                            almost certainly wrong.
-                                            More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                          type: string
-                                        optional:
-                                          description: Specify whether the ConfigMap
-                                            or its key must be defined
-                                          type: boolean
-                                      required:
-                                      - key
-                                      type: object
-                                      x-kubernetes-map-type: atomic
-                                    fieldRef:
-                                      description: |-
-                                        Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
-                                        spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
-                                      properties:
-                                        apiVersion:
-                                          description: Version of the schema the FieldPath
-                                            is written in terms of, defaults to "v1".
-                                          type: string
-                                        fieldPath:
-                                          description: Path of the field to select
-                                            in the specified API version.
-                                          type: string
-                                      required:
-                                      - fieldPath
-                                      type: object
-                                      x-kubernetes-map-type: atomic
-                                    resourceFieldRef:
-                                      description: |-
-                                        Selects a resource of the container: only resources limits and requests
-                                        (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
-                                      properties:
-                                        containerName:
-                                          description: 'Container name: required for
-                                            volumes, optional for env vars'
-                                          type: string
-                                        divisor:
-                                          anyOf:
-                                          - type: integer
-                                          - type: string
-                                          description: Specifies the output format
-                                            of the exposed resources, defaults to
-                                            "1"
-                                          pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
-                                          x-kubernetes-int-or-string: true
-                                        resource:
-                                          description: 'Required: resource to select'
-                                          type: string
-                                      required:
-                                      - resource
-                                      type: object
-                                      x-kubernetes-map-type: atomic
-                                    secretKeyRef:
-                                      description: Selects a key of a secret in the
-                                        pod's namespace
-                                      properties:
-                                        key:
-                                          description: The key of the secret to select
-                                            from.  Must be a valid secret key.
-                                          type: string
-                                        name:
-                                          default: ""
-                                          description: |-
-                                            Name of the referent.
-                                            This field is effectively required, but due to backwards compatibility is
-                                            allowed to be empty. Instances of this type with an empty value here are
-                                            almost certainly wrong.
-                                            More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                          type: string
-                                        optional:
-                                          description: Specify whether the Secret
-                                            or its key must be defined
-                                          type: boolean
-                                      required:
-                                      - key
-                                      type: object
-                                      x-kubernetes-map-type: atomic
-                                  type: object
-                              required:
-                              - name
-                              type: object
-                            type: array
-                          extraVolumes:
-                            description: extraVolumes is an extra set of host volumes,
-                              mounted to the control plane component.
-                            items:
-                              description: |-
-                                HostPathMount contains elements describing volumes that are mounted from the
-                                host.
-                              properties:
-                                hostPath:
-                                  description: |-
-                                    hostPath is the path in the host that will be mounted inside
-                                    the pod.
-                                  type: string
-                                mountPath:
-                                  description: mountPath is the path inside the pod
-                                    where hostPath will be mounted.
-                                  type: string
-                                name:
-                                  description: name of the volume inside the pod template.
-                                  type: string
-                                pathType:
-                                  description: pathType is the type of the HostPath.
-                                  type: string
-                                readOnly:
-                                  description: readOnly controls write access to the
-                                    volume
-                                  type: boolean
-                              required:
-                              - hostPath
-                              - mountPath
-                              - name
-                              type: object
-                            type: array
-                        type: object
-                    type: object
-                  diskSetup:
-                    description: diskSetup specifies options for the creation of partition
-                      tables and file systems on devices.
-                    properties:
-                      filesystems:
-                        description: filesystems specifies the list of file systems
-                          to setup.
-                        items:
-                          description: Filesystem defines the file systems to be created.
-                          properties:
-                            device:
-                              description: device specifies the device name
-                              type: string
-                            extraOpts:
-                              description: extraOpts defined extra options to add
-                                to the command for creating the file system.
-                              items:
-                                type: string
-                              type: array
-                            filesystem:
-                              description: filesystem specifies the file system type.
-                              type: string
-                            label:
-                              description: label specifies the file system label to
-                                be used. If set to None, no label is used.
-                              type: string
-                            overwrite:
-                              description: |-
-                                overwrite defines whether or not to overwrite any existing filesystem.
-                                If true, any pre-existing file system will be destroyed. Use with Caution.
-                              type: boolean
-                            partition:
-                              description: 'partition specifies the partition to use.
-                                The valid options are: "auto|any", "auto", "any",
-                                "none", and <NUM>, where NUM is the actual partition
-                                number.'
-                              type: string
-                            replaceFS:
-                              description: |-
-                                replaceFS is a special directive, used for Microsoft Azure that instructs cloud-init to replace a file system of <FS_TYPE>.
-                                NOTE: unless you define a label, this requires the use of the 'any' partition directive.
-                              type: string
-                          required:
-                          - device
-                          - filesystem
-                          - label
-                          type: object
-                        type: array
-                      partitions:
-                        description: partitions specifies the list of the partitions
-                          to setup.
-                        items:
-                          description: Partition defines how to create and layout
-                            a partition.
-                          properties:
-                            device:
-                              description: device is the name of the device.
-                              type: string
-                            layout:
-                              description: |-
-                                layout specifies the device layout.
-                                If it is true, a single partition will be created for the entire device.
-                                When layout is false, it means don't partition or ignore existing partitioning.
-                              type: boolean
-                            overwrite:
-                              description: |-
-                                overwrite describes whether to skip checks and create the partition if a partition or filesystem is found on the device.
-                                Use with caution. Default is 'false'.
-                              type: boolean
-                            tableType:
-                              description: |-
-                                tableType specifies the tupe of partition table. The following are supported:
-                                'mbr': default and setups a MS-DOS partition table
-                                'gpt': setups a GPT partition table
-                              type: string
-                          required:
-                          - device
-                          - layout
-                          type: object
-                        type: array
-                    type: object
-                  files:
-                    description: files specifies extra files to be passed to user_data
-                      upon creation.
-                    items:
-                      description: File defines the input for generating write_files
-                        in cloud-init.
-                      properties:
-                        append:
-                          description: append specifies whether to append Content
-                            to existing file if Path exists.
-                          type: boolean
-                        content:
-                          description: content is the actual content of the file.
-                          type: string
-                        contentFrom:
-                          description: contentFrom is a referenced source of content
-                            to populate the file.
-                          properties:
-                            secret:
-                              description: secret represents a secret that should
-                                populate this file.
-                              properties:
-                                key:
-                                  description: key is the key in the secret's data
-                                    map for this value.
-                                  type: string
-                                name:
-                                  description: name of the secret in the KubeadmBootstrapConfig's
-                                    namespace to use.
-                                  type: string
-                              required:
-                              - key
-                              - name
-                              type: object
-                          required:
-                          - secret
-                          type: object
-                        encoding:
-                          description: encoding specifies the encoding of the file
-                            contents.
-                          enum:
-                          - base64
-                          - gzip
-                          - gzip+base64
-                          type: string
-                        owner:
-                          description: owner specifies the ownership of the file,
-                            e.g. "root:root".
-                          type: string
-                        path:
-                          description: path specifies the full path on disk where
-                            to store the file.
-                          type: string
-                        permissions:
-                          description: permissions specifies the permissions to assign
-                            to the file, e.g. "0640".
-                          type: string
-                      required:
-                      - path
-                      type: object
-                    type: array
-                  format:
-                    description: format specifies the output format of the bootstrap
-                      data
-                    enum:
-                    - cloud-config
-                    - ignition
-                    type: string
-                  ignition:
-                    description: ignition contains Ignition specific configuration.
-                    properties:
-                      containerLinuxConfig:
-                        description: containerLinuxConfig contains CLC specific configuration.
-                        properties:
-                          additionalConfig:
-                            description: |-
-                              additionalConfig contains additional configuration to be merged with the Ignition
-                              configuration generated by the bootstrapper controller. More info: https://coreos.github.io/ignition/operator-notes/#config-merging
-
-                              The data format is documented here: https://kinvolk.io/docs/flatcar-container-linux/latest/provisioning/cl-config/
-                            type: string
-                          strict:
-                            description: strict controls if AdditionalConfig should
-                              be strictly parsed. If so, warnings are treated as errors.
-                            type: boolean
-                        type: object
-                    type: object
-                  initConfiguration:
-                    description: initConfiguration along with ClusterConfiguration
-                      are the configurations necessary for the init command
-                    properties:
-                      apiVersion:
-                        description: |-
-                          APIVersion defines the versioned schema of this representation of an object.
-                          Servers should convert recognized schemas to the latest internal value, and
-                          may reject unrecognized values.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-                        type: string
-                      bootstrapTokens:
-                        description: |-
-                          bootstrapTokens is respected at `kubeadm init` time and describes a set of Bootstrap Tokens to create.
-                          This information IS NOT uploaded to the kubeadm cluster configmap, partly because of its sensitive nature
-                        items:
-                          description: BootstrapToken describes one bootstrap token,
-                            stored as a Secret in the cluster.
-                          properties:
-                            description:
-                              description: |-
-                                description sets a human-friendly message why this token exists and what it's used
-                                for, so other administrators can know its purpose.
-                              type: string
-                            expires:
-                              description: |-
-                                expires specifies the timestamp when this token expires. Defaults to being set
-                                dynamically at runtime based on the TTL. Expires and TTL are mutually exclusive.
-                              format: date-time
-                              type: string
-                            groups:
-                              description: |-
-                                groups specifies the extra groups that this token will authenticate as when/if
-                                used for authentication
-                              items:
-                                type: string
-                              type: array
-                            token:
-                              description: |-
-                                token is used for establishing bidirectional trust between nodes and control-planes.
-                                Used for joining nodes in the cluster.
-                              type: string
-                            ttl:
-                              description: |-
-                                ttl defines the time to live for this token. Defaults to 24h.
-                                Expires and TTL are mutually exclusive.
-                              type: string
-                            usages:
-                              description: |-
-                                usages describes the ways in which this token can be used. Can by default be used
-                                for establishing bidirectional trust, but that can be changed here.
-                              items:
-                                type: string
-                              type: array
-                          required:
-                          - token
-                          type: object
-                        type: array
-                      kind:
-                        description: |-
-                          Kind is a string value representing the REST resource this object represents.
-                          Servers may infer this from the endpoint the client submits requests to.
-                          Cannot be updated.
-                          In CamelCase.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                        type: string
-                      localAPIEndpoint:
-                        description: |-
-                          localAPIEndpoint represents the endpoint of the API server instance that's deployed on this control plane node
-                          In HA setups, this differs from ClusterConfiguration.ControlPlaneEndpoint in the sense that ControlPlaneEndpoint
-                          is the global endpoint for the cluster, which then loadbalances the requests to each individual API server. This
-                          configuration object lets you customize what IP/DNS name and port the local API server advertises it's accessible
-                          on. By default, kubeadm tries to auto-detect the IP of the default interface and use that, but in case that process
-                          fails you may set the desired value here.
-                        properties:
-                          advertiseAddress:
-                            description: advertiseAddress sets the IP address for
-                              the API server to advertise.
-                            type: string
-                          bindPort:
-                            description: |-
-                              bindPort sets the secure port for the API Server to bind to.
-                              Defaults to 6443.
-                            format: int32
-                            type: integer
-                        type: object
-                      nodeRegistration:
-                        description: |-
-                          nodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
-                          When used in the context of control plane nodes, NodeRegistration should remain consistent
-                          across both InitConfiguration and JoinConfiguration
-                        properties:
-                          criSocket:
-                            description: criSocket is used to retrieve container runtime
-                              info. This information will be annotated to the Node
-                              API object, for later re-use
-                            type: string
-                          ignorePreflightErrors:
-                            description: ignorePreflightErrors provides a slice of
-                              pre-flight errors to be ignored when the current node
-                              is registered.
-                            items:
-                              type: string
-                            type: array
-                          imagePullPolicy:
-                            description: |-
-                              imagePullPolicy specifies the policy for image pulling
-                              during kubeadm "init" and "join" operations. The value of
-                              this field must be one of "Always", "IfNotPresent" or
-                              "Never". Defaults to "IfNotPresent". This can be used only
-                              with Kubernetes version equal to 1.22 and later.
-                            enum:
-                            - Always
-                            - IfNotPresent
-                            - Never
-                            type: string
-                          imagePullSerial:
-                            description: |-
-                              imagePullSerial specifies if image pulling performed by kubeadm must be done serially or in parallel.
-                              This option takes effect only on Kubernetes >=1.31.0.
-                              Default: true (defaulted in kubeadm)
-                            type: boolean
-                          kubeletExtraArgs:
-                            additionalProperties:
-                              type: string
-                            description: |-
-                              kubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
-                              kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
-                              Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
-                            type: object
-                          name:
-                            description: |-
-                              name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
-                              This field is also used in the CommonName field of the kubelet's client certificate to the API server.
-                              Defaults to the hostname of the node if not provided.
-                            type: string
-                          taints:
-                            description: |-
-                              taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
-                              it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
-                              empty slice, i.e. `taints: []` in the YAML file. This field is solely used for Node registration.
-                            items:
-                              description: |-
-                                The node this Taint is attached to has the "effect" on
-                                any pod that does not tolerate the Taint.
-                              properties:
-                                effect:
-                                  description: |-
-                                    Required. The effect of the taint on pods
-                                    that do not tolerate the taint.
-                                    Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
-                                  type: string
-                                key:
-                                  description: Required. The taint key to be applied
-                                    to a node.
-                                  type: string
-                                timeAdded:
-                                  description: |-
-                                    TimeAdded represents the time at which the taint was added.
-                                    It is only written for NoExecute taints.
-                                  format: date-time
-                                  type: string
-                                value:
-                                  description: The taint value corresponding to the
-                                    taint key.
-                                  type: string
-                              required:
-                              - effect
-                              - key
-                              type: object
-                            type: array
-                        type: object
-                      patches:
-                        description: |-
-                          patches contains options related to applying patches to components deployed by kubeadm during
-                          "kubeadm init". The minimum kubernetes version needed to support Patches is v1.22
-                        properties:
-                          directory:
-                            description: |-
-                              directory is a path to a directory that contains files named "target[suffix][+patchtype].extension".
-                              For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "target" can be one of
-                              "kube-apiserver", "kube-controller-manager", "kube-scheduler", "etcd". "patchtype" can be one
-                              of "strategic" "merge" or "json" and they match the patch formats supported by kubectl.
-                              The default "patchtype" is "strategic". "extension" must be either "json" or "yaml".
-                              "suffix" is an optional string that can be used to determine which patches are applied
-                              first alpha-numerically.
-                              These files can be written into the target directory via KubeadmConfig.Files which
-                              specifies additional files to be created on the machine, either with content inline or
-                              by referencing a secret.
-                            type: string
-                        type: object
-                      skipPhases:
-                        description: |-
-                          skipPhases is a list of phases to skip during command execution.
-                          The list of phases can be obtained with the "kubeadm init --help" command.
-                          This option takes effect only on Kubernetes >=1.22.0.
-                        items:
-                          type: string
-                        type: array
-                    type: object
-                  joinConfiguration:
-                    description: joinConfiguration is the kubeadm configuration for
-                      the join command
-                    properties:
-                      apiVersion:
-                        description: |-
-                          APIVersion defines the versioned schema of this representation of an object.
-                          Servers should convert recognized schemas to the latest internal value, and
-                          may reject unrecognized values.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-                        type: string
-                      caCertPath:
-                        description: |-
-                          caCertPath is the path to the SSL certificate authority used to
-                          secure comunications between node and control-plane.
-                          Defaults to "/etc/kubernetes/pki/ca.crt".
-                        type: string
-                      controlPlane:
-                        description: |-
-                          controlPlane defines the additional control plane instance to be deployed on the joining node.
-                          If nil, no additional control plane instance will be deployed.
-                        properties:
-                          localAPIEndpoint:
-                            description: localAPIEndpoint represents the endpoint
-                              of the API server instance to be deployed on this node.
-                            properties:
-                              advertiseAddress:
-                                description: advertiseAddress sets the IP address
-                                  for the API server to advertise.
-                                type: string
-                              bindPort:
-                                description: |-
-                                  bindPort sets the secure port for the API Server to bind to.
-                                  Defaults to 6443.
-                                format: int32
-                                type: integer
-                            type: object
-                        type: object
-                      discovery:
-                        description: discovery specifies the options for the kubelet
-                          to use during the TLS Bootstrap process
-                        properties:
-                          bootstrapToken:
-                            description: |-
-                              bootstrapToken is used to set the options for bootstrap token based discovery
-                              BootstrapToken and File are mutually exclusive
-                            properties:
-                              apiServerEndpoint:
-                                description: apiServerEndpoint is an IP or domain
-                                  name to the API server from which info will be fetched.
-                                type: string
-                              caCertHashes:
-                                description: |-
-                                  caCertHashes specifies a set of public key pins to verify
-                                  when token-based discovery is used. The root CA found during discovery
-                                  must match one of these values. Specifying an empty set disables root CA
-                                  pinning, which can be unsafe. Each hash is specified as "<type>:<value>",
-                                  where the only currently supported type is "sha256". This is a hex-encoded
-                                  SHA-256 hash of the Subject Public Key Info (SPKI) object in DER-encoded
-                                  ASN.1. These hashes can be calculated using, for example, OpenSSL:
-                                  openssl x509 -pubkey -in ca.crt openssl rsa -pubin -outform der 2>&/dev/null | openssl dgst -sha256 -hex
-                                items:
-                                  type: string
-                                type: array
-                              token:
-                                description: |-
-                                  token is a token used to validate cluster information
-                                  fetched from the control-plane.
-                                type: string
-                              unsafeSkipCAVerification:
-                                description: |-
-                                  unsafeSkipCAVerification allows token-based discovery
-                                  without CA verification via CACertHashes. This can weaken
-                                  the security of kubeadm since other nodes can impersonate the control-plane.
-                                type: boolean
-                            required:
-                            - token
-                            type: object
-                          file:
-                            description: |-
-                              file is used to specify a file or URL to a kubeconfig file from which to load cluster information
-                              BootstrapToken and File are mutually exclusive
-                            properties:
-                              kubeConfig:
-                                description: |-
-                                  kubeConfig is used (optionally) to generate a KubeConfig based on the KubeadmConfig's information.
-                                  The file is generated at the path specified in KubeConfigPath.
-
-                                  Host address (server field) information is automatically populated based on the Cluster's ControlPlaneEndpoint.
-                                  Certificate Authority (certificate-authority-data field) is gathered from the cluster's CA secret.
-                                properties:
-                                  cluster:
-                                    description: |-
-                                      cluster contains information about how to communicate with the kubernetes cluster.
-
-                                      By default the following fields are automatically populated:
-                                      - Server with the Cluster's ControlPlaneEndpoint.
-                                      - CertificateAuthorityData with the Cluster's CA certificate.
-                                    properties:
-                                      certificateAuthorityData:
-                                        description: |-
-                                          certificateAuthorityData contains PEM-encoded certificate authority certificates.
-
-                                          Defaults to the Cluster's CA certificate if empty.
-                                        format: byte
-                                        type: string
-                                      insecureSkipTLSVerify:
-                                        description: insecureSkipTLSVerify skips the
-                                          validity check for the server's certificate.
-                                          This will make your HTTPS connections insecure.
-                                        type: boolean
-                                      proxyURL:
-                                        description: |-
-                                          proxyURL is the URL to the proxy to be used for all requests made by this
-                                          client. URLs with "http", "https", and "socks5" schemes are supported.  If
-                                          this configuration is not provided or the empty string, the client
-                                          attempts to construct a proxy configuration from http_proxy and
-                                          https_proxy environment variables. If these environment variables are not
-                                          set, the client does not attempt to proxy requests.
-
-                                          socks5 proxying does not currently support spdy streaming endpoints (exec,
-                                          attach, port forward).
-                                        type: string
-                                      server:
-                                        description: |-
-                                          server is the address of the kubernetes cluster (https://hostname:port).
-
-                                          Defaults to https:// + Cluster.Spec.ControlPlaneEndpoint.
-                                        type: string
-                                      tlsServerName:
-                                        description: tlsServerName is used to check
-                                          server certificate. If TLSServerName is
-                                          empty, the hostname used to contact the
-                                          server is used.
-                                        type: string
-                                    type: object
-                                  user:
-                                    description: |-
-                                      user contains information that describes identity information.
-                                      This is used to tell the kubernetes cluster who you are.
-                                    properties:
-                                      authProvider:
-                                        description: authProvider specifies a custom
-                                          authentication plugin for the kubernetes
-                                          cluster.
-                                        properties:
-                                          config:
-                                            additionalProperties:
-                                              type: string
-                                            description: config holds the parameters
-                                              for the authentication plugin.
-                                            type: object
-                                          name:
-                                            description: name is the name of the authentication
-                                              plugin.
-                                            type: string
-                                        required:
-                                        - name
-                                        type: object
-                                      exec:
-                                        description: exec specifies a custom exec-based
-                                          authentication plugin for the kubernetes
-                                          cluster.
-                                        properties:
-                                          apiVersion:
-                                            description: |-
-                                              Preferred input version of the ExecInfo. The returned ExecCredentials MUST use
-                                              the same encoding version as the input.
-                                              Defaults to client.authentication.k8s.io/v1 if not set.
-                                            type: string
-                                          args:
-                                            description: Arguments to pass to the
-                                              command when executing it.
-                                            items:
-                                              type: string
-                                            type: array
-                                          command:
-                                            description: command to execute.
-                                            type: string
-                                          env:
-                                            description: |-
-                                              env defines additional environment variables to expose to the process. These
-                                              are unioned with the host's environment, as well as variables client-go uses
-                                              to pass argument to the plugin.
-                                            items:
-                                              description: |-
-                                                KubeConfigAuthExecEnv is used for setting environment variables when executing an exec-based
-                                                credential plugin.
-                                              properties:
-                                                name:
-                                                  type: string
-                                                value:
-                                                  type: string
-                                              required:
-                                              - name
-                                              - value
-                                              type: object
-                                            type: array
-                                          provideClusterInfo:
-                                            description: |-
-                                              provideClusterInfo determines whether or not to provide cluster information,
-                                              which could potentially contain very large CA data, to this exec plugin as a
-                                              part of the KUBERNETES_EXEC_INFO environment variable. By default, it is set
-                                              to false. Package k8s.io/client-go/tools/auth/exec provides helper methods for
-                                              reading this environment variable.
-                                            type: boolean
-                                        required:
-                                        - command
-                                        type: object
-                                    type: object
-                                required:
-                                - user
-                                type: object
-                              kubeConfigPath:
-                                description: kubeConfigPath is used to specify the
-                                  actual file path or URL to the kubeconfig file from
-                                  which to load cluster information
-                                type: string
-                            required:
-                            - kubeConfigPath
-                            type: object
-                          timeout:
-                            description: timeout modifies the discovery timeout
-                            type: string
-                          tlsBootstrapToken:
-                            description: |-
-                              tlsBootstrapToken is a token used for TLS bootstrapping.
-                              If .BootstrapToken is set, this field is defaulted to .BootstrapToken.Token, but can be overridden.
-                              If .File is set, this field **must be set** in case the KubeConfigFile does not contain any other authentication information
-                            type: string
-                        type: object
-                      kind:
-                        description: |-
-                          Kind is a string value representing the REST resource this object represents.
-                          Servers may infer this from the endpoint the client submits requests to.
-                          Cannot be updated.
-                          In CamelCase.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                        type: string
-                      nodeRegistration:
-                        description: |-
-                          nodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
-                          When used in the context of control plane nodes, NodeRegistration should remain consistent
-                          across both InitConfiguration and JoinConfiguration
-                        properties:
-                          criSocket:
-                            description: criSocket is used to retrieve container runtime
-                              info. This information will be annotated to the Node
-                              API object, for later re-use
-                            type: string
-                          ignorePreflightErrors:
-                            description: ignorePreflightErrors provides a slice of
-                              pre-flight errors to be ignored when the current node
-                              is registered.
-                            items:
-                              type: string
-                            type: array
-                          imagePullPolicy:
-                            description: |-
-                              imagePullPolicy specifies the policy for image pulling
-                              during kubeadm "init" and "join" operations. The value of
-                              this field must be one of "Always", "IfNotPresent" or
-                              "Never". Defaults to "IfNotPresent". This can be used only
-                              with Kubernetes version equal to 1.22 and later.
-                            enum:
-                            - Always
-                            - IfNotPresent
-                            - Never
-                            type: string
-                          imagePullSerial:
-                            description: |-
-                              imagePullSerial specifies if image pulling performed by kubeadm must be done serially or in parallel.
-                              This option takes effect only on Kubernetes >=1.31.0.
-                              Default: true (defaulted in kubeadm)
-                            type: boolean
-                          kubeletExtraArgs:
-                            additionalProperties:
-                              type: string
-                            description: |-
-                              kubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
-                              kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
-                              Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
-                            type: object
-                          name:
-                            description: |-
-                              name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
-                              This field is also used in the CommonName field of the kubelet's client certificate to the API server.
-                              Defaults to the hostname of the node if not provided.
-                            type: string
-                          taints:
-                            description: |-
-                              taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
-                              it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
-                              empty slice, i.e. `taints: []` in the YAML file. This field is solely used for Node registration.
-                            items:
-                              description: |-
-                                The node this Taint is attached to has the "effect" on
-                                any pod that does not tolerate the Taint.
-                              properties:
-                                effect:
-                                  description: |-
-                                    Required. The effect of the taint on pods
-                                    that do not tolerate the taint.
-                                    Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
-                                  type: string
-                                key:
-                                  description: Required. The taint key to be applied
-                                    to a node.
-                                  type: string
-                                timeAdded:
-                                  description: |-
-                                    TimeAdded represents the time at which the taint was added.
-                                    It is only written for NoExecute taints.
-                                  format: date-time
-                                  type: string
-                                value:
-                                  description: The taint value corresponding to the
-                                    taint key.
-                                  type: string
-                              required:
-                              - effect
-                              - key
-                              type: object
-                            type: array
-                        type: object
-                      patches:
-                        description: |-
-                          patches contains options related to applying patches to components deployed by kubeadm during
-                          "kubeadm join". The minimum kubernetes version needed to support Patches is v1.22
-                        properties:
-                          directory:
-                            description: |-
-                              directory is a path to a directory that contains files named "target[suffix][+patchtype].extension".
-                              For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "target" can be one of
-                              "kube-apiserver", "kube-controller-manager", "kube-scheduler", "etcd". "patchtype" can be one
-                              of "strategic" "merge" or "json" and they match the patch formats supported by kubectl.
-                              The default "patchtype" is "strategic". "extension" must be either "json" or "yaml".
-                              "suffix" is an optional string that can be used to determine which patches are applied
-                              first alpha-numerically.
-                              These files can be written into the target directory via KubeadmConfig.Files which
-                              specifies additional files to be created on the machine, either with content inline or
-                              by referencing a secret.
-                            type: string
-                        type: object
-                      skipPhases:
-                        description: |-
-                          skipPhases is a list of phases to skip during command execution.
-                          The list of phases can be obtained with the "kubeadm init --help" command.
-                          This option takes effect only on Kubernetes >=1.22.0.
-                        items:
-                          type: string
-                        type: array
-                    type: object
-                  mounts:
-                    description: mounts specifies a list of mount points to be setup.
-                    items:
-                      description: MountPoints defines input for generated mounts
-                        in cloud-init.
-                      items:
-                        type: string
-                      type: array
-                    type: array
-                  ntp:
-                    description: ntp specifies NTP configuration
-                    properties:
-                      enabled:
-                        description: enabled specifies whether NTP should be enabled
-                        type: boolean
-                      servers:
-                        description: servers specifies which NTP servers to use
-                        items:
-                          type: string
-                        type: array
-                    type: object
-                  postKubeadmCommands:
-                    description: postKubeadmCommands specifies extra commands to run
-                      after kubeadm runs
-                    items:
-                      type: string
-                    type: array
-                  preKubeadmCommands:
-                    description: preKubeadmCommands specifies extra commands to run
-                      before kubeadm runs
-                    items:
-                      type: string
-                    type: array
-                  useExperimentalRetryJoin:
-                    description: |-
-                      useExperimentalRetryJoin replaces a basic kubeadm command with a shell
-                      script with retries for joins.
-
-                      This is meant to be an experimental temporary workaround on some environments
-                      where joins fail due to timing (and other issues). The long term goal is to add retries to
-                      kubeadm proper and use that functionality.
-
-                      This will add about 40KB to userdata
-
-                      For more information, refer to https://github.com/kubernetes-sigs/cluster-api/pull/2763#discussion_r397306055.
-
-                      Deprecated: This experimental fix is no longer needed and this field will be removed in a future release.
-                      When removing also remove from staticcheck exclude-rules for SA1019 in golangci.yml
-                    type: boolean
-                  users:
-                    description: users specifies extra users to add
-                    items:
-                      description: User defines the input for a generated user in
-                        cloud-init.
-                      properties:
-                        gecos:
-                          description: gecos specifies the gecos to use for the user
-                          type: string
-                        groups:
-                          description: groups specifies the additional groups for
-                            the user
-                          type: string
-                        homeDir:
-                          description: homeDir specifies the home directory to use
-                            for the user
-                          type: string
-                        inactive:
-                          description: inactive specifies whether to mark the user
-                            as inactive
-                          type: boolean
-                        lockPassword:
-                          description: lockPassword specifies if password login should
-                            be disabled
-                          type: boolean
-                        name:
-                          description: name specifies the user name
-                          type: string
-                        passwd:
-                          description: passwd specifies a hashed password for the
-                            user
-                          type: string
-                        passwdFrom:
-                          description: passwdFrom is a referenced source of passwd
-                            to populate the passwd.
-                          properties:
-                            secret:
-                              description: secret represents a secret that should
-                                populate this password.
-                              properties:
-                                key:
-                                  description: key is the key in the secret's data
-                                    map for this value.
-                                  type: string
-                                name:
-                                  description: name of the secret in the KubeadmBootstrapConfig's
-                                    namespace to use.
-                                  type: string
-                              required:
-                              - key
-                              - name
-                              type: object
-                          required:
-                          - secret
-                          type: object
-                        primaryGroup:
-                          description: primaryGroup specifies the primary group for
-                            the user
-                          type: string
-                        shell:
-                          description: shell specifies the user's shell
-                          type: string
-                        sshAuthorizedKeys:
-                          description: sshAuthorizedKeys specifies a list of ssh authorized
-                            keys for the user
-                          items:
-                            type: string
-                          type: array
-                        sudo:
-                          description: sudo specifies a sudo role for the user
-                          type: string
-                      required:
-                      - name
-                      type: object
-                    type: array
-                  verbosity:
-                    description: |-
-                      verbosity is the number for the kubeadm log level verbosity.
-                      It overrides the `--v` flag in kubeadm commands.
-                    format: int32
-                    type: integer
-                type: object
-              machineNamingStrategy:
-                description: |-
-                  MachineNamingStrategy allows changing the naming pattern used when creating Machines.
-                  InfraMachines & KubeadmConfigs will use the same name as the corresponding Machines.
-                properties:
-                  template:
-                    description: |-
-                      Template defines the template to use for generating the names of the Machine objects.
-                      If not defined, it will fallback to `{{ .kubeadmControlPlane.name }}-{{ .random }}`.
-                      If the generated name string exceeds 63 characters, it will be trimmed to 58 characters and will
-                      get concatenated with a random suffix of length 5.
-                      Length of the template string must not exceed 256 characters.
-                      The template allows the following variables `.cluster.name`, `.kubeadmControlPlane.name` and `.random`.
-                      The variable `.cluster.name` retrieves the name of the cluster object that owns the Machines being created.
-                      The variable `.kubeadmControlPlane.name` retrieves the name of the KubeadmControlPlane object that owns the Machines being created.
-                      The variable `.random` is substituted with random alphanumeric string, without vowels, of length 5.
-                    maxLength: 256
-                    type: string
-                type: object
-              machineTemplate:
-                description: |-
-                  machineTemplate contains information about how machines
-                  should be shaped when creating or updating a control plane.
-                properties:
-                  infrastructureRef:
-                    description: |-
-                      infrastructureRef is a required reference to a custom resource
-                      offered by an infrastructure provider.
-                    properties:
-                      apiVersion:
-                        description: API version of the referent.
-                        type: string
-                      fieldPath:
-                        description: |-
-                          If referring to a piece of an object instead of an entire object, this string
-                          should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                          For example, if the object reference is to a container within a pod, this would take on a value like:
-                          "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                          the event) or if no container name is specified "spec.containers[2]" (container with
-                          index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                          referencing a part of an object.
-                        type: string
-                      kind:
-                        description: |-
-                          Kind of the referent.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                        type: string
-                      name:
-                        description: |-
-                          Name of the referent.
-                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                        type: string
-                      namespace:
-                        description: |-
-                          Namespace of the referent.
-                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                        type: string
-                      resourceVersion:
-                        description: |-
-                          Specific resourceVersion to which this reference is made, if any.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                        type: string
-                      uid:
-                        description: |-
-                          UID of the referent.
-                          More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                        type: string
-                    type: object
-                    x-kubernetes-map-type: atomic
-                  metadata:
-                    description: |-
-                      Standard object's metadata.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
-                    properties:
-                      annotations:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          annotations is an unstructured key value map stored with a resource that may be
-                          set by external tools to store and retrieve arbitrary metadata. They are not
-                          queryable and should be preserved when modifying objects.
-                          More info: http://kubernetes.io/docs/user-guide/annotations
-                        type: object
-                      labels:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          Map of string keys and values that can be used to organize and categorize
-                          (scope and select) objects. May match selectors of replication controllers
-                          and services.
-                          More info: http://kubernetes.io/docs/user-guide/labels
-                        type: object
-                    type: object
-                  nodeDeletionTimeout:
-                    description: |-
-                      nodeDeletionTimeout defines how long the machine controller will attempt to delete the Node that the Machine
-                      hosts after the Machine is marked for deletion. A duration of 0 will retry deletion indefinitely.
-                      If no value is provided, the default value for this property of the Machine resource will be used.
-                    type: string
-                  nodeDrainTimeout:
-                    description: |-
-                      nodeDrainTimeout is the total amount of time that the controller will spend on draining a controlplane node
-                      The default value is 0, meaning that the node can be drained without any time limitations.
-                      NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
-                    type: string
-                  nodeVolumeDetachTimeout:
-                    description: |-
-                      nodeVolumeDetachTimeout is the total amount of time that the controller will spend on waiting for all volumes
-                      to be detached. The default value is 0, meaning that the volumes can be detached without any time limitations.
-                    type: string
-                required:
-                - infrastructureRef
-                type: object
-              remediationStrategy:
-                description: The RemediationStrategy that controls how control plane
-                  machine remediation happens.
-                properties:
-                  maxRetry:
-                    description: "maxRetry is the Max number of retries while attempting
-                      to remediate an unhealthy machine.\nA retry happens when a machine
-                      that was created as a replacement for an unhealthy machine also
-                      fails.\nFor example, given a control plane with three machines
-                      M1, M2, M3:\n\n\tM1 become unhealthy; remediation happens, and
-                      M1-1 is created as a replacement.\n\tIf M1-1 (replacement of
-                      M1) has problems while bootstrapping it will become unhealthy,
-                      and then be\n\tremediated; such operation is considered a retry,
-                      remediation-retry #1.\n\tIf M1-2 (replacement of M1-1) becomes
-                      unhealthy, remediation-retry #2 will happen, etc.\n\nA retry
-                      could happen only after RetryPeriod from the previous retry.\nIf
-                      a machine is marked as unhealthy after MinHealthyPeriod from
-                      the previous remediation expired,\nthis is not considered a
-                      retry anymore because the new issue is assumed unrelated from
-                      the previous one.\n\nIf not set, the remedation will be retried
-                      infinitely."
-                    format: int32
-                    type: integer
-                  minHealthyPeriod:
-                    description: "minHealthyPeriod defines the duration after which
-                      KCP will consider any failure to a machine unrelated\nfrom the
-                      previous one. In this case the remediation is not considered
-                      a retry anymore, and thus the retry\ncounter restarts from 0.
-                      For example, assuming MinHealthyPeriod is set to 1h (default)\n\n\tM1
-                      become unhealthy; remediation happens, and M1-1 is created as
-                      a replacement.\n\tIf M1-1 (replacement of M1) has problems within
-                      the 1hr after the creation, also\n\tthis machine will be remediated
-                      and this operation is considered a retry - a problem related\n\tto
-                      the original issue happened to M1 -.\n\n\tIf instead the problem
-                      on M1-1 is happening after MinHealthyPeriod expired, e.g. four
-                      days after\n\tm1-1 has been created as a remediation of M1,
-                      the problem on M1-1 is considered unrelated to\n\tthe original
-                      issue happened to M1.\n\nIf not set, this value is defaulted
-                      to 1h."
-                    type: string
-                  retryPeriod:
-                    description: |-
-                      retryPeriod is the duration that KCP should wait before remediating a machine being created as a replacement
-                      for an unhealthy machine (a retry).
-
-                      If not set, a retry will happen immediately.
-                    type: string
-                type: object
-              replicas:
-                description: |-
-                  Number of desired machines. Defaults to 1. When stacked etcd is used only
-                  odd numbers are permitted, as per [etcd best practice](https://etcd.io/docs/v3.3.12/faq/#why-an-odd-number-of-cluster-members).
-                  This is a pointer to distinguish between explicit zero and not specified.
-                format: int32
-                type: integer
-              rolloutAfter:
-                description: |-
-                  rolloutAfter is a field to indicate a rollout should be performed
-                  after the specified time even if no changes have been made to the
-                  KubeadmControlPlane.
-                  Example: In the YAML the time can be specified in the RFC3339 format.
-                  To specify the rolloutAfter target as March 9, 2023, at 9 am UTC
-                  use "2023-03-09T09:00:00Z".
-                format: date-time
-                type: string
-              rolloutBefore:
-                description: |-
-                  rolloutBefore is a field to indicate a rollout should be performed
-                  if the specified criteria is met.
-                properties:
-                  certificatesExpiryDays:
-                    description: |-
-                      certificatesExpiryDays indicates a rollout needs to be performed if the
-                      certificates of the machine will expire within the specified days.
-                    format: int32
-                    type: integer
-                type: object
-              rolloutStrategy:
-                default:
-                  rollingUpdate:
-                    maxSurge: 1
-                  type: RollingUpdate
-                description: |-
-                  The RolloutStrategy to use to replace control plane machines with
-                  new ones.
-                properties:
-                  rollingUpdate:
-                    description: |-
-                      Rolling update config params. Present only if
-                      RolloutStrategyType = RollingUpdate.
-                    properties:
-                      maxSurge:
-                        anyOf:
-                        - type: integer
-                        - type: string
-                        description: |-
-                          The maximum number of control planes that can be scheduled above or under the
-                          desired number of control planes.
-                          Value can be an absolute number 1 or 0.
-                          Defaults to 1.
-                          Example: when this is set to 1, the control plane can be scaled
-                          up immediately when the rolling update starts.
-                        x-kubernetes-int-or-string: true
-                    type: object
-                  type:
-                    description: |-
-                      type of rollout. Currently the only supported strategy is
-                      "RollingUpdate".
-                      Default is RollingUpdate.
-                    type: string
-                type: object
-              version:
-                description: |-
-                  version defines the desired Kubernetes version.
-                  Please note that if kubeadmConfigSpec.ClusterConfiguration.imageRepository is not set
-                  we don't allow upgrades to versions >= v1.22.0 for which kubeadm uses the old registry (k8s.gcr.io).
-                  Please use a newer patch version with the new registry instead. The default registries of kubeadm are:
-                    * registry.k8s.io (new registry): >= v1.22.17, >= v1.23.15, >= v1.24.9, >= v1.25.0
-                    * k8s.gcr.io (old registry): all older versions
-                type: string
-            required:
-            - kubeadmConfigSpec
-            - machineTemplate
-            - version
-            type: object
-          status:
-            description: KubeadmControlPlaneStatus defines the observed state of KubeadmControlPlane.
-            properties:
-              conditions:
-                description: conditions defines current service state of the KubeadmControlPlane.
-                items:
-                  description: Condition defines an observation of a Cluster API resource
-                    operational state.
-                  properties:
-                    lastTransitionTime:
-                      description: |-
-                        Last time the condition transitioned from one status to another.
-                        This should be when the underlying condition changed. If that is not known, then using the time when
-                        the API field changed is acceptable.
-                      format: date-time
-                      type: string
-                    message:
-                      description: |-
-                        A human readable message indicating details about the transition.
-                        This field may be empty.
-                      type: string
-                    reason:
-                      description: |-
-                        The reason for the condition's last transition in CamelCase.
-                        The specific API may choose whether or not this field is considered a guaranteed API.
-                        This field may be empty.
-                      type: string
-                    severity:
-                      description: |-
-                        severity provides an explicit classification of Reason code, so the users or machines can immediately
-                        understand the current situation and act accordingly.
-                        The Severity field MUST be set only when Status=False.
-                      type: string
-                    status:
-                      description: status of the condition, one of True, False, Unknown.
-                      type: string
-                    type:
-                      description: |-
-                        type of condition in CamelCase or in foo.example.com/CamelCase.
-                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
-                        can be useful (see .node.status.conditions), the ability to deconflict is important.
-                      type: string
-                  required:
-                  - lastTransitionTime
-                  - status
-                  - type
-                  type: object
-                type: array
-              failureMessage:
-                description: |-
-                  ErrorMessage indicates that there is a terminal problem reconciling the
-                  state, and will be set to a descriptive error message.
-
-                  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.
-                type: string
-              failureReason:
-                description: |-
-                  failureReason indicates that there is a terminal problem reconciling the
-                  state, and will be set to a token value suitable for
-                  programmatic interpretation.
-
-                  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.
-                type: string
-              initialized:
-                description: |-
-                  initialized denotes that the KubeadmControlPlane API Server is initialized and thus
-                  it can accept requests.
-                  NOTE: this field is part of the Cluster API contract and it is used to orchestrate provisioning.
-                  The value of this field is never updated after provisioning is completed. Please use conditions
-                  to check the operational state of the control plane.
-                type: boolean
-              lastRemediation:
-                description: lastRemediation stores info about last remediation performed.
-                properties:
-                  machine:
-                    description: machine is the machine name of the latest machine
-                      being remediated.
-                    type: string
-                  retryCount:
-                    description: |-
-                      retryCount used to keep track of remediation retry for the last remediated machine.
-                      A retry happens when a machine that was created as a replacement for an unhealthy machine also fails.
-                    format: int32
-                    type: integer
-                  timestamp:
-                    description: timestamp is when last remediation happened. It is
-                      represented in RFC3339 form and is in UTC.
-                    format: date-time
-                    type: string
-                required:
-                - machine
-                - retryCount
-                - timestamp
-                type: object
-              observedGeneration:
-                description: observedGeneration is the latest generation observed
-                  by the controller.
-                format: int64
-                type: integer
-              ready:
-                description: |-
-                  ready denotes that the KubeadmControlPlane API Server became ready during initial provisioning
-                  to receive requests.
-                  NOTE: this field is part of the Cluster API contract and it is used to orchestrate provisioning.
-                  The value of this field is never updated after provisioning is completed. Please use conditions
-                  to check the operational state of the control plane.
-                type: boolean
-              readyReplicas:
-                description: Total number of fully running and ready control plane
-                  machines.
-                format: int32
-                type: integer
-              replicas:
-                description: |-
-                  Total number of non-terminated machines targeted by this control plane
-                  (their labels match the selector).
-                format: int32
-                type: integer
-              selector:
-                description: |-
-                  selector is the label selector in string format to avoid introspection
-                  by clients, and is used to provide the CRD-based integration for the
-                  scale subresource and additional integrations for things like kubectl
-                  describe.. The string will be in the same format as the query-param syntax.
-                  More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors
-                type: string
-              unavailableReplicas:
-                description: |-
-                  Total number of unavailable machines targeted by this control plane.
-                  This is the total number of machines that are still required for
-                  the deployment to have 100% available capacity. They may either
-                  be machines that are running but not yet ready or machines
-                  that still have not been created.
-
-                  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.
-                format: int32
-                type: integer
-              updatedReplicas:
-                description: |-
-                  Total number of non-terminated machines targeted by this control plane
-                  that have the desired template spec.
-                format: int32
-                type: integer
-              v1beta2:
-                description: v1beta2 groups all the fields that will be added or modified
-                  in KubeadmControlPlane's status with the V1Beta2 version.
-                properties:
-                  availableReplicas:
-                    description: availableReplicas is the number of available replicas
-                      targeted by this KubeadmControlPlane. A machine is considered
-                      available when Machine's Available condition is true.
-                    format: int32
-                    type: integer
-                  conditions:
-                    description: |-
-                      conditions represents the observations of a KubeadmControlPlane's current state.
-                      Known condition types are Available, CertificatesAvailable, EtcdClusterAvailable, MachinesReady, MachinesUpToDate,
-                      ScalingUp, ScalingDown, Remediating, Deleting, Paused.
-                    items:
-                      description: Condition contains details for one aspect of the
-                        current state of this API Resource.
-                      properties:
-                        lastTransitionTime:
-                          description: |-
-                            lastTransitionTime is the last time the condition transitioned from one status to another.
-                            This should be when the underlying condition changed.  If that is not known, then using the time when the API field changed is acceptable.
-                          format: date-time
-                          type: string
-                        message:
-                          description: |-
-                            message is a human readable message indicating details about the transition.
-                            This may be an empty string.
-                          maxLength: 32768
-                          type: string
-                        observedGeneration:
-                          description: |-
-                            observedGeneration represents the .metadata.generation that the condition was set based upon.
-                            For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
-                            with respect to the current state of the instance.
-                          format: int64
-                          minimum: 0
-                          type: integer
-                        reason:
-                          description: |-
-                            reason contains a programmatic identifier indicating the reason for the condition's last transition.
-                            Producers of specific condition types may define expected values and meanings for this field,
-                            and whether the values are considered a guaranteed API.
-                            The value should be a CamelCase string.
-                            This field may not be empty.
-                          maxLength: 1024
-                          minLength: 1
-                          pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
-                          type: string
-                        status:
-                          description: status of the condition, one of True, False,
-                            Unknown.
-                          enum:
-                          - "True"
-                          - "False"
-                          - Unknown
-                          type: string
-                        type:
-                          description: type of condition in CamelCase or in foo.example.com/CamelCase.
-                          maxLength: 316
-                          pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-                          type: string
-                      required:
-                      - lastTransitionTime
-                      - message
-                      - reason
-                      - status
-                      - type
-                      type: object
-                    maxItems: 32
-                    type: array
-                    x-kubernetes-list-map-keys:
-                    - type
-                    x-kubernetes-list-type: map
-                  readyReplicas:
-                    description: readyReplicas is the number of ready replicas for
-                      this KubeadmControlPlane. A machine is considered ready when
-                      Machine's Ready condition is true.
-                    format: int32
-                    type: integer
-                  upToDateReplicas:
-                    description: upToDateReplicas is the number of up-to-date replicas
-                      targeted by this KubeadmControlPlane. A machine is considered
-                      up-to-date when Machine's UpToDate condition is true.
-                    format: int32
-                    type: integer
-                type: object
-              version:
-                description: |-
-                  version represents the minimum Kubernetes version for the control plane machines
-                  in the cluster.
-                type: string
-            type: object
-        type: object
-    served: true
-    storage: true
-    subresources:
-      scale:
-        labelSelectorPath: .status.selector
-        specReplicasPath: .spec.replicas
-        statusReplicasPath: .status.replicas
-      status: {}
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: null
-  storedVersions: null
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  annotations:
-    cert-manager.io/inject-ca-from: capi-kubeadm-control-plane-system/capi-kubeadm-control-plane-serving-cert
-    controller-gen.kubebuilder.io/version: v0.16.1
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: control-plane-kubeadm
-    cluster.x-k8s.io/v1beta1: v1beta1
-    clusterctl.cluster.x-k8s.io: ""
-  name: kubeadmcontrolplanetemplates.controlplane.cluster.x-k8s.io
-spec:
-  conversion:
-    strategy: Webhook
-    webhook:
-      clientConfig:
-        service:
-          name: capi-kubeadm-control-plane-webhook-service
-          namespace: capi-kubeadm-control-plane-system
-          path: /convert
-      conversionReviewVersions:
-      - v1
-      - v1beta1
-  group: controlplane.cluster.x-k8s.io
-  names:
-    categories:
-    - cluster-api
-    kind: KubeadmControlPlaneTemplate
-    listKind: KubeadmControlPlaneTemplateList
-    plural: kubeadmcontrolplanetemplates
-    singular: kubeadmcontrolplanetemplate
-  scope: Namespaced
-  versions:
-  - additionalPrinterColumns:
-    - description: Time duration since creation of KubeadmControlPlaneTemplate
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    deprecated: true
-    name: v1alpha4
-    schema:
-      openAPIV3Schema:
-        description: |-
-          KubeadmControlPlaneTemplate is the Schema for the kubeadmcontrolplanetemplates API.
-
-          Deprecated: This type will be removed in one of the next releases.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: KubeadmControlPlaneTemplateSpec defines the desired state
-              of KubeadmControlPlaneTemplate.
-            properties:
-              template:
-                description: KubeadmControlPlaneTemplateResource describes the data
-                  needed to create a KubeadmControlPlane from a template.
-                properties:
-                  spec:
-                    description: KubeadmControlPlaneSpec defines the desired state
-                      of KubeadmControlPlane.
-                    properties:
-                      kubeadmConfigSpec:
-                        description: |-
-                          kubeadmConfigSpec is a KubeadmConfigSpec
-                          to use for initializing and joining machines to the control plane.
-                        properties:
-                          clusterConfiguration:
-                            description: clusterConfiguration along with InitConfiguration
-                              are the configurations necessary for the init command
-                            properties:
-                              apiServer:
-                                description: apiServer contains extra settings for
-                                  the API server control plane component
-                                properties:
-                                  certSANs:
-                                    description: certSANs sets extra Subject Alternative
-                                      Names for the API Server signing cert.
-                                    items:
-                                      type: string
-                                    type: array
-                                  extraArgs:
-                                    additionalProperties:
-                                      type: string
-                                    description: extraArgs is an extra set of flags
-                                      to pass to the control plane component.
-                                    type: object
-                                  extraVolumes:
-                                    description: extraVolumes is an extra set of host
-                                      volumes, mounted to the control plane component.
-                                    items:
-                                      description: |-
-                                        HostPathMount contains elements describing volumes that are mounted from the
-                                        host.
-                                      properties:
-                                        hostPath:
-                                          description: |-
-                                            hostPath is the path in the host that will be mounted inside
-                                            the pod.
-                                          type: string
-                                        mountPath:
-                                          description: mountPath is the path inside
-                                            the pod where hostPath will be mounted.
-                                          type: string
-                                        name:
-                                          description: name of the volume inside the
-                                            pod template.
-                                          type: string
-                                        pathType:
-                                          description: pathType is the type of the
-                                            HostPath.
-                                          type: string
-                                        readOnly:
-                                          description: readOnly controls write access
-                                            to the volume
-                                          type: boolean
-                                      required:
-                                      - hostPath
-                                      - mountPath
-                                      - name
-                                      type: object
-                                    type: array
-                                  timeoutForControlPlane:
-                                    description: timeoutForControlPlane controls the
-                                      timeout that we use for API server to appear
-                                    type: string
-                                type: object
-                              apiVersion:
-                                description: |-
-                                  APIVersion defines the versioned schema of this representation of an object.
-                                  Servers should convert recognized schemas to the latest internal value, and
-                                  may reject unrecognized values.
-                                  More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-                                type: string
-                              certificatesDir:
-                                description: |-
-                                  certificatesDir specifies where to store or look for all required certificates.
-                                  NB: if not provided, this will default to `/etc/kubernetes/pki`
-                                type: string
-                              clusterName:
-                                description: The cluster name
-                                type: string
-                              controlPlaneEndpoint:
-                                description: |-
-                                  controlPlaneEndpoint sets a stable IP address or DNS name for the control plane; it
-                                  can be a valid IP address or a RFC-1123 DNS subdomain, both with optional TCP port.
-                                  In case the ControlPlaneEndpoint is not specified, the AdvertiseAddress + BindPort
-                                  are used; in case the ControlPlaneEndpoint is specified but without a TCP port,
-                                  the BindPort is used.
-                                  Possible usages are:
-                                  e.g. In a cluster with more than one control plane instances, this field should be
-                                  assigned the address of the external load balancer in front of the
-                                  control plane instances.
-                                  e.g.  in environments with enforced node recycling, the ControlPlaneEndpoint
-                                  could be used for assigning a stable DNS to the control plane.
-                                  NB: This value defaults to the first value in the Cluster object status.apiEndpoints array.
-                                type: string
-                              controllerManager:
-                                description: controllerManager contains extra settings
-                                  for the controller manager control plane component
-                                properties:
-                                  extraArgs:
-                                    additionalProperties:
-                                      type: string
-                                    description: extraArgs is an extra set of flags
-                                      to pass to the control plane component.
-                                    type: object
-                                  extraVolumes:
-                                    description: extraVolumes is an extra set of host
-                                      volumes, mounted to the control plane component.
-                                    items:
-                                      description: |-
-                                        HostPathMount contains elements describing volumes that are mounted from the
-                                        host.
-                                      properties:
-                                        hostPath:
-                                          description: |-
-                                            hostPath is the path in the host that will be mounted inside
-                                            the pod.
-                                          type: string
-                                        mountPath:
-                                          description: mountPath is the path inside
-                                            the pod where hostPath will be mounted.
-                                          type: string
-                                        name:
-                                          description: name of the volume inside the
-                                            pod template.
-                                          type: string
-                                        pathType:
-                                          description: pathType is the type of the
-                                            HostPath.
-                                          type: string
-                                        readOnly:
-                                          description: readOnly controls write access
-                                            to the volume
-                                          type: boolean
-                                      required:
-                                      - hostPath
-                                      - mountPath
-                                      - name
-                                      type: object
-                                    type: array
-                                type: object
-                              dns:
-                                description: dns defines the options for the DNS add-on
-                                  installed in the cluster.
-                                properties:
-                                  imageRepository:
-                                    description: |-
-                                      imageRepository sets the container registry to pull images from.
-                                      if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
-                                    type: string
-                                  imageTag:
-                                    description: |-
-                                      imageTag allows to specify a tag for the image.
-                                      In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
-                                    type: string
-                                type: object
-                              etcd:
-                                description: |-
-                                  etcd holds configuration for etcd.
-                                  NB: This value defaults to a Local (stacked) etcd
-                                properties:
-                                  external:
-                                    description: |-
-                                      external describes how to connect to an external etcd cluster
-                                      Local and External are mutually exclusive
-                                    properties:
-                                      caFile:
-                                        description: |-
-                                          caFile is an SSL Certificate Authority file used to secure etcd communication.
-                                          Required if using a TLS connection.
-                                        type: string
-                                      certFile:
-                                        description: |-
-                                          certFile is an SSL certification file used to secure etcd communication.
-                                          Required if using a TLS connection.
-                                        type: string
-                                      endpoints:
-                                        description: endpoints of etcd members. Required
-                                          for ExternalEtcd.
-                                        items:
-                                          type: string
-                                        type: array
-                                      keyFile:
-                                        description: |-
-                                          keyFile is an SSL key file used to secure etcd communication.
-                                          Required if using a TLS connection.
-                                        type: string
-                                    required:
-                                    - caFile
-                                    - certFile
-                                    - endpoints
-                                    - keyFile
-                                    type: object
-                                  local:
-                                    description: |-
-                                      local provides configuration knobs for configuring the local etcd instance
-                                      Local and External are mutually exclusive
-                                    properties:
-                                      dataDir:
-                                        description: |-
-                                          dataDir is the directory etcd will place its data.
-                                          Defaults to "/var/lib/etcd".
-                                        type: string
-                                      extraArgs:
-                                        additionalProperties:
-                                          type: string
-                                        description: |-
-                                          extraArgs are extra arguments provided to the etcd binary
-                                          when run inside a static pod.
-                                        type: object
-                                      imageRepository:
-                                        description: |-
-                                          imageRepository sets the container registry to pull images from.
-                                          if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
-                                        type: string
-                                      imageTag:
-                                        description: |-
-                                          imageTag allows to specify a tag for the image.
-                                          In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
-                                        type: string
-                                      peerCertSANs:
-                                        description: peerCertSANs sets extra Subject
-                                          Alternative Names for the etcd peer signing
-                                          cert.
-                                        items:
-                                          type: string
-                                        type: array
-                                      serverCertSANs:
-                                        description: serverCertSANs sets extra Subject
-                                          Alternative Names for the etcd server signing
-                                          cert.
-                                        items:
-                                          type: string
-                                        type: array
-                                    type: object
-                                type: object
-                              featureGates:
-                                additionalProperties:
-                                  type: boolean
-                                description: featureGates enabled by the user.
-                                type: object
-                              imageRepository:
-                                description: |-
-                                  imageRepository sets the container registry to pull images from.
-                                  If empty, `registry.k8s.io` will be used by default; in case of kubernetes version is a CI build (kubernetes version starts with `ci/` or `ci-cross/`)
-                                  `gcr.io/k8s-staging-ci-images` will be used as a default for control plane components and for kube-proxy, while `registry.k8s.io`
-                                  will be used for all the other images.
-                                type: string
-                              kind:
-                                description: |-
-                                  Kind is a string value representing the REST resource this object represents.
-                                  Servers may infer this from the endpoint the client submits requests to.
-                                  Cannot be updated.
-                                  In CamelCase.
-                                  More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                                type: string
-                              kubernetesVersion:
-                                description: |-
-                                  kubernetesVersion is the target version of the control plane.
-                                  NB: This value defaults to the Machine object spec.version
-                                type: string
-                              networking:
-                                description: |-
-                                  networking holds configuration for the networking topology of the cluster.
-                                  NB: This value defaults to the Cluster object spec.clusterNetwork.
-                                properties:
-                                  dnsDomain:
-                                    description: dnsDomain is the dns domain used
-                                      by k8s services. Defaults to "cluster.local".
-                                    type: string
-                                  podSubnet:
-                                    description: |-
-                                      podSubnet is the subnet used by pods.
-                                      If unset, the API server will not allocate CIDR ranges for every node.
-                                      Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.services.cidrBlocks if that is set
-                                    type: string
-                                  serviceSubnet:
-                                    description: |-
-                                      serviceSubnet is the subnet used by k8s services.
-                                      Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.pods.cidrBlocks, or
-                                      to "10.96.0.0/12" if that's unset.
-                                    type: string
-                                type: object
-                              scheduler:
-                                description: scheduler contains extra settings for
-                                  the scheduler control plane component
-                                properties:
-                                  extraArgs:
-                                    additionalProperties:
-                                      type: string
-                                    description: extraArgs is an extra set of flags
-                                      to pass to the control plane component.
-                                    type: object
-                                  extraVolumes:
-                                    description: extraVolumes is an extra set of host
-                                      volumes, mounted to the control plane component.
-                                    items:
-                                      description: |-
-                                        HostPathMount contains elements describing volumes that are mounted from the
-                                        host.
-                                      properties:
-                                        hostPath:
-                                          description: |-
-                                            hostPath is the path in the host that will be mounted inside
-                                            the pod.
-                                          type: string
-                                        mountPath:
-                                          description: mountPath is the path inside
-                                            the pod where hostPath will be mounted.
-                                          type: string
-                                        name:
-                                          description: name of the volume inside the
-                                            pod template.
-                                          type: string
-                                        pathType:
-                                          description: pathType is the type of the
-                                            HostPath.
-                                          type: string
-                                        readOnly:
-                                          description: readOnly controls write access
-                                            to the volume
-                                          type: boolean
-                                      required:
-                                      - hostPath
-                                      - mountPath
-                                      - name
-                                      type: object
-                                    type: array
-                                type: object
-                            type: object
-                          diskSetup:
-                            description: diskSetup specifies options for the creation
-                              of partition tables and file systems on devices.
-                            properties:
-                              filesystems:
-                                description: filesystems specifies the list of file
-                                  systems to setup.
-                                items:
-                                  description: Filesystem defines the file systems
-                                    to be created.
-                                  properties:
-                                    device:
-                                      description: device specifies the device name
-                                      type: string
-                                    extraOpts:
-                                      description: extraOpts defined extra options
-                                        to add to the command for creating the file
-                                        system.
-                                      items:
-                                        type: string
-                                      type: array
-                                    filesystem:
-                                      description: filesystem specifies the file system
-                                        type.
-                                      type: string
-                                    label:
-                                      description: label specifies the file system
-                                        label to be used. If set to None, no label
-                                        is used.
-                                      type: string
-                                    overwrite:
-                                      description: |-
-                                        overwrite defines whether or not to overwrite any existing filesystem.
-                                        If true, any pre-existing file system will be destroyed. Use with Caution.
-                                      type: boolean
-                                    partition:
-                                      description: 'partition specifies the partition
-                                        to use. The valid options are: "auto|any",
-                                        "auto", "any", "none", and <NUM>, where NUM
-                                        is the actual partition number.'
-                                      type: string
-                                    replaceFS:
-                                      description: |-
-                                        replaceFS is a special directive, used for Microsoft Azure that instructs cloud-init to replace a file system of <FS_TYPE>.
-                                        NOTE: unless you define a label, this requires the use of the 'any' partition directive.
-                                      type: string
-                                  required:
-                                  - device
-                                  - filesystem
-                                  - label
-                                  type: object
-                                type: array
-                              partitions:
-                                description: partitions specifies the list of the
-                                  partitions to setup.
-                                items:
-                                  description: Partition defines how to create and
-                                    layout a partition.
-                                  properties:
-                                    device:
-                                      description: device is the name of the device.
-                                      type: string
-                                    layout:
-                                      description: |-
-                                        layout specifies the device layout.
-                                        If it is true, a single partition will be created for the entire device.
-                                        When layout is false, it means don't partition or ignore existing partitioning.
-                                      type: boolean
-                                    overwrite:
-                                      description: |-
-                                        overwrite describes whether to skip checks and create the partition if a partition or filesystem is found on the device.
-                                        Use with caution. Default is 'false'.
-                                      type: boolean
-                                    tableType:
-                                      description: |-
-                                        tableType specifies the tupe of partition table. The following are supported:
-                                        'mbr': default and setups a MS-DOS partition table
-                                        'gpt': setups a GPT partition table
-                                      type: string
-                                  required:
-                                  - device
-                                  - layout
-                                  type: object
-                                type: array
-                            type: object
-                          files:
-                            description: files specifies extra files to be passed
-                              to user_data upon creation.
-                            items:
-                              description: File defines the input for generating write_files
-                                in cloud-init.
-                              properties:
-                                content:
-                                  description: content is the actual content of the
-                                    file.
-                                  type: string
-                                contentFrom:
-                                  description: contentFrom is a referenced source
-                                    of content to populate the file.
-                                  properties:
-                                    secret:
-                                      description: secret represents a secret that
-                                        should populate this file.
-                                      properties:
-                                        key:
-                                          description: key is the key in the secret's
-                                            data map for this value.
-                                          type: string
-                                        name:
-                                          description: name of the secret in the KubeadmBootstrapConfig's
-                                            namespace to use.
-                                          type: string
-                                      required:
-                                      - key
-                                      - name
-                                      type: object
-                                  required:
-                                  - secret
-                                  type: object
-                                encoding:
-                                  description: encoding specifies the encoding of
-                                    the file contents.
-                                  enum:
-                                  - base64
-                                  - gzip
-                                  - gzip+base64
-                                  type: string
-                                owner:
-                                  description: owner specifies the ownership of the
-                                    file, e.g. "root:root".
-                                  type: string
-                                path:
-                                  description: path specifies the full path on disk
-                                    where to store the file.
-                                  type: string
-                                permissions:
-                                  description: permissions specifies the permissions
-                                    to assign to the file, e.g. "0640".
-                                  type: string
-                              required:
-                              - path
-                              type: object
-                            type: array
-                          format:
-                            description: format specifies the output format of the
-                              bootstrap data
-                            enum:
-                            - cloud-config
-                            type: string
-                          initConfiguration:
-                            description: initConfiguration along with ClusterConfiguration
-                              are the configurations necessary for the init command
-                            properties:
-                              apiVersion:
-                                description: |-
-                                  APIVersion defines the versioned schema of this representation of an object.
-                                  Servers should convert recognized schemas to the latest internal value, and
-                                  may reject unrecognized values.
-                                  More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-                                type: string
-                              bootstrapTokens:
-                                description: |-
-                                  bootstrapTokens is respected at `kubeadm init` time and describes a set of Bootstrap Tokens to create.
-                                  This information IS NOT uploaded to the kubeadm cluster configmap, partly because of its sensitive nature
-                                items:
-                                  description: BootstrapToken describes one bootstrap
-                                    token, stored as a Secret in the cluster.
-                                  properties:
-                                    description:
-                                      description: |-
-                                        description sets a human-friendly message why this token exists and what it's used
-                                        for, so other administrators can know its purpose.
-                                      type: string
-                                    expires:
-                                      description: |-
-                                        expires specifies the timestamp when this token expires. Defaults to being set
-                                        dynamically at runtime based on the TTL. Expires and TTL are mutually exclusive.
-                                      format: date-time
-                                      type: string
-                                    groups:
-                                      description: |-
-                                        groups specifies the extra groups that this token will authenticate as when/if
-                                        used for authentication
-                                      items:
-                                        type: string
-                                      type: array
-                                    token:
-                                      description: |-
-                                        token is used for establishing bidirectional trust between nodes and control-planes.
-                                        Used for joining nodes in the cluster.
-                                      type: string
-                                    ttl:
-                                      description: |-
-                                        ttl defines the time to live for this token. Defaults to 24h.
-                                        Expires and TTL are mutually exclusive.
-                                      type: string
-                                    usages:
-                                      description: |-
-                                        usages describes the ways in which this token can be used. Can by default be used
-                                        for establishing bidirectional trust, but that can be changed here.
-                                      items:
-                                        type: string
-                                      type: array
-                                  required:
-                                  - token
-                                  type: object
-                                type: array
-                              kind:
-                                description: |-
-                                  Kind is a string value representing the REST resource this object represents.
-                                  Servers may infer this from the endpoint the client submits requests to.
-                                  Cannot be updated.
-                                  In CamelCase.
-                                  More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                                type: string
-                              localAPIEndpoint:
-                                description: |-
-                                  localAPIEndpoint represents the endpoint of the API server instance that's deployed on this control plane node
-                                  In HA setups, this differs from ClusterConfiguration.ControlPlaneEndpoint in the sense that ControlPlaneEndpoint
-                                  is the global endpoint for the cluster, which then loadbalances the requests to each individual API server. This
-                                  configuration object lets you customize what IP/DNS name and port the local API server advertises it's accessible
-                                  on. By default, kubeadm tries to auto-detect the IP of the default interface and use that, but in case that process
-                                  fails you may set the desired value here.
-                                properties:
-                                  advertiseAddress:
-                                    description: advertiseAddress sets the IP address
-                                      for the API server to advertise.
-                                    type: string
-                                  bindPort:
-                                    description: |-
-                                      bindPort sets the secure port for the API Server to bind to.
-                                      Defaults to 6443.
-                                    format: int32
-                                    type: integer
-                                type: object
-                              nodeRegistration:
-                                description: |-
-                                  nodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
-                                  When used in the context of control plane nodes, NodeRegistration should remain consistent
-                                  across both InitConfiguration and JoinConfiguration
-                                properties:
-                                  criSocket:
-                                    description: criSocket is used to retrieve container
-                                      runtime info. This information will be annotated
-                                      to the Node API object, for later re-use
-                                    type: string
-                                  ignorePreflightErrors:
-                                    description: ignorePreflightErrors provides a
-                                      slice of pre-flight errors to be ignored when
-                                      the current node is registered.
-                                    items:
-                                      type: string
-                                    type: array
-                                  kubeletExtraArgs:
-                                    additionalProperties:
-                                      type: string
-                                    description: |-
-                                      kubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
-                                      kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
-                                      Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
-                                    type: object
-                                  name:
-                                    description: |-
-                                      name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
-                                      This field is also used in the CommonName field of the kubelet's client certificate to the API server.
-                                      Defaults to the hostname of the node if not provided.
-                                    type: string
-                                  taints:
-                                    description: |-
-                                      taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
-                                      it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
-                                      empty slice, i.e. `taints: {}` in the YAML file. This field is solely used for Node registration.
-                                    items:
-                                      description: |-
-                                        The node this Taint is attached to has the "effect" on
-                                        any pod that does not tolerate the Taint.
-                                      properties:
-                                        effect:
-                                          description: |-
-                                            Required. The effect of the taint on pods
-                                            that do not tolerate the taint.
-                                            Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
-                                          type: string
-                                        key:
-                                          description: Required. The taint key to
-                                            be applied to a node.
-                                          type: string
-                                        timeAdded:
-                                          description: |-
-                                            TimeAdded represents the time at which the taint was added.
-                                            It is only written for NoExecute taints.
-                                          format: date-time
-                                          type: string
-                                        value:
-                                          description: The taint value corresponding
-                                            to the taint key.
-                                          type: string
-                                      required:
-                                      - effect
-                                      - key
-                                      type: object
-                                    type: array
-                                type: object
-                            type: object
-                          joinConfiguration:
-                            description: joinConfiguration is the kubeadm configuration
-                              for the join command
-                            properties:
-                              apiVersion:
-                                description: |-
-                                  APIVersion defines the versioned schema of this representation of an object.
-                                  Servers should convert recognized schemas to the latest internal value, and
-                                  may reject unrecognized values.
-                                  More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-                                type: string
-                              caCertPath:
-                                description: |-
-                                  caCertPath is the path to the SSL certificate authority used to
-                                  secure comunications between node and control-plane.
-                                  Defaults to "/etc/kubernetes/pki/ca.crt".
-                                type: string
-                              controlPlane:
-                                description: |-
-                                  controlPlane defines the additional control plane instance to be deployed on the joining node.
-                                  If nil, no additional control plane instance will be deployed.
-                                properties:
-                                  localAPIEndpoint:
-                                    description: localAPIEndpoint represents the endpoint
-                                      of the API server instance to be deployed on
-                                      this node.
-                                    properties:
-                                      advertiseAddress:
-                                        description: advertiseAddress sets the IP
-                                          address for the API server to advertise.
-                                        type: string
-                                      bindPort:
-                                        description: |-
-                                          bindPort sets the secure port for the API Server to bind to.
-                                          Defaults to 6443.
-                                        format: int32
-                                        type: integer
-                                    type: object
-                                type: object
-                              discovery:
-                                description: discovery specifies the options for the
-                                  kubelet to use during the TLS Bootstrap process
-                                properties:
-                                  bootstrapToken:
-                                    description: |-
-                                      bootstrapToken is used to set the options for bootstrap token based discovery
-                                      BootstrapToken and File are mutually exclusive
-                                    properties:
-                                      apiServerEndpoint:
-                                        description: apiServerEndpoint is an IP or
-                                          domain name to the API server from which
-                                          info will be fetched.
-                                        type: string
-                                      caCertHashes:
-                                        description: |-
-                                          caCertHashes specifies a set of public key pins to verify
-                                          when token-based discovery is used. The root CA found during discovery
-                                          must match one of these values. Specifying an empty set disables root CA
-                                          pinning, which can be unsafe. Each hash is specified as "<type>:<value>",
-                                          where the only currently supported type is "sha256". This is a hex-encoded
-                                          SHA-256 hash of the Subject Public Key Info (SPKI) object in DER-encoded
-                                          ASN.1. These hashes can be calculated using, for example, OpenSSL:
-                                          openssl x509 -pubkey -in ca.crt openssl rsa -pubin -outform der 2>&/dev/null | openssl dgst -sha256 -hex
-                                        items:
-                                          type: string
-                                        type: array
-                                      token:
-                                        description: |-
-                                          token is a token used to validate cluster information
-                                          fetched from the control-plane.
-                                        type: string
-                                      unsafeSkipCAVerification:
-                                        description: |-
-                                          unsafeSkipCAVerification allows token-based discovery
-                                          without CA verification via CACertHashes. This can weaken
-                                          the security of kubeadm since other nodes can impersonate the control-plane.
-                                        type: boolean
-                                    required:
-                                    - token
-                                    type: object
-                                  file:
-                                    description: |-
-                                      file is used to specify a file or URL to a kubeconfig file from which to load cluster information
-                                      BootstrapToken and File are mutually exclusive
-                                    properties:
-                                      kubeConfigPath:
-                                        description: kubeConfigPath is used to specify
-                                          the actual file path or URL to the kubeconfig
-                                          file from which to load cluster information
-                                        type: string
-                                    required:
-                                    - kubeConfigPath
-                                    type: object
-                                  timeout:
-                                    description: timeout modifies the discovery timeout
-                                    type: string
-                                  tlsBootstrapToken:
-                                    description: |-
-                                      tlsBootstrapToken is a token used for TLS bootstrapping.
-                                      If .BootstrapToken is set, this field is defaulted to .BootstrapToken.Token, but can be overridden.
-                                      If .File is set, this field **must be set** in case the KubeConfigFile does not contain any other authentication information
-                                    type: string
-                                type: object
-                              kind:
-                                description: |-
-                                  Kind is a string value representing the REST resource this object represents.
-                                  Servers may infer this from the endpoint the client submits requests to.
-                                  Cannot be updated.
-                                  In CamelCase.
-                                  More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                                type: string
-                              nodeRegistration:
-                                description: |-
-                                  nodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
-                                  When used in the context of control plane nodes, NodeRegistration should remain consistent
-                                  across both InitConfiguration and JoinConfiguration
-                                properties:
-                                  criSocket:
-                                    description: criSocket is used to retrieve container
-                                      runtime info. This information will be annotated
-                                      to the Node API object, for later re-use
-                                    type: string
-                                  ignorePreflightErrors:
-                                    description: ignorePreflightErrors provides a
-                                      slice of pre-flight errors to be ignored when
-                                      the current node is registered.
-                                    items:
-                                      type: string
-                                    type: array
-                                  kubeletExtraArgs:
-                                    additionalProperties:
-                                      type: string
-                                    description: |-
-                                      kubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
-                                      kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
-                                      Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
-                                    type: object
-                                  name:
-                                    description: |-
-                                      name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
-                                      This field is also used in the CommonName field of the kubelet's client certificate to the API server.
-                                      Defaults to the hostname of the node if not provided.
-                                    type: string
-                                  taints:
-                                    description: |-
-                                      taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
-                                      it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
-                                      empty slice, i.e. `taints: {}` in the YAML file. This field is solely used for Node registration.
-                                    items:
-                                      description: |-
-                                        The node this Taint is attached to has the "effect" on
-                                        any pod that does not tolerate the Taint.
-                                      properties:
-                                        effect:
-                                          description: |-
-                                            Required. The effect of the taint on pods
-                                            that do not tolerate the taint.
-                                            Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
-                                          type: string
-                                        key:
-                                          description: Required. The taint key to
-                                            be applied to a node.
-                                          type: string
-                                        timeAdded:
-                                          description: |-
-                                            TimeAdded represents the time at which the taint was added.
-                                            It is only written for NoExecute taints.
-                                          format: date-time
-                                          type: string
-                                        value:
-                                          description: The taint value corresponding
-                                            to the taint key.
-                                          type: string
-                                      required:
-                                      - effect
-                                      - key
-                                      type: object
-                                    type: array
-                                type: object
-                            type: object
-                          mounts:
-                            description: mounts specifies a list of mount points to
-                              be setup.
-                            items:
-                              description: MountPoints defines input for generated
-                                mounts in cloud-init.
-                              items:
-                                type: string
-                              type: array
-                            type: array
-                          ntp:
-                            description: ntp specifies NTP configuration
-                            properties:
-                              enabled:
-                                description: enabled specifies whether NTP should
-                                  be enabled
-                                type: boolean
-                              servers:
-                                description: servers specifies which NTP servers to
-                                  use
-                                items:
-                                  type: string
-                                type: array
-                            type: object
-                          postKubeadmCommands:
-                            description: postKubeadmCommands specifies extra commands
-                              to run after kubeadm runs
-                            items:
-                              type: string
-                            type: array
-                          preKubeadmCommands:
-                            description: preKubeadmCommands specifies extra commands
-                              to run before kubeadm runs
-                            items:
-                              type: string
-                            type: array
-                          useExperimentalRetryJoin:
-                            description: |-
-                              useExperimentalRetryJoin replaces a basic kubeadm command with a shell
-                              script with retries for joins.
-
-                              This is meant to be an experimental temporary workaround on some environments
-                              where joins fail due to timing (and other issues). The long term goal is to add retries to
-                              kubeadm proper and use that functionality.
-
-                              This will add about 40KB to userdata
-
-                              For more information, refer to https://github.com/kubernetes-sigs/cluster-api/pull/2763#discussion_r397306055.
-                            type: boolean
-                          users:
-                            description: users specifies extra users to add
-                            items:
-                              description: User defines the input for a generated
-                                user in cloud-init.
-                              properties:
-                                gecos:
-                                  description: gecos specifies the gecos to use for
-                                    the user
-                                  type: string
-                                groups:
-                                  description: groups specifies the additional groups
-                                    for the user
-                                  type: string
-                                homeDir:
-                                  description: homeDir specifies the home directory
-                                    to use for the user
-                                  type: string
-                                inactive:
-                                  description: inactive specifies whether to mark
-                                    the user as inactive
-                                  type: boolean
-                                lockPassword:
-                                  description: lockPassword specifies if password
-                                    login should be disabled
-                                  type: boolean
-                                name:
-                                  description: name specifies the user name
-                                  type: string
-                                passwd:
-                                  description: passwd specifies a hashed password
-                                    for the user
-                                  type: string
-                                primaryGroup:
-                                  description: primaryGroup specifies the primary
-                                    group for the user
-                                  type: string
-                                shell:
-                                  description: shell specifies the user's shell
-                                  type: string
-                                sshAuthorizedKeys:
-                                  description: sshAuthorizedKeys specifies a list
-                                    of ssh authorized keys for the user
-                                  items:
-                                    type: string
-                                  type: array
-                                sudo:
-                                  description: sudo specifies a sudo role for the
-                                    user
-                                  type: string
-                              required:
-                              - name
-                              type: object
-                            type: array
-                          verbosity:
-                            description: |-
-                              verbosity is the number for the kubeadm log level verbosity.
-                              It overrides the `--v` flag in kubeadm commands.
-                            format: int32
-                            type: integer
-                        type: object
-                      machineTemplate:
-                        description: |-
-                          machineTemplate contains information about how machines
-                          should be shaped when creating or updating a control plane.
-                        properties:
-                          infrastructureRef:
-                            description: |-
-                              infrastructureRef is a required reference to a custom resource
-                              offered by an infrastructure provider.
-                            properties:
-                              apiVersion:
-                                description: API version of the referent.
-                                type: string
-                              fieldPath:
-                                description: |-
-                                  If referring to a piece of an object instead of an entire object, this string
-                                  should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                                  For example, if the object reference is to a container within a pod, this would take on a value like:
-                                  "spec.containers{name}" (where "name" refers to the name of the container that triggered
-                                  the event) or if no container name is specified "spec.containers[2]" (container with
-                                  index 2 in this pod). This syntax is chosen only to have some well-defined way of
-                                  referencing a part of an object.
-                                type: string
-                              kind:
-                                description: |-
-                                  Kind of the referent.
-                                  More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                                type: string
-                              name:
-                                description: |-
-                                  Name of the referent.
-                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                type: string
-                              namespace:
-                                description: |-
-                                  Namespace of the referent.
-                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-                                type: string
-                              resourceVersion:
-                                description: |-
-                                  Specific resourceVersion to which this reference is made, if any.
-                                  More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
-                                type: string
-                              uid:
-                                description: |-
-                                  UID of the referent.
-                                  More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
-                                type: string
-                            type: object
-                            x-kubernetes-map-type: atomic
-                          metadata:
-                            description: |-
-                              Standard object's metadata.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
-                            properties:
-                              annotations:
-                                additionalProperties:
-                                  type: string
-                                description: |-
-                                  annotations is an unstructured key value map stored with a resource that may be
-                                  set by external tools to store and retrieve arbitrary metadata. They are not
-                                  queryable and should be preserved when modifying objects.
-                                  More info: http://kubernetes.io/docs/user-guide/annotations
-                                type: object
-                              labels:
-                                additionalProperties:
-                                  type: string
-                                description: |-
-                                  Map of string keys and values that can be used to organize and categorize
-                                  (scope and select) objects. May match selectors of replication controllers
-                                  and services.
-                                  More info: http://kubernetes.io/docs/user-guide/labels
-                                type: object
-                            type: object
-                          nodeDrainTimeout:
-                            description: |-
-                              nodeDrainTimeout is the total amount of time that the controller will spend on draining a controlplane node
-                              The default value is 0, meaning that the node can be drained without any time limitations.
-                              NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
-                            type: string
-                        required:
-                        - infrastructureRef
-                        type: object
-                      replicas:
-                        description: |-
-                          Number of desired machines. Defaults to 1. When stacked etcd is used only
-                          odd numbers are permitted, as per [etcd best practice](https://etcd.io/docs/v3.3.12/faq/#why-an-odd-number-of-cluster-members).
-                          This is a pointer to distinguish between explicit zero and not specified.
-                        format: int32
-                        type: integer
-                      rolloutAfter:
-                        description: |-
-                          rolloutAfter is a field to indicate a rollout should be performed
-                          after the specified time even if no changes have been made to the
-                          KubeadmControlPlane.
-                        format: date-time
-                        type: string
-                      rolloutStrategy:
-                        default:
-                          rollingUpdate:
-                            maxSurge: 1
-                          type: RollingUpdate
-                        description: |-
-                          The RolloutStrategy to use to replace control plane machines with
-                          new ones.
-                        properties:
-                          rollingUpdate:
-                            description: |-
-                              Rolling update config params. Present only if
-                              RolloutStrategyType = RollingUpdate.
-                            properties:
-                              maxSurge:
-                                anyOf:
-                                - type: integer
-                                - type: string
-                                description: |-
-                                  The maximum number of control planes that can be scheduled above or under the
-                                  desired number of control planes.
-                                  Value can be an absolute number 1 or 0.
-                                  Defaults to 1.
-                                  Example: when this is set to 1, the control plane can be scaled
-                                  up immediately when the rolling update starts.
-                                x-kubernetes-int-or-string: true
-                            type: object
-                          type:
-                            description: |-
-                              type of rollout. Currently the only supported strategy is
-                              "RollingUpdate".
-                              Default is RollingUpdate.
-                            type: string
-                        type: object
-                      version:
-                        description: version defines the desired Kubernetes version.
-                        type: string
-                    required:
-                    - kubeadmConfigSpec
-                    - machineTemplate
-                    - version
-                    type: object
-                required:
-                - spec
-                type: object
-            required:
-            - template
-            type: object
-        type: object
-    served: false
-    storage: false
-    subresources: {}
-  - additionalPrinterColumns:
-    - description: Time duration since creation of KubeadmControlPlaneTemplate
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    name: v1beta1
-    schema:
-      openAPIV3Schema:
-        description: KubeadmControlPlaneTemplate is the Schema for the kubeadmcontrolplanetemplates
-          API.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: KubeadmControlPlaneTemplateSpec defines the desired state
-              of KubeadmControlPlaneTemplate.
-            properties:
-              template:
-                description: KubeadmControlPlaneTemplateResource describes the data
-                  needed to create a KubeadmControlPlane from a template.
-                properties:
-                  metadata:
-                    description: |-
-                      Standard object's metadata.
-                      More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
-                    properties:
-                      annotations:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          annotations is an unstructured key value map stored with a resource that may be
-                          set by external tools to store and retrieve arbitrary metadata. They are not
-                          queryable and should be preserved when modifying objects.
-                          More info: http://kubernetes.io/docs/user-guide/annotations
-                        type: object
-                      labels:
-                        additionalProperties:
-                          type: string
-                        description: |-
-                          Map of string keys and values that can be used to organize and categorize
-                          (scope and select) objects. May match selectors of replication controllers
-                          and services.
-                          More info: http://kubernetes.io/docs/user-guide/labels
-                        type: object
-                    type: object
-                  spec:
-                    description: |-
-                      KubeadmControlPlaneTemplateResourceSpec defines the desired state of KubeadmControlPlane.
-                      NOTE: KubeadmControlPlaneTemplateResourceSpec is similar to KubeadmControlPlaneSpec but
-                      omits Replicas and Version fields. These fields do not make sense on the KubeadmControlPlaneTemplate,
-                      because they are calculated by the Cluster topology reconciler during reconciliation and thus cannot
-                      be configured on the KubeadmControlPlaneTemplate.
-                    properties:
-                      kubeadmConfigSpec:
-                        description: |-
-                          kubeadmConfigSpec is a KubeadmConfigSpec
-                          to use for initializing and joining machines to the control plane.
-                        properties:
-                          clusterConfiguration:
-                            description: clusterConfiguration along with InitConfiguration
-                              are the configurations necessary for the init command
-                            properties:
-                              apiServer:
-                                description: apiServer contains extra settings for
-                                  the API server control plane component
-                                properties:
-                                  certSANs:
-                                    description: certSANs sets extra Subject Alternative
-                                      Names for the API Server signing cert.
-                                    items:
-                                      type: string
-                                    type: array
-                                  extraArgs:
-                                    additionalProperties:
-                                      type: string
-                                    description: extraArgs is an extra set of flags
-                                      to pass to the control plane component.
-                                    type: object
-                                  extraEnvs:
-                                    description: |-
-                                      extraEnvs is an extra set of environment variables to pass to the control plane component.
-                                      Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default.
-                                      This option takes effect only on Kubernetes >=1.31.0.
-                                    items:
-                                      description: EnvVar represents an environment
-                                        variable present in a Container.
-                                      properties:
-                                        name:
-                                          description: Name of the environment variable.
-                                            Must be a C_IDENTIFIER.
-                                          type: string
-                                        value:
-                                          description: |-
-                                            Variable references $(VAR_NAME) are expanded
-                                            using the previously defined environment variables in the container and
-                                            any service environment variables. If a variable cannot be resolved,
-                                            the reference in the input string will be unchanged. Double $ are reduced
-                                            to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
-                                            "$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
-                                            Escaped references will never be expanded, regardless of whether the variable
-                                            exists or not.
-                                            Defaults to "".
-                                          type: string
-                                        valueFrom:
-                                          description: Source for the environment
-                                            variable's value. Cannot be used if value
-                                            is not empty.
-                                          properties:
-                                            configMapKeyRef:
-                                              description: Selects a key of a ConfigMap.
-                                              properties:
-                                                key:
-                                                  description: The key to select.
-                                                  type: string
-                                                name:
-                                                  default: ""
-                                                  description: |-
-                                                    Name of the referent.
-                                                    This field is effectively required, but due to backwards compatibility is
-                                                    allowed to be empty. Instances of this type with an empty value here are
-                                                    almost certainly wrong.
-                                                    More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                                  type: string
-                                                optional:
-                                                  description: Specify whether the
-                                                    ConfigMap or its key must be defined
-                                                  type: boolean
-                                              required:
-                                              - key
-                                              type: object
-                                              x-kubernetes-map-type: atomic
-                                            fieldRef:
-                                              description: |-
-                                                Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
-                                                spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
-                                              properties:
-                                                apiVersion:
-                                                  description: Version of the schema
-                                                    the FieldPath is written in terms
-                                                    of, defaults to "v1".
-                                                  type: string
-                                                fieldPath:
-                                                  description: Path of the field to
-                                                    select in the specified API version.
-                                                  type: string
-                                              required:
-                                              - fieldPath
-                                              type: object
-                                              x-kubernetes-map-type: atomic
-                                            resourceFieldRef:
-                                              description: |-
-                                                Selects a resource of the container: only resources limits and requests
-                                                (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
-                                              properties:
-                                                containerName:
-                                                  description: 'Container name: required
-                                                    for volumes, optional for env
-                                                    vars'
-                                                  type: string
-                                                divisor:
-                                                  anyOf:
-                                                  - type: integer
-                                                  - type: string
-                                                  description: Specifies the output
-                                                    format of the exposed resources,
-                                                    defaults to "1"
-                                                  pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
-                                                  x-kubernetes-int-or-string: true
-                                                resource:
-                                                  description: 'Required: resource
-                                                    to select'
-                                                  type: string
-                                              required:
-                                              - resource
-                                              type: object
-                                              x-kubernetes-map-type: atomic
-                                            secretKeyRef:
-                                              description: Selects a key of a secret
-                                                in the pod's namespace
-                                              properties:
-                                                key:
-                                                  description: The key of the secret
-                                                    to select from.  Must be a valid
-                                                    secret key.
-                                                  type: string
-                                                name:
-                                                  default: ""
-                                                  description: |-
-                                                    Name of the referent.
-                                                    This field is effectively required, but due to backwards compatibility is
-                                                    allowed to be empty. Instances of this type with an empty value here are
-                                                    almost certainly wrong.
-                                                    More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                                  type: string
-                                                optional:
-                                                  description: Specify whether the
-                                                    Secret or its key must be defined
-                                                  type: boolean
-                                              required:
-                                              - key
-                                              type: object
-                                              x-kubernetes-map-type: atomic
-                                          type: object
-                                      required:
-                                      - name
-                                      type: object
-                                    type: array
-                                  extraVolumes:
-                                    description: extraVolumes is an extra set of host
-                                      volumes, mounted to the control plane component.
-                                    items:
-                                      description: |-
-                                        HostPathMount contains elements describing volumes that are mounted from the
-                                        host.
-                                      properties:
-                                        hostPath:
-                                          description: |-
-                                            hostPath is the path in the host that will be mounted inside
-                                            the pod.
-                                          type: string
-                                        mountPath:
-                                          description: mountPath is the path inside
-                                            the pod where hostPath will be mounted.
-                                          type: string
-                                        name:
-                                          description: name of the volume inside the
-                                            pod template.
-                                          type: string
-                                        pathType:
-                                          description: pathType is the type of the
-                                            HostPath.
-                                          type: string
-                                        readOnly:
-                                          description: readOnly controls write access
-                                            to the volume
-                                          type: boolean
-                                      required:
-                                      - hostPath
-                                      - mountPath
-                                      - name
-                                      type: object
-                                    type: array
-                                  timeoutForControlPlane:
-                                    description: timeoutForControlPlane controls the
-                                      timeout that we use for API server to appear
-                                    type: string
-                                type: object
-                              apiVersion:
-                                description: |-
-                                  APIVersion defines the versioned schema of this representation of an object.
-                                  Servers should convert recognized schemas to the latest internal value, and
-                                  may reject unrecognized values.
-                                  More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-                                type: string
-                              certificatesDir:
-                                description: |-
-                                  certificatesDir specifies where to store or look for all required certificates.
-                                  NB: if not provided, this will default to `/etc/kubernetes/pki`
-                                type: string
-                              clusterName:
-                                description: The cluster name
-                                type: string
-                              controlPlaneEndpoint:
-                                description: |-
-                                  controlPlaneEndpoint sets a stable IP address or DNS name for the control plane; it
-                                  can be a valid IP address or a RFC-1123 DNS subdomain, both with optional TCP port.
-                                  In case the ControlPlaneEndpoint is not specified, the AdvertiseAddress + BindPort
-                                  are used; in case the ControlPlaneEndpoint is specified but without a TCP port,
-                                  the BindPort is used.
-                                  Possible usages are:
-                                  e.g. In a cluster with more than one control plane instances, this field should be
-                                  assigned the address of the external load balancer in front of the
-                                  control plane instances.
-                                  e.g.  in environments with enforced node recycling, the ControlPlaneEndpoint
-                                  could be used for assigning a stable DNS to the control plane.
-                                  NB: This value defaults to the first value in the Cluster object status.apiEndpoints array.
-                                type: string
-                              controllerManager:
-                                description: controllerManager contains extra settings
-                                  for the controller manager control plane component
-                                properties:
-                                  extraArgs:
-                                    additionalProperties:
-                                      type: string
-                                    description: extraArgs is an extra set of flags
-                                      to pass to the control plane component.
-                                    type: object
-                                  extraEnvs:
-                                    description: |-
-                                      extraEnvs is an extra set of environment variables to pass to the control plane component.
-                                      Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default.
-                                      This option takes effect only on Kubernetes >=1.31.0.
-                                    items:
-                                      description: EnvVar represents an environment
-                                        variable present in a Container.
-                                      properties:
-                                        name:
-                                          description: Name of the environment variable.
-                                            Must be a C_IDENTIFIER.
-                                          type: string
-                                        value:
-                                          description: |-
-                                            Variable references $(VAR_NAME) are expanded
-                                            using the previously defined environment variables in the container and
-                                            any service environment variables. If a variable cannot be resolved,
-                                            the reference in the input string will be unchanged. Double $ are reduced
-                                            to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
-                                            "$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
-                                            Escaped references will never be expanded, regardless of whether the variable
-                                            exists or not.
-                                            Defaults to "".
-                                          type: string
-                                        valueFrom:
-                                          description: Source for the environment
-                                            variable's value. Cannot be used if value
-                                            is not empty.
-                                          properties:
-                                            configMapKeyRef:
-                                              description: Selects a key of a ConfigMap.
-                                              properties:
-                                                key:
-                                                  description: The key to select.
-                                                  type: string
-                                                name:
-                                                  default: ""
-                                                  description: |-
-                                                    Name of the referent.
-                                                    This field is effectively required, but due to backwards compatibility is
-                                                    allowed to be empty. Instances of this type with an empty value here are
-                                                    almost certainly wrong.
-                                                    More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                                  type: string
-                                                optional:
-                                                  description: Specify whether the
-                                                    ConfigMap or its key must be defined
-                                                  type: boolean
-                                              required:
-                                              - key
-                                              type: object
-                                              x-kubernetes-map-type: atomic
-                                            fieldRef:
-                                              description: |-
-                                                Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
-                                                spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
-                                              properties:
-                                                apiVersion:
-                                                  description: Version of the schema
-                                                    the FieldPath is written in terms
-                                                    of, defaults to "v1".
-                                                  type: string
-                                                fieldPath:
-                                                  description: Path of the field to
-                                                    select in the specified API version.
-                                                  type: string
-                                              required:
-                                              - fieldPath
-                                              type: object
-                                              x-kubernetes-map-type: atomic
-                                            resourceFieldRef:
-                                              description: |-
-                                                Selects a resource of the container: only resources limits and requests
-                                                (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
-                                              properties:
-                                                containerName:
-                                                  description: 'Container name: required
-                                                    for volumes, optional for env
-                                                    vars'
-                                                  type: string
-                                                divisor:
-                                                  anyOf:
-                                                  - type: integer
-                                                  - type: string
-                                                  description: Specifies the output
-                                                    format of the exposed resources,
-                                                    defaults to "1"
-                                                  pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
-                                                  x-kubernetes-int-or-string: true
-                                                resource:
-                                                  description: 'Required: resource
-                                                    to select'
-                                                  type: string
-                                              required:
-                                              - resource
-                                              type: object
-                                              x-kubernetes-map-type: atomic
-                                            secretKeyRef:
-                                              description: Selects a key of a secret
-                                                in the pod's namespace
-                                              properties:
-                                                key:
-                                                  description: The key of the secret
-                                                    to select from.  Must be a valid
-                                                    secret key.
-                                                  type: string
-                                                name:
-                                                  default: ""
-                                                  description: |-
-                                                    Name of the referent.
-                                                    This field is effectively required, but due to backwards compatibility is
-                                                    allowed to be empty. Instances of this type with an empty value here are
-                                                    almost certainly wrong.
-                                                    More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                                  type: string
-                                                optional:
-                                                  description: Specify whether the
-                                                    Secret or its key must be defined
-                                                  type: boolean
-                                              required:
-                                              - key
-                                              type: object
-                                              x-kubernetes-map-type: atomic
-                                          type: object
-                                      required:
-                                      - name
-                                      type: object
-                                    type: array
-                                  extraVolumes:
-                                    description: extraVolumes is an extra set of host
-                                      volumes, mounted to the control plane component.
-                                    items:
-                                      description: |-
-                                        HostPathMount contains elements describing volumes that are mounted from the
-                                        host.
-                                      properties:
-                                        hostPath:
-                                          description: |-
-                                            hostPath is the path in the host that will be mounted inside
-                                            the pod.
-                                          type: string
-                                        mountPath:
-                                          description: mountPath is the path inside
-                                            the pod where hostPath will be mounted.
-                                          type: string
-                                        name:
-                                          description: name of the volume inside the
-                                            pod template.
-                                          type: string
-                                        pathType:
-                                          description: pathType is the type of the
-                                            HostPath.
-                                          type: string
-                                        readOnly:
-                                          description: readOnly controls write access
-                                            to the volume
-                                          type: boolean
-                                      required:
-                                      - hostPath
-                                      - mountPath
-                                      - name
-                                      type: object
-                                    type: array
-                                type: object
-                              dns:
-                                description: dns defines the options for the DNS add-on
-                                  installed in the cluster.
-                                properties:
-                                  imageRepository:
-                                    description: |-
-                                      imageRepository sets the container registry to pull images from.
-                                      if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
-                                    type: string
-                                  imageTag:
-                                    description: |-
-                                      imageTag allows to specify a tag for the image.
-                                      In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
-                                    type: string
-                                type: object
-                              etcd:
-                                description: |-
-                                  etcd holds configuration for etcd.
-                                  NB: This value defaults to a Local (stacked) etcd
-                                properties:
-                                  external:
-                                    description: |-
-                                      external describes how to connect to an external etcd cluster
-                                      Local and External are mutually exclusive
-                                    properties:
-                                      caFile:
-                                        description: |-
-                                          caFile is an SSL Certificate Authority file used to secure etcd communication.
-                                          Required if using a TLS connection.
-                                        type: string
-                                      certFile:
-                                        description: |-
-                                          certFile is an SSL certification file used to secure etcd communication.
-                                          Required if using a TLS connection.
-                                        type: string
-                                      endpoints:
-                                        description: endpoints of etcd members. Required
-                                          for ExternalEtcd.
-                                        items:
-                                          type: string
-                                        type: array
-                                      keyFile:
-                                        description: |-
-                                          keyFile is an SSL key file used to secure etcd communication.
-                                          Required if using a TLS connection.
-                                        type: string
-                                    required:
-                                    - caFile
-                                    - certFile
-                                    - endpoints
-                                    - keyFile
-                                    type: object
-                                  local:
-                                    description: |-
-                                      local provides configuration knobs for configuring the local etcd instance
-                                      Local and External are mutually exclusive
-                                    properties:
-                                      dataDir:
-                                        description: |-
-                                          dataDir is the directory etcd will place its data.
-                                          Defaults to "/var/lib/etcd".
-                                        type: string
-                                      extraArgs:
-                                        additionalProperties:
-                                          type: string
-                                        description: |-
-                                          extraArgs are extra arguments provided to the etcd binary
-                                          when run inside a static pod.
-                                        type: object
-                                      extraEnvs:
-                                        description: |-
-                                          extraEnvs is an extra set of environment variables to pass to the control plane component.
-                                          Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default.
-                                          This option takes effect only on Kubernetes >=1.31.0.
-                                        items:
-                                          description: EnvVar represents an environment
-                                            variable present in a Container.
-                                          properties:
-                                            name:
-                                              description: Name of the environment
-                                                variable. Must be a C_IDENTIFIER.
-                                              type: string
-                                            value:
-                                              description: |-
-                                                Variable references $(VAR_NAME) are expanded
-                                                using the previously defined environment variables in the container and
-                                                any service environment variables. If a variable cannot be resolved,
-                                                the reference in the input string will be unchanged. Double $ are reduced
-                                                to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
-                                                "$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
-                                                Escaped references will never be expanded, regardless of whether the variable
-                                                exists or not.
-                                                Defaults to "".
-                                              type: string
-                                            valueFrom:
-                                              description: Source for the environment
-                                                variable's value. Cannot be used if
-                                                value is not empty.
-                                              properties:
-                                                configMapKeyRef:
-                                                  description: Selects a key of a
-                                                    ConfigMap.
-                                                  properties:
-                                                    key:
-                                                      description: The key to select.
-                                                      type: string
-                                                    name:
-                                                      default: ""
-                                                      description: |-
-                                                        Name of the referent.
-                                                        This field is effectively required, but due to backwards compatibility is
-                                                        allowed to be empty. Instances of this type with an empty value here are
-                                                        almost certainly wrong.
-                                                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                                      type: string
-                                                    optional:
-                                                      description: Specify whether
-                                                        the ConfigMap or its key must
-                                                        be defined
-                                                      type: boolean
-                                                  required:
-                                                  - key
-                                                  type: object
-                                                  x-kubernetes-map-type: atomic
-                                                fieldRef:
-                                                  description: |-
-                                                    Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
-                                                    spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
-                                                  properties:
-                                                    apiVersion:
-                                                      description: Version of the
-                                                        schema the FieldPath is written
-                                                        in terms of, defaults to "v1".
-                                                      type: string
-                                                    fieldPath:
-                                                      description: Path of the field
-                                                        to select in the specified
-                                                        API version.
-                                                      type: string
-                                                  required:
-                                                  - fieldPath
-                                                  type: object
-                                                  x-kubernetes-map-type: atomic
-                                                resourceFieldRef:
-                                                  description: |-
-                                                    Selects a resource of the container: only resources limits and requests
-                                                    (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
-                                                  properties:
-                                                    containerName:
-                                                      description: 'Container name:
-                                                        required for volumes, optional
-                                                        for env vars'
-                                                      type: string
-                                                    divisor:
-                                                      anyOf:
-                                                      - type: integer
-                                                      - type: string
-                                                      description: Specifies the output
-                                                        format of the exposed resources,
-                                                        defaults to "1"
-                                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
-                                                      x-kubernetes-int-or-string: true
-                                                    resource:
-                                                      description: 'Required: resource
-                                                        to select'
-                                                      type: string
-                                                  required:
-                                                  - resource
-                                                  type: object
-                                                  x-kubernetes-map-type: atomic
-                                                secretKeyRef:
-                                                  description: Selects a key of a
-                                                    secret in the pod's namespace
-                                                  properties:
-                                                    key:
-                                                      description: The key of the
-                                                        secret to select from.  Must
-                                                        be a valid secret key.
-                                                      type: string
-                                                    name:
-                                                      default: ""
-                                                      description: |-
-                                                        Name of the referent.
-                                                        This field is effectively required, but due to backwards compatibility is
-                                                        allowed to be empty. Instances of this type with an empty value here are
-                                                        almost certainly wrong.
-                                                        More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                                      type: string
-                                                    optional:
-                                                      description: Specify whether
-                                                        the Secret or its key must
-                                                        be defined
-                                                      type: boolean
-                                                  required:
-                                                  - key
-                                                  type: object
-                                                  x-kubernetes-map-type: atomic
-                                              type: object
-                                          required:
-                                          - name
-                                          type: object
-                                        type: array
-                                      imageRepository:
-                                        description: |-
-                                          imageRepository sets the container registry to pull images from.
-                                          if not set, the ImageRepository defined in ClusterConfiguration will be used instead.
-                                        type: string
-                                      imageTag:
-                                        description: |-
-                                          imageTag allows to specify a tag for the image.
-                                          In case this value is set, kubeadm does not change automatically the version of the above components during upgrades.
-                                        type: string
-                                      peerCertSANs:
-                                        description: peerCertSANs sets extra Subject
-                                          Alternative Names for the etcd peer signing
-                                          cert.
-                                        items:
-                                          type: string
-                                        type: array
-                                      serverCertSANs:
-                                        description: serverCertSANs sets extra Subject
-                                          Alternative Names for the etcd server signing
-                                          cert.
-                                        items:
-                                          type: string
-                                        type: array
-                                    type: object
-                                type: object
-                              featureGates:
-                                additionalProperties:
-                                  type: boolean
-                                description: featureGates enabled by the user.
-                                type: object
-                              imageRepository:
-                                description: |-
-                                  imageRepository sets the container registry to pull images from.
-                                  * If not set, the default registry of kubeadm will be used, i.e.
-                                    * registry.k8s.io (new registry): >= v1.22.17, >= v1.23.15, >= v1.24.9, >= v1.25.0
-                                    * k8s.gcr.io (old registry): all older versions
-                                    Please note that when imageRepository is not set we don't allow upgrades to
-                                    versions >= v1.22.0 which use the old registry (k8s.gcr.io). Please use
-                                    a newer patch version with the new registry instead (i.e. >= v1.22.17,
-                                    >= v1.23.15, >= v1.24.9, >= v1.25.0).
-                                  * If the version is a CI build (kubernetes version starts with `ci/` or `ci-cross/`)
-                                   `gcr.io/k8s-staging-ci-images` will be used as a default for control plane components
-                                    and for kube-proxy, while `registry.k8s.io` will be used for all the other images.
-                                type: string
-                              kind:
-                                description: |-
-                                  Kind is a string value representing the REST resource this object represents.
-                                  Servers may infer this from the endpoint the client submits requests to.
-                                  Cannot be updated.
-                                  In CamelCase.
-                                  More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                                type: string
-                              kubernetesVersion:
-                                description: |-
-                                  kubernetesVersion is the target version of the control plane.
-                                  NB: This value defaults to the Machine object spec.version
-                                type: string
-                              networking:
-                                description: |-
-                                  networking holds configuration for the networking topology of the cluster.
-                                  NB: This value defaults to the Cluster object spec.clusterNetwork.
-                                properties:
-                                  dnsDomain:
-                                    description: dnsDomain is the dns domain used
-                                      by k8s services. Defaults to "cluster.local".
-                                    type: string
-                                  podSubnet:
-                                    description: |-
-                                      podSubnet is the subnet used by pods.
-                                      If unset, the API server will not allocate CIDR ranges for every node.
-                                      Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.services.cidrBlocks if that is set
-                                    type: string
-                                  serviceSubnet:
-                                    description: |-
-                                      serviceSubnet is the subnet used by k8s services.
-                                      Defaults to a comma-delimited string of the Cluster object's spec.clusterNetwork.pods.cidrBlocks, or
-                                      to "10.96.0.0/12" if that's unset.
-                                    type: string
-                                type: object
-                              scheduler:
-                                description: scheduler contains extra settings for
-                                  the scheduler control plane component
-                                properties:
-                                  extraArgs:
-                                    additionalProperties:
-                                      type: string
-                                    description: extraArgs is an extra set of flags
-                                      to pass to the control plane component.
-                                    type: object
-                                  extraEnvs:
-                                    description: |-
-                                      extraEnvs is an extra set of environment variables to pass to the control plane component.
-                                      Environment variables passed using ExtraEnvs will override any existing environment variables, or *_proxy environment variables that kubeadm adds by default.
-                                      This option takes effect only on Kubernetes >=1.31.0.
-                                    items:
-                                      description: EnvVar represents an environment
-                                        variable present in a Container.
-                                      properties:
-                                        name:
-                                          description: Name of the environment variable.
-                                            Must be a C_IDENTIFIER.
-                                          type: string
-                                        value:
-                                          description: |-
-                                            Variable references $(VAR_NAME) are expanded
-                                            using the previously defined environment variables in the container and
-                                            any service environment variables. If a variable cannot be resolved,
-                                            the reference in the input string will be unchanged. Double $ are reduced
-                                            to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
-                                            "$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
-                                            Escaped references will never be expanded, regardless of whether the variable
-                                            exists or not.
-                                            Defaults to "".
-                                          type: string
-                                        valueFrom:
-                                          description: Source for the environment
-                                            variable's value. Cannot be used if value
-                                            is not empty.
-                                          properties:
-                                            configMapKeyRef:
-                                              description: Selects a key of a ConfigMap.
-                                              properties:
-                                                key:
-                                                  description: The key to select.
-                                                  type: string
-                                                name:
-                                                  default: ""
-                                                  description: |-
-                                                    Name of the referent.
-                                                    This field is effectively required, but due to backwards compatibility is
-                                                    allowed to be empty. Instances of this type with an empty value here are
-                                                    almost certainly wrong.
-                                                    More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                                  type: string
-                                                optional:
-                                                  description: Specify whether the
-                                                    ConfigMap or its key must be defined
-                                                  type: boolean
-                                              required:
-                                              - key
-                                              type: object
-                                              x-kubernetes-map-type: atomic
-                                            fieldRef:
-                                              description: |-
-                                                Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
-                                                spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
-                                              properties:
-                                                apiVersion:
-                                                  description: Version of the schema
-                                                    the FieldPath is written in terms
-                                                    of, defaults to "v1".
-                                                  type: string
-                                                fieldPath:
-                                                  description: Path of the field to
-                                                    select in the specified API version.
-                                                  type: string
-                                              required:
-                                              - fieldPath
-                                              type: object
-                                              x-kubernetes-map-type: atomic
-                                            resourceFieldRef:
-                                              description: |-
-                                                Selects a resource of the container: only resources limits and requests
-                                                (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
-                                              properties:
-                                                containerName:
-                                                  description: 'Container name: required
-                                                    for volumes, optional for env
-                                                    vars'
-                                                  type: string
-                                                divisor:
-                                                  anyOf:
-                                                  - type: integer
-                                                  - type: string
-                                                  description: Specifies the output
-                                                    format of the exposed resources,
-                                                    defaults to "1"
-                                                  pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
-                                                  x-kubernetes-int-or-string: true
-                                                resource:
-                                                  description: 'Required: resource
-                                                    to select'
-                                                  type: string
-                                              required:
-                                              - resource
-                                              type: object
-                                              x-kubernetes-map-type: atomic
-                                            secretKeyRef:
-                                              description: Selects a key of a secret
-                                                in the pod's namespace
-                                              properties:
-                                                key:
-                                                  description: The key of the secret
-                                                    to select from.  Must be a valid
-                                                    secret key.
-                                                  type: string
-                                                name:
-                                                  default: ""
-                                                  description: |-
-                                                    Name of the referent.
-                                                    This field is effectively required, but due to backwards compatibility is
-                                                    allowed to be empty. Instances of this type with an empty value here are
-                                                    almost certainly wrong.
-                                                    More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                                                  type: string
-                                                optional:
-                                                  description: Specify whether the
-                                                    Secret or its key must be defined
-                                                  type: boolean
-                                              required:
-                                              - key
-                                              type: object
-                                              x-kubernetes-map-type: atomic
-                                          type: object
-                                      required:
-                                      - name
-                                      type: object
-                                    type: array
-                                  extraVolumes:
-                                    description: extraVolumes is an extra set of host
-                                      volumes, mounted to the control plane component.
-                                    items:
-                                      description: |-
-                                        HostPathMount contains elements describing volumes that are mounted from the
-                                        host.
-                                      properties:
-                                        hostPath:
-                                          description: |-
-                                            hostPath is the path in the host that will be mounted inside
-                                            the pod.
-                                          type: string
-                                        mountPath:
-                                          description: mountPath is the path inside
-                                            the pod where hostPath will be mounted.
-                                          type: string
-                                        name:
-                                          description: name of the volume inside the
-                                            pod template.
-                                          type: string
-                                        pathType:
-                                          description: pathType is the type of the
-                                            HostPath.
-                                          type: string
-                                        readOnly:
-                                          description: readOnly controls write access
-                                            to the volume
-                                          type: boolean
-                                      required:
-                                      - hostPath
-                                      - mountPath
-                                      - name
-                                      type: object
-                                    type: array
-                                type: object
-                            type: object
-                          diskSetup:
-                            description: diskSetup specifies options for the creation
-                              of partition tables and file systems on devices.
-                            properties:
-                              filesystems:
-                                description: filesystems specifies the list of file
-                                  systems to setup.
-                                items:
-                                  description: Filesystem defines the file systems
-                                    to be created.
-                                  properties:
-                                    device:
-                                      description: device specifies the device name
-                                      type: string
-                                    extraOpts:
-                                      description: extraOpts defined extra options
-                                        to add to the command for creating the file
-                                        system.
-                                      items:
-                                        type: string
-                                      type: array
-                                    filesystem:
-                                      description: filesystem specifies the file system
-                                        type.
-                                      type: string
-                                    label:
-                                      description: label specifies the file system
-                                        label to be used. If set to None, no label
-                                        is used.
-                                      type: string
-                                    overwrite:
-                                      description: |-
-                                        overwrite defines whether or not to overwrite any existing filesystem.
-                                        If true, any pre-existing file system will be destroyed. Use with Caution.
-                                      type: boolean
-                                    partition:
-                                      description: 'partition specifies the partition
-                                        to use. The valid options are: "auto|any",
-                                        "auto", "any", "none", and <NUM>, where NUM
-                                        is the actual partition number.'
-                                      type: string
-                                    replaceFS:
-                                      description: |-
-                                        replaceFS is a special directive, used for Microsoft Azure that instructs cloud-init to replace a file system of <FS_TYPE>.
-                                        NOTE: unless you define a label, this requires the use of the 'any' partition directive.
-                                      type: string
-                                  required:
-                                  - device
-                                  - filesystem
-                                  - label
-                                  type: object
-                                type: array
-                              partitions:
-                                description: partitions specifies the list of the
-                                  partitions to setup.
-                                items:
-                                  description: Partition defines how to create and
-                                    layout a partition.
-                                  properties:
-                                    device:
-                                      description: device is the name of the device.
-                                      type: string
-                                    layout:
-                                      description: |-
-                                        layout specifies the device layout.
-                                        If it is true, a single partition will be created for the entire device.
-                                        When layout is false, it means don't partition or ignore existing partitioning.
-                                      type: boolean
-                                    overwrite:
-                                      description: |-
-                                        overwrite describes whether to skip checks and create the partition if a partition or filesystem is found on the device.
-                                        Use with caution. Default is 'false'.
-                                      type: boolean
-                                    tableType:
-                                      description: |-
-                                        tableType specifies the tupe of partition table. The following are supported:
-                                        'mbr': default and setups a MS-DOS partition table
-                                        'gpt': setups a GPT partition table
-                                      type: string
-                                  required:
-                                  - device
-                                  - layout
-                                  type: object
-                                type: array
-                            type: object
-                          files:
-                            description: files specifies extra files to be passed
-                              to user_data upon creation.
-                            items:
-                              description: File defines the input for generating write_files
-                                in cloud-init.
-                              properties:
-                                append:
-                                  description: append specifies whether to append
-                                    Content to existing file if Path exists.
-                                  type: boolean
-                                content:
-                                  description: content is the actual content of the
-                                    file.
-                                  type: string
-                                contentFrom:
-                                  description: contentFrom is a referenced source
-                                    of content to populate the file.
-                                  properties:
-                                    secret:
-                                      description: secret represents a secret that
-                                        should populate this file.
-                                      properties:
-                                        key:
-                                          description: key is the key in the secret's
-                                            data map for this value.
-                                          type: string
-                                        name:
-                                          description: name of the secret in the KubeadmBootstrapConfig's
-                                            namespace to use.
-                                          type: string
-                                      required:
-                                      - key
-                                      - name
-                                      type: object
-                                  required:
-                                  - secret
-                                  type: object
-                                encoding:
-                                  description: encoding specifies the encoding of
-                                    the file contents.
-                                  enum:
-                                  - base64
-                                  - gzip
-                                  - gzip+base64
-                                  type: string
-                                owner:
-                                  description: owner specifies the ownership of the
-                                    file, e.g. "root:root".
-                                  type: string
-                                path:
-                                  description: path specifies the full path on disk
-                                    where to store the file.
-                                  type: string
-                                permissions:
-                                  description: permissions specifies the permissions
-                                    to assign to the file, e.g. "0640".
-                                  type: string
-                              required:
-                              - path
-                              type: object
-                            type: array
-                          format:
-                            description: format specifies the output format of the
-                              bootstrap data
-                            enum:
-                            - cloud-config
-                            - ignition
-                            type: string
-                          ignition:
-                            description: ignition contains Ignition specific configuration.
-                            properties:
-                              containerLinuxConfig:
-                                description: containerLinuxConfig contains CLC specific
-                                  configuration.
-                                properties:
-                                  additionalConfig:
-                                    description: |-
-                                      additionalConfig contains additional configuration to be merged with the Ignition
-                                      configuration generated by the bootstrapper controller. More info: https://coreos.github.io/ignition/operator-notes/#config-merging
-
-                                      The data format is documented here: https://kinvolk.io/docs/flatcar-container-linux/latest/provisioning/cl-config/
-                                    type: string
-                                  strict:
-                                    description: strict controls if AdditionalConfig
-                                      should be strictly parsed. If so, warnings are
-                                      treated as errors.
-                                    type: boolean
-                                type: object
-                            type: object
-                          initConfiguration:
-                            description: initConfiguration along with ClusterConfiguration
-                              are the configurations necessary for the init command
-                            properties:
-                              apiVersion:
-                                description: |-
-                                  APIVersion defines the versioned schema of this representation of an object.
-                                  Servers should convert recognized schemas to the latest internal value, and
-                                  may reject unrecognized values.
-                                  More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-                                type: string
-                              bootstrapTokens:
-                                description: |-
-                                  bootstrapTokens is respected at `kubeadm init` time and describes a set of Bootstrap Tokens to create.
-                                  This information IS NOT uploaded to the kubeadm cluster configmap, partly because of its sensitive nature
-                                items:
-                                  description: BootstrapToken describes one bootstrap
-                                    token, stored as a Secret in the cluster.
-                                  properties:
-                                    description:
-                                      description: |-
-                                        description sets a human-friendly message why this token exists and what it's used
-                                        for, so other administrators can know its purpose.
-                                      type: string
-                                    expires:
-                                      description: |-
-                                        expires specifies the timestamp when this token expires. Defaults to being set
-                                        dynamically at runtime based on the TTL. Expires and TTL are mutually exclusive.
-                                      format: date-time
-                                      type: string
-                                    groups:
-                                      description: |-
-                                        groups specifies the extra groups that this token will authenticate as when/if
-                                        used for authentication
-                                      items:
-                                        type: string
-                                      type: array
-                                    token:
-                                      description: |-
-                                        token is used for establishing bidirectional trust between nodes and control-planes.
-                                        Used for joining nodes in the cluster.
-                                      type: string
-                                    ttl:
-                                      description: |-
-                                        ttl defines the time to live for this token. Defaults to 24h.
-                                        Expires and TTL are mutually exclusive.
-                                      type: string
-                                    usages:
-                                      description: |-
-                                        usages describes the ways in which this token can be used. Can by default be used
-                                        for establishing bidirectional trust, but that can be changed here.
-                                      items:
-                                        type: string
-                                      type: array
-                                  required:
-                                  - token
-                                  type: object
-                                type: array
-                              kind:
-                                description: |-
-                                  Kind is a string value representing the REST resource this object represents.
-                                  Servers may infer this from the endpoint the client submits requests to.
-                                  Cannot be updated.
-                                  In CamelCase.
-                                  More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                                type: string
-                              localAPIEndpoint:
-                                description: |-
-                                  localAPIEndpoint represents the endpoint of the API server instance that's deployed on this control plane node
-                                  In HA setups, this differs from ClusterConfiguration.ControlPlaneEndpoint in the sense that ControlPlaneEndpoint
-                                  is the global endpoint for the cluster, which then loadbalances the requests to each individual API server. This
-                                  configuration object lets you customize what IP/DNS name and port the local API server advertises it's accessible
-                                  on. By default, kubeadm tries to auto-detect the IP of the default interface and use that, but in case that process
-                                  fails you may set the desired value here.
-                                properties:
-                                  advertiseAddress:
-                                    description: advertiseAddress sets the IP address
-                                      for the API server to advertise.
-                                    type: string
-                                  bindPort:
-                                    description: |-
-                                      bindPort sets the secure port for the API Server to bind to.
-                                      Defaults to 6443.
-                                    format: int32
-                                    type: integer
-                                type: object
-                              nodeRegistration:
-                                description: |-
-                                  nodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
-                                  When used in the context of control plane nodes, NodeRegistration should remain consistent
-                                  across both InitConfiguration and JoinConfiguration
-                                properties:
-                                  criSocket:
-                                    description: criSocket is used to retrieve container
-                                      runtime info. This information will be annotated
-                                      to the Node API object, for later re-use
-                                    type: string
-                                  ignorePreflightErrors:
-                                    description: ignorePreflightErrors provides a
-                                      slice of pre-flight errors to be ignored when
-                                      the current node is registered.
-                                    items:
-                                      type: string
-                                    type: array
-                                  imagePullPolicy:
-                                    description: |-
-                                      imagePullPolicy specifies the policy for image pulling
-                                      during kubeadm "init" and "join" operations. The value of
-                                      this field must be one of "Always", "IfNotPresent" or
-                                      "Never". Defaults to "IfNotPresent". This can be used only
-                                      with Kubernetes version equal to 1.22 and later.
-                                    enum:
-                                    - Always
-                                    - IfNotPresent
-                                    - Never
-                                    type: string
-                                  imagePullSerial:
-                                    description: |-
-                                      imagePullSerial specifies if image pulling performed by kubeadm must be done serially or in parallel.
-                                      This option takes effect only on Kubernetes >=1.31.0.
-                                      Default: true (defaulted in kubeadm)
-                                    type: boolean
-                                  kubeletExtraArgs:
-                                    additionalProperties:
-                                      type: string
-                                    description: |-
-                                      kubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
-                                      kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
-                                      Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
-                                    type: object
-                                  name:
-                                    description: |-
-                                      name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
-                                      This field is also used in the CommonName field of the kubelet's client certificate to the API server.
-                                      Defaults to the hostname of the node if not provided.
-                                    type: string
-                                  taints:
-                                    description: |-
-                                      taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
-                                      it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
-                                      empty slice, i.e. `taints: []` in the YAML file. This field is solely used for Node registration.
-                                    items:
-                                      description: |-
-                                        The node this Taint is attached to has the "effect" on
-                                        any pod that does not tolerate the Taint.
-                                      properties:
-                                        effect:
-                                          description: |-
-                                            Required. The effect of the taint on pods
-                                            that do not tolerate the taint.
-                                            Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
-                                          type: string
-                                        key:
-                                          description: Required. The taint key to
-                                            be applied to a node.
-                                          type: string
-                                        timeAdded:
-                                          description: |-
-                                            TimeAdded represents the time at which the taint was added.
-                                            It is only written for NoExecute taints.
-                                          format: date-time
-                                          type: string
-                                        value:
-                                          description: The taint value corresponding
-                                            to the taint key.
-                                          type: string
-                                      required:
-                                      - effect
-                                      - key
-                                      type: object
-                                    type: array
-                                type: object
-                              patches:
-                                description: |-
-                                  patches contains options related to applying patches to components deployed by kubeadm during
-                                  "kubeadm init". The minimum kubernetes version needed to support Patches is v1.22
-                                properties:
-                                  directory:
-                                    description: |-
-                                      directory is a path to a directory that contains files named "target[suffix][+patchtype].extension".
-                                      For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "target" can be one of
-                                      "kube-apiserver", "kube-controller-manager", "kube-scheduler", "etcd". "patchtype" can be one
-                                      of "strategic" "merge" or "json" and they match the patch formats supported by kubectl.
-                                      The default "patchtype" is "strategic". "extension" must be either "json" or "yaml".
-                                      "suffix" is an optional string that can be used to determine which patches are applied
-                                      first alpha-numerically.
-                                      These files can be written into the target directory via KubeadmConfig.Files which
-                                      specifies additional files to be created on the machine, either with content inline or
-                                      by referencing a secret.
-                                    type: string
-                                type: object
-                              skipPhases:
-                                description: |-
-                                  skipPhases is a list of phases to skip during command execution.
-                                  The list of phases can be obtained with the "kubeadm init --help" command.
-                                  This option takes effect only on Kubernetes >=1.22.0.
-                                items:
-                                  type: string
-                                type: array
-                            type: object
-                          joinConfiguration:
-                            description: joinConfiguration is the kubeadm configuration
-                              for the join command
-                            properties:
-                              apiVersion:
-                                description: |-
-                                  APIVersion defines the versioned schema of this representation of an object.
-                                  Servers should convert recognized schemas to the latest internal value, and
-                                  may reject unrecognized values.
-                                  More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-                                type: string
-                              caCertPath:
-                                description: |-
-                                  caCertPath is the path to the SSL certificate authority used to
-                                  secure comunications between node and control-plane.
-                                  Defaults to "/etc/kubernetes/pki/ca.crt".
-                                type: string
-                              controlPlane:
-                                description: |-
-                                  controlPlane defines the additional control plane instance to be deployed on the joining node.
-                                  If nil, no additional control plane instance will be deployed.
-                                properties:
-                                  localAPIEndpoint:
-                                    description: localAPIEndpoint represents the endpoint
-                                      of the API server instance to be deployed on
-                                      this node.
-                                    properties:
-                                      advertiseAddress:
-                                        description: advertiseAddress sets the IP
-                                          address for the API server to advertise.
-                                        type: string
-                                      bindPort:
-                                        description: |-
-                                          bindPort sets the secure port for the API Server to bind to.
-                                          Defaults to 6443.
-                                        format: int32
-                                        type: integer
-                                    type: object
-                                type: object
-                              discovery:
-                                description: discovery specifies the options for the
-                                  kubelet to use during the TLS Bootstrap process
-                                properties:
-                                  bootstrapToken:
-                                    description: |-
-                                      bootstrapToken is used to set the options for bootstrap token based discovery
-                                      BootstrapToken and File are mutually exclusive
-                                    properties:
-                                      apiServerEndpoint:
-                                        description: apiServerEndpoint is an IP or
-                                          domain name to the API server from which
-                                          info will be fetched.
-                                        type: string
-                                      caCertHashes:
-                                        description: |-
-                                          caCertHashes specifies a set of public key pins to verify
-                                          when token-based discovery is used. The root CA found during discovery
-                                          must match one of these values. Specifying an empty set disables root CA
-                                          pinning, which can be unsafe. Each hash is specified as "<type>:<value>",
-                                          where the only currently supported type is "sha256". This is a hex-encoded
-                                          SHA-256 hash of the Subject Public Key Info (SPKI) object in DER-encoded
-                                          ASN.1. These hashes can be calculated using, for example, OpenSSL:
-                                          openssl x509 -pubkey -in ca.crt openssl rsa -pubin -outform der 2>&/dev/null | openssl dgst -sha256 -hex
-                                        items:
-                                          type: string
-                                        type: array
-                                      token:
-                                        description: |-
-                                          token is a token used to validate cluster information
-                                          fetched from the control-plane.
-                                        type: string
-                                      unsafeSkipCAVerification:
-                                        description: |-
-                                          unsafeSkipCAVerification allows token-based discovery
-                                          without CA verification via CACertHashes. This can weaken
-                                          the security of kubeadm since other nodes can impersonate the control-plane.
-                                        type: boolean
-                                    required:
-                                    - token
-                                    type: object
-                                  file:
-                                    description: |-
-                                      file is used to specify a file or URL to a kubeconfig file from which to load cluster information
-                                      BootstrapToken and File are mutually exclusive
-                                    properties:
-                                      kubeConfig:
-                                        description: |-
-                                          kubeConfig is used (optionally) to generate a KubeConfig based on the KubeadmConfig's information.
-                                          The file is generated at the path specified in KubeConfigPath.
-
-                                          Host address (server field) information is automatically populated based on the Cluster's ControlPlaneEndpoint.
-                                          Certificate Authority (certificate-authority-data field) is gathered from the cluster's CA secret.
-                                        properties:
-                                          cluster:
-                                            description: |-
-                                              cluster contains information about how to communicate with the kubernetes cluster.
-
-                                              By default the following fields are automatically populated:
-                                              - Server with the Cluster's ControlPlaneEndpoint.
-                                              - CertificateAuthorityData with the Cluster's CA certificate.
-                                            properties:
-                                              certificateAuthorityData:
-                                                description: |-
-                                                  certificateAuthorityData contains PEM-encoded certificate authority certificates.
-
-                                                  Defaults to the Cluster's CA certificate if empty.
-                                                format: byte
-                                                type: string
-                                              insecureSkipTLSVerify:
-                                                description: insecureSkipTLSVerify
-                                                  skips the validity check for the
-                                                  server's certificate. This will
-                                                  make your HTTPS connections insecure.
-                                                type: boolean
-                                              proxyURL:
-                                                description: |-
-                                                  proxyURL is the URL to the proxy to be used for all requests made by this
-                                                  client. URLs with "http", "https", and "socks5" schemes are supported.  If
-                                                  this configuration is not provided or the empty string, the client
-                                                  attempts to construct a proxy configuration from http_proxy and
-                                                  https_proxy environment variables. If these environment variables are not
-                                                  set, the client does not attempt to proxy requests.
-
-                                                  socks5 proxying does not currently support spdy streaming endpoints (exec,
-                                                  attach, port forward).
-                                                type: string
-                                              server:
-                                                description: |-
-                                                  server is the address of the kubernetes cluster (https://hostname:port).
-
-                                                  Defaults to https:// + Cluster.Spec.ControlPlaneEndpoint.
-                                                type: string
-                                              tlsServerName:
-                                                description: tlsServerName is used
-                                                  to check server certificate. If
-                                                  TLSServerName is empty, the hostname
-                                                  used to contact the server is used.
-                                                type: string
-                                            type: object
-                                          user:
-                                            description: |-
-                                              user contains information that describes identity information.
-                                              This is used to tell the kubernetes cluster who you are.
-                                            properties:
-                                              authProvider:
-                                                description: authProvider specifies
-                                                  a custom authentication plugin for
-                                                  the kubernetes cluster.
-                                                properties:
-                                                  config:
-                                                    additionalProperties:
-                                                      type: string
-                                                    description: config holds the
-                                                      parameters for the authentication
-                                                      plugin.
-                                                    type: object
-                                                  name:
-                                                    description: name is the name
-                                                      of the authentication plugin.
-                                                    type: string
-                                                required:
-                                                - name
-                                                type: object
-                                              exec:
-                                                description: exec specifies a custom
-                                                  exec-based authentication plugin
-                                                  for the kubernetes cluster.
-                                                properties:
-                                                  apiVersion:
-                                                    description: |-
-                                                      Preferred input version of the ExecInfo. The returned ExecCredentials MUST use
-                                                      the same encoding version as the input.
-                                                      Defaults to client.authentication.k8s.io/v1 if not set.
-                                                    type: string
-                                                  args:
-                                                    description: Arguments to pass
-                                                      to the command when executing
-                                                      it.
-                                                    items:
-                                                      type: string
-                                                    type: array
-                                                  command:
-                                                    description: command to execute.
-                                                    type: string
-                                                  env:
-                                                    description: |-
-                                                      env defines additional environment variables to expose to the process. These
-                                                      are unioned with the host's environment, as well as variables client-go uses
-                                                      to pass argument to the plugin.
-                                                    items:
-                                                      description: |-
-                                                        KubeConfigAuthExecEnv is used for setting environment variables when executing an exec-based
-                                                        credential plugin.
-                                                      properties:
-                                                        name:
-                                                          type: string
-                                                        value:
-                                                          type: string
-                                                      required:
-                                                      - name
-                                                      - value
-                                                      type: object
-                                                    type: array
-                                                  provideClusterInfo:
-                                                    description: |-
-                                                      provideClusterInfo determines whether or not to provide cluster information,
-                                                      which could potentially contain very large CA data, to this exec plugin as a
-                                                      part of the KUBERNETES_EXEC_INFO environment variable. By default, it is set
-                                                      to false. Package k8s.io/client-go/tools/auth/exec provides helper methods for
-                                                      reading this environment variable.
-                                                    type: boolean
-                                                required:
-                                                - command
-                                                type: object
-                                            type: object
-                                        required:
-                                        - user
-                                        type: object
-                                      kubeConfigPath:
-                                        description: kubeConfigPath is used to specify
-                                          the actual file path or URL to the kubeconfig
-                                          file from which to load cluster information
-                                        type: string
-                                    required:
-                                    - kubeConfigPath
-                                    type: object
-                                  timeout:
-                                    description: timeout modifies the discovery timeout
-                                    type: string
-                                  tlsBootstrapToken:
-                                    description: |-
-                                      tlsBootstrapToken is a token used for TLS bootstrapping.
-                                      If .BootstrapToken is set, this field is defaulted to .BootstrapToken.Token, but can be overridden.
-                                      If .File is set, this field **must be set** in case the KubeConfigFile does not contain any other authentication information
-                                    type: string
-                                type: object
-                              kind:
-                                description: |-
-                                  Kind is a string value representing the REST resource this object represents.
-                                  Servers may infer this from the endpoint the client submits requests to.
-                                  Cannot be updated.
-                                  In CamelCase.
-                                  More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-                                type: string
-                              nodeRegistration:
-                                description: |-
-                                  nodeRegistration holds fields that relate to registering the new control-plane node to the cluster.
-                                  When used in the context of control plane nodes, NodeRegistration should remain consistent
-                                  across both InitConfiguration and JoinConfiguration
-                                properties:
-                                  criSocket:
-                                    description: criSocket is used to retrieve container
-                                      runtime info. This information will be annotated
-                                      to the Node API object, for later re-use
-                                    type: string
-                                  ignorePreflightErrors:
-                                    description: ignorePreflightErrors provides a
-                                      slice of pre-flight errors to be ignored when
-                                      the current node is registered.
-                                    items:
-                                      type: string
-                                    type: array
-                                  imagePullPolicy:
-                                    description: |-
-                                      imagePullPolicy specifies the policy for image pulling
-                                      during kubeadm "init" and "join" operations. The value of
-                                      this field must be one of "Always", "IfNotPresent" or
-                                      "Never". Defaults to "IfNotPresent". This can be used only
-                                      with Kubernetes version equal to 1.22 and later.
-                                    enum:
-                                    - Always
-                                    - IfNotPresent
-                                    - Never
-                                    type: string
-                                  imagePullSerial:
-                                    description: |-
-                                      imagePullSerial specifies if image pulling performed by kubeadm must be done serially or in parallel.
-                                      This option takes effect only on Kubernetes >=1.31.0.
-                                      Default: true (defaulted in kubeadm)
-                                    type: boolean
-                                  kubeletExtraArgs:
-                                    additionalProperties:
-                                      type: string
-                                    description: |-
-                                      kubeletExtraArgs passes through extra arguments to the kubelet. The arguments here are passed to the kubelet command line via the environment file
-                                      kubeadm writes at runtime for the kubelet to source. This overrides the generic base-level configuration in the kubelet-config-1.X ConfigMap
-                                      Flags have higher priority when parsing. These values are local and specific to the node kubeadm is executing on.
-                                    type: object
-                                  name:
-                                    description: |-
-                                      name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
-                                      This field is also used in the CommonName field of the kubelet's client certificate to the API server.
-                                      Defaults to the hostname of the node if not provided.
-                                    type: string
-                                  taints:
-                                    description: |-
-                                      taints specifies the taints the Node API object should be registered with. If this field is unset, i.e. nil, in the `kubeadm init` process
-                                      it will be defaulted to []v1.Taint{'node-role.kubernetes.io/master=""'}. If you don't want to taint your control-plane node, set this field to an
-                                      empty slice, i.e. `taints: []` in the YAML file. This field is solely used for Node registration.
-                                    items:
-                                      description: |-
-                                        The node this Taint is attached to has the "effect" on
-                                        any pod that does not tolerate the Taint.
-                                      properties:
-                                        effect:
-                                          description: |-
-                                            Required. The effect of the taint on pods
-                                            that do not tolerate the taint.
-                                            Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
-                                          type: string
-                                        key:
-                                          description: Required. The taint key to
-                                            be applied to a node.
-                                          type: string
-                                        timeAdded:
-                                          description: |-
-                                            TimeAdded represents the time at which the taint was added.
-                                            It is only written for NoExecute taints.
-                                          format: date-time
-                                          type: string
-                                        value:
-                                          description: The taint value corresponding
-                                            to the taint key.
-                                          type: string
-                                      required:
-                                      - effect
-                                      - key
-                                      type: object
-                                    type: array
-                                type: object
-                              patches:
-                                description: |-
-                                  patches contains options related to applying patches to components deployed by kubeadm during
-                                  "kubeadm join". The minimum kubernetes version needed to support Patches is v1.22
-                                properties:
-                                  directory:
-                                    description: |-
-                                      directory is a path to a directory that contains files named "target[suffix][+patchtype].extension".
-                                      For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "target" can be one of
-                                      "kube-apiserver", "kube-controller-manager", "kube-scheduler", "etcd". "patchtype" can be one
-                                      of "strategic" "merge" or "json" and they match the patch formats supported by kubectl.
-                                      The default "patchtype" is "strategic". "extension" must be either "json" or "yaml".
-                                      "suffix" is an optional string that can be used to determine which patches are applied
-                                      first alpha-numerically.
-                                      These files can be written into the target directory via KubeadmConfig.Files which
-                                      specifies additional files to be created on the machine, either with content inline or
-                                      by referencing a secret.
-                                    type: string
-                                type: object
-                              skipPhases:
-                                description: |-
-                                  skipPhases is a list of phases to skip during command execution.
-                                  The list of phases can be obtained with the "kubeadm init --help" command.
-                                  This option takes effect only on Kubernetes >=1.22.0.
-                                items:
-                                  type: string
-                                type: array
-                            type: object
-                          mounts:
-                            description: mounts specifies a list of mount points to
-                              be setup.
-                            items:
-                              description: MountPoints defines input for generated
-                                mounts in cloud-init.
-                              items:
-                                type: string
-                              type: array
-                            type: array
-                          ntp:
-                            description: ntp specifies NTP configuration
-                            properties:
-                              enabled:
-                                description: enabled specifies whether NTP should
-                                  be enabled
-                                type: boolean
-                              servers:
-                                description: servers specifies which NTP servers to
-                                  use
-                                items:
-                                  type: string
-                                type: array
-                            type: object
-                          postKubeadmCommands:
-                            description: postKubeadmCommands specifies extra commands
-                              to run after kubeadm runs
-                            items:
-                              type: string
-                            type: array
-                          preKubeadmCommands:
-                            description: preKubeadmCommands specifies extra commands
-                              to run before kubeadm runs
-                            items:
-                              type: string
-                            type: array
-                          useExperimentalRetryJoin:
-                            description: |-
-                              useExperimentalRetryJoin replaces a basic kubeadm command with a shell
-                              script with retries for joins.
-
-                              This is meant to be an experimental temporary workaround on some environments
-                              where joins fail due to timing (and other issues). The long term goal is to add retries to
-                              kubeadm proper and use that functionality.
-
-                              This will add about 40KB to userdata
-
-                              For more information, refer to https://github.com/kubernetes-sigs/cluster-api/pull/2763#discussion_r397306055.
-
-                              Deprecated: This experimental fix is no longer needed and this field will be removed in a future release.
-                              When removing also remove from staticcheck exclude-rules for SA1019 in golangci.yml
-                            type: boolean
-                          users:
-                            description: users specifies extra users to add
-                            items:
-                              description: User defines the input for a generated
-                                user in cloud-init.
-                              properties:
-                                gecos:
-                                  description: gecos specifies the gecos to use for
-                                    the user
-                                  type: string
-                                groups:
-                                  description: groups specifies the additional groups
-                                    for the user
-                                  type: string
-                                homeDir:
-                                  description: homeDir specifies the home directory
-                                    to use for the user
-                                  type: string
-                                inactive:
-                                  description: inactive specifies whether to mark
-                                    the user as inactive
-                                  type: boolean
-                                lockPassword:
-                                  description: lockPassword specifies if password
-                                    login should be disabled
-                                  type: boolean
-                                name:
-                                  description: name specifies the user name
-                                  type: string
-                                passwd:
-                                  description: passwd specifies a hashed password
-                                    for the user
-                                  type: string
-                                passwdFrom:
-                                  description: passwdFrom is a referenced source of
-                                    passwd to populate the passwd.
-                                  properties:
-                                    secret:
-                                      description: secret represents a secret that
-                                        should populate this password.
-                                      properties:
-                                        key:
-                                          description: key is the key in the secret's
-                                            data map for this value.
-                                          type: string
-                                        name:
-                                          description: name of the secret in the KubeadmBootstrapConfig's
-                                            namespace to use.
-                                          type: string
-                                      required:
-                                      - key
-                                      - name
-                                      type: object
-                                  required:
-                                  - secret
-                                  type: object
-                                primaryGroup:
-                                  description: primaryGroup specifies the primary
-                                    group for the user
-                                  type: string
-                                shell:
-                                  description: shell specifies the user's shell
-                                  type: string
-                                sshAuthorizedKeys:
-                                  description: sshAuthorizedKeys specifies a list
-                                    of ssh authorized keys for the user
-                                  items:
-                                    type: string
-                                  type: array
-                                sudo:
-                                  description: sudo specifies a sudo role for the
-                                    user
-                                  type: string
-                              required:
-                              - name
-                              type: object
-                            type: array
-                          verbosity:
-                            description: |-
-                              verbosity is the number for the kubeadm log level verbosity.
-                              It overrides the `--v` flag in kubeadm commands.
-                            format: int32
-                            type: integer
-                        type: object
-                      machineNamingStrategy:
-                        description: |-
-                          MachineNamingStrategy allows changing the naming pattern used when creating Machines.
-                          InfraMachines & KubeadmConfigs will use the same name as the corresponding Machines.
-                        properties:
-                          template:
-                            description: |-
-                              Template defines the template to use for generating the names of the Machine objects.
-                              If not defined, it will fallback to `{{ .kubeadmControlPlane.name }}-{{ .random }}`.
-                              If the generated name string exceeds 63 characters, it will be trimmed to 58 characters and will
-                              get concatenated with a random suffix of length 5.
-                              Length of the template string must not exceed 256 characters.
-                              The template allows the following variables `.cluster.name`, `.kubeadmControlPlane.name` and `.random`.
-                              The variable `.cluster.name` retrieves the name of the cluster object that owns the Machines being created.
-                              The variable `.kubeadmControlPlane.name` retrieves the name of the KubeadmControlPlane object that owns the Machines being created.
-                              The variable `.random` is substituted with random alphanumeric string, without vowels, of length 5.
-                            maxLength: 256
-                            type: string
-                        type: object
-                      machineTemplate:
-                        description: |-
-                          machineTemplate contains information about how machines
-                          should be shaped when creating or updating a control plane.
-                        properties:
-                          metadata:
-                            description: |-
-                              Standard object's metadata.
-                              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
-                            properties:
-                              annotations:
-                                additionalProperties:
-                                  type: string
-                                description: |-
-                                  annotations is an unstructured key value map stored with a resource that may be
-                                  set by external tools to store and retrieve arbitrary metadata. They are not
-                                  queryable and should be preserved when modifying objects.
-                                  More info: http://kubernetes.io/docs/user-guide/annotations
-                                type: object
-                              labels:
-                                additionalProperties:
-                                  type: string
-                                description: |-
-                                  Map of string keys and values that can be used to organize and categorize
-                                  (scope and select) objects. May match selectors of replication controllers
-                                  and services.
-                                  More info: http://kubernetes.io/docs/user-guide/labels
-                                type: object
-                            type: object
-                          nodeDeletionTimeout:
-                            description: |-
-                              nodeDeletionTimeout defines how long the machine controller will attempt to delete the Node that the Machine
-                              hosts after the Machine is marked for deletion. A duration of 0 will retry deletion indefinitely.
-                              If no value is provided, the default value for this property of the Machine resource will be used.
-                            type: string
-                          nodeDrainTimeout:
-                            description: |-
-                              nodeDrainTimeout is the total amount of time that the controller will spend on draining a controlplane node
-                              The default value is 0, meaning that the node can be drained without any time limitations.
-                              NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`
-                            type: string
-                          nodeVolumeDetachTimeout:
-                            description: |-
-                              nodeVolumeDetachTimeout is the total amount of time that the controller will spend on waiting for all volumes
-                              to be detached. The default value is 0, meaning that the volumes can be detached without any time limitations.
-                            type: string
-                        type: object
-                      remediationStrategy:
-                        description: The RemediationStrategy that controls how control
-                          plane machine remediation happens.
-                        properties:
-                          maxRetry:
-                            description: "maxRetry is the Max number of retries while
-                              attempting to remediate an unhealthy machine.\nA retry
-                              happens when a machine that was created as a replacement
-                              for an unhealthy machine also fails.\nFor example, given
-                              a control plane with three machines M1, M2, M3:\n\n\tM1
-                              become unhealthy; remediation happens, and M1-1 is created
-                              as a replacement.\n\tIf M1-1 (replacement of M1) has
-                              problems while bootstrapping it will become unhealthy,
-                              and then be\n\tremediated; such operation is considered
-                              a retry, remediation-retry #1.\n\tIf M1-2 (replacement
-                              of M1-1) becomes unhealthy, remediation-retry #2 will
-                              happen, etc.\n\nA retry could happen only after RetryPeriod
-                              from the previous retry.\nIf a machine is marked as
-                              unhealthy after MinHealthyPeriod from the previous remediation
-                              expired,\nthis is not considered a retry anymore because
-                              the new issue is assumed unrelated from the previous
-                              one.\n\nIf not set, the remedation will be retried infinitely."
-                            format: int32
-                            type: integer
-                          minHealthyPeriod:
-                            description: "minHealthyPeriod defines the duration after
-                              which KCP will consider any failure to a machine unrelated\nfrom
-                              the previous one. In this case the remediation is not
-                              considered a retry anymore, and thus the retry\ncounter
-                              restarts from 0. For example, assuming MinHealthyPeriod
-                              is set to 1h (default)\n\n\tM1 become unhealthy; remediation
-                              happens, and M1-1 is created as a replacement.\n\tIf
-                              M1-1 (replacement of M1) has problems within the 1hr
-                              after the creation, also\n\tthis machine will be remediated
-                              and this operation is considered a retry - a problem
-                              related\n\tto the original issue happened to M1 -.\n\n\tIf
-                              instead the problem on M1-1 is happening after MinHealthyPeriod
-                              expired, e.g. four days after\n\tm1-1 has been created
-                              as a remediation of M1, the problem on M1-1 is considered
-                              unrelated to\n\tthe original issue happened to M1.\n\nIf
-                              not set, this value is defaulted to 1h."
-                            type: string
-                          retryPeriod:
-                            description: |-
-                              retryPeriod is the duration that KCP should wait before remediating a machine being created as a replacement
-                              for an unhealthy machine (a retry).
-
-                              If not set, a retry will happen immediately.
-                            type: string
-                        type: object
-                      rolloutAfter:
-                        description: |-
-                          rolloutAfter is a field to indicate a rollout should be performed
-                          after the specified time even if no changes have been made to the
-                          KubeadmControlPlane.
-                        format: date-time
-                        type: string
-                      rolloutBefore:
-                        description: |-
-                          rolloutBefore is a field to indicate a rollout should be performed
-                          if the specified criteria is met.
-                        properties:
-                          certificatesExpiryDays:
-                            description: |-
-                              certificatesExpiryDays indicates a rollout needs to be performed if the
-                              certificates of the machine will expire within the specified days.
-                            format: int32
-                            type: integer
-                        type: object
-                      rolloutStrategy:
-                        default:
-                          rollingUpdate:
-                            maxSurge: 1
-                          type: RollingUpdate
-                        description: |-
-                          The RolloutStrategy to use to replace control plane machines with
-                          new ones.
-                        properties:
-                          rollingUpdate:
-                            description: |-
-                              Rolling update config params. Present only if
-                              RolloutStrategyType = RollingUpdate.
-                            properties:
-                              maxSurge:
-                                anyOf:
-                                - type: integer
-                                - type: string
-                                description: |-
-                                  The maximum number of control planes that can be scheduled above or under the
-                                  desired number of control planes.
-                                  Value can be an absolute number 1 or 0.
-                                  Defaults to 1.
-                                  Example: when this is set to 1, the control plane can be scaled
-                                  up immediately when the rolling update starts.
-                                x-kubernetes-int-or-string: true
-                            type: object
-                          type:
-                            description: |-
-                              type of rollout. Currently the only supported strategy is
-                              "RollingUpdate".
-                              Default is RollingUpdate.
-                            type: string
-                        type: object
-                    required:
-                    - kubeadmConfigSpec
-                    type: object
-                required:
-                - spec
-                type: object
-            required:
-            - template
-            type: object
-        type: object
-    served: true
-    storage: true
-    subresources: {}
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: null
-  storedVersions: null
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: control-plane-kubeadm
-    clusterctl.cluster.x-k8s.io: ""
-  name: capi-kubeadm-control-plane-manager
-  namespace: capi-kubeadm-control-plane-system
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: Role
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: control-plane-kubeadm
-    clusterctl.cluster.x-k8s.io: ""
-  name: capi-kubeadm-control-plane-leader-election-role
-  namespace: capi-kubeadm-control-plane-system
-rules:
-- apiGroups:
-  - ""
-  resources:
-  - events
-  verbs:
-  - create
-- apiGroups:
-  - coordination.k8s.io
-  resources:
-  - leases
-  verbs:
-  - get
-  - list
-  - watch
-  - create
-  - update
-  - patch
-  - delete
----
-aggregationRule:
-  clusterRoleSelectors:
-  - matchLabels:
-      kubeadm.controlplane.cluster.x-k8s.io/aggregate-to-manager: "true"
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: control-plane-kubeadm
-    clusterctl.cluster.x-k8s.io: ""
-  name: capi-kubeadm-control-plane-aggregated-manager-role
-rules: []
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: control-plane-kubeadm
-    clusterctl.cluster.x-k8s.io: ""
-    kubeadm.controlplane.cluster.x-k8s.io/aggregate-to-manager: "true"
-  name: capi-kubeadm-control-plane-manager-role
-rules:
-- apiGroups:
-  - apiextensions.k8s.io
-  resources:
-  - customresourcedefinitions
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - authentication.k8s.io
-  resources:
-  - tokenreviews
-  verbs:
-  - create
-- apiGroups:
-  - authorization.k8s.io
-  resources:
-  - subjectaccessreviews
-  verbs:
-  - create
-- apiGroups:
-  - bootstrap.cluster.x-k8s.io
-  - controlplane.cluster.x-k8s.io
-  - infrastructure.cluster.x-k8s.io
-  resources:
-  - '*'
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - cluster.x-k8s.io
-  resources:
-  - clusters
-  - clusters/status
-  - machinepools
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - cluster.x-k8s.io
-  resources:
-  - machines
-  - machines/status
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - ""
-  resources:
-  - events
-  verbs:
-  - create
-  - patch
-- apiGroups:
-  - ""
-  resources:
-  - secrets
-  verbs:
-  - create
-  - get
-  - list
-  - patch
-  - update
-  - watch
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: RoleBinding
-metadata:
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: control-plane-kubeadm
-    clusterctl.cluster.x-k8s.io: ""
-  name: capi-kubeadm-control-plane-leader-election-rolebinding
-  namespace: capi-kubeadm-control-plane-system
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: Role
-  name: capi-kubeadm-control-plane-leader-election-role
-subjects:
-- kind: ServiceAccount
-  name: capi-kubeadm-control-plane-manager
-  namespace: capi-kubeadm-control-plane-system
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: control-plane-kubeadm
-    clusterctl.cluster.x-k8s.io: ""
-  name: capi-kubeadm-control-plane-manager-rolebinding
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: ClusterRole
-  name: capi-kubeadm-control-plane-aggregated-manager-role
-subjects:
-- kind: ServiceAccount
-  name: capi-kubeadm-control-plane-manager
-  namespace: capi-kubeadm-control-plane-system
----
-apiVersion: v1
-kind: Service
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: control-plane-kubeadm
-    clusterctl.cluster.x-k8s.io: ""
-  name: capi-kubeadm-control-plane-webhook-service
-  namespace: capi-kubeadm-control-plane-system
-spec:
-  ports:
-  - port: 443
-    targetPort: webhook-server
-  selector:
-    cluster.x-k8s.io/provider: control-plane-kubeadm
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: control-plane-kubeadm
-    clusterctl.cluster.x-k8s.io: ""
-    control-plane: controller-manager
-  name: capi-kubeadm-control-plane-controller-manager
-  namespace: capi-kubeadm-control-plane-system
-spec:
-  replicas: 1
-  selector:
-    matchLabels:
-      cluster.x-k8s.io/provider: control-plane-kubeadm
-      control-plane: controller-manager
-  strategy: {}
-  template:
-    metadata:
-      creationTimestamp: null
-      labels:
-        cluster.x-k8s.io/provider: control-plane-kubeadm
-        control-plane: controller-manager
-    spec:
-      containers:
-      - args:
-        - --leader-elect
-        - --diagnostics-address=:8443
-        - --insecure-diagnostics=false
-        - --use-deprecated-infra-machine-naming=false
-        - --feature-gates=MachinePool=true,ClusterTopology=false,KubeadmBootstrapFormatIgnition=false
-        command:
-        - /manager
-        env:
-        - name: POD_NAMESPACE
-          valueFrom:
-            fieldRef:
-              fieldPath: metadata.namespace
-        - name: POD_NAME
-          valueFrom:
-            fieldRef:
-              fieldPath: metadata.name
-        - name: POD_UID
-          valueFrom:
-            fieldRef:
-              fieldPath: metadata.uid
-        image: registry.k8s.io/cluster-api/kubeadm-control-plane-controller:v1.9.5
-        imagePullPolicy: IfNotPresent
-        livenessProbe:
-          httpGet:
-            path: /healthz
-            port: healthz
-        name: manager
-        ports:
-        - containerPort: 9443
-          name: webhook-server
-          protocol: TCP
-        - containerPort: 9440
-          name: healthz
-          protocol: TCP
-        - containerPort: 8443
-          name: metrics
-          protocol: TCP
-        readinessProbe:
-          httpGet:
-            path: /readyz
-            port: healthz
-        resources: {}
-        securityContext:
-          allowPrivilegeEscalation: false
-          capabilities:
-            drop:
-            - ALL
-          privileged: false
-          runAsGroup: 65532
-          runAsUser: 65532
-        terminationMessagePolicy: FallbackToLogsOnError
-        volumeMounts:
-        - mountPath: /tmp/k8s-webhook-server/serving-certs
-          name: cert
-          readOnly: true
-      securityContext:
-        runAsNonRoot: true
-        seccompProfile:
-          type: RuntimeDefault
-      serviceAccountName: capi-kubeadm-control-plane-manager
-      terminationGracePeriodSeconds: 10
-      tolerations:
-      - effect: NoSchedule
-        key: node-role.kubernetes.io/master
-      - effect: NoSchedule
-        key: node-role.kubernetes.io/control-plane
-      volumes:
-      - name: cert
-        secret:
-          secretName: capi-kubeadm-control-plane-webhook-service-cert
-status: {}
----
-apiVersion: admissionregistration.k8s.io/v1
-kind: MutatingWebhookConfiguration
-metadata:
-  annotations:
-    cert-manager.io/inject-ca-from: capi-kubeadm-control-plane-system/capi-kubeadm-control-plane-serving-cert
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: control-plane-kubeadm
-    clusterctl.cluster.x-k8s.io: ""
-  name: capi-kubeadm-control-plane-mutating-webhook-configuration
-webhooks:
-- admissionReviewVersions:
-  - v1
-  - v1beta1
-  clientConfig:
-    service:
-      name: capi-kubeadm-control-plane-webhook-service
-      namespace: capi-kubeadm-control-plane-system
-      path: /mutate-controlplane-cluster-x-k8s-io-v1beta1-kubeadmcontrolplane
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: default.kubeadmcontrolplane.controlplane.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - controlplane.cluster.x-k8s.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - kubeadmcontrolplanes
-  sideEffects: None
-- admissionReviewVersions:
-  - v1
-  - v1beta1
-  clientConfig:
-    service:
-      name: capi-kubeadm-control-plane-webhook-service
-      namespace: capi-kubeadm-control-plane-system
-      path: /mutate-controlplane-cluster-x-k8s-io-v1beta1-kubeadmcontrolplanetemplate
-  failurePolicy: Fail
-  name: default.kubeadmcontrolplanetemplate.controlplane.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - controlplane.cluster.x-k8s.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - kubeadmcontrolplanetemplates
-  sideEffects: None
----
-apiVersion: admissionregistration.k8s.io/v1
-kind: ValidatingWebhookConfiguration
-metadata:
-  annotations:
-    cert-manager.io/inject-ca-from: capi-kubeadm-control-plane-system/capi-kubeadm-control-plane-serving-cert
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: control-plane-kubeadm
-    clusterctl.cluster.x-k8s.io: ""
-  name: capi-kubeadm-control-plane-validating-webhook-configuration
-webhooks:
-- admissionReviewVersions:
-  - v1
-  - v1beta1
-  clientConfig:
-    service:
-      name: capi-kubeadm-control-plane-webhook-service
-      namespace: capi-kubeadm-control-plane-system
-      path: /validate-scale-controlplane-cluster-x-k8s-io-v1beta1-kubeadmcontrolplane
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: validation-scale.kubeadmcontrolplane.controlplane.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - controlplane.cluster.x-k8s.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - UPDATE
-    resources:
-    - kubeadmcontrolplanes/scale
-  sideEffects: None
-- admissionReviewVersions:
-  - v1
-  - v1beta1
-  clientConfig:
-    service:
-      name: capi-kubeadm-control-plane-webhook-service
-      namespace: capi-kubeadm-control-plane-system
-      path: /validate-controlplane-cluster-x-k8s-io-v1beta1-kubeadmcontrolplane
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: validation.kubeadmcontrolplane.controlplane.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - controlplane.cluster.x-k8s.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - kubeadmcontrolplanes
-  sideEffects: None
-- admissionReviewVersions:
-  - v1
-  - v1beta1
-  clientConfig:
-    service:
-      name: capi-kubeadm-control-plane-webhook-service
-      namespace: capi-kubeadm-control-plane-system
-      path: /validate-controlplane-cluster-x-k8s-io-v1beta1-kubeadmcontrolplanetemplate
-  failurePolicy: Fail
-  name: validation.kubeadmcontrolplanetemplate.controlplane.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - controlplane.cluster.x-k8s.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - kubeadmcontrolplanetemplates
-  sideEffects: None
diff --git a/installers/flux/templates/sw-catalogs/infra-controllers/capi/manifests/providers/infrastructure/openstack/openstack-resource-controller.yaml b/installers/flux/templates/sw-catalogs/infra-controllers/capi/manifests/providers/infrastructure/openstack/openstack-resource-controller.yaml
deleted file mode 100644 (file)
index d95f83e..0000000
+++ /dev/null
@@ -1,888 +0,0 @@
-apiVersion: v1
-kind: Namespace
-metadata:
-  labels:
-    app.kubernetes.io/managed-by: kustomize
-    app.kubernetes.io/name: orc
-    control-plane: controller-manager
-  name: orc-system
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  annotations:
-    controller-gen.kubebuilder.io/version: v0.16.4
-  name: images.openstack.k-orc.cloud
-spec:
-  group: openstack.k-orc.cloud
-  names:
-    kind: Image
-    listKind: ImageList
-    plural: images
-    singular: image
-  scope: Namespaced
-  versions:
-  - additionalPrinterColumns:
-    - description: Resource ID
-      jsonPath: .status.id
-      name: ID
-      type: string
-    - description: Availability status of resource
-      jsonPath: .status.conditions[?(@.type=='Available')].status
-      name: Available
-      type: string
-    - description: Message describing current availability status
-      jsonPath: .status.conditions[?(@.type=='Available')].message
-      name: Message
-      type: string
-    - description: Time duration since creation
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    name: v1alpha1
-    schema:
-      openAPIV3Schema:
-        description: Image is the Schema for an ORC resource.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: ImageSpec defines the desired state of an ORC object.
-            properties:
-              cloudCredentialsRef:
-                description: CloudCredentialsRef points to a secret containing OpenStack
-                  credentials
-                properties:
-                  cloudName:
-                    description: CloudName specifies the name of the entry in the
-                      clouds.yaml file to use.
-                    maxLength: 256
-                    minLength: 1
-                    type: string
-                  secretName:
-                    description: |-
-                      SecretName is the name of a secret in the same namespace as the resource being provisioned.
-                      The secret must contain a key named `clouds.yaml` which contains an OpenStack clouds.yaml file.
-                      The secret may optionally contain a key named `cacert` containing a PEM-encoded CA certificate.
-                    maxLength: 253
-                    minLength: 1
-                    type: string
-                required:
-                - cloudName
-                - secretName
-                type: object
-              import:
-                description: |-
-                  Import refers to an existing OpenStack resource which will be imported instead of
-                  creating a new one.
-                maxProperties: 1
-                minProperties: 1
-                properties:
-                  filter:
-                    description: |-
-                      Filter contains a resource query which is expected to return a single
-                      result. The controller will continue to retry if filter returns no
-                      results. If filter returns multiple results the controller will set an
-                      error state and will not continue to retry.
-                    minProperties: 1
-                    properties:
-                      name:
-                        description: Name specifies the name of a Glance image
-                        maxLength: 1000
-                        minLength: 1
-                        type: string
-                    type: object
-                  id:
-                    description: |-
-                      ID contains the unique identifier of an existing OpenStack resource. Note
-                      that when specifying an import by ID, the resource MUST already exist.
-                      The ORC object will enter an error state if the resource does not exist.
-                    format: uuid
-                    type: string
-                type: object
-              managedOptions:
-                description: ManagedOptions specifies options which may be applied
-                  to managed objects.
-                properties:
-                  onDelete:
-                    default: delete
-                    description: |-
-                      OnDelete specifies the behaviour of the controller when the ORC
-                      object is deleted. Options are `delete` - delete the OpenStack resource;
-                      `detach` - do not delete the OpenStack resource. If not specified, the
-                      default is `delete`.
-                    enum:
-                    - delete
-                    - detach
-                    type: string
-                type: object
-              managementPolicy:
-                default: managed
-                description: |-
-                  ManagementPolicy defines how ORC will treat the object. Valid values are
-                  `managed`: ORC will create, update, and delete the resource; `unmanaged`:
-                  ORC will import an existing resource, and will not apply updates to it or
-                  delete it.
-                enum:
-                - managed
-                - unmanaged
-                type: string
-                x-kubernetes-validations:
-                - message: managementPolicy is immutable
-                  rule: self == oldSelf
-              resource:
-                description: |-
-                  Resource specifies the desired state of the resource.
-
-                  Resource may not be specified if the management policy is `unmanaged`.
-
-                  Resource must be specified if the management policy is `managed`.
-                properties:
-                  content:
-                    description: Content specifies how to obtain the image content.
-                    properties:
-                      containerFormat:
-                        default: bare
-                        description: |-
-                          ContainerFormat is the format of the image container.
-                          qcow2 and raw images do not usually have a container. This is specified as "bare", which is also the default.
-                          Permitted values are ami, ari, aki, bare, ovf, ova, and docker.
-                        enum:
-                        - ami
-                        - ari
-                        - aki
-                        - bare
-                        - ovf
-                        - ova
-                        - docker
-                        type: string
-                      diskFormat:
-                        description: |-
-                          DiskFormat is the format of the disk image.
-                          Normal values are "qcow2", or "raw". Glance may be configured to support others.
-                        enum:
-                        - ami
-                        - ari
-                        - aki
-                        - vhd
-                        - vhdx
-                        - vmdk
-                        - raw
-                        - qcow2
-                        - vdi
-                        - ploop
-                        - iso
-                        type: string
-                      download:
-                        description: |-
-                          Download describes how to obtain image data by downloading it from a URL.
-                          Must be set when creating a managed image.
-                        properties:
-                          decompress:
-                            description: |-
-                              Decompress specifies that the source data must be decompressed with the
-                              given compression algorithm before being stored. Specifying Decompress
-                              will disable the use of Glance's web-download, as web-download cannot
-                              currently deterministically decompress downloaded content.
-                            enum:
-                            - xz
-                            - gz
-                            - bz2
-                            type: string
-                          hash:
-                            description: |-
-                              Hash is a hash which will be used to verify downloaded data, i.e.
-                              before any decompression. If not specified, no hash verification will be
-                              performed. Specifying a Hash will disable the use of Glance's
-                              web-download, as web-download cannot currently deterministically verify
-                              the hash of downloaded content.
-                            properties:
-                              algorithm:
-                                description: Algorithm is the hash algorithm used
-                                  to generate value.
-                                enum:
-                                - md5
-                                - sha1
-                                - sha256
-                                - sha512
-                                type: string
-                              value:
-                                description: Value is the hash of the image data using
-                                  Algorithm. It must be hex encoded using lowercase
-                                  letters.
-                                maxLength: 1024
-                                minLength: 1
-                                pattern: ^[0-9a-f]+$
-                                type: string
-                            required:
-                            - algorithm
-                            - value
-                            type: object
-                            x-kubernetes-validations:
-                            - message: hash is immutable
-                              rule: self == oldSelf
-                          url:
-                            description: URL containing image data
-                            format: uri
-                            type: string
-                        required:
-                        - url
-                        type: object
-                    required:
-                    - diskFormat
-                    - download
-                    type: object
-                    x-kubernetes-validations:
-                    - message: content is immutable
-                      rule: self == oldSelf
-                  name:
-                    description: |-
-                      Name will be the name of the created Glance image. If not specified, the
-                      name of the Image object will be used.
-                    maxLength: 1024
-                    minLength: 1
-                    type: string
-                  properties:
-                    description: Properties is metadata available to consumers of
-                      the image
-                    properties:
-                      hardware:
-                        description: |-
-                          Hardware is a set of properties which control the virtual hardware
-                          created by Nova.
-                        properties:
-                          cdromBus:
-                            description: CDROMBus specifies the type of disk controller
-                              to attach CD-ROM devices to.
-                            enum:
-                            - scsi
-                            - virtio
-                            - uml
-                            - xen
-                            - ide
-                            - usb
-                            - lxc
-                            type: string
-                          cpuCores:
-                            description: CPUCores is the preferred number of cores
-                              to expose to the guest
-                            type: integer
-                          cpuPolicy:
-                            description: |-
-                              CPUPolicy is used to pin the virtual CPUs (vCPUs) of instances to the
-                              host's physical CPU cores (pCPUs). Host aggregates should be used to
-                              separate these pinned instances from unpinned instances as the latter
-                              will not respect the resourcing requirements of the former.
-
-                              Permitted values are shared (the default), and dedicated.
-
-                              shared: The guest vCPUs will be allowed to freely float across host
-                              pCPUs, albeit potentially constrained by NUMA policy.
-
-                              dedicated: The guest vCPUs will be strictly pinned to a set of host
-                              pCPUs. In the absence of an explicit vCPU topology request, the
-                              drivers typically expose all vCPUs as sockets with one core and one
-                              thread. When strict CPU pinning is in effect the guest CPU topology
-                              will be setup to match the topology of the CPUs to which it is
-                              pinned. This option implies an overcommit ratio of 1.0. For example,
-                              if a two vCPU guest is pinned to a single host core with two threads,
-                              then the guest will get a topology of one socket, one core, two
-                              threads.
-                            enum:
-                            - shared
-                            - dedicated
-                            type: string
-                          cpuSockets:
-                            description: CPUSockets is the preferred number of sockets
-                              to expose to the guest
-                            type: integer
-                          cpuThreadPolicy:
-                            description: |-
-                              CPUThreadPolicy further refines a CPUPolicy of 'dedicated' by stating
-                              how hardware CPU threads in a simultaneous multithreading-based (SMT)
-                              architecture be used. SMT-based architectures include Intel
-                              processors with Hyper-Threading technology. In these architectures,
-                              processor cores share a number of components with one or more other
-                              cores. Cores in such architectures are commonly referred to as
-                              hardware threads, while the cores that a given core share components
-                              with are known as thread siblings.
-
-                              Permitted values are prefer (the default), isolate, and require.
-
-                              prefer: The host may or may not have an SMT architecture. Where an
-                              SMT architecture is present, thread siblings are preferred.
-
-                              isolate: The host must not have an SMT architecture or must emulate a
-                              non-SMT architecture. If the host does not have an SMT architecture,
-                              each vCPU is placed on a different core as expected. If the host does
-                              have an SMT architecture - that is, one or more cores have thread
-                              siblings - then each vCPU is placed on a different physical core. No
-                              vCPUs from other guests are placed on the same core. All but one
-                              thread sibling on each utilized core is therefore guaranteed to be
-                              unusable.
-
-                              require: The host must have an SMT architecture. Each vCPU is
-                              allocated on thread siblings. If the host does not have an SMT
-                              architecture, then it is not used. If the host has an SMT
-                              architecture, but not enough cores with free thread siblings are
-                              available, then scheduling fails.
-                            enum:
-                            - prefer
-                            - isolate
-                            - require
-                            type: string
-                          cpuThreads:
-                            description: CPUThreads is the preferred number of threads
-                              to expose to the guest
-                            type: integer
-                          diskBus:
-                            description: DiskBus specifies the type of disk controller
-                              to attach disk devices to.
-                            enum:
-                            - scsi
-                            - virtio
-                            - uml
-                            - xen
-                            - ide
-                            - usb
-                            - lxc
-                            type: string
-                          scsiModel:
-                            description: |-
-                              SCSIModel enables the use of VirtIO SCSI (virtio-scsi) to provide
-                              block device access for compute instances; by default, instances use
-                              VirtIO Block (virtio-blk). VirtIO SCSI is a para-virtualized SCSI
-                              controller device that provides improved scalability and performance,
-                              and supports advanced SCSI hardware.
-
-                              The only permitted value is virtio-scsi.
-                            enum:
-                            - virtio-scsi
-                            type: string
-                          vifModel:
-                            description: |-
-                              VIFModel specifies the model of virtual network interface device to use.
-
-                              Permitted values are e1000, e1000e, ne2k_pci, pcnet, rtl8139, virtio,
-                              and vmxnet3.
-                            enum:
-                            - e1000
-                            - e1000e
-                            - ne2k_pci
-                            - pcnet
-                            - rtl8139
-                            - virtio
-                            - vmxnet3
-                            type: string
-                        type: object
-                      minDiskGB:
-                        description: MinDisk is the minimum amount of disk space in
-                          GB that is required to boot the image
-                        minimum: 1
-                        type: integer
-                      minMemoryMB:
-                        description: MinMemoryMB is the minimum amount of RAM in MB
-                          that is required to boot the image.
-                        minimum: 1
-                        type: integer
-                    type: object
-                  protected:
-                    description: |-
-                      Protected specifies that the image is protected from deletion.
-                      If not specified, the default is false.
-                    type: boolean
-                  tags:
-                    description: Tags is a list of tags which will be applied to the
-                      image. A tag has a maximum length of 255 characters.
-                    items:
-                      maxLength: 255
-                      minLength: 1
-                      type: string
-                    type: array
-                    x-kubernetes-list-type: set
-                  visibility:
-                    description: Visibility of the image
-                    enum:
-                    - public
-                    - private
-                    - shared
-                    - community
-                    type: string
-                    x-kubernetes-validations:
-                    - message: visibility is immutable
-                      rule: self == oldSelf
-                type: object
-                x-kubernetes-validations:
-                - message: name is immutable
-                  rule: 'has(self.name) ? self.name == oldSelf.name : !has(oldSelf.name)'
-                - message: name is immutable
-                  rule: 'has(self.protected) ? self.protected == oldSelf.protected
-                    : !has(oldSelf.protected)'
-                - message: tags is immutable
-                  rule: 'has(self.tags) ? self.tags == oldSelf.tags : !has(oldSelf.tags)'
-                - message: visibility is immutable
-                  rule: 'has(self.visibility) ? self.visibility == oldSelf.visibility
-                    : !has(oldSelf.visibility)'
-                - message: properties is immutable
-                  rule: 'has(self.properties) ? self.properties == oldSelf.properties
-                    : !has(oldSelf.properties)'
-            required:
-            - cloudCredentialsRef
-            type: object
-            x-kubernetes-validations:
-            - message: resource must be specified when policy is managed
-              rule: 'self.managementPolicy == ''managed'' ? has(self.resource) : true'
-            - message: import may not be specified when policy is managed
-              rule: 'self.managementPolicy == ''managed'' ? !has(self.__import__)
-                : true'
-            - message: resource may not be specified when policy is unmanaged
-              rule: 'self.managementPolicy == ''unmanaged'' ? !has(self.resource)
-                : true'
-            - message: import must be specified when policy is unmanaged
-              rule: 'self.managementPolicy == ''unmanaged'' ? has(self.__import__)
-                : true'
-            - message: managedOptions may only be provided when policy is managed
-              rule: 'has(self.managedOptions) ? self.managementPolicy == ''managed''
-                : true'
-            - message: resource content must be specified when not importing
-              rule: '!has(self.__import__) ? has(self.resource.content) : true'
-          status:
-            description: ImageStatus defines the observed state of an ORC resource.
-            properties:
-              conditions:
-                description: |-
-                  Conditions represents the observed status of the object.
-                  Known .status.conditions.type are: "Available", "Progressing"
-
-                  Available represents the availability of the OpenStack resource. If it is
-                  true then the resource is ready for use.
-
-                  Progressing indicates whether the controller is still attempting to
-                  reconcile the current state of the OpenStack resource to the desired
-                  state. Progressing will be False either because the desired state has
-                  been achieved, or because some terminal error prevents it from ever being
-                  achieved and the controller is no longer attempting to reconcile. If
-                  Progressing is True, an observer waiting on the resource should continue
-                  to wait.
-                items:
-                  description: Condition contains details for one aspect of the current
-                    state of this API Resource.
-                  properties:
-                    lastTransitionTime:
-                      description: |-
-                        lastTransitionTime is the last time the condition transitioned from one status to another.
-                        This should be when the underlying condition changed.  If that is not known, then using the time when the API field changed is acceptable.
-                      format: date-time
-                      type: string
-                    message:
-                      description: |-
-                        message is a human readable message indicating details about the transition.
-                        This may be an empty string.
-                      maxLength: 32768
-                      type: string
-                    observedGeneration:
-                      description: |-
-                        observedGeneration represents the .metadata.generation that the condition was set based upon.
-                        For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
-                        with respect to the current state of the instance.
-                      format: int64
-                      minimum: 0
-                      type: integer
-                    reason:
-                      description: |-
-                        reason contains a programmatic identifier indicating the reason for the condition's last transition.
-                        Producers of specific condition types may define expected values and meanings for this field,
-                        and whether the values are considered a guaranteed API.
-                        The value should be a CamelCase string.
-                        This field may not be empty.
-                      maxLength: 1024
-                      minLength: 1
-                      pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
-                      type: string
-                    status:
-                      description: status of the condition, one of True, False, Unknown.
-                      enum:
-                      - "True"
-                      - "False"
-                      - Unknown
-                      type: string
-                    type:
-                      description: type of condition in CamelCase or in foo.example.com/CamelCase.
-                      maxLength: 316
-                      pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-                      type: string
-                  required:
-                  - lastTransitionTime
-                  - message
-                  - reason
-                  - status
-                  - type
-                  type: object
-                type: array
-                x-kubernetes-list-map-keys:
-                - type
-                x-kubernetes-list-type: map
-              downloadAttempts:
-                description: DownloadAttempts is the number of times the controller
-                  has attempted to download the image contents
-                type: integer
-              id:
-                description: ID is the unique identifier of the OpenStack resource.
-                type: string
-              resource:
-                description: Resource contains the observed state of the OpenStack
-                  resource.
-                properties:
-                  hash:
-                    description: |-
-                      Hash is the hash of the image data published by Glance. Note that this is
-                      a hash of the data stored internally by Glance, which will have been
-                      decompressed and potentially format converted depending on server-side
-                      configuration which is not visible to clients. It is expected that this
-                      hash will usually differ from the download hash.
-                    properties:
-                      algorithm:
-                        description: Algorithm is the hash algorithm used to generate
-                          value.
-                        enum:
-                        - md5
-                        - sha1
-                        - sha256
-                        - sha512
-                        type: string
-                      value:
-                        description: Value is the hash of the image data using Algorithm.
-                          It must be hex encoded using lowercase letters.
-                        maxLength: 1024
-                        minLength: 1
-                        pattern: ^[0-9a-f]+$
-                        type: string
-                    required:
-                    - algorithm
-                    - value
-                    type: object
-                  sizeB:
-                    description: SizeB is the size of the image data, in bytes
-                    format: int64
-                    type: integer
-                  status:
-                    description: Status is the image status as reported by Glance
-                    type: string
-                  virtualSizeB:
-                    description: VirtualSizeB is the size of the disk the image data
-                      represents, in bytes
-                    format: int64
-                    type: integer
-                type: object
-            type: object
-        type: object
-    served: true
-    storage: true
-    subresources:
-      status: {}
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
-  labels:
-    app.kubernetes.io/managed-by: kustomize
-    app.kubernetes.io/name: orc
-  name: orc-controller-manager
-  namespace: orc-system
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: Role
-metadata:
-  labels:
-    app.kubernetes.io/managed-by: kustomize
-    app.kubernetes.io/name: orc
-  name: orc-leader-election-role
-  namespace: orc-system
-rules:
-- apiGroups:
-  - ""
-  resources:
-  - configmaps
-  verbs:
-  - get
-  - list
-  - watch
-  - create
-  - update
-  - patch
-  - delete
-- apiGroups:
-  - coordination.k8s.io
-  resources:
-  - leases
-  verbs:
-  - get
-  - list
-  - watch
-  - create
-  - update
-  - patch
-  - delete
-- apiGroups:
-  - ""
-  resources:
-  - events
-  verbs:
-  - create
-  - patch
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
-  labels:
-    app.kubernetes.io/managed-by: kustomize
-    app.kubernetes.io/name: orc
-  name: orc-image-editor-role
-rules:
-- apiGroups:
-  - openstack.k-orc.cloud
-  resources:
-  - images
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - openstack.k-orc.cloud
-  resources:
-  - images/status
-  verbs:
-  - get
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
-  labels:
-    app.kubernetes.io/managed-by: kustomize
-    app.kubernetes.io/name: orc
-  name: orc-image-viewer-role
-rules:
-- apiGroups:
-  - openstack.k-orc.cloud
-  resources:
-  - images
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - openstack.k-orc.cloud
-  resources:
-  - images/status
-  verbs:
-  - get
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
-  name: orc-manager-role
-rules:
-- apiGroups:
-  - ""
-  resources:
-  - secrets
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - openstack.k-orc.cloud
-  resources:
-  - images
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - openstack.k-orc.cloud
-  resources:
-  - images/status
-  verbs:
-  - get
-  - patch
-  - update
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
-  name: orc-metrics-auth-role
-rules:
-- apiGroups:
-  - authentication.k8s.io
-  resources:
-  - tokenreviews
-  verbs:
-  - create
-- apiGroups:
-  - authorization.k8s.io
-  resources:
-  - subjectaccessreviews
-  verbs:
-  - create
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
-  name: orc-metrics-reader
-rules:
-- nonResourceURLs:
-  - /metrics
-  verbs:
-  - get
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: RoleBinding
-metadata:
-  labels:
-    app.kubernetes.io/managed-by: kustomize
-    app.kubernetes.io/name: orc
-  name: orc-leader-election-rolebinding
-  namespace: orc-system
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: Role
-  name: orc-leader-election-role
-subjects:
-- kind: ServiceAccount
-  name: orc-controller-manager
-  namespace: orc-system
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
-  labels:
-    app.kubernetes.io/managed-by: kustomize
-    app.kubernetes.io/name: orc
-  name: orc-manager-rolebinding
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: ClusterRole
-  name: orc-manager-role
-subjects:
-- kind: ServiceAccount
-  name: orc-controller-manager
-  namespace: orc-system
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
-  name: orc-metrics-auth-rolebinding
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: ClusterRole
-  name: orc-metrics-auth-role
-subjects:
-- kind: ServiceAccount
-  name: orc-controller-manager
-  namespace: orc-system
----
-apiVersion: v1
-kind: Service
-metadata:
-  labels:
-    app.kubernetes.io/managed-by: kustomize
-    app.kubernetes.io/name: orc
-    control-plane: controller-manager
-  name: orc-controller-manager-metrics-service
-  namespace: orc-system
-spec:
-  ports:
-  - name: https
-    port: 8443
-    protocol: TCP
-    targetPort: 8443
-  selector:
-    control-plane: controller-manager
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  labels:
-    app.kubernetes.io/managed-by: kustomize
-    app.kubernetes.io/name: orc
-    control-plane: controller-manager
-  name: orc-controller-manager
-  namespace: orc-system
-spec:
-  replicas: 1
-  selector:
-    matchLabels:
-      control-plane: controller-manager
-  template:
-    metadata:
-      annotations:
-        kubectl.kubernetes.io/default-container: manager
-      labels:
-        control-plane: controller-manager
-    spec:
-      containers:
-      - args:
-        - --metrics-bind-address=:8443
-        - --leader-elect
-        - --health-probe-bind-address=:8081
-        command:
-        - /manager
-        image: quay.io/orc/openstack-resource-controller:v1.0.1
-        livenessProbe:
-          httpGet:
-            path: /healthz
-            port: 8081
-          initialDelaySeconds: 15
-          periodSeconds: 20
-        name: manager
-        readinessProbe:
-          httpGet:
-            path: /readyz
-            port: 8081
-          initialDelaySeconds: 5
-          periodSeconds: 10
-        resources:
-          limits:
-            cpu: 500m
-            memory: 128Mi
-          requests:
-            cpu: 10m
-            memory: 64Mi
-        securityContext:
-          allowPrivilegeEscalation: false
-          capabilities:
-            drop:
-            - ALL
-          privileged: false
-          runAsGroup: 65532
-          runAsUser: 65532
-        terminationMessagePolicy: FallbackToLogsOnError
-      securityContext:
-        runAsNonRoot: true
-        seccompProfile:
-          type: RuntimeDefault
-      serviceAccountName: orc-controller-manager
-      terminationGracePeriodSeconds: 10
diff --git a/installers/flux/templates/sw-catalogs/infra-controllers/capi/manifests/providers/infrastructure/openstack/openstack.yaml b/installers/flux/templates/sw-catalogs/infra-controllers/capi/manifests/providers/infrastructure/openstack/openstack.yaml
deleted file mode 100644 (file)
index 4f6a7e1..0000000
+++ /dev/null
@@ -1,11668 +0,0 @@
-apiVersion: v1
-kind: Namespace
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: infrastructure-openstack
-    clusterctl.cluster.x-k8s.io: ""
-    pod-security.kubernetes.io/audit: restricted
-    pod-security.kubernetes.io/enforce: restricted
-    pod-security.kubernetes.io/warn: restricted
-  name: capo-system
----
-apiVersion: cert-manager.io/v1
-kind: Issuer
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: infrastructure-openstack
-    clusterctl.cluster.x-k8s.io: ""
-  name: capo-selfsigned-issuer
-  namespace: capo-system
-spec:
-  selfSigned: {}
----
-apiVersion: cert-manager.io/v1
-kind: Certificate
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: infrastructure-openstack
-    clusterctl.cluster.x-k8s.io: ""
-  name: capo-serving-cert
-  namespace: capo-system
-spec:
-  dnsNames:
-  - capo-webhook-service.capo-system.svc
-  - capo-webhook-service.capo-system.svc.cluster.local
-  issuerRef:
-    kind: Issuer
-    name: capo-selfsigned-issuer
-  secretName: capo-webhook-service-cert
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  annotations:
-    cert-manager.io/inject-ca-from: capo-system/capo-serving-cert
-    controller-gen.kubebuilder.io/version: v0.16.5
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: infrastructure-openstack
-    cluster.x-k8s.io/v1beta1: v1alpha7_v1beta1
-    clusterctl.cluster.x-k8s.io: ""
-  name: openstackclusters.infrastructure.cluster.x-k8s.io
-spec:
-  conversion:
-    strategy: Webhook
-    webhook:
-      clientConfig:
-        service:
-          name: capo-webhook-service
-          namespace: capo-system
-          path: /convert
-      conversionReviewVersions:
-      - v1
-      - v1beta1
-  group: infrastructure.cluster.x-k8s.io
-  names:
-    categories:
-    - cluster-api
-    kind: OpenStackCluster
-    listKind: OpenStackClusterList
-    plural: openstackclusters
-    shortNames:
-    - osc
-    singular: openstackcluster
-  scope: Namespaced
-  versions:
-  - additionalPrinterColumns:
-    - description: Cluster to which this OpenStackCluster belongs
-      jsonPath: .metadata.labels.cluster\.x-k8s\.io/cluster-name
-      name: Cluster
-      type: string
-    - description: Cluster infrastructure is ready for OpenStack instances
-      jsonPath: .status.ready
-      name: Ready
-      type: string
-    - description: Network the cluster is using
-      jsonPath: .status.network.id
-      name: Network
-      type: string
-    - description: API Endpoint
-      jsonPath: .spec.controlPlaneEndpoint.host
-      name: Endpoint
-      priority: 1
-      type: string
-    - description: Bastion address for breakglass access
-      jsonPath: .status.bastion.floatingIP
-      name: Bastion IP
-      type: string
-    - description: Time duration since creation of OpenStackCluster
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    deprecated: true
-    deprecationWarning: The v1alpha7 version of OpenStackCluster has been deprecated
-      and will be removed in a future release.
-    name: v1alpha7
-    schema:
-      openAPIV3Schema:
-        description: |-
-          OpenStackCluster is the Schema for the openstackclusters API.
-
-          Deprecated: v1alpha7.OpenStackCluster has been replaced by v1beta1.OpenStackCluster.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: OpenStackClusterSpec defines the desired state of OpenStackCluster.
-            properties:
-              allowAllInClusterTraffic:
-                description: |-
-                  AllowAllInClusterTraffic is only used when managed security groups are in use.
-                  If set to true, the rules for the managed security groups are configured so that all
-                  ingress and egress between cluster nodes is permitted, allowing CNIs other than
-                  Calico to be used.
-                type: boolean
-              apiServerFixedIP:
-                description: |-
-                  APIServerFixedIP is the fixed IP which will be associated with the API server.
-                  In the case where the API server has a floating IP but not a managed load balancer,
-                  this field is not used.
-                  If a managed load balancer is used and this field is not specified, a fixed IP will
-                  be dynamically allocated for the load balancer.
-                  If a managed load balancer is not used AND the API server floating IP is disabled,
-                  this field MUST be specified and should correspond to a pre-allocated port that
-                  holds the fixed IP to be used as a VIP.
-                type: string
-              apiServerFloatingIP:
-                description: |-
-                  APIServerFloatingIP is the floatingIP which will be associated with the API server.
-                  The floatingIP will be created if it does not already exist.
-                  If not specified, a new floatingIP is allocated.
-                  This field is not used if DisableAPIServerFloatingIP is set to true.
-                type: string
-              apiServerLoadBalancer:
-                description: |-
-                  APIServerLoadBalancer configures the optional LoadBalancer for the APIServer.
-                  It must be activated by setting `enabled: true`.
-                properties:
-                  additionalPorts:
-                    description: AdditionalPorts adds additional tcp ports to the
-                      load balancer.
-                    items:
-                      type: integer
-                    type: array
-                  allowedCidrs:
-                    description: AllowedCIDRs restrict access to all API-Server listeners
-                      to the given address CIDRs.
-                    items:
-                      type: string
-                    type: array
-                  enabled:
-                    description: Enabled defines whether a load balancer should be
-                      created.
-                    type: boolean
-                  provider:
-                    description: Octavia Provider Used to create load balancer
-                    type: string
-                type: object
-              apiServerPort:
-                description: |-
-                  APIServerPort is the port on which the listener on the APIServer
-                  will be created
-                type: integer
-              bastion:
-                description: |-
-                  Bastion is the OpenStack instance to login the nodes
-
-                  As a rolling update is not ideal during a bastion host session, we
-                  prevent changes to a running bastion configuration. Set `enabled: false` to
-                  make changes.
-                properties:
-                  availabilityZone:
-                    type: string
-                  enabled:
-                    type: boolean
-                  instance:
-                    description: Instance for the bastion itself
-                    properties:
-                      additionalBlockDevices:
-                        description: AdditionalBlockDevices is a list of specifications
-                          for additional block devices to attach to the server instance
-                        items:
-                          description: AdditionalBlockDevice is a block device to
-                            attach to the server.
-                          properties:
-                            name:
-                              description: |-
-                                Name of the block device in the context of a machine.
-                                If the block device is a volume, the Cinder volume will be named
-                                as a combination of the machine name and this name.
-                                Also, this name will be used for tagging the block device.
-                                Information about the block device tag can be obtained from the OpenStack
-                                metadata API or the config drive.
-                              type: string
-                            sizeGiB:
-                              description: SizeGiB is the size of the block device
-                                in gibibytes (GiB).
-                              type: integer
-                            storage:
-                              description: |-
-                                Storage specifies the storage type of the block device and
-                                additional storage options.
-                              properties:
-                                type:
-                                  description: |-
-                                    Type is the type of block device to create.
-                                    This can be either "Volume" or "Local".
-                                  type: string
-                                volume:
-                                  description: Volume contains additional storage
-                                    options for a volume block device.
-                                  properties:
-                                    availabilityZone:
-                                      description: |-
-                                        AvailabilityZone is the volume availability zone to create the volume in.
-                                        If omitted, the availability zone of the server will be used.
-                                        The availability zone must NOT contain spaces otherwise it will lead to volume that belongs
-                                        to this availability zone register failure, see kubernetes/cloud-provider-openstack#1379 for
-                                        further information.
-                                      type: string
-                                    type:
-                                      description: |-
-                                        Type is the Cinder volume type of the volume.
-                                        If omitted, the default Cinder volume type that is configured in the OpenStack cloud
-                                        will be used.
-                                      type: string
-                                  type: object
-                              required:
-                              - type
-                              type: object
-                          required:
-                          - name
-                          - sizeGiB
-                          - storage
-                          type: object
-                        type: array
-                        x-kubernetes-list-map-keys:
-                        - name
-                        x-kubernetes-list-type: map
-                      cloudName:
-                        description: The name of the cloud to use from the clouds
-                          secret
-                        type: string
-                      configDrive:
-                        description: Config Drive support
-                        type: boolean
-                      flavor:
-                        description: The flavor reference for the flavor for your
-                          server instance.
-                        minLength: 1
-                        type: string
-                      flavorID:
-                        description: |-
-                          FlavorID allows flavors to be specified by ID.  This field takes precedence
-                          over Flavor.
-                        minLength: 1
-                        type: string
-                      floatingIP:
-                        description: |-
-                          The floatingIP which will be associated to the machine, only used for master.
-                          The floatingIP should have been created and haven't been associated.
-                        type: string
-                      identityRef:
-                        description: |-
-                          IdentityRef is a reference to a identity to be used when reconciling this cluster.
-                          If not specified, the identity ref of the cluster will be used instead.
-                        properties:
-                          kind:
-                            description: |-
-                              Kind of the identity. Must be supported by the infrastructure
-                              provider and may be either cluster or namespace-scoped.
-                            minLength: 1
-                            type: string
-                          name:
-                            description: |-
-                              Name of the infrastructure identity to be used.
-                              Must be either a cluster-scoped resource, or namespaced-scoped
-                              resource the same namespace as the resource(s) being provisioned.
-                            type: string
-                        required:
-                        - kind
-                        - name
-                        type: object
-                      image:
-                        description: |-
-                          The name of the image to use for your server instance.
-                          If the RootVolume is specified, this will be ignored and use rootVolume directly.
-                        type: string
-                      imageUUID:
-                        description: |-
-                          The uuid of the image to use for your server instance.
-                          if it's empty, Image name will be used
-                        type: string
-                      instanceID:
-                        description: InstanceID is the OpenStack instance ID for this
-                          machine.
-                        type: string
-                      ports:
-                        description: |-
-                          Ports to be attached to the server instance. They are created if a port with the given name does not already exist.
-                          If not specified a default port will be added for the default cluster network.
-                        items:
-                          properties:
-                            adminStateUp:
-                              type: boolean
-                            allowedAddressPairs:
-                              items:
-                                properties:
-                                  ipAddress:
-                                    type: string
-                                  macAddress:
-                                    type: string
-                                type: object
-                              type: array
-                            description:
-                              type: string
-                            disablePortSecurity:
-                              description: |-
-                                DisablePortSecurity enables or disables the port security when set.
-                                When not set, it takes the value of the corresponding field at the network level.
-                              type: boolean
-                            fixedIPs:
-                              description: Specify pairs of subnet and/or IP address.
-                                These should be subnets of the network with the given
-                                NetworkID.
-                              items:
-                                properties:
-                                  ipAddress:
-                                    type: string
-                                  subnet:
-                                    description: |-
-                                      Subnet is an openstack subnet query that will return the id of a subnet to create
-                                      the fixed IP of a port in. This query must not return more than one subnet.
-                                    properties:
-                                      cidr:
-                                        type: string
-                                      description:
-                                        type: string
-                                      gateway_ip:
-                                        type: string
-                                      id:
-                                        type: string
-                                      ipVersion:
-                                        type: integer
-                                      ipv6AddressMode:
-                                        type: string
-                                      ipv6RaMode:
-                                        type: string
-                                      name:
-                                        type: string
-                                      notTags:
-                                        type: string
-                                      notTagsAny:
-                                        type: string
-                                      projectId:
-                                        type: string
-                                      tags:
-                                        type: string
-                                      tagsAny:
-                                        type: string
-                                    type: object
-                                required:
-                                - subnet
-                                type: object
-                              type: array
-                            hostId:
-                              description: The ID of the host where the port is allocated
-                              type: string
-                            macAddress:
-                              type: string
-                            nameSuffix:
-                              description: Used to make the name of the port unique.
-                                If unspecified, instead the 0-based index of the port
-                                in the list is used.
-                              type: string
-                            network:
-                              description: |-
-                                Network is a query for an openstack network that the port will be created or discovered on.
-                                This will fail if the query returns more than one network.
-                              properties:
-                                description:
-                                  type: string
-                                id:
-                                  type: string
-                                name:
-                                  type: string
-                                notTags:
-                                  type: string
-                                notTagsAny:
-                                  type: string
-                                projectId:
-                                  type: string
-                                tags:
-                                  type: string
-                                tagsAny:
-                                  type: string
-                              type: object
-                            profile:
-                              description: |-
-                                Profile is a set of key-value pairs that are used for binding details.
-                                We intentionally don't expose this as a map[string]string because we only want to enable
-                                the users to set the values of the keys that are known to work in OpenStack Networking API.
-                                See https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
-                              properties:
-                                ovsHWOffload:
-                                  description: OVSHWOffload enables or disables the
-                                    OVS hardware offload feature.
-                                  type: boolean
-                                trustedVF:
-                                  description: TrustedVF enables or disables the “trusted
-                                    mode” for the VF.
-                                  type: boolean
-                              type: object
-                            propagateUplinkStatus:
-                              description: PropageteUplinkStatus enables or disables
-                                the propagate uplink status on the port.
-                              type: boolean
-                            securityGroupFilters:
-                              description: The names, uuids, filters or any combination
-                                these of the security groups to assign to the instance
-                              items:
-                                properties:
-                                  description:
-                                    type: string
-                                  id:
-                                    type: string
-                                  name:
-                                    type: string
-                                  notTags:
-                                    type: string
-                                  notTagsAny:
-                                    type: string
-                                  projectId:
-                                    type: string
-                                  tags:
-                                    type: string
-                                  tagsAny:
-                                    type: string
-                                type: object
-                              type: array
-                            tags:
-                              description: |-
-                                Tags applied to the port (and corresponding trunk, if a trunk is configured.)
-                                These tags are applied in addition to the instance's tags, which will also be applied to the port.
-                              items:
-                                type: string
-                              type: array
-                              x-kubernetes-list-type: set
-                            trunk:
-                              description: Enables and disables trunk at port level.
-                                If not provided, openStackMachine.Spec.Trunk is inherited.
-                              type: boolean
-                            valueSpecs:
-                              description: |-
-                                Value specs are extra parameters to include in the API request with OpenStack.
-                                This is an extension point for the API, so what they do and if they are supported,
-                                depends on the specific OpenStack implementation.
-                              items:
-                                description: ValueSpec represents a single value_spec
-                                  key-value pair.
-                                properties:
-                                  key:
-                                    description: Key is the key in the key-value pair.
-                                    type: string
-                                  name:
-                                    description: |-
-                                      Name is the name of the key-value pair.
-                                      This is just for identifying the pair and will not be sent to the OpenStack API.
-                                    type: string
-                                  value:
-                                    description: Value is the value in the key-value
-                                      pair.
-                                    type: string
-                                required:
-                                - key
-                                - name
-                                - value
-                                type: object
-                              type: array
-                              x-kubernetes-list-map-keys:
-                              - name
-                              x-kubernetes-list-type: map
-                            vnicType:
-                              description: The virtual network interface card (vNIC)
-                                type that is bound to the neutron port.
-                              type: string
-                          type: object
-                        type: array
-                      providerID:
-                        description: ProviderID is the unique identifier as specified
-                          by the cloud provider.
-                        type: string
-                      rootVolume:
-                        description: The volume metadata to boot from
-                        properties:
-                          availabilityZone:
-                            type: string
-                          diskSize:
-                            type: integer
-                          volumeType:
-                            type: string
-                        type: object
-                      securityGroups:
-                        description: The names of the security groups to assign to
-                          the instance
-                        items:
-                          properties:
-                            description:
-                              type: string
-                            id:
-                              type: string
-                            name:
-                              type: string
-                            notTags:
-                              type: string
-                            notTagsAny:
-                              type: string
-                            projectId:
-                              type: string
-                            tags:
-                              type: string
-                            tagsAny:
-                              type: string
-                          type: object
-                        type: array
-                      serverGroupID:
-                        description: The server group to assign the machine to
-                        type: string
-                      serverMetadata:
-                        additionalProperties:
-                          type: string
-                        description: Metadata mapping. Allows you to create a map
-                          of key value pairs to add to the server instance.
-                        type: object
-                      sshKeyName:
-                        description: The ssh key to inject in the instance
-                        type: string
-                      tags:
-                        description: |-
-                          Machine tags
-                          Requires Nova api 2.52 minimum!
-                        items:
-                          type: string
-                        type: array
-                        x-kubernetes-list-type: set
-                      trunk:
-                        description: Whether the server instance is created on a trunk
-                          port or not.
-                        type: boolean
-                    type: object
-                type: object
-              cloudName:
-                description: The name of the cloud to use from the clouds secret
-                type: string
-              controlPlaneAvailabilityZones:
-                description: ControlPlaneAvailabilityZones is the az to deploy control
-                  plane to
-                items:
-                  type: string
-                type: array
-                x-kubernetes-list-type: set
-              controlPlaneEndpoint:
-                description: ControlPlaneEndpoint represents the endpoint used to
-                  communicate with the control plane.
-                properties:
-                  host:
-                    description: The hostname on which the API server is serving.
-                    type: string
-                  port:
-                    description: The port on which the API server is serving.
-                    format: int32
-                    type: integer
-                required:
-                - host
-                - port
-                type: object
-              controlPlaneOmitAvailabilityZone:
-                description: |-
-                  Indicates whether to omit the az for control plane nodes, allowing the Nova scheduler
-                  to make a decision on which az to use based on other scheduling constraints
-                type: boolean
-              disableAPIServerFloatingIP:
-                description: |-
-                  DisableAPIServerFloatingIP determines whether or not to attempt to attach a floating
-                  IP to the API server. This allows for the creation of clusters when attaching a floating
-                  IP to the API server (and hence, in many cases, exposing the API server to the internet)
-                  is not possible or desirable, e.g. if using a shared VLAN for communication between
-                  management and workload clusters or when the management cluster is inside the
-                  project network.
-                  This option requires that the API server use a VIP on the cluster network so that the
-                  underlying machines can change without changing ControlPlaneEndpoint.Host.
-                  When using a managed load balancer, this VIP will be managed automatically.
-                  If not using a managed load balancer, cluster configuration will fail without additional
-                  configuration to manage the VIP on the control plane machines, which falls outside of
-                  the scope of this controller.
-                type: boolean
-              disablePortSecurity:
-                description: |-
-                  DisablePortSecurity disables the port security of the network created for the
-                  Kubernetes cluster, which also disables SecurityGroups
-                type: boolean
-              dnsNameservers:
-                description: |-
-                  DNSNameservers is the list of nameservers for OpenStack Subnet being created.
-                  Set this value when you need create a new network/subnet while the access
-                  through DNS is required.
-                items:
-                  type: string
-                type: array
-                x-kubernetes-list-type: set
-              externalNetworkId:
-                description: |-
-                  ExternalNetworkID is the ID of an external OpenStack Network. This is necessary
-                  to get public internet to the VMs.
-                type: string
-              externalRouterIPs:
-                description: |-
-                  ExternalRouterIPs is an array of externalIPs on the respective subnets.
-                  This is necessary if the router needs a fixed ip in a specific subnet.
-                items:
-                  properties:
-                    fixedIP:
-                      description: The FixedIP in the corresponding subnet
-                      type: string
-                    subnet:
-                      description: The subnet in which the FixedIP is used for the
-                        Gateway of this router
-                      properties:
-                        cidr:
-                          type: string
-                        description:
-                          type: string
-                        gateway_ip:
-                          type: string
-                        id:
-                          type: string
-                        ipVersion:
-                          type: integer
-                        ipv6AddressMode:
-                          type: string
-                        ipv6RaMode:
-                          type: string
-                        name:
-                          type: string
-                        notTags:
-                          type: string
-                        notTagsAny:
-                          type: string
-                        projectId:
-                          type: string
-                        tags:
-                          type: string
-                        tagsAny:
-                          type: string
-                      type: object
-                  required:
-                  - subnet
-                  type: object
-                type: array
-              identityRef:
-                description: IdentityRef is a reference to a identity to be used when
-                  reconciling this cluster
-                properties:
-                  kind:
-                    description: |-
-                      Kind of the identity. Must be supported by the infrastructure
-                      provider and may be either cluster or namespace-scoped.
-                    minLength: 1
-                    type: string
-                  name:
-                    description: |-
-                      Name of the infrastructure identity to be used.
-                      Must be either a cluster-scoped resource, or namespaced-scoped
-                      resource the same namespace as the resource(s) being provisioned.
-                    type: string
-                required:
-                - kind
-                - name
-                type: object
-              managedSecurityGroups:
-                description: |-
-                  ManagedSecurityGroups determines whether OpenStack security groups for the cluster
-                  will be managed by the OpenStack provider or whether pre-existing security groups will
-                  be specified as part of the configuration.
-                  By default, the managed security groups have rules that allow the Kubelet, etcd, the
-                  Kubernetes API server and the Calico CNI plugin to function correctly.
-                type: boolean
-              network:
-                description: If NodeCIDR cannot be set this can be used to detect
-                  an existing network.
-                properties:
-                  description:
-                    type: string
-                  id:
-                    type: string
-                  name:
-                    type: string
-                  notTags:
-                    type: string
-                  notTagsAny:
-                    type: string
-                  projectId:
-                    type: string
-                  tags:
-                    type: string
-                  tagsAny:
-                    type: string
-                type: object
-              networkMtu:
-                description: |-
-                  NetworkMTU sets the maximum transmission unit (MTU) value to address fragmentation for the private network ID.
-                  This value will be used only if the Cluster actuator creates the network.
-                  If leaved empty, the network will have the default MTU defined in Openstack network service.
-                  To use this field, the Openstack installation requires the net-mtu neutron API extension.
-                type: integer
-              nodeCidr:
-                description: |-
-                  NodeCIDR is the OpenStack Subnet to be created. Cluster actuator will create a
-                  network, a subnet with NodeCIDR, and a router connected to this subnet.
-                  If you leave this empty, no network will be created.
-                type: string
-              router:
-                description: |-
-                  If NodeCIDR is set this option can be used to detect an existing router.
-                  If specified, no new router will be created.
-                properties:
-                  description:
-                    type: string
-                  id:
-                    type: string
-                  name:
-                    type: string
-                  notTags:
-                    type: string
-                  notTagsAny:
-                    type: string
-                  projectId:
-                    type: string
-                  tags:
-                    type: string
-                  tagsAny:
-                    type: string
-                type: object
-              subnet:
-                description: If NodeCIDR cannot be set this can be used to detect
-                  an existing subnet.
-                properties:
-                  cidr:
-                    type: string
-                  description:
-                    type: string
-                  gateway_ip:
-                    type: string
-                  id:
-                    type: string
-                  ipVersion:
-                    type: integer
-                  ipv6AddressMode:
-                    type: string
-                  ipv6RaMode:
-                    type: string
-                  name:
-                    type: string
-                  notTags:
-                    type: string
-                  notTagsAny:
-                    type: string
-                  projectId:
-                    type: string
-                  tags:
-                    type: string
-                  tagsAny:
-                    type: string
-                type: object
-              tags:
-                description: Tags for all resources in cluster
-                items:
-                  type: string
-                type: array
-                x-kubernetes-list-type: set
-            type: object
-          status:
-            description: OpenStackClusterStatus defines the observed state of OpenStackCluster.
-            properties:
-              apiServerLoadBalancer:
-                description: APIServerLoadBalancer describes the api server load balancer
-                  if one exists
-                properties:
-                  allowedCIDRs:
-                    items:
-                      type: string
-                    type: array
-                  id:
-                    type: string
-                  internalIP:
-                    type: string
-                  ip:
-                    type: string
-                  name:
-                    type: string
-                  tags:
-                    items:
-                      type: string
-                    type: array
-                required:
-                - id
-                - internalIP
-                - ip
-                - name
-                type: object
-              bastion:
-                properties:
-                  floatingIP:
-                    type: string
-                  id:
-                    type: string
-                  ip:
-                    type: string
-                  name:
-                    type: string
-                  sshKeyName:
-                    type: string
-                  state:
-                    description: InstanceState describes the state of an OpenStack
-                      instance.
-                    type: string
-                type: object
-              bastionSecurityGroup:
-                description: |-
-                  SecurityGroup represents the basic information of the associated
-                  OpenStack Neutron Security Group.
-                properties:
-                  id:
-                    type: string
-                  name:
-                    type: string
-                  rules:
-                    items:
-                      description: |-
-                        SecurityGroupRule represent the basic information of the associated OpenStack
-                        Security Group Role.
-                      properties:
-                        description:
-                          type: string
-                        direction:
-                          type: string
-                        etherType:
-                          type: string
-                        name:
-                          type: string
-                        portRangeMax:
-                          type: integer
-                        portRangeMin:
-                          type: integer
-                        protocol:
-                          type: string
-                        remoteGroupID:
-                          type: string
-                        remoteIPPrefix:
-                          type: string
-                        securityGroupID:
-                          type: string
-                      required:
-                      - description
-                      - direction
-                      - etherType
-                      - name
-                      - portRangeMax
-                      - portRangeMin
-                      - protocol
-                      - remoteGroupID
-                      - remoteIPPrefix
-                      - securityGroupID
-                      type: object
-                    type: array
-                required:
-                - id
-                - name
-                type: object
-              controlPlaneSecurityGroup:
-                description: |-
-                  ControlPlaneSecurityGroups contains all the information about the OpenStack
-                  Security Group that needs to be applied to control plane nodes.
-                properties:
-                  id:
-                    type: string
-                  name:
-                    type: string
-                  rules:
-                    items:
-                      description: |-
-                        SecurityGroupRule represent the basic information of the associated OpenStack
-                        Security Group Role.
-                      properties:
-                        description:
-                          type: string
-                        direction:
-                          type: string
-                        etherType:
-                          type: string
-                        name:
-                          type: string
-                        portRangeMax:
-                          type: integer
-                        portRangeMin:
-                          type: integer
-                        protocol:
-                          type: string
-                        remoteGroupID:
-                          type: string
-                        remoteIPPrefix:
-                          type: string
-                        securityGroupID:
-                          type: string
-                      required:
-                      - description
-                      - direction
-                      - etherType
-                      - name
-                      - portRangeMax
-                      - portRangeMin
-                      - protocol
-                      - remoteGroupID
-                      - remoteIPPrefix
-                      - securityGroupID
-                      type: object
-                    type: array
-                required:
-                - id
-                - name
-                type: object
-              externalNetwork:
-                description: externalNetwork contains information about the external
-                  network used for default ingress and egress traffic.
-                properties:
-                  id:
-                    type: string
-                  name:
-                    type: string
-                  tags:
-                    items:
-                      type: string
-                    type: array
-                required:
-                - id
-                - name
-                type: object
-              failureDomains:
-                additionalProperties:
-                  description: |-
-                    FailureDomainSpec is the Schema for Cluster API failure domains.
-                    It allows controllers to understand how many failure domains a cluster can optionally span across.
-                  properties:
-                    attributes:
-                      additionalProperties:
-                        type: string
-                      description: attributes is a free form map of attributes an
-                        infrastructure provider might use or require.
-                      type: object
-                    controlPlane:
-                      description: controlPlane determines if this failure domain
-                        is suitable for use by control plane machines.
-                      type: boolean
-                  type: object
-                description: FailureDomains represent OpenStack availability zones
-                type: object
-              failureMessage:
-                description: |-
-                  FailureMessage will be set in the event that there is a terminal problem
-                  reconciling the OpenStackCluster and will contain a more verbose string suitable
-                  for logging and human consumption.
-
-                  This field should not be set for transitive errors that a controller
-                  faces that are expected to be fixed automatically over
-                  time (like service outages), but instead indicate that something is
-                  fundamentally wrong with the OpenStackCluster's spec or the configuration of
-                  the controller, and that manual intervention is required. Examples
-                  of terminal errors would be invalid combinations of settings in the
-                  spec, values that are unsupported by the controller, or the
-                  responsible controller itself being critically misconfigured.
-
-                  Any transient errors that occur during the reconciliation of
-                  OpenStackClusters can be added as events to the OpenStackCluster object
-                  and/or logged in the controller's output.
-                type: string
-              failureReason:
-                description: |-
-                  FailureReason will be set in the event that there is a terminal problem
-                  reconciling the OpenStackCluster and will contain a succinct value suitable
-                  for machine interpretation.
-
-                  This field should not be set for transitive errors that a controller
-                  faces that are expected to be fixed automatically over
-                  time (like service outages), but instead indicate that something is
-                  fundamentally wrong with the OpenStackCluster's spec or the configuration of
-                  the controller, and that manual intervention is required. Examples
-                  of terminal errors would be invalid combinations of settings in the
-                  spec, values that are unsupported by the controller, or the
-                  responsible controller itself being critically misconfigured.
-
-                  Any transient errors that occur during the reconciliation of
-                  OpenStackClusters can be added as events to the OpenStackCluster object
-                  and/or logged in the controller's output.
-                type: string
-              network:
-                description: Network contains information about the created OpenStack
-                  Network.
-                properties:
-                  id:
-                    type: string
-                  name:
-                    type: string
-                  subnets:
-                    description: Subnets is a list of subnets associated with the
-                      default cluster network. Machines which use the default cluster
-                      network will get an address from all of these subnets.
-                    items:
-                      description: Subnet represents basic information about the associated
-                        OpenStack Neutron Subnet.
-                      properties:
-                        cidr:
-                          type: string
-                        id:
-                          type: string
-                        name:
-                          type: string
-                        tags:
-                          items:
-                            type: string
-                          type: array
-                      required:
-                      - cidr
-                      - id
-                      - name
-                      type: object
-                    type: array
-                  tags:
-                    items:
-                      type: string
-                    type: array
-                required:
-                - id
-                - name
-                type: object
-              ready:
-                type: boolean
-              router:
-                description: Router describes the default cluster router
-                properties:
-                  id:
-                    type: string
-                  ips:
-                    items:
-                      type: string
-                    type: array
-                  name:
-                    type: string
-                  tags:
-                    items:
-                      type: string
-                    type: array
-                required:
-                - id
-                - name
-                type: object
-              workerSecurityGroup:
-                description: |-
-                  WorkerSecurityGroup contains all the information about the OpenStack Security
-                  Group that needs to be applied to worker nodes.
-                properties:
-                  id:
-                    type: string
-                  name:
-                    type: string
-                  rules:
-                    items:
-                      description: |-
-                        SecurityGroupRule represent the basic information of the associated OpenStack
-                        Security Group Role.
-                      properties:
-                        description:
-                          type: string
-                        direction:
-                          type: string
-                        etherType:
-                          type: string
-                        name:
-                          type: string
-                        portRangeMax:
-                          type: integer
-                        portRangeMin:
-                          type: integer
-                        protocol:
-                          type: string
-                        remoteGroupID:
-                          type: string
-                        remoteIPPrefix:
-                          type: string
-                        securityGroupID:
-                          type: string
-                      required:
-                      - description
-                      - direction
-                      - etherType
-                      - name
-                      - portRangeMax
-                      - portRangeMin
-                      - protocol
-                      - remoteGroupID
-                      - remoteIPPrefix
-                      - securityGroupID
-                      type: object
-                    type: array
-                required:
-                - id
-                - name
-                type: object
-            required:
-            - ready
-            type: object
-        type: object
-    served: false
-    storage: false
-    subresources:
-      status: {}
-  - additionalPrinterColumns:
-    - description: Cluster to which this OpenStackCluster belongs
-      jsonPath: .metadata.labels.cluster\.x-k8s\.io/cluster-name
-      name: Cluster
-      type: string
-    - description: Cluster infrastructure is ready for OpenStack instances
-      jsonPath: .status.ready
-      name: Ready
-      type: string
-    - description: Network the cluster is using
-      jsonPath: .status.network.id
-      name: Network
-      type: string
-    - description: API Endpoint
-      jsonPath: .spec.controlPlaneEndpoint.host
-      name: Endpoint
-      priority: 1
-      type: string
-    - description: Bastion address for breakglass access
-      jsonPath: .status.bastion.floatingIP
-      name: Bastion IP
-      type: string
-    - description: Time duration since creation of OpenStackCluster
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    name: v1beta1
-    schema:
-      openAPIV3Schema:
-        description: OpenStackCluster is the Schema for the openstackclusters API.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: OpenStackClusterSpec defines the desired state of OpenStackCluster.
-            properties:
-              apiServerFixedIP:
-                description: |-
-                  APIServerFixedIP is the fixed IP which will be associated with the API server.
-                  In the case where the API server has a floating IP but not a managed load balancer,
-                  this field is not used.
-                  If a managed load balancer is used and this field is not specified, a fixed IP will
-                  be dynamically allocated for the load balancer.
-                  If a managed load balancer is not used AND the API server floating IP is disabled,
-                  this field MUST be specified and should correspond to a pre-allocated port that
-                  holds the fixed IP to be used as a VIP.
-                type: string
-              apiServerFloatingIP:
-                description: |-
-                  APIServerFloatingIP is the floatingIP which will be associated with the API server.
-                  The floatingIP will be created if it does not already exist.
-                  If not specified, a new floatingIP is allocated.
-                  This field is not used if DisableAPIServerFloatingIP is set to true.
-                type: string
-              apiServerLoadBalancer:
-                description: |-
-                  APIServerLoadBalancer configures the optional LoadBalancer for the APIServer.
-                  If not specified, no load balancer will be created for the API server.
-                properties:
-                  additionalPorts:
-                    description: AdditionalPorts adds additional tcp ports to the
-                      load balancer.
-                    items:
-                      type: integer
-                    type: array
-                    x-kubernetes-list-type: set
-                  allowedCIDRs:
-                    description: AllowedCIDRs restrict access to all API-Server listeners
-                      to the given address CIDRs.
-                    items:
-                      type: string
-                    type: array
-                    x-kubernetes-list-type: set
-                  availabilityZone:
-                    description: AvailabilityZone is the failure domain that will
-                      be used to create the APIServerLoadBalancer Spec.
-                    type: string
-                  enabled:
-                    default: true
-                    description: |-
-                      Enabled defines whether a load balancer should be created. This value
-                      defaults to true if an APIServerLoadBalancer is given.
-
-                      There is no reason to set this to false. To disable creation of the
-                      API server loadbalancer, omit the APIServerLoadBalancer field in the
-                      cluster spec instead.
-                    type: boolean
-                  flavor:
-                    description: Flavor is the flavor name that will be used to create
-                      the APIServerLoadBalancer Spec.
-                    type: string
-                  network:
-                    description: Network defines which network should the load balancer
-                      be allocated on.
-                    maxProperties: 1
-                    minProperties: 1
-                    properties:
-                      filter:
-                        description: Filter specifies a filter to select an OpenStack
-                          network. If provided, cannot be empty.
-                        minProperties: 1
-                        properties:
-                          description:
-                            type: string
-                          name:
-                            type: string
-                          notTags:
-                            description: |-
-                              NotTags is a list of tags to filter by. If specified, resources which
-                              contain all of the given tags will be excluded from the result.
-                            items:
-                              description: |-
-                                NeutronTag represents a tag on a Neutron resource.
-                                It may not be empty and may not contain commas.
-                              minLength: 1
-                              pattern: ^[^,]+$
-                              type: string
-                            type: array
-                            x-kubernetes-list-type: set
-                          notTagsAny:
-                            description: |-
-                              NotTagsAny is a list of tags to filter by. If specified, resources
-                              which contain any of the given tags will be excluded from the result.
-                            items:
-                              description: |-
-                                NeutronTag represents a tag on a Neutron resource.
-                                It may not be empty and may not contain commas.
-                              minLength: 1
-                              pattern: ^[^,]+$
-                              type: string
-                            type: array
-                            x-kubernetes-list-type: set
-                          projectID:
-                            type: string
-                          tags:
-                            description: |-
-                              Tags is a list of tags to filter by. If specified, the resource must
-                              have all of the tags specified to be included in the result.
-                            items:
-                              description: |-
-                                NeutronTag represents a tag on a Neutron resource.
-                                It may not be empty and may not contain commas.
-                              minLength: 1
-                              pattern: ^[^,]+$
-                              type: string
-                            type: array
-                            x-kubernetes-list-type: set
-                          tagsAny:
-                            description: |-
-                              TagsAny is a list of tags to filter by. If specified, the resource
-                              must have at least one of the tags specified to be included in the
-                              result.
-                            items:
-                              description: |-
-                                NeutronTag represents a tag on a Neutron resource.
-                                It may not be empty and may not contain commas.
-                              minLength: 1
-                              pattern: ^[^,]+$
-                              type: string
-                            type: array
-                            x-kubernetes-list-type: set
-                        type: object
-                      id:
-                        description: ID is the ID of the network to use. If ID is
-                          provided, the other filters cannot be provided. Must be
-                          in UUID format.
-                        format: uuid
-                        type: string
-                    type: object
-                  provider:
-                    description: |-
-                      Provider specifies name of a specific Octavia provider to use for the
-                      API load balancer. The Octavia default will be used if it is not
-                      specified.
-                    type: string
-                  subnets:
-                    description: |-
-                      Subnets define which subnets should the load balancer be allocated on.
-                      It is expected that subnets are located on the network specified in this resource.
-                      Only the first element is taken into account.
-                      kubebuilder:validation:MaxLength:=2
-                    items:
-                      description: SubnetParam specifies an OpenStack subnet to use.
-                        It may be specified by either ID or filter, but not both.
-                      maxProperties: 1
-                      minProperties: 1
-                      properties:
-                        filter:
-                          description: Filter specifies a filter to select the subnet.
-                            It must match exactly one subnet.
-                          minProperties: 1
-                          properties:
-                            cidr:
-                              type: string
-                            description:
-                              type: string
-                            gatewayIP:
-                              type: string
-                            ipVersion:
-                              type: integer
-                            ipv6AddressMode:
-                              type: string
-                            ipv6RAMode:
-                              type: string
-                            name:
-                              type: string
-                            notTags:
-                              description: |-
-                                NotTags is a list of tags to filter by. If specified, resources which
-                                contain all of the given tags will be excluded from the result.
-                              items:
-                                description: |-
-                                  NeutronTag represents a tag on a Neutron resource.
-                                  It may not be empty and may not contain commas.
-                                minLength: 1
-                                pattern: ^[^,]+$
-                                type: string
-                              type: array
-                              x-kubernetes-list-type: set
-                            notTagsAny:
-                              description: |-
-                                NotTagsAny is a list of tags to filter by. If specified, resources
-                                which contain any of the given tags will be excluded from the result.
-                              items:
-                                description: |-
-                                  NeutronTag represents a tag on a Neutron resource.
-                                  It may not be empty and may not contain commas.
-                                minLength: 1
-                                pattern: ^[^,]+$
-                                type: string
-                              type: array
-                              x-kubernetes-list-type: set
-                            projectID:
-                              type: string
-                            tags:
-                              description: |-
-                                Tags is a list of tags to filter by. If specified, the resource must
-                                have all of the tags specified to be included in the result.
-                              items:
-                                description: |-
-                                  NeutronTag represents a tag on a Neutron resource.
-                                  It may not be empty and may not contain commas.
-                                minLength: 1
-                                pattern: ^[^,]+$
-                                type: string
-                              type: array
-                              x-kubernetes-list-type: set
-                            tagsAny:
-                              description: |-
-                                TagsAny is a list of tags to filter by. If specified, the resource
-                                must have at least one of the tags specified to be included in the
-                                result.
-                              items:
-                                description: |-
-                                  NeutronTag represents a tag on a Neutron resource.
-                                  It may not be empty and may not contain commas.
-                                minLength: 1
-                                pattern: ^[^,]+$
-                                type: string
-                              type: array
-                              x-kubernetes-list-type: set
-                          type: object
-                        id:
-                          description: ID is the uuid of the subnet. It will not be
-                            validated.
-                          format: uuid
-                          type: string
-                      type: object
-                    type: array
-                    x-kubernetes-list-type: atomic
-                required:
-                - enabled
-                type: object
-              apiServerPort:
-                description: |-
-                  APIServerPort is the port on which the listener on the APIServer
-                  will be created. If specified, it must be an integer between 0 and 65535.
-                maximum: 65535
-                minimum: 0
-                type: integer
-              bastion:
-                description: |-
-                  Bastion is the OpenStack instance to login the nodes
-
-                  As a rolling update is not ideal during a bastion host session, we
-                  prevent changes to a running bastion configuration. To make changes, it's required
-                  to first set `enabled: false` which will remove the bastion and then changes can be made.
-                properties:
-                  availabilityZone:
-                    description: AvailabilityZone is the failure domain that will
-                      be used to create the Bastion Spec.
-                    type: string
-                  enabled:
-                    default: true
-                    description: |-
-                      Enabled means that bastion is enabled. The bastion is enabled by
-                      default if this field is not specified. Set this field to false to disable the
-                      bastion.
-
-                      It is not currently possible to remove the bastion from the cluster
-                      spec without first disabling it by setting this field to false and
-                      waiting until the bastion has been deleted.
-                    type: boolean
-                  floatingIP:
-                    description: |-
-                      FloatingIP which will be associated to the bastion machine. It's the IP address, not UUID.
-                      The floating IP should already exist and should not be associated with a port. If FIP of this address does not
-                      exist, CAPO will try to create it, but by default only OpenStack administrators have privileges to do so.
-                    format: ipv4
-                    type: string
-                  spec:
-                    description: Spec for the bastion itself
-                    properties:
-                      additionalBlockDevices:
-                        description: AdditionalBlockDevices is a list of specifications
-                          for additional block devices to attach to the server instance
-                        items:
-                          description: AdditionalBlockDevice is a block device to
-                            attach to the server.
-                          properties:
-                            name:
-                              description: |-
-                                Name of the block device in the context of a machine.
-                                If the block device is a volume, the Cinder volume will be named
-                                as a combination of the machine name and this name.
-                                Also, this name will be used for tagging the block device.
-                                Information about the block device tag can be obtained from the OpenStack
-                                metadata API or the config drive.
-                                Name cannot be 'root', which is reserved for the root volume.
-                              type: string
-                            sizeGiB:
-                              description: SizeGiB is the size of the block device
-                                in gibibytes (GiB).
-                              minimum: 1
-                              type: integer
-                            storage:
-                              description: |-
-                                Storage specifies the storage type of the block device and
-                                additional storage options.
-                              properties:
-                                type:
-                                  description: |-
-                                    Type is the type of block device to create.
-                                    This can be either "Volume" or "Local".
-                                  type: string
-                                volume:
-                                  description: Volume contains additional storage
-                                    options for a volume block device.
-                                  properties:
-                                    availabilityZone:
-                                      description: |-
-                                        AvailabilityZone is the volume availability zone to create the volume
-                                        in. If not specified, the volume will be created without an explicit
-                                        availability zone.
-                                      properties:
-                                        from:
-                                          default: Name
-                                          description: |-
-                                            From specifies where we will obtain the availability zone for the
-                                            volume. The options are "Name" and "Machine". If "Name" is specified
-                                            then the Name field must also be specified. If "Machine" is specified
-                                            the volume will use the value of FailureDomain, if any, from the
-                                            associated Machine.
-                                          enum:
-                                          - Name
-                                          - Machine
-                                          type: string
-                                        name:
-                                          description: |-
-                                            Name is the name of a volume availability zone to use. It is required
-                                            if From is "Name". The volume availability zone name may not contain
-                                            spaces.
-                                          minLength: 1
-                                          pattern: ^[^ ]+$
-                                          type: string
-                                      type: object
-                                      x-kubernetes-validations:
-                                      - message: name is required when from is 'Name'
-                                          or default
-                                        rule: '!has(self.from) || self.from == ''Name''
-                                          ? has(self.name) : !has(self.name)'
-                                    type:
-                                      description: |-
-                                        Type is the Cinder volume type of the volume.
-                                        If omitted, the default Cinder volume type that is configured in the OpenStack cloud
-                                        will be used.
-                                      type: string
-                                  type: object
-                              required:
-                              - type
-                              type: object
-                          required:
-                          - name
-                          - sizeGiB
-                          - storage
-                          type: object
-                        type: array
-                        x-kubernetes-list-map-keys:
-                        - name
-                        x-kubernetes-list-type: map
-                      configDrive:
-                        description: Config Drive support
-                        type: boolean
-                      flavor:
-                        description: The flavor reference for the flavor for your
-                          server instance.
-                        minLength: 1
-                        type: string
-                      flavorID:
-                        description: |-
-                          FlavorID allows flavors to be specified by ID.  This field takes precedence
-                          over Flavor.
-                        minLength: 1
-                        type: string
-                      floatingIPPoolRef:
-                        description: |-
-                          floatingIPPoolRef is a reference to a IPPool that will be assigned
-                          to an IPAddressClaim. Once the IPAddressClaim is fulfilled, the FloatingIP
-                          will be assigned to the OpenStackMachine.
-                        properties:
-                          apiGroup:
-                            description: |-
-                              APIGroup is the group for the resource being referenced.
-                              If APIGroup is not specified, the specified Kind must be in the core API group.
-                              For any other third-party types, APIGroup is required.
-                            type: string
-                          kind:
-                            description: Kind is the type of resource being referenced
-                            type: string
-                          name:
-                            description: Name is the name of resource being referenced
-                            type: string
-                        required:
-                        - kind
-                        - name
-                        type: object
-                        x-kubernetes-map-type: atomic
-                      identityRef:
-                        description: |-
-                          IdentityRef is a reference to a secret holding OpenStack credentials
-                          to be used when reconciling this machine. If not specified, the
-                          credentials specified in the cluster will be used.
-                        properties:
-                          cloudName:
-                            description: CloudName specifies the name of the entry
-                              in the clouds.yaml file to use.
-                            type: string
-                          name:
-                            description: |-
-                              Name is the name of a secret in the same namespace as the resource being provisioned.
-                              The secret must contain a key named `clouds.yaml` which contains an OpenStack clouds.yaml file.
-                              The secret may optionally contain a key named `cacert` containing a PEM-encoded CA certificate.
-                            type: string
-                          region:
-                            description: |-
-                              Region specifies an OpenStack region to use. If specified, it overrides
-                              any value in clouds.yaml. If specified for an OpenStackMachine, its
-                              value will be included in providerID.
-                            type: string
-                        required:
-                        - cloudName
-                        - name
-                        type: object
-                        x-kubernetes-validations:
-                        - message: region is immutable
-                          rule: (!has(self.region) && !has(oldSelf.region)) || self.region
-                            == oldSelf.region
-                      image:
-                        description: |-
-                          The image to use for your server instance.
-                          If the rootVolume is specified, this will be used when creating the root volume.
-                        maxProperties: 1
-                        minProperties: 1
-                        properties:
-                          filter:
-                            description: |-
-                              Filter describes a query for an image. If specified, the combination
-                              of name and tags must return a single matching image or an error will
-                              be raised.
-                            minProperties: 1
-                            properties:
-                              name:
-                                description: The name of the desired image. If specified,
-                                  the combination of name and tags must return a single
-                                  matching image or an error will be raised.
-                                type: string
-                              tags:
-                                description: The tags associated with the desired
-                                  image. If specified, the combination of name and
-                                  tags must return a single matching image or an error
-                                  will be raised.
-                                items:
-                                  type: string
-                                type: array
-                                x-kubernetes-list-type: set
-                            type: object
-                          id:
-                            description: ID is the uuid of the image. ID will not
-                              be validated before use.
-                            format: uuid
-                            type: string
-                          imageRef:
-                            description: |-
-                              ImageRef is a reference to an ORC Image in the same namespace as the
-                              referring object.
-                            properties:
-                              name:
-                                description: Name is the name of the referenced resource
-                                type: string
-                            required:
-                            - name
-                            type: object
-                        type: object
-                      ports:
-                        description: |-
-                          Ports to be attached to the server instance. They are created if a port with the given name does not already exist.
-                          If not specified a default port will be added for the default cluster network.
-                        items:
-                          properties:
-                            adminStateUp:
-                              description: AdminStateUp specifies whether the port
-                                should be created in the up (true) or down (false)
-                                state. The default is up.
-                              type: boolean
-                            allowedAddressPairs:
-                              description: |-
-                                AllowedAddressPairs is a list of address pairs which Neutron will
-                                allow the port to send traffic from in addition to the port's
-                                addresses. If not specified, the MAC Address will be the MAC Address
-                                of the port. Depending on the configuration of Neutron, it may be
-                                supported to specify a CIDR instead of a specific IP address.
-                              items:
-                                properties:
-                                  ipAddress:
-                                    description: |-
-                                      IPAddress is the IP address of the allowed address pair. Depending on
-                                      the configuration of Neutron, it may be supported to specify a CIDR
-                                      instead of a specific IP address.
-                                    type: string
-                                  macAddress:
-                                    description: |-
-                                      MACAddress is the MAC address of the allowed address pair. If not
-                                      specified, the MAC address will be the MAC address of the port.
-                                    type: string
-                                required:
-                                - ipAddress
-                                type: object
-                              type: array
-                            description:
-                              description: Description is a human-readable description
-                                for the port.
-                              type: string
-                            disablePortSecurity:
-                              description: |-
-                                DisablePortSecurity enables or disables the port security when set.
-                                When not set, it takes the value of the corresponding field at the network level.
-                              type: boolean
-                            fixedIPs:
-                              description: FixedIPs is a list of pairs of subnet and/or
-                                IP address to assign to the port. If specified, these
-                                must be subnets of the port's network.
-                              items:
-                                properties:
-                                  ipAddress:
-                                    description: |-
-                                      IPAddress is a specific IP address to assign to the port. If Subnet
-                                      is also specified, IPAddress must be a valid IP address in the
-                                      subnet. If Subnet is not specified, IPAddress must be a valid IP
-                                      address in any subnet of the port's network.
-                                    type: string
-                                  subnet:
-                                    description: |-
-                                      Subnet is an openstack subnet query that will return the id of a subnet to create
-                                      the fixed IP of a port in. This query must not return more than one subnet.
-                                    maxProperties: 1
-                                    minProperties: 1
-                                    properties:
-                                      filter:
-                                        description: Filter specifies a filter to
-                                          select the subnet. It must match exactly
-                                          one subnet.
-                                        minProperties: 1
-                                        properties:
-                                          cidr:
-                                            type: string
-                                          description:
-                                            type: string
-                                          gatewayIP:
-                                            type: string
-                                          ipVersion:
-                                            type: integer
-                                          ipv6AddressMode:
-                                            type: string
-                                          ipv6RAMode:
-                                            type: string
-                                          name:
-                                            type: string
-                                          notTags:
-                                            description: |-
-                                              NotTags is a list of tags to filter by. If specified, resources which
-                                              contain all of the given tags will be excluded from the result.
-                                            items:
-                                              description: |-
-                                                NeutronTag represents a tag on a Neutron resource.
-                                                It may not be empty and may not contain commas.
-                                              minLength: 1
-                                              pattern: ^[^,]+$
-                                              type: string
-                                            type: array
-                                            x-kubernetes-list-type: set
-                                          notTagsAny:
-                                            description: |-
-                                              NotTagsAny is a list of tags to filter by. If specified, resources
-                                              which contain any of the given tags will be excluded from the result.
-                                            items:
-                                              description: |-
-                                                NeutronTag represents a tag on a Neutron resource.
-                                                It may not be empty and may not contain commas.
-                                              minLength: 1
-                                              pattern: ^[^,]+$
-                                              type: string
-                                            type: array
-                                            x-kubernetes-list-type: set
-                                          projectID:
-                                            type: string
-                                          tags:
-                                            description: |-
-                                              Tags is a list of tags to filter by. If specified, the resource must
-                                              have all of the tags specified to be included in the result.
-                                            items:
-                                              description: |-
-                                                NeutronTag represents a tag on a Neutron resource.
-                                                It may not be empty and may not contain commas.
-                                              minLength: 1
-                                              pattern: ^[^,]+$
-                                              type: string
-                                            type: array
-                                            x-kubernetes-list-type: set
-                                          tagsAny:
-                                            description: |-
-                                              TagsAny is a list of tags to filter by. If specified, the resource
-                                              must have at least one of the tags specified to be included in the
-                                              result.
-                                            items:
-                                              description: |-
-                                                NeutronTag represents a tag on a Neutron resource.
-                                                It may not be empty and may not contain commas.
-                                              minLength: 1
-                                              pattern: ^[^,]+$
-                                              type: string
-                                            type: array
-                                            x-kubernetes-list-type: set
-                                        type: object
-                                      id:
-                                        description: ID is the uuid of the subnet.
-                                          It will not be validated.
-                                        format: uuid
-                                        type: string
-                                    type: object
-                                type: object
-                              type: array
-                              x-kubernetes-list-type: atomic
-                            hostID:
-                              description: HostID specifies the ID of the host where
-                                the port resides.
-                              type: string
-                            macAddress:
-                              description: MACAddress specifies the MAC address of
-                                the port. If not specified, the MAC address will be
-                                generated.
-                              type: string
-                            nameSuffix:
-                              description: NameSuffix will be appended to the name
-                                of the port if specified. If unspecified, instead
-                                the 0-based index of the port in the list is used.
-                              type: string
-                            network:
-                              description: |-
-                                Network is a query for an openstack network that the port will be created or discovered on.
-                                This will fail if the query returns more than one network.
-                              maxProperties: 1
-                              minProperties: 1
-                              properties:
-                                filter:
-                                  description: Filter specifies a filter to select
-                                    an OpenStack network. If provided, cannot be empty.
-                                  minProperties: 1
-                                  properties:
-                                    description:
-                                      type: string
-                                    name:
-                                      type: string
-                                    notTags:
-                                      description: |-
-                                        NotTags is a list of tags to filter by. If specified, resources which
-                                        contain all of the given tags will be excluded from the result.
-                                      items:
-                                        description: |-
-                                          NeutronTag represents a tag on a Neutron resource.
-                                          It may not be empty and may not contain commas.
-                                        minLength: 1
-                                        pattern: ^[^,]+$
-                                        type: string
-                                      type: array
-                                      x-kubernetes-list-type: set
-                                    notTagsAny:
-                                      description: |-
-                                        NotTagsAny is a list of tags to filter by. If specified, resources
-                                        which contain any of the given tags will be excluded from the result.
-                                      items:
-                                        description: |-
-                                          NeutronTag represents a tag on a Neutron resource.
-                                          It may not be empty and may not contain commas.
-                                        minLength: 1
-                                        pattern: ^[^,]+$
-                                        type: string
-                                      type: array
-                                      x-kubernetes-list-type: set
-                                    projectID:
-                                      type: string
-                                    tags:
-                                      description: |-
-                                        Tags is a list of tags to filter by. If specified, the resource must
-                                        have all of the tags specified to be included in the result.
-                                      items:
-                                        description: |-
-                                          NeutronTag represents a tag on a Neutron resource.
-                                          It may not be empty and may not contain commas.
-                                        minLength: 1
-                                        pattern: ^[^,]+$
-                                        type: string
-                                      type: array
-                                      x-kubernetes-list-type: set
-                                    tagsAny:
-                                      description: |-
-                                        TagsAny is a list of tags to filter by. If specified, the resource
-                                        must have at least one of the tags specified to be included in the
-                                        result.
-                                      items:
-                                        description: |-
-                                          NeutronTag represents a tag on a Neutron resource.
-                                          It may not be empty and may not contain commas.
-                                        minLength: 1
-                                        pattern: ^[^,]+$
-                                        type: string
-                                      type: array
-                                      x-kubernetes-list-type: set
-                                  type: object
-                                id:
-                                  description: ID is the ID of the network to use.
-                                    If ID is provided, the other filters cannot be
-                                    provided. Must be in UUID format.
-                                  format: uuid
-                                  type: string
-                              type: object
-                            profile:
-                              description: |-
-                                Profile is a set of key-value pairs that are used for binding
-                                details. We intentionally don't expose this as a map[string]string
-                                because we only want to enable the users to set the values of the
-                                keys that are known to work in OpenStack Networking API.  See
-                                https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
-                                To set profiles, your tenant needs permissions rule:create_port, and
-                                rule:create_port:binding:profile
-                              properties:
-                                ovsHWOffload:
-                                  description: |-
-                                    OVSHWOffload enables or disables the OVS hardware offload feature.
-                                    This flag is not required on OpenStack clouds since Yoga as Nova will set it automatically when the port is attached.
-                                    See: https://bugs.launchpad.net/nova/+bug/2020813
-                                  type: boolean
-                                trustedVF:
-                                  description: TrustedVF enables or disables the “trusted
-                                    mode” for the VF.
-                                  type: boolean
-                              type: object
-                            propagateUplinkStatus:
-                              description: PropageteUplinkStatus enables or disables
-                                the propagate uplink status on the port.
-                              type: boolean
-                            securityGroups:
-                              description: SecurityGroups is a list of the names,
-                                uuids, filters or any combination these of the security
-                                groups to assign to the instance.
-                              items:
-                                description: SecurityGroupParam specifies an OpenStack
-                                  security group. It may be specified by ID or filter,
-                                  but not both.
-                                maxProperties: 1
-                                minProperties: 1
-                                properties:
-                                  filter:
-                                    description: Filter specifies a query to select
-                                      an OpenStack security group. If provided, cannot
-                                      be empty.
-                                    minProperties: 1
-                                    properties:
-                                      description:
-                                        type: string
-                                      name:
-                                        type: string
-                                      notTags:
-                                        description: |-
-                                          NotTags is a list of tags to filter by. If specified, resources which
-                                          contain all of the given tags will be excluded from the result.
-                                        items:
-                                          description: |-
-                                            NeutronTag represents a tag on a Neutron resource.
-                                            It may not be empty and may not contain commas.
-                                          minLength: 1
-                                          pattern: ^[^,]+$
-                                          type: string
-                                        type: array
-                                        x-kubernetes-list-type: set
-                                      notTagsAny:
-                                        description: |-
-                                          NotTagsAny is a list of tags to filter by. If specified, resources
-                                          which contain any of the given tags will be excluded from the result.
-                                        items:
-                                          description: |-
-                                            NeutronTag represents a tag on a Neutron resource.
-                                            It may not be empty and may not contain commas.
-                                          minLength: 1
-                                          pattern: ^[^,]+$
-                                          type: string
-                                        type: array
-                                        x-kubernetes-list-type: set
-                                      projectID:
-                                        type: string
-                                      tags:
-                                        description: |-
-                                          Tags is a list of tags to filter by. If specified, the resource must
-                                          have all of the tags specified to be included in the result.
-                                        items:
-                                          description: |-
-                                            NeutronTag represents a tag on a Neutron resource.
-                                            It may not be empty and may not contain commas.
-                                          minLength: 1
-                                          pattern: ^[^,]+$
-                                          type: string
-                                        type: array
-                                        x-kubernetes-list-type: set
-                                      tagsAny:
-                                        description: |-
-                                          TagsAny is a list of tags to filter by. If specified, the resource
-                                          must have at least one of the tags specified to be included in the
-                                          result.
-                                        items:
-                                          description: |-
-                                            NeutronTag represents a tag on a Neutron resource.
-                                            It may not be empty and may not contain commas.
-                                          minLength: 1
-                                          pattern: ^[^,]+$
-                                          type: string
-                                        type: array
-                                        x-kubernetes-list-type: set
-                                    type: object
-                                  id:
-                                    description: ID is the ID of the security group
-                                      to use. If ID is provided, the other filters
-                                      cannot be provided. Must be in UUID format.
-                                    format: uuid
-                                    type: string
-                                type: object
-                              type: array
-                              x-kubernetes-list-type: atomic
-                            tags:
-                              description: |-
-                                Tags applied to the port (and corresponding trunk, if a trunk is configured.)
-                                These tags are applied in addition to the instance's tags, which will also be applied to the port.
-                              items:
-                                type: string
-                              type: array
-                              x-kubernetes-list-type: set
-                            trunk:
-                              description: |-
-                                Trunk specifies whether trunking is enabled at the port level. If not
-                                provided the value is inherited from the machine, or false for a
-                                bastion host.
-                              type: boolean
-                            valueSpecs:
-                              description: |-
-                                Value specs are extra parameters to include in the API request with OpenStack.
-                                This is an extension point for the API, so what they do and if they are supported,
-                                depends on the specific OpenStack implementation.
-                              items:
-                                description: ValueSpec represents a single value_spec
-                                  key-value pair.
-                                properties:
-                                  key:
-                                    description: Key is the key in the key-value pair.
-                                    type: string
-                                  name:
-                                    description: |-
-                                      Name is the name of the key-value pair.
-                                      This is just for identifying the pair and will not be sent to the OpenStack API.
-                                    type: string
-                                  value:
-                                    description: Value is the value in the key-value
-                                      pair.
-                                    type: string
-                                required:
-                                - key
-                                - name
-                                - value
-                                type: object
-                              type: array
-                              x-kubernetes-list-map-keys:
-                              - name
-                              x-kubernetes-list-type: map
-                            vnicType:
-                              description: |-
-                                VNICType specifies the type of vNIC which this port should be
-                                attached to. This is used to determine which mechanism driver(s) to
-                                be used to bind the port. The valid values are normal, macvtap,
-                                direct, baremetal, direct-physical, virtio-forwarder, smart-nic and
-                                remote-managed, although these values will not be validated in this
-                                API to ensure compatibility with future neutron changes or custom
-                                implementations. What type of vNIC is actually available depends on
-                                deployments. If not specified, the Neutron default value is used.
-                              type: string
-                          type: object
-                        type: array
-                      providerID:
-                        description: ProviderID is the unique identifier as specified
-                          by the cloud provider.
-                        type: string
-                      rootVolume:
-                        description: The volume metadata to boot from
-                        properties:
-                          availabilityZone:
-                            description: |-
-                              AvailabilityZone is the volume availability zone to create the volume
-                              in. If not specified, the volume will be created without an explicit
-                              availability zone.
-                            properties:
-                              from:
-                                default: Name
-                                description: |-
-                                  From specifies where we will obtain the availability zone for the
-                                  volume. The options are "Name" and "Machine". If "Name" is specified
-                                  then the Name field must also be specified. If "Machine" is specified
-                                  the volume will use the value of FailureDomain, if any, from the
-                                  associated Machine.
-                                enum:
-                                - Name
-                                - Machine
-                                type: string
-                              name:
-                                description: |-
-                                  Name is the name of a volume availability zone to use. It is required
-                                  if From is "Name". The volume availability zone name may not contain
-                                  spaces.
-                                minLength: 1
-                                pattern: ^[^ ]+$
-                                type: string
-                            type: object
-                            x-kubernetes-validations:
-                            - message: name is required when from is 'Name' or default
-                              rule: '!has(self.from) || self.from == ''Name'' ? has(self.name)
-                                : !has(self.name)'
-                          sizeGiB:
-                            description: SizeGiB is the size of the block device in
-                              gibibytes (GiB).
-                            minimum: 1
-                            type: integer
-                          type:
-                            description: |-
-                              Type is the Cinder volume type of the volume.
-                              If omitted, the default Cinder volume type that is configured in the OpenStack cloud
-                              will be used.
-                            type: string
-                        required:
-                        - sizeGiB
-                        type: object
-                      schedulerHintAdditionalProperties:
-                        description: |-
-                          SchedulerHintAdditionalProperties are arbitrary key/value pairs that provide additional hints
-                          to the OpenStack scheduler. These hints can influence how instances are placed on the infrastructure,
-                          such as specifying certain host aggregates or availability zones.
-                        items:
-                          description: |-
-                            SchedulerHintAdditionalProperty represents a single additional property for a scheduler hint.
-                            It includes a Name to identify the property and a Value that can be of various types.
-                          properties:
-                            name:
-                              description: |-
-                                Name is the name of the scheduler hint property.
-                                It is a unique identifier for the property.
-                              minLength: 1
-                              type: string
-                            value:
-                              description: |-
-                                Value is the value of the scheduler hint property, which can be of various types
-                                (e.g., bool, string, int). The type is indicated by the Value.Type field.
-                              properties:
-                                bool:
-                                  description: |-
-                                    Bool is the boolean value of the scheduler hint, used when Type is "Bool".
-                                    This field is required if type is 'Bool', and must not be set otherwise.
-                                  type: boolean
-                                number:
-                                  description: |-
-                                    Number is the integer value of the scheduler hint, used when Type is "Number".
-                                    This field is required if type is 'Number', and must not be set otherwise.
-                                  type: integer
-                                string:
-                                  description: |-
-                                    String is the string value of the scheduler hint, used when Type is "String".
-                                    This field is required if type is 'String', and must not be set otherwise.
-                                  maxLength: 255
-                                  minLength: 1
-                                  type: string
-                                type:
-                                  description: |-
-                                    Type represents the type of the value.
-                                    Valid values are Bool, String, and Number.
-                                  enum:
-                                  - Bool
-                                  - String
-                                  - Number
-                                  type: string
-                              required:
-                              - type
-                              type: object
-                              x-kubernetes-validations:
-                              - message: bool is required when type is Bool, and forbidden
-                                  otherwise
-                                rule: 'has(self.type) && self.type == ''Bool'' ? has(self.bool)
-                                  : !has(self.bool)'
-                              - message: number is required when type is Number, and
-                                  forbidden otherwise
-                                rule: 'has(self.type) && self.type == ''Number'' ?
-                                  has(self.number) : !has(self.number)'
-                              - message: string is required when type is String, and
-                                  forbidden otherwise
-                                rule: 'has(self.type) && self.type == ''String'' ?
-                                  has(self.string) : !has(self.string)'
-                          required:
-                          - name
-                          - value
-                          type: object
-                        type: array
-                        x-kubernetes-list-map-keys:
-                        - name
-                        x-kubernetes-list-type: map
-                      securityGroups:
-                        description: The names of the security groups to assign to
-                          the instance
-                        items:
-                          description: SecurityGroupParam specifies an OpenStack security
-                            group. It may be specified by ID or filter, but not both.
-                          maxProperties: 1
-                          minProperties: 1
-                          properties:
-                            filter:
-                              description: Filter specifies a query to select an OpenStack
-                                security group. If provided, cannot be empty.
-                              minProperties: 1
-                              properties:
-                                description:
-                                  type: string
-                                name:
-                                  type: string
-                                notTags:
-                                  description: |-
-                                    NotTags is a list of tags to filter by. If specified, resources which
-                                    contain all of the given tags will be excluded from the result.
-                                  items:
-                                    description: |-
-                                      NeutronTag represents a tag on a Neutron resource.
-                                      It may not be empty and may not contain commas.
-                                    minLength: 1
-                                    pattern: ^[^,]+$
-                                    type: string
-                                  type: array
-                                  x-kubernetes-list-type: set
-                                notTagsAny:
-                                  description: |-
-                                    NotTagsAny is a list of tags to filter by. If specified, resources
-                                    which contain any of the given tags will be excluded from the result.
-                                  items:
-                                    description: |-
-                                      NeutronTag represents a tag on a Neutron resource.
-                                      It may not be empty and may not contain commas.
-                                    minLength: 1
-                                    pattern: ^[^,]+$
-                                    type: string
-                                  type: array
-                                  x-kubernetes-list-type: set
-                                projectID:
-                                  type: string
-                                tags:
-                                  description: |-
-                                    Tags is a list of tags to filter by. If specified, the resource must
-                                    have all of the tags specified to be included in the result.
-                                  items:
-                                    description: |-
-                                      NeutronTag represents a tag on a Neutron resource.
-                                      It may not be empty and may not contain commas.
-                                    minLength: 1
-                                    pattern: ^[^,]+$
-                                    type: string
-                                  type: array
-                                  x-kubernetes-list-type: set
-                                tagsAny:
-                                  description: |-
-                                    TagsAny is a list of tags to filter by. If specified, the resource
-                                    must have at least one of the tags specified to be included in the
-                                    result.
-                                  items:
-                                    description: |-
-                                      NeutronTag represents a tag on a Neutron resource.
-                                      It may not be empty and may not contain commas.
-                                    minLength: 1
-                                    pattern: ^[^,]+$
-                                    type: string
-                                  type: array
-                                  x-kubernetes-list-type: set
-                              type: object
-                            id:
-                              description: ID is the ID of the security group to use.
-                                If ID is provided, the other filters cannot be provided.
-                                Must be in UUID format.
-                              format: uuid
-                              type: string
-                          type: object
-                        type: array
-                      serverGroup:
-                        description: The server group to assign the machine to.
-                        maxProperties: 1
-                        minProperties: 1
-                        properties:
-                          filter:
-                            description: Filter specifies a query to select an OpenStack
-                              server group. If provided, it cannot be empty.
-                            minProperties: 1
-                            properties:
-                              name:
-                                description: Name is the name of a server group to
-                                  look for.
-                                type: string
-                            type: object
-                          id:
-                            description: ID is the ID of the server group to use.
-                            format: uuid
-                            type: string
-                        type: object
-                      serverMetadata:
-                        description: Metadata mapping. Allows you to create a map
-                          of key value pairs to add to the server instance.
-                        items:
-                          properties:
-                            key:
-                              description: Key is the server metadata key
-                              maxLength: 255
-                              type: string
-                            value:
-                              description: Value is the server metadata value
-                              maxLength: 255
-                              type: string
-                          required:
-                          - key
-                          - value
-                          type: object
-                        type: array
-                        x-kubernetes-list-map-keys:
-                        - key
-                        x-kubernetes-list-type: map
-                      sshKeyName:
-                        description: The ssh key to inject in the instance
-                        type: string
-                      tags:
-                        description: |-
-                          Tags which will be added to the machine and all dependent resources
-                          which support them. These are in addition to Tags defined on the
-                          cluster.
-                          Requires Nova api 2.52 minimum!
-                        items:
-                          type: string
-                        type: array
-                        x-kubernetes-list-type: set
-                      trunk:
-                        description: Whether the server instance is created on a trunk
-                          port or not.
-                        type: boolean
-                    required:
-                    - image
-                    type: object
-                    x-kubernetes-validations:
-                    - message: at least one of flavor or flavorID must be set
-                      rule: (has(self.flavor) || has(self.flavorID))
-                type: object
-                x-kubernetes-validations:
-                - message: spec is required if bastion is enabled
-                  rule: '!self.enabled || has(self.spec)'
-              controlPlaneAvailabilityZones:
-                description: |-
-                  ControlPlaneAvailabilityZones is the set of availability zones which
-                  control plane machines may be deployed to.
-                items:
-                  type: string
-                type: array
-                x-kubernetes-list-type: set
-              controlPlaneEndpoint:
-                description: |-
-                  ControlPlaneEndpoint represents the endpoint used to communicate with the control plane.
-                  It is normally populated automatically by the OpenStackCluster
-                  controller during cluster provisioning. If it is set on creation the
-                  control plane endpoint will use the values set here in preference to
-                  values set elsewhere.
-                  ControlPlaneEndpoint cannot be modified after ControlPlaneEndpoint.Host has been set.
-                properties:
-                  host:
-                    description: The hostname on which the API server is serving.
-                    type: string
-                  port:
-                    description: The port on which the API server is serving.
-                    format: int32
-                    type: integer
-                required:
-                - host
-                - port
-                type: object
-              controlPlaneOmitAvailabilityZone:
-                description: |-
-                  ControlPlaneOmitAvailabilityZone causes availability zone to be
-                  omitted when creating control plane nodes, allowing the Nova
-                  scheduler to make a decision on which availability zone to use based
-                  on other scheduling constraints
-                type: boolean
-              disableAPIServerFloatingIP:
-                description: |-
-                  DisableAPIServerFloatingIP determines whether or not to attempt to attach a floating
-                  IP to the API server. This allows for the creation of clusters when attaching a floating
-                  IP to the API server (and hence, in many cases, exposing the API server to the internet)
-                  is not possible or desirable, e.g. if using a shared VLAN for communication between
-                  management and workload clusters or when the management cluster is inside the
-                  project network.
-                  This option requires that the API server use a VIP on the cluster network so that the
-                  underlying machines can change without changing ControlPlaneEndpoint.Host.
-                  When using a managed load balancer, this VIP will be managed automatically.
-                  If not using a managed load balancer, cluster configuration will fail without additional
-                  configuration to manage the VIP on the control plane machines, which falls outside of
-                  the scope of this controller.
-                type: boolean
-              disableExternalNetwork:
-                description: |-
-                  DisableExternalNetwork specifies whether or not to attempt to connect the cluster
-                  to an external network. This allows for the creation of clusters when connecting
-                  to an external network is not possible or desirable, e.g. if using a provider network.
-                type: boolean
-              disablePortSecurity:
-                description: |-
-                  DisablePortSecurity disables the port security of the network created for the
-                  Kubernetes cluster, which also disables SecurityGroups
-                type: boolean
-              externalNetwork:
-                description: |-
-                  ExternalNetwork is the OpenStack Network to be used to get public internet to the VMs.
-                  This option is ignored if DisableExternalNetwork is set to true.
-
-                  If ExternalNetwork is defined it must refer to exactly one external network.
-
-                  If ExternalNetwork is not defined or is empty the controller will use any
-                  existing external network as long as there is only one. It is an
-                  error if ExternalNetwork is not defined and there are multiple
-                  external networks unless DisableExternalNetwork is also set.
-
-                  If ExternalNetwork is not defined and there are no external networks
-                  the controller will proceed as though DisableExternalNetwork was set.
-                maxProperties: 1
-                minProperties: 1
-                properties:
-                  filter:
-                    description: Filter specifies a filter to select an OpenStack
-                      network. If provided, cannot be empty.
-                    minProperties: 1
-                    properties:
-                      description:
-                        type: string
-                      name:
-                        type: string
-                      notTags:
-                        description: |-
-                          NotTags is a list of tags to filter by. If specified, resources which
-                          contain all of the given tags will be excluded from the result.
-                        items:
-                          description: |-
-                            NeutronTag represents a tag on a Neutron resource.
-                            It may not be empty and may not contain commas.
-                          minLength: 1
-                          pattern: ^[^,]+$
-                          type: string
-                        type: array
-                        x-kubernetes-list-type: set
-                      notTagsAny:
-                        description: |-
-                          NotTagsAny is a list of tags to filter by. If specified, resources
-                          which contain any of the given tags will be excluded from the result.
-                        items:
-                          description: |-
-                            NeutronTag represents a tag on a Neutron resource.
-                            It may not be empty and may not contain commas.
-                          minLength: 1
-                          pattern: ^[^,]+$
-                          type: string
-                        type: array
-                        x-kubernetes-list-type: set
-                      projectID:
-                        type: string
-                      tags:
-                        description: |-
-                          Tags is a list of tags to filter by. If specified, the resource must
-                          have all of the tags specified to be included in the result.
-                        items:
-                          description: |-
-                            NeutronTag represents a tag on a Neutron resource.
-                            It may not be empty and may not contain commas.
-                          minLength: 1
-                          pattern: ^[^,]+$
-                          type: string
-                        type: array
-                        x-kubernetes-list-type: set
-                      tagsAny:
-                        description: |-
-                          TagsAny is a list of tags to filter by. If specified, the resource
-                          must have at least one of the tags specified to be included in the
-                          result.
-                        items:
-                          description: |-
-                            NeutronTag represents a tag on a Neutron resource.
-                            It may not be empty and may not contain commas.
-                          minLength: 1
-                          pattern: ^[^,]+$
-                          type: string
-                        type: array
-                        x-kubernetes-list-type: set
-                    type: object
-                  id:
-                    description: ID is the ID of the network to use. If ID is provided,
-                      the other filters cannot be provided. Must be in UUID format.
-                    format: uuid
-                    type: string
-                type: object
-              externalRouterIPs:
-                description: |-
-                  ExternalRouterIPs is an array of externalIPs on the respective subnets.
-                  This is necessary if the router needs a fixed ip in a specific subnet.
-                items:
-                  properties:
-                    fixedIP:
-                      description: The FixedIP in the corresponding subnet
-                      type: string
-                    subnet:
-                      description: The subnet in which the FixedIP is used for the
-                        Gateway of this router
-                      maxProperties: 1
-                      minProperties: 1
-                      properties:
-                        filter:
-                          description: Filter specifies a filter to select the subnet.
-                            It must match exactly one subnet.
-                          minProperties: 1
-                          properties:
-                            cidr:
-                              type: string
-                            description:
-                              type: string
-                            gatewayIP:
-                              type: string
-                            ipVersion:
-                              type: integer
-                            ipv6AddressMode:
-                              type: string
-                            ipv6RAMode:
-                              type: string
-                            name:
-                              type: string
-                            notTags:
-                              description: |-
-                                NotTags is a list of tags to filter by. If specified, resources which
-                                contain all of the given tags will be excluded from the result.
-                              items:
-                                description: |-
-                                  NeutronTag represents a tag on a Neutron resource.
-                                  It may not be empty and may not contain commas.
-                                minLength: 1
-                                pattern: ^[^,]+$
-                                type: string
-                              type: array
-                              x-kubernetes-list-type: set
-                            notTagsAny:
-                              description: |-
-                                NotTagsAny is a list of tags to filter by. If specified, resources
-                                which contain any of the given tags will be excluded from the result.
-                              items:
-                                description: |-
-                                  NeutronTag represents a tag on a Neutron resource.
-                                  It may not be empty and may not contain commas.
-                                minLength: 1
-                                pattern: ^[^,]+$
-                                type: string
-                              type: array
-                              x-kubernetes-list-type: set
-                            projectID:
-                              type: string
-                            tags:
-                              description: |-
-                                Tags is a list of tags to filter by. If specified, the resource must
-                                have all of the tags specified to be included in the result.
-                              items:
-                                description: |-
-                                  NeutronTag represents a tag on a Neutron resource.
-                                  It may not be empty and may not contain commas.
-                                minLength: 1
-                                pattern: ^[^,]+$
-                                type: string
-                              type: array
-                              x-kubernetes-list-type: set
-                            tagsAny:
-                              description: |-
-                                TagsAny is a list of tags to filter by. If specified, the resource
-                                must have at least one of the tags specified to be included in the
-                                result.
-                              items:
-                                description: |-
-                                  NeutronTag represents a tag on a Neutron resource.
-                                  It may not be empty and may not contain commas.
-                                minLength: 1
-                                pattern: ^[^,]+$
-                                type: string
-                              type: array
-                              x-kubernetes-list-type: set
-                          type: object
-                        id:
-                          description: ID is the uuid of the subnet. It will not be
-                            validated.
-                          format: uuid
-                          type: string
-                      type: object
-                  required:
-                  - subnet
-                  type: object
-                type: array
-                x-kubernetes-list-type: atomic
-              identityRef:
-                description: |-
-                  IdentityRef is a reference to a secret holding OpenStack credentials
-                  to be used when reconciling this cluster. It is also to reconcile
-                  machines unless overridden in the machine spec.
-                properties:
-                  cloudName:
-                    description: CloudName specifies the name of the entry in the
-                      clouds.yaml file to use.
-                    type: string
-                  name:
-                    description: |-
-                      Name is the name of a secret in the same namespace as the resource being provisioned.
-                      The secret must contain a key named `clouds.yaml` which contains an OpenStack clouds.yaml file.
-                      The secret may optionally contain a key named `cacert` containing a PEM-encoded CA certificate.
-                    type: string
-                  region:
-                    description: |-
-                      Region specifies an OpenStack region to use. If specified, it overrides
-                      any value in clouds.yaml. If specified for an OpenStackMachine, its
-                      value will be included in providerID.
-                    type: string
-                required:
-                - cloudName
-                - name
-                type: object
-                x-kubernetes-validations:
-                - message: region is immutable
-                  rule: (!has(self.region) && !has(oldSelf.region)) || self.region
-                    == oldSelf.region
-              managedSecurityGroups:
-                description: |-
-                  ManagedSecurityGroups determines whether OpenStack security groups for the cluster
-                  will be managed by the OpenStack provider or whether pre-existing security groups will
-                  be specified as part of the configuration.
-                  By default, the managed security groups have rules that allow the Kubelet, etcd, and the
-                  Kubernetes API server to function correctly.
-                  It's possible to add additional rules to the managed security groups.
-                  When defined to an empty struct, the managed security groups will be created with the default rules.
-                properties:
-                  allNodesSecurityGroupRules:
-                    description: allNodesSecurityGroupRules defines the rules that
-                      should be applied to all nodes.
-                    items:
-                      description: |-
-                        SecurityGroupRuleSpec represent the basic information of the associated OpenStack
-                        Security Group Role.
-                        For now this is only used for the allNodesSecurityGroupRules but when we add
-                        other security groups, we'll need to add a validation because
-                        Remote* fields are mutually exclusive.
-                      properties:
-                        description:
-                          description: description of the security group rule.
-                          type: string
-                        direction:
-                          description: |-
-                            direction in which the security group rule is applied. The only values
-                            allowed are "ingress" or "egress". For a compute instance, an ingress
-                            security group rule is applied to incoming (ingress) traffic for that
-                            instance. An egress rule is applied to traffic leaving the instance.
-                          type: string
-                        etherType:
-                          description: |-
-                            etherType must be IPv4 or IPv6, and addresses represented in CIDR must match the
-                            ingress or egress rules.
-                          type: string
-                        name:
-                          description: |-
-                            name of the security group rule.
-                            It's used to identify the rule so it can be patched and will not be sent to the OpenStack API.
-                          type: string
-                        portRangeMax:
-                          description: |-
-                            portRangeMax is a number in the range that is matched by the security group
-                            rule. The portRangeMin attribute constrains the portRangeMax attribute.
-                          type: integer
-                        portRangeMin:
-                          description: |-
-                            portRangeMin is a number in the range that is matched by the security group
-                            rule. If the protocol is TCP or UDP, this value must be less than or equal
-                            to the value of the portRangeMax attribute.
-                          type: integer
-                        protocol:
-                          description: protocol is the protocol that is matched by
-                            the security group rule.
-                          type: string
-                        remoteGroupID:
-                          description: |-
-                            remoteGroupID is the remote group ID to be associated with this security group rule.
-                            You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
-                          type: string
-                        remoteIPPrefix:
-                          description: |-
-                            remoteIPPrefix is the remote IP prefix to be associated with this security group rule.
-                            You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
-                          type: string
-                        remoteManagedGroups:
-                          description: |-
-                            remoteManagedGroups is the remote managed groups to be associated with this security group rule.
-                            You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
-                          items:
-                            enum:
-                            - bastion
-                            - controlplane
-                            - worker
-                            type: string
-                          type: array
-                      required:
-                      - direction
-                      - name
-                      type: object
-                    type: array
-                    x-kubernetes-list-map-keys:
-                    - name
-                    x-kubernetes-list-type: map
-                  allowAllInClusterTraffic:
-                    default: false
-                    description: AllowAllInClusterTraffic allows all ingress and egress
-                      traffic between cluster nodes when set to true.
-                    type: boolean
-                  controlPlaneNodesSecurityGroupRules:
-                    description: controlPlaneNodesSecurityGroupRules defines the rules
-                      that should be applied to control plane nodes.
-                    items:
-                      description: |-
-                        SecurityGroupRuleSpec represent the basic information of the associated OpenStack
-                        Security Group Role.
-                        For now this is only used for the allNodesSecurityGroupRules but when we add
-                        other security groups, we'll need to add a validation because
-                        Remote* fields are mutually exclusive.
-                      properties:
-                        description:
-                          description: description of the security group rule.
-                          type: string
-                        direction:
-                          description: |-
-                            direction in which the security group rule is applied. The only values
-                            allowed are "ingress" or "egress". For a compute instance, an ingress
-                            security group rule is applied to incoming (ingress) traffic for that
-                            instance. An egress rule is applied to traffic leaving the instance.
-                          type: string
-                        etherType:
-                          description: |-
-                            etherType must be IPv4 or IPv6, and addresses represented in CIDR must match the
-                            ingress or egress rules.
-                          type: string
-                        name:
-                          description: |-
-                            name of the security group rule.
-                            It's used to identify the rule so it can be patched and will not be sent to the OpenStack API.
-                          type: string
-                        portRangeMax:
-                          description: |-
-                            portRangeMax is a number in the range that is matched by the security group
-                            rule. The portRangeMin attribute constrains the portRangeMax attribute.
-                          type: integer
-                        portRangeMin:
-                          description: |-
-                            portRangeMin is a number in the range that is matched by the security group
-                            rule. If the protocol is TCP or UDP, this value must be less than or equal
-                            to the value of the portRangeMax attribute.
-                          type: integer
-                        protocol:
-                          description: protocol is the protocol that is matched by
-                            the security group rule.
-                          type: string
-                        remoteGroupID:
-                          description: |-
-                            remoteGroupID is the remote group ID to be associated with this security group rule.
-                            You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
-                          type: string
-                        remoteIPPrefix:
-                          description: |-
-                            remoteIPPrefix is the remote IP prefix to be associated with this security group rule.
-                            You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
-                          type: string
-                        remoteManagedGroups:
-                          description: |-
-                            remoteManagedGroups is the remote managed groups to be associated with this security group rule.
-                            You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
-                          items:
-                            enum:
-                            - bastion
-                            - controlplane
-                            - worker
-                            type: string
-                          type: array
-                      required:
-                      - direction
-                      - name
-                      type: object
-                    type: array
-                    x-kubernetes-list-map-keys:
-                    - name
-                    x-kubernetes-list-type: map
-                  workerNodesSecurityGroupRules:
-                    description: workerNodesSecurityGroupRules defines the rules that
-                      should be applied to worker nodes.
-                    items:
-                      description: |-
-                        SecurityGroupRuleSpec represent the basic information of the associated OpenStack
-                        Security Group Role.
-                        For now this is only used for the allNodesSecurityGroupRules but when we add
-                        other security groups, we'll need to add a validation because
-                        Remote* fields are mutually exclusive.
-                      properties:
-                        description:
-                          description: description of the security group rule.
-                          type: string
-                        direction:
-                          description: |-
-                            direction in which the security group rule is applied. The only values
-                            allowed are "ingress" or "egress". For a compute instance, an ingress
-                            security group rule is applied to incoming (ingress) traffic for that
-                            instance. An egress rule is applied to traffic leaving the instance.
-                          type: string
-                        etherType:
-                          description: |-
-                            etherType must be IPv4 or IPv6, and addresses represented in CIDR must match the
-                            ingress or egress rules.
-                          type: string
-                        name:
-                          description: |-
-                            name of the security group rule.
-                            It's used to identify the rule so it can be patched and will not be sent to the OpenStack API.
-                          type: string
-                        portRangeMax:
-                          description: |-
-                            portRangeMax is a number in the range that is matched by the security group
-                            rule. The portRangeMin attribute constrains the portRangeMax attribute.
-                          type: integer
-                        portRangeMin:
-                          description: |-
-                            portRangeMin is a number in the range that is matched by the security group
-                            rule. If the protocol is TCP or UDP, this value must be less than or equal
-                            to the value of the portRangeMax attribute.
-                          type: integer
-                        protocol:
-                          description: protocol is the protocol that is matched by
-                            the security group rule.
-                          type: string
-                        remoteGroupID:
-                          description: |-
-                            remoteGroupID is the remote group ID to be associated with this security group rule.
-                            You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
-                          type: string
-                        remoteIPPrefix:
-                          description: |-
-                            remoteIPPrefix is the remote IP prefix to be associated with this security group rule.
-                            You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
-                          type: string
-                        remoteManagedGroups:
-                          description: |-
-                            remoteManagedGroups is the remote managed groups to be associated with this security group rule.
-                            You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
-                          items:
-                            enum:
-                            - bastion
-                            - controlplane
-                            - worker
-                            type: string
-                          type: array
-                      required:
-                      - direction
-                      - name
-                      type: object
-                    type: array
-                    x-kubernetes-list-map-keys:
-                    - name
-                    x-kubernetes-list-type: map
-                required:
-                - allowAllInClusterTraffic
-                type: object
-              managedSubnets:
-                description: |-
-                  ManagedSubnets describe OpenStack Subnets to be created. Cluster actuator will create a network,
-                  subnets with the defined CIDR, and a router connected to these subnets. Currently only one IPv4
-                  subnet is supported. If you leave this empty, no network will be created.
-                items:
-                  properties:
-                    allocationPools:
-                      description: |-
-                        AllocationPools is an array of AllocationPool objects that will be applied to OpenStack Subnet being created.
-                        If set, OpenStack will only allocate these IPs for Machines. It will still be possible to create ports from
-                        outside of these ranges manually.
-                      items:
-                        properties:
-                          end:
-                            description: End represents the end of the AlloctionPool,
-                              that is the highest IP of the pool.
-                            type: string
-                          start:
-                            description: Start represents the start of the AllocationPool,
-                              that is the lowest IP of the pool.
-                            type: string
-                        required:
-                        - end
-                        - start
-                        type: object
-                      type: array
-                    cidr:
-                      description: |-
-                        CIDR is representing the IP address range used to create the subnet, e.g. 10.0.0.0/24.
-                        This field is required when defining a subnet.
-                      type: string
-                    dnsNameservers:
-                      description: |-
-                        DNSNameservers holds a list of DNS server addresses that will be provided when creating
-                        the subnet. These addresses need to have the same IP version as CIDR.
-                      items:
-                        type: string
-                      type: array
-                  required:
-                  - cidr
-                  type: object
-                maxItems: 1
-                type: array
-                x-kubernetes-list-type: atomic
-              network:
-                description: |-
-                  Network specifies an existing network to use if no ManagedSubnets
-                  are specified.
-                maxProperties: 1
-                minProperties: 1
-                properties:
-                  filter:
-                    description: Filter specifies a filter to select an OpenStack
-                      network. If provided, cannot be empty.
-                    minProperties: 1
-                    properties:
-                      description:
-                        type: string
-                      name:
-                        type: string
-                      notTags:
-                        description: |-
-                          NotTags is a list of tags to filter by. If specified, resources which
-                          contain all of the given tags will be excluded from the result.
-                        items:
-                          description: |-
-                            NeutronTag represents a tag on a Neutron resource.
-                            It may not be empty and may not contain commas.
-                          minLength: 1
-                          pattern: ^[^,]+$
-                          type: string
-                        type: array
-                        x-kubernetes-list-type: set
-                      notTagsAny:
-                        description: |-
-                          NotTagsAny is a list of tags to filter by. If specified, resources
-                          which contain any of the given tags will be excluded from the result.
-                        items:
-                          description: |-
-                            NeutronTag represents a tag on a Neutron resource.
-                            It may not be empty and may not contain commas.
-                          minLength: 1
-                          pattern: ^[^,]+$
-                          type: string
-                        type: array
-                        x-kubernetes-list-type: set
-                      projectID:
-                        type: string
-                      tags:
-                        description: |-
-                          Tags is a list of tags to filter by. If specified, the resource must
-                          have all of the tags specified to be included in the result.
-                        items:
-                          description: |-
-                            NeutronTag represents a tag on a Neutron resource.
-                            It may not be empty and may not contain commas.
-                          minLength: 1
-                          pattern: ^[^,]+$
-                          type: string
-                        type: array
-                        x-kubernetes-list-type: set
-                      tagsAny:
-                        description: |-
-                          TagsAny is a list of tags to filter by. If specified, the resource
-                          must have at least one of the tags specified to be included in the
-                          result.
-                        items:
-                          description: |-
-                            NeutronTag represents a tag on a Neutron resource.
-                            It may not be empty and may not contain commas.
-                          minLength: 1
-                          pattern: ^[^,]+$
-                          type: string
-                        type: array
-                        x-kubernetes-list-type: set
-                    type: object
-                  id:
-                    description: ID is the ID of the network to use. If ID is provided,
-                      the other filters cannot be provided. Must be in UUID format.
-                    format: uuid
-                    type: string
-                type: object
-              networkMTU:
-                description: |-
-                  NetworkMTU sets the maximum transmission unit (MTU) value to address fragmentation for the private network ID.
-                  This value will be used only if the Cluster actuator creates the network.
-                  If left empty, the network will have the default MTU defined in Openstack network service.
-                  To use this field, the Openstack installation requires the net-mtu neutron API extension.
-                type: integer
-              router:
-                description: |-
-                  Router specifies an existing router to be used if ManagedSubnets are
-                  specified. If specified, no new router will be created.
-                maxProperties: 1
-                minProperties: 1
-                properties:
-                  filter:
-                    description: Filter specifies a filter to select an OpenStack
-                      router. If provided, cannot be empty.
-                    minProperties: 1
-                    properties:
-                      description:
-                        type: string
-                      name:
-                        type: string
-                      notTags:
-                        description: |-
-                          NotTags is a list of tags to filter by. If specified, resources which
-                          contain all of the given tags will be excluded from the result.
-                        items:
-                          description: |-
-                            NeutronTag represents a tag on a Neutron resource.
-                            It may not be empty and may not contain commas.
-                          minLength: 1
-                          pattern: ^[^,]+$
-                          type: string
-                        type: array
-                        x-kubernetes-list-type: set
-                      notTagsAny:
-                        description: |-
-                          NotTagsAny is a list of tags to filter by. If specified, resources
-                          which contain any of the given tags will be excluded from the result.
-                        items:
-                          description: |-
-                            NeutronTag represents a tag on a Neutron resource.
-                            It may not be empty and may not contain commas.
-                          minLength: 1
-                          pattern: ^[^,]+$
-                          type: string
-                        type: array
-                        x-kubernetes-list-type: set
-                      projectID:
-                        type: string
-                      tags:
-                        description: |-
-                          Tags is a list of tags to filter by. If specified, the resource must
-                          have all of the tags specified to be included in the result.
-                        items:
-                          description: |-
-                            NeutronTag represents a tag on a Neutron resource.
-                            It may not be empty and may not contain commas.
-                          minLength: 1
-                          pattern: ^[^,]+$
-                          type: string
-                        type: array
-                        x-kubernetes-list-type: set
-                      tagsAny:
-                        description: |-
-                          TagsAny is a list of tags to filter by. If specified, the resource
-                          must have at least one of the tags specified to be included in the
-                          result.
-                        items:
-                          description: |-
-                            NeutronTag represents a tag on a Neutron resource.
-                            It may not be empty and may not contain commas.
-                          minLength: 1
-                          pattern: ^[^,]+$
-                          type: string
-                        type: array
-                        x-kubernetes-list-type: set
-                    type: object
-                  id:
-                    description: ID is the ID of the router to use. If ID is provided,
-                      the other filters cannot be provided. Must be in UUID format.
-                    format: uuid
-                    type: string
-                type: object
-              subnets:
-                description: |-
-                  Subnets specifies existing subnets to use if not ManagedSubnets are
-                  specified. All subnets must be in the network specified by Network.
-                  There can be zero, one, or two subnets. If no subnets are specified,
-                  all subnets in Network will be used. If 2 subnets are specified, one
-                  must be IPv4 and the other IPv6.
-                items:
-                  description: SubnetParam specifies an OpenStack subnet to use. It
-                    may be specified by either ID or filter, but not both.
-                  maxProperties: 1
-                  minProperties: 1
-                  properties:
-                    filter:
-                      description: Filter specifies a filter to select the subnet.
-                        It must match exactly one subnet.
-                      minProperties: 1
-                      properties:
-                        cidr:
-                          type: string
-                        description:
-                          type: string
-                        gatewayIP:
-                          type: string
-                        ipVersion:
-                          type: integer
-                        ipv6AddressMode:
-                          type: string
-                        ipv6RAMode:
-                          type: string
-                        name:
-                          type: string
-                        notTags:
-                          description: |-
-                            NotTags is a list of tags to filter by. If specified, resources which
-                            contain all of the given tags will be excluded from the result.
-                          items:
-                            description: |-
-                              NeutronTag represents a tag on a Neutron resource.
-                              It may not be empty and may not contain commas.
-                            minLength: 1
-                            pattern: ^[^,]+$
-                            type: string
-                          type: array
-                          x-kubernetes-list-type: set
-                        notTagsAny:
-                          description: |-
-                            NotTagsAny is a list of tags to filter by. If specified, resources
-                            which contain any of the given tags will be excluded from the result.
-                          items:
-                            description: |-
-                              NeutronTag represents a tag on a Neutron resource.
-                              It may not be empty and may not contain commas.
-                            minLength: 1
-                            pattern: ^[^,]+$
-                            type: string
-                          type: array
-                          x-kubernetes-list-type: set
-                        projectID:
-                          type: string
-                        tags:
-                          description: |-
-                            Tags is a list of tags to filter by. If specified, the resource must
-                            have all of the tags specified to be included in the result.
-                          items:
-                            description: |-
-                              NeutronTag represents a tag on a Neutron resource.
-                              It may not be empty and may not contain commas.
-                            minLength: 1
-                            pattern: ^[^,]+$
-                            type: string
-                          type: array
-                          x-kubernetes-list-type: set
-                        tagsAny:
-                          description: |-
-                            TagsAny is a list of tags to filter by. If specified, the resource
-                            must have at least one of the tags specified to be included in the
-                            result.
-                          items:
-                            description: |-
-                              NeutronTag represents a tag on a Neutron resource.
-                              It may not be empty and may not contain commas.
-                            minLength: 1
-                            pattern: ^[^,]+$
-                            type: string
-                          type: array
-                          x-kubernetes-list-type: set
-                      type: object
-                    id:
-                      description: ID is the uuid of the subnet. It will not be validated.
-                      format: uuid
-                      type: string
-                  type: object
-                maxItems: 2
-                type: array
-                x-kubernetes-list-type: atomic
-              tags:
-                description: Tags to set on all resources in cluster which support
-                  tags
-                items:
-                  type: string
-                type: array
-                x-kubernetes-list-type: set
-            required:
-            - identityRef
-            type: object
-            x-kubernetes-validations:
-            - message: bastion floating IP cannot be set when disableExternalNetwork
-                is true
-              rule: 'has(self.disableExternalNetwork) && self.disableExternalNetwork
-                ? !has(self.bastion) || !has(self.bastion.floatingIP) : true'
-            - message: disableAPIServerFloatingIP cannot be false when disableExternalNetwork
-                is true
-              rule: 'has(self.disableExternalNetwork) && self.disableExternalNetwork
-                ? has(self.disableAPIServerFloatingIP) && self.disableAPIServerFloatingIP
-                : true'
-          status:
-            description: OpenStackClusterStatus defines the observed state of OpenStackCluster.
-            properties:
-              apiServerLoadBalancer:
-                description: APIServerLoadBalancer describes the api server load balancer
-                  if one exists
-                properties:
-                  allowedCIDRs:
-                    items:
-                      type: string
-                    type: array
-                  id:
-                    type: string
-                  internalIP:
-                    type: string
-                  ip:
-                    type: string
-                  loadBalancerNetwork:
-                    description: |-
-                      LoadBalancerNetwork contains information about network and/or subnets which the
-                      loadbalancer is allocated on.
-                      If subnets are specified within the LoadBalancerNetwork currently only the first
-                      subnet in the list is taken into account.
-                    properties:
-                      id:
-                        type: string
-                      name:
-                        type: string
-                      subnets:
-                        description: Subnets is a list of subnets associated with
-                          the default cluster network. Machines which use the default
-                          cluster network will get an address from all of these subnets.
-                        items:
-                          description: Subnet represents basic information about the
-                            associated OpenStack Neutron Subnet.
-                          properties:
-                            cidr:
-                              type: string
-                            id:
-                              type: string
-                            name:
-                              type: string
-                            tags:
-                              items:
-                                type: string
-                              type: array
-                          required:
-                          - cidr
-                          - id
-                          - name
-                          type: object
-                        type: array
-                      tags:
-                        items:
-                          type: string
-                        type: array
-                    required:
-                    - id
-                    - name
-                    type: object
-                  name:
-                    type: string
-                  tags:
-                    items:
-                      type: string
-                    type: array
-                required:
-                - id
-                - internalIP
-                - ip
-                - name
-                type: object
-              bastion:
-                description: Bastion contains the information about the deployed bastion
-                  host
-                properties:
-                  floatingIP:
-                    type: string
-                  id:
-                    type: string
-                  ip:
-                    type: string
-                  name:
-                    type: string
-                  resolved:
-                    description: |-
-                      Resolved contains parts of the bastion's machine spec with all
-                      external references fully resolved.
-                    properties:
-                      flavorID:
-                        description: FlavorID is the ID of the flavor to use.
-                        type: string
-                      imageID:
-                        description: ImageID is the ID of the image to use for the
-                          machine and is calculated based on ImageFilter.
-                        type: string
-                      ports:
-                        description: Ports is the fully resolved list of ports to
-                          create for the machine.
-                        items:
-                          description: ResolvedPortSpec is a PortOpts with all contained
-                            references fully resolved.
-                          properties:
-                            adminStateUp:
-                              description: AdminStateUp specifies whether the port
-                                should be created in the up (true) or down (false)
-                                state. The default is up.
-                              type: boolean
-                            allowedAddressPairs:
-                              description: |-
-                                AllowedAddressPairs is a list of address pairs which Neutron will
-                                allow the port to send traffic from in addition to the port's
-                                addresses. If not specified, the MAC Address will be the MAC Address
-                                of the port. Depending on the configuration of Neutron, it may be
-                                supported to specify a CIDR instead of a specific IP address.
-                              items:
-                                properties:
-                                  ipAddress:
-                                    description: |-
-                                      IPAddress is the IP address of the allowed address pair. Depending on
-                                      the configuration of Neutron, it may be supported to specify a CIDR
-                                      instead of a specific IP address.
-                                    type: string
-                                  macAddress:
-                                    description: |-
-                                      MACAddress is the MAC address of the allowed address pair. If not
-                                      specified, the MAC address will be the MAC address of the port.
-                                    type: string
-                                required:
-                                - ipAddress
-                                type: object
-                              type: array
-                            description:
-                              description: Description is a human-readable description
-                                for the port.
-                              type: string
-                            disablePortSecurity:
-                              description: |-
-                                DisablePortSecurity enables or disables the port security when set.
-                                When not set, it takes the value of the corresponding field at the network level.
-                              type: boolean
-                            fixedIPs:
-                              description: FixedIPs is a list of pairs of subnet and/or
-                                IP address to assign to the port. If specified, these
-                                must be subnets of the port's network.
-                              items:
-                                description: ResolvedFixedIP is a FixedIP with the
-                                  Subnet resolved to an ID.
-                                properties:
-                                  ipAddress:
-                                    description: |-
-                                      IPAddress is a specific IP address to assign to the port. If SubnetID
-                                      is also specified, IPAddress must be a valid IP address in the
-                                      subnet. If Subnet is not specified, IPAddress must be a valid IP
-                                      address in any subnet of the port's network.
-                                    type: string
-                                  subnet:
-                                    description: SubnetID is the id of a subnet to
-                                      create the fixed IP of a port in.
-                                    type: string
-                                type: object
-                              type: array
-                              x-kubernetes-list-type: atomic
-                            hostID:
-                              description: HostID specifies the ID of the host where
-                                the port resides.
-                              type: string
-                            macAddress:
-                              description: MACAddress specifies the MAC address of
-                                the port. If not specified, the MAC address will be
-                                generated.
-                              type: string
-                            name:
-                              description: Name is the name of the port.
-                              type: string
-                            networkID:
-                              description: NetworkID is the ID of the network the
-                                port will be created in.
-                              type: string
-                            profile:
-                              description: |-
-                                Profile is a set of key-value pairs that are used for binding
-                                details. We intentionally don't expose this as a map[string]string
-                                because we only want to enable the users to set the values of the
-                                keys that are known to work in OpenStack Networking API.  See
-                                https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
-                                To set profiles, your tenant needs permissions rule:create_port, and
-                                rule:create_port:binding:profile
-                              properties:
-                                ovsHWOffload:
-                                  description: |-
-                                    OVSHWOffload enables or disables the OVS hardware offload feature.
-                                    This flag is not required on OpenStack clouds since Yoga as Nova will set it automatically when the port is attached.
-                                    See: https://bugs.launchpad.net/nova/+bug/2020813
-                                  type: boolean
-                                trustedVF:
-                                  description: TrustedVF enables or disables the “trusted
-                                    mode” for the VF.
-                                  type: boolean
-                              type: object
-                            propagateUplinkStatus:
-                              description: PropageteUplinkStatus enables or disables
-                                the propagate uplink status on the port.
-                              type: boolean
-                            securityGroups:
-                              description: SecurityGroups is a list of security group
-                                IDs to assign to the port.
-                              items:
-                                type: string
-                              type: array
-                              x-kubernetes-list-type: atomic
-                            tags:
-                              description: Tags applied to the port (and corresponding
-                                trunk, if a trunk is configured.)
-                              items:
-                                type: string
-                              type: array
-                              x-kubernetes-list-type: set
-                            trunk:
-                              description: Trunk specifies whether trunking is enabled
-                                at the port level.
-                              type: boolean
-                            valueSpecs:
-                              description: |-
-                                Value specs are extra parameters to include in the API request with OpenStack.
-                                This is an extension point for the API, so what they do and if they are supported,
-                                depends on the specific OpenStack implementation.
-                              items:
-                                description: ValueSpec represents a single value_spec
-                                  key-value pair.
-                                properties:
-                                  key:
-                                    description: Key is the key in the key-value pair.
-                                    type: string
-                                  name:
-                                    description: |-
-                                      Name is the name of the key-value pair.
-                                      This is just for identifying the pair and will not be sent to the OpenStack API.
-                                    type: string
-                                  value:
-                                    description: Value is the value in the key-value
-                                      pair.
-                                    type: string
-                                required:
-                                - key
-                                - name
-                                - value
-                                type: object
-                              type: array
-                              x-kubernetes-list-map-keys:
-                              - name
-                              x-kubernetes-list-type: map
-                            vnicType:
-                              description: |-
-                                VNICType specifies the type of vNIC which this port should be
-                                attached to. This is used to determine which mechanism driver(s) to
-                                be used to bind the port. The valid values are normal, macvtap,
-                                direct, baremetal, direct-physical, virtio-forwarder, smart-nic and
-                                remote-managed, although these values will not be validated in this
-                                API to ensure compatibility with future neutron changes or custom
-                                implementations. What type of vNIC is actually available depends on
-                                deployments. If not specified, the Neutron default value is used.
-                              type: string
-                          required:
-                          - description
-                          - name
-                          - networkID
-                          type: object
-                        type: array
-                      serverGroupID:
-                        description: ServerGroupID is the ID of the server group the
-                          machine should be added to and is calculated based on ServerGroupFilter.
-                        type: string
-                    type: object
-                  resources:
-                    description: Resources contains references to OpenStack resources
-                      created for the bastion.
-                    properties:
-                      ports:
-                        description: Ports is the status of the ports created for
-                          the machine.
-                        items:
-                          properties:
-                            id:
-                              description: ID is the unique identifier of the port.
-                              type: string
-                          required:
-                          - id
-                          type: object
-                        type: array
-                    type: object
-                  sshKeyName:
-                    type: string
-                  state:
-                    description: InstanceState describes the state of an OpenStack
-                      instance.
-                    type: string
-                type: object
-              bastionSecurityGroup:
-                description: |-
-                  BastionSecurityGroup contains the information about the OpenStack
-                  Security Group that needs to be applied to worker nodes.
-                properties:
-                  id:
-                    description: id of the security group
-                    type: string
-                  name:
-                    description: name of the security group
-                    type: string
-                required:
-                - id
-                - name
-                type: object
-              controlPlaneSecurityGroup:
-                description: |-
-                  ControlPlaneSecurityGroup contains the information about the
-                  OpenStack Security Group that needs to be applied to control plane
-                  nodes.
-                properties:
-                  id:
-                    description: id of the security group
-                    type: string
-                  name:
-                    description: name of the security group
-                    type: string
-                required:
-                - id
-                - name
-                type: object
-              externalNetwork:
-                description: ExternalNetwork contains information about the external
-                  network used for default ingress and egress traffic.
-                properties:
-                  id:
-                    type: string
-                  name:
-                    type: string
-                  tags:
-                    items:
-                      type: string
-                    type: array
-                required:
-                - id
-                - name
-                type: object
-              failureDomains:
-                additionalProperties:
-                  description: |-
-                    FailureDomainSpec is the Schema for Cluster API failure domains.
-                    It allows controllers to understand how many failure domains a cluster can optionally span across.
-                  properties:
-                    attributes:
-                      additionalProperties:
-                        type: string
-                      description: attributes is a free form map of attributes an
-                        infrastructure provider might use or require.
-                      type: object
-                    controlPlane:
-                      description: controlPlane determines if this failure domain
-                        is suitable for use by control plane machines.
-                      type: boolean
-                  type: object
-                description: FailureDomains represent OpenStack availability zones
-                type: object
-              failureMessage:
-                description: |-
-                  FailureMessage will be set in the event that there is a terminal problem
-                  reconciling the OpenStackCluster and will contain a more verbose string suitable
-                  for logging and human consumption.
-
-                  This field should not be set for transitive errors that a controller
-                  faces that are expected to be fixed automatically over
-                  time (like service outages), but instead indicate that something is
-                  fundamentally wrong with the OpenStackCluster's spec or the configuration of
-                  the controller, and that manual intervention is required. Examples
-                  of terminal errors would be invalid combinations of settings in the
-                  spec, values that are unsupported by the controller, or the
-                  responsible controller itself being critically misconfigured.
-
-                  Any transient errors that occur during the reconciliation of
-                  OpenStackClusters can be added as events to the OpenStackCluster object
-                  and/or logged in the controller's output.
-                type: string
-              failureReason:
-                description: |-
-                  FailureReason will be set in the event that there is a terminal problem
-                  reconciling the OpenStackCluster and will contain a succinct value suitable
-                  for machine interpretation.
-
-                  This field should not be set for transitive errors that a controller
-                  faces that are expected to be fixed automatically over
-                  time (like service outages), but instead indicate that something is
-                  fundamentally wrong with the OpenStackCluster's spec or the configuration of
-                  the controller, and that manual intervention is required. Examples
-                  of terminal errors would be invalid combinations of settings in the
-                  spec, values that are unsupported by the controller, or the
-                  responsible controller itself being critically misconfigured.
-
-                  Any transient errors that occur during the reconciliation of
-                  OpenStackClusters can be added as events to the OpenStackCluster object
-                  and/or logged in the controller's output.
-                type: string
-              network:
-                description: Network contains information about the created OpenStack
-                  Network.
-                properties:
-                  id:
-                    type: string
-                  name:
-                    type: string
-                  subnets:
-                    description: Subnets is a list of subnets associated with the
-                      default cluster network. Machines which use the default cluster
-                      network will get an address from all of these subnets.
-                    items:
-                      description: Subnet represents basic information about the associated
-                        OpenStack Neutron Subnet.
-                      properties:
-                        cidr:
-                          type: string
-                        id:
-                          type: string
-                        name:
-                          type: string
-                        tags:
-                          items:
-                            type: string
-                          type: array
-                      required:
-                      - cidr
-                      - id
-                      - name
-                      type: object
-                    type: array
-                  tags:
-                    items:
-                      type: string
-                    type: array
-                required:
-                - id
-                - name
-                type: object
-              ready:
-                default: false
-                description: Ready is true when the cluster infrastructure is ready.
-                type: boolean
-              router:
-                description: Router describes the default cluster router
-                properties:
-                  id:
-                    type: string
-                  ips:
-                    items:
-                      type: string
-                    type: array
-                  name:
-                    type: string
-                  tags:
-                    items:
-                      type: string
-                    type: array
-                required:
-                - id
-                - name
-                type: object
-              workerSecurityGroup:
-                description: |-
-                  WorkerSecurityGroup contains the information about the OpenStack
-                  Security Group that needs to be applied to worker nodes.
-                properties:
-                  id:
-                    description: id of the security group
-                    type: string
-                  name:
-                    description: name of the security group
-                    type: string
-                required:
-                - id
-                - name
-                type: object
-            required:
-            - ready
-            type: object
-        type: object
-    served: true
-    storage: true
-    subresources:
-      status: {}
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: null
-  storedVersions: null
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  annotations:
-    cert-manager.io/inject-ca-from: capo-system/capo-serving-cert
-    controller-gen.kubebuilder.io/version: v0.16.5
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: infrastructure-openstack
-    cluster.x-k8s.io/v1beta1: v1alpha7_v1beta1
-    clusterctl.cluster.x-k8s.io: ""
-  name: openstackclustertemplates.infrastructure.cluster.x-k8s.io
-spec:
-  conversion:
-    strategy: Webhook
-    webhook:
-      clientConfig:
-        service:
-          name: capo-webhook-service
-          namespace: capo-system
-          path: /convert
-      conversionReviewVersions:
-      - v1
-      - v1beta1
-  group: infrastructure.cluster.x-k8s.io
-  names:
-    categories:
-    - cluster-api
-    kind: OpenStackClusterTemplate
-    listKind: OpenStackClusterTemplateList
-    plural: openstackclustertemplates
-    shortNames:
-    - osct
-    singular: openstackclustertemplate
-  scope: Namespaced
-  versions:
-  - deprecated: true
-    deprecationWarning: The v1alpha7 version of OpenStackClusterTemplate has been
-      deprecated and will be removed in a future release.
-    name: v1alpha7
-    schema:
-      openAPIV3Schema:
-        description: |-
-          OpenStackClusterTemplate is the Schema for the openstackclustertemplates API.
-
-          Deprecated: v1alpha7.OpenStackClusterTemplate has been replaced by v1beta1.OpenStackClusterTemplate.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: OpenStackClusterTemplateSpec defines the desired state of
-              OpenStackClusterTemplate.
-            properties:
-              template:
-                description: OpenStackClusterTemplateResource describes the data needed
-                  to create a OpenStackCluster from a template.
-                properties:
-                  spec:
-                    description: OpenStackClusterSpec defines the desired state of
-                      OpenStackCluster.
-                    properties:
-                      allowAllInClusterTraffic:
-                        description: |-
-                          AllowAllInClusterTraffic is only used when managed security groups are in use.
-                          If set to true, the rules for the managed security groups are configured so that all
-                          ingress and egress between cluster nodes is permitted, allowing CNIs other than
-                          Calico to be used.
-                        type: boolean
-                      apiServerFixedIP:
-                        description: |-
-                          APIServerFixedIP is the fixed IP which will be associated with the API server.
-                          In the case where the API server has a floating IP but not a managed load balancer,
-                          this field is not used.
-                          If a managed load balancer is used and this field is not specified, a fixed IP will
-                          be dynamically allocated for the load balancer.
-                          If a managed load balancer is not used AND the API server floating IP is disabled,
-                          this field MUST be specified and should correspond to a pre-allocated port that
-                          holds the fixed IP to be used as a VIP.
-                        type: string
-                      apiServerFloatingIP:
-                        description: |-
-                          APIServerFloatingIP is the floatingIP which will be associated with the API server.
-                          The floatingIP will be created if it does not already exist.
-                          If not specified, a new floatingIP is allocated.
-                          This field is not used if DisableAPIServerFloatingIP is set to true.
-                        type: string
-                      apiServerLoadBalancer:
-                        description: |-
-                          APIServerLoadBalancer configures the optional LoadBalancer for the APIServer.
-                          It must be activated by setting `enabled: true`.
-                        properties:
-                          additionalPorts:
-                            description: AdditionalPorts adds additional tcp ports
-                              to the load balancer.
-                            items:
-                              type: integer
-                            type: array
-                          allowedCidrs:
-                            description: AllowedCIDRs restrict access to all API-Server
-                              listeners to the given address CIDRs.
-                            items:
-                              type: string
-                            type: array
-                          enabled:
-                            description: Enabled defines whether a load balancer should
-                              be created.
-                            type: boolean
-                          provider:
-                            description: Octavia Provider Used to create load balancer
-                            type: string
-                        type: object
-                      apiServerPort:
-                        description: |-
-                          APIServerPort is the port on which the listener on the APIServer
-                          will be created
-                        type: integer
-                      bastion:
-                        description: |-
-                          Bastion is the OpenStack instance to login the nodes
-
-                          As a rolling update is not ideal during a bastion host session, we
-                          prevent changes to a running bastion configuration. Set `enabled: false` to
-                          make changes.
-                        properties:
-                          availabilityZone:
-                            type: string
-                          enabled:
-                            type: boolean
-                          instance:
-                            description: Instance for the bastion itself
-                            properties:
-                              additionalBlockDevices:
-                                description: AdditionalBlockDevices is a list of specifications
-                                  for additional block devices to attach to the server
-                                  instance
-                                items:
-                                  description: AdditionalBlockDevice is a block device
-                                    to attach to the server.
-                                  properties:
-                                    name:
-                                      description: |-
-                                        Name of the block device in the context of a machine.
-                                        If the block device is a volume, the Cinder volume will be named
-                                        as a combination of the machine name and this name.
-                                        Also, this name will be used for tagging the block device.
-                                        Information about the block device tag can be obtained from the OpenStack
-                                        metadata API or the config drive.
-                                      type: string
-                                    sizeGiB:
-                                      description: SizeGiB is the size of the block
-                                        device in gibibytes (GiB).
-                                      type: integer
-                                    storage:
-                                      description: |-
-                                        Storage specifies the storage type of the block device and
-                                        additional storage options.
-                                      properties:
-                                        type:
-                                          description: |-
-                                            Type is the type of block device to create.
-                                            This can be either "Volume" or "Local".
-                                          type: string
-                                        volume:
-                                          description: Volume contains additional
-                                            storage options for a volume block device.
-                                          properties:
-                                            availabilityZone:
-                                              description: |-
-                                                AvailabilityZone is the volume availability zone to create the volume in.
-                                                If omitted, the availability zone of the server will be used.
-                                                The availability zone must NOT contain spaces otherwise it will lead to volume that belongs
-                                                to this availability zone register failure, see kubernetes/cloud-provider-openstack#1379 for
-                                                further information.
-                                              type: string
-                                            type:
-                                              description: |-
-                                                Type is the Cinder volume type of the volume.
-                                                If omitted, the default Cinder volume type that is configured in the OpenStack cloud
-                                                will be used.
-                                              type: string
-                                          type: object
-                                      required:
-                                      - type
-                                      type: object
-                                  required:
-                                  - name
-                                  - sizeGiB
-                                  - storage
-                                  type: object
-                                type: array
-                                x-kubernetes-list-map-keys:
-                                - name
-                                x-kubernetes-list-type: map
-                              cloudName:
-                                description: The name of the cloud to use from the
-                                  clouds secret
-                                type: string
-                              configDrive:
-                                description: Config Drive support
-                                type: boolean
-                              flavor:
-                                description: The flavor reference for the flavor for
-                                  your server instance.
-                                minLength: 1
-                                type: string
-                              flavorID:
-                                description: |-
-                                  FlavorID allows flavors to be specified by ID.  This field takes precedence
-                                  over Flavor.
-                                minLength: 1
-                                type: string
-                              floatingIP:
-                                description: |-
-                                  The floatingIP which will be associated to the machine, only used for master.
-                                  The floatingIP should have been created and haven't been associated.
-                                type: string
-                              identityRef:
-                                description: |-
-                                  IdentityRef is a reference to a identity to be used when reconciling this cluster.
-                                  If not specified, the identity ref of the cluster will be used instead.
-                                properties:
-                                  kind:
-                                    description: |-
-                                      Kind of the identity. Must be supported by the infrastructure
-                                      provider and may be either cluster or namespace-scoped.
-                                    minLength: 1
-                                    type: string
-                                  name:
-                                    description: |-
-                                      Name of the infrastructure identity to be used.
-                                      Must be either a cluster-scoped resource, or namespaced-scoped
-                                      resource the same namespace as the resource(s) being provisioned.
-                                    type: string
-                                required:
-                                - kind
-                                - name
-                                type: object
-                              image:
-                                description: |-
-                                  The name of the image to use for your server instance.
-                                  If the RootVolume is specified, this will be ignored and use rootVolume directly.
-                                type: string
-                              imageUUID:
-                                description: |-
-                                  The uuid of the image to use for your server instance.
-                                  if it's empty, Image name will be used
-                                type: string
-                              instanceID:
-                                description: InstanceID is the OpenStack instance
-                                  ID for this machine.
-                                type: string
-                              ports:
-                                description: |-
-                                  Ports to be attached to the server instance. They are created if a port with the given name does not already exist.
-                                  If not specified a default port will be added for the default cluster network.
-                                items:
-                                  properties:
-                                    adminStateUp:
-                                      type: boolean
-                                    allowedAddressPairs:
-                                      items:
-                                        properties:
-                                          ipAddress:
-                                            type: string
-                                          macAddress:
-                                            type: string
-                                        type: object
-                                      type: array
-                                    description:
-                                      type: string
-                                    disablePortSecurity:
-                                      description: |-
-                                        DisablePortSecurity enables or disables the port security when set.
-                                        When not set, it takes the value of the corresponding field at the network level.
-                                      type: boolean
-                                    fixedIPs:
-                                      description: Specify pairs of subnet and/or
-                                        IP address. These should be subnets of the
-                                        network with the given NetworkID.
-                                      items:
-                                        properties:
-                                          ipAddress:
-                                            type: string
-                                          subnet:
-                                            description: |-
-                                              Subnet is an openstack subnet query that will return the id of a subnet to create
-                                              the fixed IP of a port in. This query must not return more than one subnet.
-                                            properties:
-                                              cidr:
-                                                type: string
-                                              description:
-                                                type: string
-                                              gateway_ip:
-                                                type: string
-                                              id:
-                                                type: string
-                                              ipVersion:
-                                                type: integer
-                                              ipv6AddressMode:
-                                                type: string
-                                              ipv6RaMode:
-                                                type: string
-                                              name:
-                                                type: string
-                                              notTags:
-                                                type: string
-                                              notTagsAny:
-                                                type: string
-                                              projectId:
-                                                type: string
-                                              tags:
-                                                type: string
-                                              tagsAny:
-                                                type: string
-                                            type: object
-                                        required:
-                                        - subnet
-                                        type: object
-                                      type: array
-                                    hostId:
-                                      description: The ID of the host where the port
-                                        is allocated
-                                      type: string
-                                    macAddress:
-                                      type: string
-                                    nameSuffix:
-                                      description: Used to make the name of the port
-                                        unique. If unspecified, instead the 0-based
-                                        index of the port in the list is used.
-                                      type: string
-                                    network:
-                                      description: |-
-                                        Network is a query for an openstack network that the port will be created or discovered on.
-                                        This will fail if the query returns more than one network.
-                                      properties:
-                                        description:
-                                          type: string
-                                        id:
-                                          type: string
-                                        name:
-                                          type: string
-                                        notTags:
-                                          type: string
-                                        notTagsAny:
-                                          type: string
-                                        projectId:
-                                          type: string
-                                        tags:
-                                          type: string
-                                        tagsAny:
-                                          type: string
-                                      type: object
-                                    profile:
-                                      description: |-
-                                        Profile is a set of key-value pairs that are used for binding details.
-                                        We intentionally don't expose this as a map[string]string because we only want to enable
-                                        the users to set the values of the keys that are known to work in OpenStack Networking API.
-                                        See https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
-                                      properties:
-                                        ovsHWOffload:
-                                          description: OVSHWOffload enables or disables
-                                            the OVS hardware offload feature.
-                                          type: boolean
-                                        trustedVF:
-                                          description: TrustedVF enables or disables
-                                            the “trusted mode” for the VF.
-                                          type: boolean
-                                      type: object
-                                    propagateUplinkStatus:
-                                      description: PropageteUplinkStatus enables or
-                                        disables the propagate uplink status on the
-                                        port.
-                                      type: boolean
-                                    securityGroupFilters:
-                                      description: The names, uuids, filters or any
-                                        combination these of the security groups to
-                                        assign to the instance
-                                      items:
-                                        properties:
-                                          description:
-                                            type: string
-                                          id:
-                                            type: string
-                                          name:
-                                            type: string
-                                          notTags:
-                                            type: string
-                                          notTagsAny:
-                                            type: string
-                                          projectId:
-                                            type: string
-                                          tags:
-                                            type: string
-                                          tagsAny:
-                                            type: string
-                                        type: object
-                                      type: array
-                                    tags:
-                                      description: |-
-                                        Tags applied to the port (and corresponding trunk, if a trunk is configured.)
-                                        These tags are applied in addition to the instance's tags, which will also be applied to the port.
-                                      items:
-                                        type: string
-                                      type: array
-                                      x-kubernetes-list-type: set
-                                    trunk:
-                                      description: Enables and disables trunk at port
-                                        level. If not provided, openStackMachine.Spec.Trunk
-                                        is inherited.
-                                      type: boolean
-                                    valueSpecs:
-                                      description: |-
-                                        Value specs are extra parameters to include in the API request with OpenStack.
-                                        This is an extension point for the API, so what they do and if they are supported,
-                                        depends on the specific OpenStack implementation.
-                                      items:
-                                        description: ValueSpec represents a single
-                                          value_spec key-value pair.
-                                        properties:
-                                          key:
-                                            description: Key is the key in the key-value
-                                              pair.
-                                            type: string
-                                          name:
-                                            description: |-
-                                              Name is the name of the key-value pair.
-                                              This is just for identifying the pair and will not be sent to the OpenStack API.
-                                            type: string
-                                          value:
-                                            description: Value is the value in the
-                                              key-value pair.
-                                            type: string
-                                        required:
-                                        - key
-                                        - name
-                                        - value
-                                        type: object
-                                      type: array
-                                      x-kubernetes-list-map-keys:
-                                      - name
-                                      x-kubernetes-list-type: map
-                                    vnicType:
-                                      description: The virtual network interface card
-                                        (vNIC) type that is bound to the neutron port.
-                                      type: string
-                                  type: object
-                                type: array
-                              providerID:
-                                description: ProviderID is the unique identifier as
-                                  specified by the cloud provider.
-                                type: string
-                              rootVolume:
-                                description: The volume metadata to boot from
-                                properties:
-                                  availabilityZone:
-                                    type: string
-                                  diskSize:
-                                    type: integer
-                                  volumeType:
-                                    type: string
-                                type: object
-                              securityGroups:
-                                description: The names of the security groups to assign
-                                  to the instance
-                                items:
-                                  properties:
-                                    description:
-                                      type: string
-                                    id:
-                                      type: string
-                                    name:
-                                      type: string
-                                    notTags:
-                                      type: string
-                                    notTagsAny:
-                                      type: string
-                                    projectId:
-                                      type: string
-                                    tags:
-                                      type: string
-                                    tagsAny:
-                                      type: string
-                                  type: object
-                                type: array
-                              serverGroupID:
-                                description: The server group to assign the machine
-                                  to
-                                type: string
-                              serverMetadata:
-                                additionalProperties:
-                                  type: string
-                                description: Metadata mapping. Allows you to create
-                                  a map of key value pairs to add to the server instance.
-                                type: object
-                              sshKeyName:
-                                description: The ssh key to inject in the instance
-                                type: string
-                              tags:
-                                description: |-
-                                  Machine tags
-                                  Requires Nova api 2.52 minimum!
-                                items:
-                                  type: string
-                                type: array
-                                x-kubernetes-list-type: set
-                              trunk:
-                                description: Whether the server instance is created
-                                  on a trunk port or not.
-                                type: boolean
-                            type: object
-                        type: object
-                      cloudName:
-                        description: The name of the cloud to use from the clouds
-                          secret
-                        type: string
-                      controlPlaneAvailabilityZones:
-                        description: ControlPlaneAvailabilityZones is the az to deploy
-                          control plane to
-                        items:
-                          type: string
-                        type: array
-                        x-kubernetes-list-type: set
-                      controlPlaneEndpoint:
-                        description: ControlPlaneEndpoint represents the endpoint
-                          used to communicate with the control plane.
-                        properties:
-                          host:
-                            description: The hostname on which the API server is serving.
-                            type: string
-                          port:
-                            description: The port on which the API server is serving.
-                            format: int32
-                            type: integer
-                        required:
-                        - host
-                        - port
-                        type: object
-                      controlPlaneOmitAvailabilityZone:
-                        description: |-
-                          Indicates whether to omit the az for control plane nodes, allowing the Nova scheduler
-                          to make a decision on which az to use based on other scheduling constraints
-                        type: boolean
-                      disableAPIServerFloatingIP:
-                        description: |-
-                          DisableAPIServerFloatingIP determines whether or not to attempt to attach a floating
-                          IP to the API server. This allows for the creation of clusters when attaching a floating
-                          IP to the API server (and hence, in many cases, exposing the API server to the internet)
-                          is not possible or desirable, e.g. if using a shared VLAN for communication between
-                          management and workload clusters or when the management cluster is inside the
-                          project network.
-                          This option requires that the API server use a VIP on the cluster network so that the
-                          underlying machines can change without changing ControlPlaneEndpoint.Host.
-                          When using a managed load balancer, this VIP will be managed automatically.
-                          If not using a managed load balancer, cluster configuration will fail without additional
-                          configuration to manage the VIP on the control plane machines, which falls outside of
-                          the scope of this controller.
-                        type: boolean
-                      disablePortSecurity:
-                        description: |-
-                          DisablePortSecurity disables the port security of the network created for the
-                          Kubernetes cluster, which also disables SecurityGroups
-                        type: boolean
-                      dnsNameservers:
-                        description: |-
-                          DNSNameservers is the list of nameservers for OpenStack Subnet being created.
-                          Set this value when you need create a new network/subnet while the access
-                          through DNS is required.
-                        items:
-                          type: string
-                        type: array
-                        x-kubernetes-list-type: set
-                      externalNetworkId:
-                        description: |-
-                          ExternalNetworkID is the ID of an external OpenStack Network. This is necessary
-                          to get public internet to the VMs.
-                        type: string
-                      externalRouterIPs:
-                        description: |-
-                          ExternalRouterIPs is an array of externalIPs on the respective subnets.
-                          This is necessary if the router needs a fixed ip in a specific subnet.
-                        items:
-                          properties:
-                            fixedIP:
-                              description: The FixedIP in the corresponding subnet
-                              type: string
-                            subnet:
-                              description: The subnet in which the FixedIP is used
-                                for the Gateway of this router
-                              properties:
-                                cidr:
-                                  type: string
-                                description:
-                                  type: string
-                                gateway_ip:
-                                  type: string
-                                id:
-                                  type: string
-                                ipVersion:
-                                  type: integer
-                                ipv6AddressMode:
-                                  type: string
-                                ipv6RaMode:
-                                  type: string
-                                name:
-                                  type: string
-                                notTags:
-                                  type: string
-                                notTagsAny:
-                                  type: string
-                                projectId:
-                                  type: string
-                                tags:
-                                  type: string
-                                tagsAny:
-                                  type: string
-                              type: object
-                          required:
-                          - subnet
-                          type: object
-                        type: array
-                      identityRef:
-                        description: IdentityRef is a reference to a identity to be
-                          used when reconciling this cluster
-                        properties:
-                          kind:
-                            description: |-
-                              Kind of the identity. Must be supported by the infrastructure
-                              provider and may be either cluster or namespace-scoped.
-                            minLength: 1
-                            type: string
-                          name:
-                            description: |-
-                              Name of the infrastructure identity to be used.
-                              Must be either a cluster-scoped resource, or namespaced-scoped
-                              resource the same namespace as the resource(s) being provisioned.
-                            type: string
-                        required:
-                        - kind
-                        - name
-                        type: object
-                      managedSecurityGroups:
-                        description: |-
-                          ManagedSecurityGroups determines whether OpenStack security groups for the cluster
-                          will be managed by the OpenStack provider or whether pre-existing security groups will
-                          be specified as part of the configuration.
-                          By default, the managed security groups have rules that allow the Kubelet, etcd, the
-                          Kubernetes API server and the Calico CNI plugin to function correctly.
-                        type: boolean
-                      network:
-                        description: If NodeCIDR cannot be set this can be used to
-                          detect an existing network.
-                        properties:
-                          description:
-                            type: string
-                          id:
-                            type: string
-                          name:
-                            type: string
-                          notTags:
-                            type: string
-                          notTagsAny:
-                            type: string
-                          projectId:
-                            type: string
-                          tags:
-                            type: string
-                          tagsAny:
-                            type: string
-                        type: object
-                      networkMtu:
-                        description: |-
-                          NetworkMTU sets the maximum transmission unit (MTU) value to address fragmentation for the private network ID.
-                          This value will be used only if the Cluster actuator creates the network.
-                          If leaved empty, the network will have the default MTU defined in Openstack network service.
-                          To use this field, the Openstack installation requires the net-mtu neutron API extension.
-                        type: integer
-                      nodeCidr:
-                        description: |-
-                          NodeCIDR is the OpenStack Subnet to be created. Cluster actuator will create a
-                          network, a subnet with NodeCIDR, and a router connected to this subnet.
-                          If you leave this empty, no network will be created.
-                        type: string
-                      router:
-                        description: |-
-                          If NodeCIDR is set this option can be used to detect an existing router.
-                          If specified, no new router will be created.
-                        properties:
-                          description:
-                            type: string
-                          id:
-                            type: string
-                          name:
-                            type: string
-                          notTags:
-                            type: string
-                          notTagsAny:
-                            type: string
-                          projectId:
-                            type: string
-                          tags:
-                            type: string
-                          tagsAny:
-                            type: string
-                        type: object
-                      subnet:
-                        description: If NodeCIDR cannot be set this can be used to
-                          detect an existing subnet.
-                        properties:
-                          cidr:
-                            type: string
-                          description:
-                            type: string
-                          gateway_ip:
-                            type: string
-                          id:
-                            type: string
-                          ipVersion:
-                            type: integer
-                          ipv6AddressMode:
-                            type: string
-                          ipv6RaMode:
-                            type: string
-                          name:
-                            type: string
-                          notTags:
-                            type: string
-                          notTagsAny:
-                            type: string
-                          projectId:
-                            type: string
-                          tags:
-                            type: string
-                          tagsAny:
-                            type: string
-                        type: object
-                      tags:
-                        description: Tags for all resources in cluster
-                        items:
-                          type: string
-                        type: array
-                        x-kubernetes-list-type: set
-                    type: object
-                required:
-                - spec
-                type: object
-            required:
-            - template
-            type: object
-        type: object
-    served: false
-    storage: false
-  - name: v1beta1
-    schema:
-      openAPIV3Schema:
-        description: OpenStackClusterTemplate is the Schema for the openstackclustertemplates
-          API.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: OpenStackClusterTemplateSpec defines the desired state of
-              OpenStackClusterTemplate.
-            properties:
-              template:
-                description: OpenStackClusterTemplateResource describes the data needed
-                  to create a OpenStackCluster from a template.
-                properties:
-                  spec:
-                    description: OpenStackClusterSpec defines the desired state of
-                      OpenStackCluster.
-                    properties:
-                      apiServerFixedIP:
-                        description: |-
-                          APIServerFixedIP is the fixed IP which will be associated with the API server.
-                          In the case where the API server has a floating IP but not a managed load balancer,
-                          this field is not used.
-                          If a managed load balancer is used and this field is not specified, a fixed IP will
-                          be dynamically allocated for the load balancer.
-                          If a managed load balancer is not used AND the API server floating IP is disabled,
-                          this field MUST be specified and should correspond to a pre-allocated port that
-                          holds the fixed IP to be used as a VIP.
-                        type: string
-                      apiServerFloatingIP:
-                        description: |-
-                          APIServerFloatingIP is the floatingIP which will be associated with the API server.
-                          The floatingIP will be created if it does not already exist.
-                          If not specified, a new floatingIP is allocated.
-                          This field is not used if DisableAPIServerFloatingIP is set to true.
-                        type: string
-                      apiServerLoadBalancer:
-                        description: |-
-                          APIServerLoadBalancer configures the optional LoadBalancer for the APIServer.
-                          If not specified, no load balancer will be created for the API server.
-                        properties:
-                          additionalPorts:
-                            description: AdditionalPorts adds additional tcp ports
-                              to the load balancer.
-                            items:
-                              type: integer
-                            type: array
-                            x-kubernetes-list-type: set
-                          allowedCIDRs:
-                            description: AllowedCIDRs restrict access to all API-Server
-                              listeners to the given address CIDRs.
-                            items:
-                              type: string
-                            type: array
-                            x-kubernetes-list-type: set
-                          availabilityZone:
-                            description: AvailabilityZone is the failure domain that
-                              will be used to create the APIServerLoadBalancer Spec.
-                            type: string
-                          enabled:
-                            default: true
-                            description: |-
-                              Enabled defines whether a load balancer should be created. This value
-                              defaults to true if an APIServerLoadBalancer is given.
-
-                              There is no reason to set this to false. To disable creation of the
-                              API server loadbalancer, omit the APIServerLoadBalancer field in the
-                              cluster spec instead.
-                            type: boolean
-                          flavor:
-                            description: Flavor is the flavor name that will be used
-                              to create the APIServerLoadBalancer Spec.
-                            type: string
-                          network:
-                            description: Network defines which network should the
-                              load balancer be allocated on.
-                            maxProperties: 1
-                            minProperties: 1
-                            properties:
-                              filter:
-                                description: Filter specifies a filter to select an
-                                  OpenStack network. If provided, cannot be empty.
-                                minProperties: 1
-                                properties:
-                                  description:
-                                    type: string
-                                  name:
-                                    type: string
-                                  notTags:
-                                    description: |-
-                                      NotTags is a list of tags to filter by. If specified, resources which
-                                      contain all of the given tags will be excluded from the result.
-                                    items:
-                                      description: |-
-                                        NeutronTag represents a tag on a Neutron resource.
-                                        It may not be empty and may not contain commas.
-                                      minLength: 1
-                                      pattern: ^[^,]+$
-                                      type: string
-                                    type: array
-                                    x-kubernetes-list-type: set
-                                  notTagsAny:
-                                    description: |-
-                                      NotTagsAny is a list of tags to filter by. If specified, resources
-                                      which contain any of the given tags will be excluded from the result.
-                                    items:
-                                      description: |-
-                                        NeutronTag represents a tag on a Neutron resource.
-                                        It may not be empty and may not contain commas.
-                                      minLength: 1
-                                      pattern: ^[^,]+$
-                                      type: string
-                                    type: array
-                                    x-kubernetes-list-type: set
-                                  projectID:
-                                    type: string
-                                  tags:
-                                    description: |-
-                                      Tags is a list of tags to filter by. If specified, the resource must
-                                      have all of the tags specified to be included in the result.
-                                    items:
-                                      description: |-
-                                        NeutronTag represents a tag on a Neutron resource.
-                                        It may not be empty and may not contain commas.
-                                      minLength: 1
-                                      pattern: ^[^,]+$
-                                      type: string
-                                    type: array
-                                    x-kubernetes-list-type: set
-                                  tagsAny:
-                                    description: |-
-                                      TagsAny is a list of tags to filter by. If specified, the resource
-                                      must have at least one of the tags specified to be included in the
-                                      result.
-                                    items:
-                                      description: |-
-                                        NeutronTag represents a tag on a Neutron resource.
-                                        It may not be empty and may not contain commas.
-                                      minLength: 1
-                                      pattern: ^[^,]+$
-                                      type: string
-                                    type: array
-                                    x-kubernetes-list-type: set
-                                type: object
-                              id:
-                                description: ID is the ID of the network to use. If
-                                  ID is provided, the other filters cannot be provided.
-                                  Must be in UUID format.
-                                format: uuid
-                                type: string
-                            type: object
-                          provider:
-                            description: |-
-                              Provider specifies name of a specific Octavia provider to use for the
-                              API load balancer. The Octavia default will be used if it is not
-                              specified.
-                            type: string
-                          subnets:
-                            description: |-
-                              Subnets define which subnets should the load balancer be allocated on.
-                              It is expected that subnets are located on the network specified in this resource.
-                              Only the first element is taken into account.
-                              kubebuilder:validation:MaxLength:=2
-                            items:
-                              description: SubnetParam specifies an OpenStack subnet
-                                to use. It may be specified by either ID or filter,
-                                but not both.
-                              maxProperties: 1
-                              minProperties: 1
-                              properties:
-                                filter:
-                                  description: Filter specifies a filter to select
-                                    the subnet. It must match exactly one subnet.
-                                  minProperties: 1
-                                  properties:
-                                    cidr:
-                                      type: string
-                                    description:
-                                      type: string
-                                    gatewayIP:
-                                      type: string
-                                    ipVersion:
-                                      type: integer
-                                    ipv6AddressMode:
-                                      type: string
-                                    ipv6RAMode:
-                                      type: string
-                                    name:
-                                      type: string
-                                    notTags:
-                                      description: |-
-                                        NotTags is a list of tags to filter by. If specified, resources which
-                                        contain all of the given tags will be excluded from the result.
-                                      items:
-                                        description: |-
-                                          NeutronTag represents a tag on a Neutron resource.
-                                          It may not be empty and may not contain commas.
-                                        minLength: 1
-                                        pattern: ^[^,]+$
-                                        type: string
-                                      type: array
-                                      x-kubernetes-list-type: set
-                                    notTagsAny:
-                                      description: |-
-                                        NotTagsAny is a list of tags to filter by. If specified, resources
-                                        which contain any of the given tags will be excluded from the result.
-                                      items:
-                                        description: |-
-                                          NeutronTag represents a tag on a Neutron resource.
-                                          It may not be empty and may not contain commas.
-                                        minLength: 1
-                                        pattern: ^[^,]+$
-                                        type: string
-                                      type: array
-                                      x-kubernetes-list-type: set
-                                    projectID:
-                                      type: string
-                                    tags:
-                                      description: |-
-                                        Tags is a list of tags to filter by. If specified, the resource must
-                                        have all of the tags specified to be included in the result.
-                                      items:
-                                        description: |-
-                                          NeutronTag represents a tag on a Neutron resource.
-                                          It may not be empty and may not contain commas.
-                                        minLength: 1
-                                        pattern: ^[^,]+$
-                                        type: string
-                                      type: array
-                                      x-kubernetes-list-type: set
-                                    tagsAny:
-                                      description: |-
-                                        TagsAny is a list of tags to filter by. If specified, the resource
-                                        must have at least one of the tags specified to be included in the
-                                        result.
-                                      items:
-                                        description: |-
-                                          NeutronTag represents a tag on a Neutron resource.
-                                          It may not be empty and may not contain commas.
-                                        minLength: 1
-                                        pattern: ^[^,]+$
-                                        type: string
-                                      type: array
-                                      x-kubernetes-list-type: set
-                                  type: object
-                                id:
-                                  description: ID is the uuid of the subnet. It will
-                                    not be validated.
-                                  format: uuid
-                                  type: string
-                              type: object
-                            type: array
-                            x-kubernetes-list-type: atomic
-                        required:
-                        - enabled
-                        type: object
-                      apiServerPort:
-                        description: |-
-                          APIServerPort is the port on which the listener on the APIServer
-                          will be created. If specified, it must be an integer between 0 and 65535.
-                        maximum: 65535
-                        minimum: 0
-                        type: integer
-                      bastion:
-                        description: |-
-                          Bastion is the OpenStack instance to login the nodes
-
-                          As a rolling update is not ideal during a bastion host session, we
-                          prevent changes to a running bastion configuration. To make changes, it's required
-                          to first set `enabled: false` which will remove the bastion and then changes can be made.
-                        properties:
-                          availabilityZone:
-                            description: AvailabilityZone is the failure domain that
-                              will be used to create the Bastion Spec.
-                            type: string
-                          enabled:
-                            default: true
-                            description: |-
-                              Enabled means that bastion is enabled. The bastion is enabled by
-                              default if this field is not specified. Set this field to false to disable the
-                              bastion.
-
-                              It is not currently possible to remove the bastion from the cluster
-                              spec without first disabling it by setting this field to false and
-                              waiting until the bastion has been deleted.
-                            type: boolean
-                          floatingIP:
-                            description: |-
-                              FloatingIP which will be associated to the bastion machine. It's the IP address, not UUID.
-                              The floating IP should already exist and should not be associated with a port. If FIP of this address does not
-                              exist, CAPO will try to create it, but by default only OpenStack administrators have privileges to do so.
-                            format: ipv4
-                            type: string
-                          spec:
-                            description: Spec for the bastion itself
-                            properties:
-                              additionalBlockDevices:
-                                description: AdditionalBlockDevices is a list of specifications
-                                  for additional block devices to attach to the server
-                                  instance
-                                items:
-                                  description: AdditionalBlockDevice is a block device
-                                    to attach to the server.
-                                  properties:
-                                    name:
-                                      description: |-
-                                        Name of the block device in the context of a machine.
-                                        If the block device is a volume, the Cinder volume will be named
-                                        as a combination of the machine name and this name.
-                                        Also, this name will be used for tagging the block device.
-                                        Information about the block device tag can be obtained from the OpenStack
-                                        metadata API or the config drive.
-                                        Name cannot be 'root', which is reserved for the root volume.
-                                      type: string
-                                    sizeGiB:
-                                      description: SizeGiB is the size of the block
-                                        device in gibibytes (GiB).
-                                      minimum: 1
-                                      type: integer
-                                    storage:
-                                      description: |-
-                                        Storage specifies the storage type of the block device and
-                                        additional storage options.
-                                      properties:
-                                        type:
-                                          description: |-
-                                            Type is the type of block device to create.
-                                            This can be either "Volume" or "Local".
-                                          type: string
-                                        volume:
-                                          description: Volume contains additional
-                                            storage options for a volume block device.
-                                          properties:
-                                            availabilityZone:
-                                              description: |-
-                                                AvailabilityZone is the volume availability zone to create the volume
-                                                in. If not specified, the volume will be created without an explicit
-                                                availability zone.
-                                              properties:
-                                                from:
-                                                  default: Name
-                                                  description: |-
-                                                    From specifies where we will obtain the availability zone for the
-                                                    volume. The options are "Name" and "Machine". If "Name" is specified
-                                                    then the Name field must also be specified. If "Machine" is specified
-                                                    the volume will use the value of FailureDomain, if any, from the
-                                                    associated Machine.
-                                                  enum:
-                                                  - Name
-                                                  - Machine
-                                                  type: string
-                                                name:
-                                                  description: |-
-                                                    Name is the name of a volume availability zone to use. It is required
-                                                    if From is "Name". The volume availability zone name may not contain
-                                                    spaces.
-                                                  minLength: 1
-                                                  pattern: ^[^ ]+$
-                                                  type: string
-                                              type: object
-                                              x-kubernetes-validations:
-                                              - message: name is required when from
-                                                  is 'Name' or default
-                                                rule: '!has(self.from) || self.from
-                                                  == ''Name'' ? has(self.name) : !has(self.name)'
-                                            type:
-                                              description: |-
-                                                Type is the Cinder volume type of the volume.
-                                                If omitted, the default Cinder volume type that is configured in the OpenStack cloud
-                                                will be used.
-                                              type: string
-                                          type: object
-                                      required:
-                                      - type
-                                      type: object
-                                  required:
-                                  - name
-                                  - sizeGiB
-                                  - storage
-                                  type: object
-                                type: array
-                                x-kubernetes-list-map-keys:
-                                - name
-                                x-kubernetes-list-type: map
-                              configDrive:
-                                description: Config Drive support
-                                type: boolean
-                              flavor:
-                                description: The flavor reference for the flavor for
-                                  your server instance.
-                                minLength: 1
-                                type: string
-                              flavorID:
-                                description: |-
-                                  FlavorID allows flavors to be specified by ID.  This field takes precedence
-                                  over Flavor.
-                                minLength: 1
-                                type: string
-                              floatingIPPoolRef:
-                                description: |-
-                                  floatingIPPoolRef is a reference to a IPPool that will be assigned
-                                  to an IPAddressClaim. Once the IPAddressClaim is fulfilled, the FloatingIP
-                                  will be assigned to the OpenStackMachine.
-                                properties:
-                                  apiGroup:
-                                    description: |-
-                                      APIGroup is the group for the resource being referenced.
-                                      If APIGroup is not specified, the specified Kind must be in the core API group.
-                                      For any other third-party types, APIGroup is required.
-                                    type: string
-                                  kind:
-                                    description: Kind is the type of resource being
-                                      referenced
-                                    type: string
-                                  name:
-                                    description: Name is the name of resource being
-                                      referenced
-                                    type: string
-                                required:
-                                - kind
-                                - name
-                                type: object
-                                x-kubernetes-map-type: atomic
-                              identityRef:
-                                description: |-
-                                  IdentityRef is a reference to a secret holding OpenStack credentials
-                                  to be used when reconciling this machine. If not specified, the
-                                  credentials specified in the cluster will be used.
-                                properties:
-                                  cloudName:
-                                    description: CloudName specifies the name of the
-                                      entry in the clouds.yaml file to use.
-                                    type: string
-                                  name:
-                                    description: |-
-                                      Name is the name of a secret in the same namespace as the resource being provisioned.
-                                      The secret must contain a key named `clouds.yaml` which contains an OpenStack clouds.yaml file.
-                                      The secret may optionally contain a key named `cacert` containing a PEM-encoded CA certificate.
-                                    type: string
-                                  region:
-                                    description: |-
-                                      Region specifies an OpenStack region to use. If specified, it overrides
-                                      any value in clouds.yaml. If specified for an OpenStackMachine, its
-                                      value will be included in providerID.
-                                    type: string
-                                required:
-                                - cloudName
-                                - name
-                                type: object
-                                x-kubernetes-validations:
-                                - message: region is immutable
-                                  rule: (!has(self.region) && !has(oldSelf.region))
-                                    || self.region == oldSelf.region
-                              image:
-                                description: |-
-                                  The image to use for your server instance.
-                                  If the rootVolume is specified, this will be used when creating the root volume.
-                                maxProperties: 1
-                                minProperties: 1
-                                properties:
-                                  filter:
-                                    description: |-
-                                      Filter describes a query for an image. If specified, the combination
-                                      of name and tags must return a single matching image or an error will
-                                      be raised.
-                                    minProperties: 1
-                                    properties:
-                                      name:
-                                        description: The name of the desired image.
-                                          If specified, the combination of name and
-                                          tags must return a single matching image
-                                          or an error will be raised.
-                                        type: string
-                                      tags:
-                                        description: The tags associated with the
-                                          desired image. If specified, the combination
-                                          of name and tags must return a single matching
-                                          image or an error will be raised.
-                                        items:
-                                          type: string
-                                        type: array
-                                        x-kubernetes-list-type: set
-                                    type: object
-                                  id:
-                                    description: ID is the uuid of the image. ID will
-                                      not be validated before use.
-                                    format: uuid
-                                    type: string
-                                  imageRef:
-                                    description: |-
-                                      ImageRef is a reference to an ORC Image in the same namespace as the
-                                      referring object.
-                                    properties:
-                                      name:
-                                        description: Name is the name of the referenced
-                                          resource
-                                        type: string
-                                    required:
-                                    - name
-                                    type: object
-                                type: object
-                              ports:
-                                description: |-
-                                  Ports to be attached to the server instance. They are created if a port with the given name does not already exist.
-                                  If not specified a default port will be added for the default cluster network.
-                                items:
-                                  properties:
-                                    adminStateUp:
-                                      description: AdminStateUp specifies whether
-                                        the port should be created in the up (true)
-                                        or down (false) state. The default is up.
-                                      type: boolean
-                                    allowedAddressPairs:
-                                      description: |-
-                                        AllowedAddressPairs is a list of address pairs which Neutron will
-                                        allow the port to send traffic from in addition to the port's
-                                        addresses. If not specified, the MAC Address will be the MAC Address
-                                        of the port. Depending on the configuration of Neutron, it may be
-                                        supported to specify a CIDR instead of a specific IP address.
-                                      items:
-                                        properties:
-                                          ipAddress:
-                                            description: |-
-                                              IPAddress is the IP address of the allowed address pair. Depending on
-                                              the configuration of Neutron, it may be supported to specify a CIDR
-                                              instead of a specific IP address.
-                                            type: string
-                                          macAddress:
-                                            description: |-
-                                              MACAddress is the MAC address of the allowed address pair. If not
-                                              specified, the MAC address will be the MAC address of the port.
-                                            type: string
-                                        required:
-                                        - ipAddress
-                                        type: object
-                                      type: array
-                                    description:
-                                      description: Description is a human-readable
-                                        description for the port.
-                                      type: string
-                                    disablePortSecurity:
-                                      description: |-
-                                        DisablePortSecurity enables or disables the port security when set.
-                                        When not set, it takes the value of the corresponding field at the network level.
-                                      type: boolean
-                                    fixedIPs:
-                                      description: FixedIPs is a list of pairs of
-                                        subnet and/or IP address to assign to the
-                                        port. If specified, these must be subnets
-                                        of the port's network.
-                                      items:
-                                        properties:
-                                          ipAddress:
-                                            description: |-
-                                              IPAddress is a specific IP address to assign to the port. If Subnet
-                                              is also specified, IPAddress must be a valid IP address in the
-                                              subnet. If Subnet is not specified, IPAddress must be a valid IP
-                                              address in any subnet of the port's network.
-                                            type: string
-                                          subnet:
-                                            description: |-
-                                              Subnet is an openstack subnet query that will return the id of a subnet to create
-                                              the fixed IP of a port in. This query must not return more than one subnet.
-                                            maxProperties: 1
-                                            minProperties: 1
-                                            properties:
-                                              filter:
-                                                description: Filter specifies a filter
-                                                  to select the subnet. It must match
-                                                  exactly one subnet.
-                                                minProperties: 1
-                                                properties:
-                                                  cidr:
-                                                    type: string
-                                                  description:
-                                                    type: string
-                                                  gatewayIP:
-                                                    type: string
-                                                  ipVersion:
-                                                    type: integer
-                                                  ipv6AddressMode:
-                                                    type: string
-                                                  ipv6RAMode:
-                                                    type: string
-                                                  name:
-                                                    type: string
-                                                  notTags:
-                                                    description: |-
-                                                      NotTags is a list of tags to filter by. If specified, resources which
-                                                      contain all of the given tags will be excluded from the result.
-                                                    items:
-                                                      description: |-
-                                                        NeutronTag represents a tag on a Neutron resource.
-                                                        It may not be empty and may not contain commas.
-                                                      minLength: 1
-                                                      pattern: ^[^,]+$
-                                                      type: string
-                                                    type: array
-                                                    x-kubernetes-list-type: set
-                                                  notTagsAny:
-                                                    description: |-
-                                                      NotTagsAny is a list of tags to filter by. If specified, resources
-                                                      which contain any of the given tags will be excluded from the result.
-                                                    items:
-                                                      description: |-
-                                                        NeutronTag represents a tag on a Neutron resource.
-                                                        It may not be empty and may not contain commas.
-                                                      minLength: 1
-                                                      pattern: ^[^,]+$
-                                                      type: string
-                                                    type: array
-                                                    x-kubernetes-list-type: set
-                                                  projectID:
-                                                    type: string
-                                                  tags:
-                                                    description: |-
-                                                      Tags is a list of tags to filter by. If specified, the resource must
-                                                      have all of the tags specified to be included in the result.
-                                                    items:
-                                                      description: |-
-                                                        NeutronTag represents a tag on a Neutron resource.
-                                                        It may not be empty and may not contain commas.
-                                                      minLength: 1
-                                                      pattern: ^[^,]+$
-                                                      type: string
-                                                    type: array
-                                                    x-kubernetes-list-type: set
-                                                  tagsAny:
-                                                    description: |-
-                                                      TagsAny is a list of tags to filter by. If specified, the resource
-                                                      must have at least one of the tags specified to be included in the
-                                                      result.
-                                                    items:
-                                                      description: |-
-                                                        NeutronTag represents a tag on a Neutron resource.
-                                                        It may not be empty and may not contain commas.
-                                                      minLength: 1
-                                                      pattern: ^[^,]+$
-                                                      type: string
-                                                    type: array
-                                                    x-kubernetes-list-type: set
-                                                type: object
-                                              id:
-                                                description: ID is the uuid of the
-                                                  subnet. It will not be validated.
-                                                format: uuid
-                                                type: string
-                                            type: object
-                                        type: object
-                                      type: array
-                                      x-kubernetes-list-type: atomic
-                                    hostID:
-                                      description: HostID specifies the ID of the
-                                        host where the port resides.
-                                      type: string
-                                    macAddress:
-                                      description: MACAddress specifies the MAC address
-                                        of the port. If not specified, the MAC address
-                                        will be generated.
-                                      type: string
-                                    nameSuffix:
-                                      description: NameSuffix will be appended to
-                                        the name of the port if specified. If unspecified,
-                                        instead the 0-based index of the port in the
-                                        list is used.
-                                      type: string
-                                    network:
-                                      description: |-
-                                        Network is a query for an openstack network that the port will be created or discovered on.
-                                        This will fail if the query returns more than one network.
-                                      maxProperties: 1
-                                      minProperties: 1
-                                      properties:
-                                        filter:
-                                          description: Filter specifies a filter to
-                                            select an OpenStack network. If provided,
-                                            cannot be empty.
-                                          minProperties: 1
-                                          properties:
-                                            description:
-                                              type: string
-                                            name:
-                                              type: string
-                                            notTags:
-                                              description: |-
-                                                NotTags is a list of tags to filter by. If specified, resources which
-                                                contain all of the given tags will be excluded from the result.
-                                              items:
-                                                description: |-
-                                                  NeutronTag represents a tag on a Neutron resource.
-                                                  It may not be empty and may not contain commas.
-                                                minLength: 1
-                                                pattern: ^[^,]+$
-                                                type: string
-                                              type: array
-                                              x-kubernetes-list-type: set
-                                            notTagsAny:
-                                              description: |-
-                                                NotTagsAny is a list of tags to filter by. If specified, resources
-                                                which contain any of the given tags will be excluded from the result.
-                                              items:
-                                                description: |-
-                                                  NeutronTag represents a tag on a Neutron resource.
-                                                  It may not be empty and may not contain commas.
-                                                minLength: 1
-                                                pattern: ^[^,]+$
-                                                type: string
-                                              type: array
-                                              x-kubernetes-list-type: set
-                                            projectID:
-                                              type: string
-                                            tags:
-                                              description: |-
-                                                Tags is a list of tags to filter by. If specified, the resource must
-                                                have all of the tags specified to be included in the result.
-                                              items:
-                                                description: |-
-                                                  NeutronTag represents a tag on a Neutron resource.
-                                                  It may not be empty and may not contain commas.
-                                                minLength: 1
-                                                pattern: ^[^,]+$
-                                                type: string
-                                              type: array
-                                              x-kubernetes-list-type: set
-                                            tagsAny:
-                                              description: |-
-                                                TagsAny is a list of tags to filter by. If specified, the resource
-                                                must have at least one of the tags specified to be included in the
-                                                result.
-                                              items:
-                                                description: |-
-                                                  NeutronTag represents a tag on a Neutron resource.
-                                                  It may not be empty and may not contain commas.
-                                                minLength: 1
-                                                pattern: ^[^,]+$
-                                                type: string
-                                              type: array
-                                              x-kubernetes-list-type: set
-                                          type: object
-                                        id:
-                                          description: ID is the ID of the network
-                                            to use. If ID is provided, the other filters
-                                            cannot be provided. Must be in UUID format.
-                                          format: uuid
-                                          type: string
-                                      type: object
-                                    profile:
-                                      description: |-
-                                        Profile is a set of key-value pairs that are used for binding
-                                        details. We intentionally don't expose this as a map[string]string
-                                        because we only want to enable the users to set the values of the
-                                        keys that are known to work in OpenStack Networking API.  See
-                                        https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
-                                        To set profiles, your tenant needs permissions rule:create_port, and
-                                        rule:create_port:binding:profile
-                                      properties:
-                                        ovsHWOffload:
-                                          description: |-
-                                            OVSHWOffload enables or disables the OVS hardware offload feature.
-                                            This flag is not required on OpenStack clouds since Yoga as Nova will set it automatically when the port is attached.
-                                            See: https://bugs.launchpad.net/nova/+bug/2020813
-                                          type: boolean
-                                        trustedVF:
-                                          description: TrustedVF enables or disables
-                                            the “trusted mode” for the VF.
-                                          type: boolean
-                                      type: object
-                                    propagateUplinkStatus:
-                                      description: PropageteUplinkStatus enables or
-                                        disables the propagate uplink status on the
-                                        port.
-                                      type: boolean
-                                    securityGroups:
-                                      description: SecurityGroups is a list of the
-                                        names, uuids, filters or any combination these
-                                        of the security groups to assign to the instance.
-                                      items:
-                                        description: SecurityGroupParam specifies
-                                          an OpenStack security group. It may be specified
-                                          by ID or filter, but not both.
-                                        maxProperties: 1
-                                        minProperties: 1
-                                        properties:
-                                          filter:
-                                            description: Filter specifies a query
-                                              to select an OpenStack security group.
-                                              If provided, cannot be empty.
-                                            minProperties: 1
-                                            properties:
-                                              description:
-                                                type: string
-                                              name:
-                                                type: string
-                                              notTags:
-                                                description: |-
-                                                  NotTags is a list of tags to filter by. If specified, resources which
-                                                  contain all of the given tags will be excluded from the result.
-                                                items:
-                                                  description: |-
-                                                    NeutronTag represents a tag on a Neutron resource.
-                                                    It may not be empty and may not contain commas.
-                                                  minLength: 1
-                                                  pattern: ^[^,]+$
-                                                  type: string
-                                                type: array
-                                                x-kubernetes-list-type: set
-                                              notTagsAny:
-                                                description: |-
-                                                  NotTagsAny is a list of tags to filter by. If specified, resources
-                                                  which contain any of the given tags will be excluded from the result.
-                                                items:
-                                                  description: |-
-                                                    NeutronTag represents a tag on a Neutron resource.
-                                                    It may not be empty and may not contain commas.
-                                                  minLength: 1
-                                                  pattern: ^[^,]+$
-                                                  type: string
-                                                type: array
-                                                x-kubernetes-list-type: set
-                                              projectID:
-                                                type: string
-                                              tags:
-                                                description: |-
-                                                  Tags is a list of tags to filter by. If specified, the resource must
-                                                  have all of the tags specified to be included in the result.
-                                                items:
-                                                  description: |-
-                                                    NeutronTag represents a tag on a Neutron resource.
-                                                    It may not be empty and may not contain commas.
-                                                  minLength: 1
-                                                  pattern: ^[^,]+$
-                                                  type: string
-                                                type: array
-                                                x-kubernetes-list-type: set
-                                              tagsAny:
-                                                description: |-
-                                                  TagsAny is a list of tags to filter by. If specified, the resource
-                                                  must have at least one of the tags specified to be included in the
-                                                  result.
-                                                items:
-                                                  description: |-
-                                                    NeutronTag represents a tag on a Neutron resource.
-                                                    It may not be empty and may not contain commas.
-                                                  minLength: 1
-                                                  pattern: ^[^,]+$
-                                                  type: string
-                                                type: array
-                                                x-kubernetes-list-type: set
-                                            type: object
-                                          id:
-                                            description: ID is the ID of the security
-                                              group to use. If ID is provided, the
-                                              other filters cannot be provided. Must
-                                              be in UUID format.
-                                            format: uuid
-                                            type: string
-                                        type: object
-                                      type: array
-                                      x-kubernetes-list-type: atomic
-                                    tags:
-                                      description: |-
-                                        Tags applied to the port (and corresponding trunk, if a trunk is configured.)
-                                        These tags are applied in addition to the instance's tags, which will also be applied to the port.
-                                      items:
-                                        type: string
-                                      type: array
-                                      x-kubernetes-list-type: set
-                                    trunk:
-                                      description: |-
-                                        Trunk specifies whether trunking is enabled at the port level. If not
-                                        provided the value is inherited from the machine, or false for a
-                                        bastion host.
-                                      type: boolean
-                                    valueSpecs:
-                                      description: |-
-                                        Value specs are extra parameters to include in the API request with OpenStack.
-                                        This is an extension point for the API, so what they do and if they are supported,
-                                        depends on the specific OpenStack implementation.
-                                      items:
-                                        description: ValueSpec represents a single
-                                          value_spec key-value pair.
-                                        properties:
-                                          key:
-                                            description: Key is the key in the key-value
-                                              pair.
-                                            type: string
-                                          name:
-                                            description: |-
-                                              Name is the name of the key-value pair.
-                                              This is just for identifying the pair and will not be sent to the OpenStack API.
-                                            type: string
-                                          value:
-                                            description: Value is the value in the
-                                              key-value pair.
-                                            type: string
-                                        required:
-                                        - key
-                                        - name
-                                        - value
-                                        type: object
-                                      type: array
-                                      x-kubernetes-list-map-keys:
-                                      - name
-                                      x-kubernetes-list-type: map
-                                    vnicType:
-                                      description: |-
-                                        VNICType specifies the type of vNIC which this port should be
-                                        attached to. This is used to determine which mechanism driver(s) to
-                                        be used to bind the port. The valid values are normal, macvtap,
-                                        direct, baremetal, direct-physical, virtio-forwarder, smart-nic and
-                                        remote-managed, although these values will not be validated in this
-                                        API to ensure compatibility with future neutron changes or custom
-                                        implementations. What type of vNIC is actually available depends on
-                                        deployments. If not specified, the Neutron default value is used.
-                                      type: string
-                                  type: object
-                                type: array
-                              providerID:
-                                description: ProviderID is the unique identifier as
-                                  specified by the cloud provider.
-                                type: string
-                              rootVolume:
-                                description: The volume metadata to boot from
-                                properties:
-                                  availabilityZone:
-                                    description: |-
-                                      AvailabilityZone is the volume availability zone to create the volume
-                                      in. If not specified, the volume will be created without an explicit
-                                      availability zone.
-                                    properties:
-                                      from:
-                                        default: Name
-                                        description: |-
-                                          From specifies where we will obtain the availability zone for the
-                                          volume. The options are "Name" and "Machine". If "Name" is specified
-                                          then the Name field must also be specified. If "Machine" is specified
-                                          the volume will use the value of FailureDomain, if any, from the
-                                          associated Machine.
-                                        enum:
-                                        - Name
-                                        - Machine
-                                        type: string
-                                      name:
-                                        description: |-
-                                          Name is the name of a volume availability zone to use. It is required
-                                          if From is "Name". The volume availability zone name may not contain
-                                          spaces.
-                                        minLength: 1
-                                        pattern: ^[^ ]+$
-                                        type: string
-                                    type: object
-                                    x-kubernetes-validations:
-                                    - message: name is required when from is 'Name'
-                                        or default
-                                      rule: '!has(self.from) || self.from == ''Name''
-                                        ? has(self.name) : !has(self.name)'
-                                  sizeGiB:
-                                    description: SizeGiB is the size of the block
-                                      device in gibibytes (GiB).
-                                    minimum: 1
-                                    type: integer
-                                  type:
-                                    description: |-
-                                      Type is the Cinder volume type of the volume.
-                                      If omitted, the default Cinder volume type that is configured in the OpenStack cloud
-                                      will be used.
-                                    type: string
-                                required:
-                                - sizeGiB
-                                type: object
-                              schedulerHintAdditionalProperties:
-                                description: |-
-                                  SchedulerHintAdditionalProperties are arbitrary key/value pairs that provide additional hints
-                                  to the OpenStack scheduler. These hints can influence how instances are placed on the infrastructure,
-                                  such as specifying certain host aggregates or availability zones.
-                                items:
-                                  description: |-
-                                    SchedulerHintAdditionalProperty represents a single additional property for a scheduler hint.
-                                    It includes a Name to identify the property and a Value that can be of various types.
-                                  properties:
-                                    name:
-                                      description: |-
-                                        Name is the name of the scheduler hint property.
-                                        It is a unique identifier for the property.
-                                      minLength: 1
-                                      type: string
-                                    value:
-                                      description: |-
-                                        Value is the value of the scheduler hint property, which can be of various types
-                                        (e.g., bool, string, int). The type is indicated by the Value.Type field.
-                                      properties:
-                                        bool:
-                                          description: |-
-                                            Bool is the boolean value of the scheduler hint, used when Type is "Bool".
-                                            This field is required if type is 'Bool', and must not be set otherwise.
-                                          type: boolean
-                                        number:
-                                          description: |-
-                                            Number is the integer value of the scheduler hint, used when Type is "Number".
-                                            This field is required if type is 'Number', and must not be set otherwise.
-                                          type: integer
-                                        string:
-                                          description: |-
-                                            String is the string value of the scheduler hint, used when Type is "String".
-                                            This field is required if type is 'String', and must not be set otherwise.
-                                          maxLength: 255
-                                          minLength: 1
-                                          type: string
-                                        type:
-                                          description: |-
-                                            Type represents the type of the value.
-                                            Valid values are Bool, String, and Number.
-                                          enum:
-                                          - Bool
-                                          - String
-                                          - Number
-                                          type: string
-                                      required:
-                                      - type
-                                      type: object
-                                      x-kubernetes-validations:
-                                      - message: bool is required when type is Bool,
-                                          and forbidden otherwise
-                                        rule: 'has(self.type) && self.type == ''Bool''
-                                          ? has(self.bool) : !has(self.bool)'
-                                      - message: number is required when type is Number,
-                                          and forbidden otherwise
-                                        rule: 'has(self.type) && self.type == ''Number''
-                                          ? has(self.number) : !has(self.number)'
-                                      - message: string is required when type is String,
-                                          and forbidden otherwise
-                                        rule: 'has(self.type) && self.type == ''String''
-                                          ? has(self.string) : !has(self.string)'
-                                  required:
-                                  - name
-                                  - value
-                                  type: object
-                                type: array
-                                x-kubernetes-list-map-keys:
-                                - name
-                                x-kubernetes-list-type: map
-                              securityGroups:
-                                description: The names of the security groups to assign
-                                  to the instance
-                                items:
-                                  description: SecurityGroupParam specifies an OpenStack
-                                    security group. It may be specified by ID or filter,
-                                    but not both.
-                                  maxProperties: 1
-                                  minProperties: 1
-                                  properties:
-                                    filter:
-                                      description: Filter specifies a query to select
-                                        an OpenStack security group. If provided,
-                                        cannot be empty.
-                                      minProperties: 1
-                                      properties:
-                                        description:
-                                          type: string
-                                        name:
-                                          type: string
-                                        notTags:
-                                          description: |-
-                                            NotTags is a list of tags to filter by. If specified, resources which
-                                            contain all of the given tags will be excluded from the result.
-                                          items:
-                                            description: |-
-                                              NeutronTag represents a tag on a Neutron resource.
-                                              It may not be empty and may not contain commas.
-                                            minLength: 1
-                                            pattern: ^[^,]+$
-                                            type: string
-                                          type: array
-                                          x-kubernetes-list-type: set
-                                        notTagsAny:
-                                          description: |-
-                                            NotTagsAny is a list of tags to filter by. If specified, resources
-                                            which contain any of the given tags will be excluded from the result.
-                                          items:
-                                            description: |-
-                                              NeutronTag represents a tag on a Neutron resource.
-                                              It may not be empty and may not contain commas.
-                                            minLength: 1
-                                            pattern: ^[^,]+$
-                                            type: string
-                                          type: array
-                                          x-kubernetes-list-type: set
-                                        projectID:
-                                          type: string
-                                        tags:
-                                          description: |-
-                                            Tags is a list of tags to filter by. If specified, the resource must
-                                            have all of the tags specified to be included in the result.
-                                          items:
-                                            description: |-
-                                              NeutronTag represents a tag on a Neutron resource.
-                                              It may not be empty and may not contain commas.
-                                            minLength: 1
-                                            pattern: ^[^,]+$
-                                            type: string
-                                          type: array
-                                          x-kubernetes-list-type: set
-                                        tagsAny:
-                                          description: |-
-                                            TagsAny is a list of tags to filter by. If specified, the resource
-                                            must have at least one of the tags specified to be included in the
-                                            result.
-                                          items:
-                                            description: |-
-                                              NeutronTag represents a tag on a Neutron resource.
-                                              It may not be empty and may not contain commas.
-                                            minLength: 1
-                                            pattern: ^[^,]+$
-                                            type: string
-                                          type: array
-                                          x-kubernetes-list-type: set
-                                      type: object
-                                    id:
-                                      description: ID is the ID of the security group
-                                        to use. If ID is provided, the other filters
-                                        cannot be provided. Must be in UUID format.
-                                      format: uuid
-                                      type: string
-                                  type: object
-                                type: array
-                              serverGroup:
-                                description: The server group to assign the machine
-                                  to.
-                                maxProperties: 1
-                                minProperties: 1
-                                properties:
-                                  filter:
-                                    description: Filter specifies a query to select
-                                      an OpenStack server group. If provided, it cannot
-                                      be empty.
-                                    minProperties: 1
-                                    properties:
-                                      name:
-                                        description: Name is the name of a server
-                                          group to look for.
-                                        type: string
-                                    type: object
-                                  id:
-                                    description: ID is the ID of the server group
-                                      to use.
-                                    format: uuid
-                                    type: string
-                                type: object
-                              serverMetadata:
-                                description: Metadata mapping. Allows you to create
-                                  a map of key value pairs to add to the server instance.
-                                items:
-                                  properties:
-                                    key:
-                                      description: Key is the server metadata key
-                                      maxLength: 255
-                                      type: string
-                                    value:
-                                      description: Value is the server metadata value
-                                      maxLength: 255
-                                      type: string
-                                  required:
-                                  - key
-                                  - value
-                                  type: object
-                                type: array
-                                x-kubernetes-list-map-keys:
-                                - key
-                                x-kubernetes-list-type: map
-                              sshKeyName:
-                                description: The ssh key to inject in the instance
-                                type: string
-                              tags:
-                                description: |-
-                                  Tags which will be added to the machine and all dependent resources
-                                  which support them. These are in addition to Tags defined on the
-                                  cluster.
-                                  Requires Nova api 2.52 minimum!
-                                items:
-                                  type: string
-                                type: array
-                                x-kubernetes-list-type: set
-                              trunk:
-                                description: Whether the server instance is created
-                                  on a trunk port or not.
-                                type: boolean
-                            required:
-                            - image
-                            type: object
-                            x-kubernetes-validations:
-                            - message: at least one of flavor or flavorID must be
-                                set
-                              rule: (has(self.flavor) || has(self.flavorID))
-                        type: object
-                        x-kubernetes-validations:
-                        - message: spec is required if bastion is enabled
-                          rule: '!self.enabled || has(self.spec)'
-                      controlPlaneAvailabilityZones:
-                        description: |-
-                          ControlPlaneAvailabilityZones is the set of availability zones which
-                          control plane machines may be deployed to.
-                        items:
-                          type: string
-                        type: array
-                        x-kubernetes-list-type: set
-                      controlPlaneEndpoint:
-                        description: |-
-                          ControlPlaneEndpoint represents the endpoint used to communicate with the control plane.
-                          It is normally populated automatically by the OpenStackCluster
-                          controller during cluster provisioning. If it is set on creation the
-                          control plane endpoint will use the values set here in preference to
-                          values set elsewhere.
-                          ControlPlaneEndpoint cannot be modified after ControlPlaneEndpoint.Host has been set.
-                        properties:
-                          host:
-                            description: The hostname on which the API server is serving.
-                            type: string
-                          port:
-                            description: The port on which the API server is serving.
-                            format: int32
-                            type: integer
-                        required:
-                        - host
-                        - port
-                        type: object
-                      controlPlaneOmitAvailabilityZone:
-                        description: |-
-                          ControlPlaneOmitAvailabilityZone causes availability zone to be
-                          omitted when creating control plane nodes, allowing the Nova
-                          scheduler to make a decision on which availability zone to use based
-                          on other scheduling constraints
-                        type: boolean
-                      disableAPIServerFloatingIP:
-                        description: |-
-                          DisableAPIServerFloatingIP determines whether or not to attempt to attach a floating
-                          IP to the API server. This allows for the creation of clusters when attaching a floating
-                          IP to the API server (and hence, in many cases, exposing the API server to the internet)
-                          is not possible or desirable, e.g. if using a shared VLAN for communication between
-                          management and workload clusters or when the management cluster is inside the
-                          project network.
-                          This option requires that the API server use a VIP on the cluster network so that the
-                          underlying machines can change without changing ControlPlaneEndpoint.Host.
-                          When using a managed load balancer, this VIP will be managed automatically.
-                          If not using a managed load balancer, cluster configuration will fail without additional
-                          configuration to manage the VIP on the control plane machines, which falls outside of
-                          the scope of this controller.
-                        type: boolean
-                      disableExternalNetwork:
-                        description: |-
-                          DisableExternalNetwork specifies whether or not to attempt to connect the cluster
-                          to an external network. This allows for the creation of clusters when connecting
-                          to an external network is not possible or desirable, e.g. if using a provider network.
-                        type: boolean
-                      disablePortSecurity:
-                        description: |-
-                          DisablePortSecurity disables the port security of the network created for the
-                          Kubernetes cluster, which also disables SecurityGroups
-                        type: boolean
-                      externalNetwork:
-                        description: |-
-                          ExternalNetwork is the OpenStack Network to be used to get public internet to the VMs.
-                          This option is ignored if DisableExternalNetwork is set to true.
-
-                          If ExternalNetwork is defined it must refer to exactly one external network.
-
-                          If ExternalNetwork is not defined or is empty the controller will use any
-                          existing external network as long as there is only one. It is an
-                          error if ExternalNetwork is not defined and there are multiple
-                          external networks unless DisableExternalNetwork is also set.
-
-                          If ExternalNetwork is not defined and there are no external networks
-                          the controller will proceed as though DisableExternalNetwork was set.
-                        maxProperties: 1
-                        minProperties: 1
-                        properties:
-                          filter:
-                            description: Filter specifies a filter to select an OpenStack
-                              network. If provided, cannot be empty.
-                            minProperties: 1
-                            properties:
-                              description:
-                                type: string
-                              name:
-                                type: string
-                              notTags:
-                                description: |-
-                                  NotTags is a list of tags to filter by. If specified, resources which
-                                  contain all of the given tags will be excluded from the result.
-                                items:
-                                  description: |-
-                                    NeutronTag represents a tag on a Neutron resource.
-                                    It may not be empty and may not contain commas.
-                                  minLength: 1
-                                  pattern: ^[^,]+$
-                                  type: string
-                                type: array
-                                x-kubernetes-list-type: set
-                              notTagsAny:
-                                description: |-
-                                  NotTagsAny is a list of tags to filter by. If specified, resources
-                                  which contain any of the given tags will be excluded from the result.
-                                items:
-                                  description: |-
-                                    NeutronTag represents a tag on a Neutron resource.
-                                    It may not be empty and may not contain commas.
-                                  minLength: 1
-                                  pattern: ^[^,]+$
-                                  type: string
-                                type: array
-                                x-kubernetes-list-type: set
-                              projectID:
-                                type: string
-                              tags:
-                                description: |-
-                                  Tags is a list of tags to filter by. If specified, the resource must
-                                  have all of the tags specified to be included in the result.
-                                items:
-                                  description: |-
-                                    NeutronTag represents a tag on a Neutron resource.
-                                    It may not be empty and may not contain commas.
-                                  minLength: 1
-                                  pattern: ^[^,]+$
-                                  type: string
-                                type: array
-                                x-kubernetes-list-type: set
-                              tagsAny:
-                                description: |-
-                                  TagsAny is a list of tags to filter by. If specified, the resource
-                                  must have at least one of the tags specified to be included in the
-                                  result.
-                                items:
-                                  description: |-
-                                    NeutronTag represents a tag on a Neutron resource.
-                                    It may not be empty and may not contain commas.
-                                  minLength: 1
-                                  pattern: ^[^,]+$
-                                  type: string
-                                type: array
-                                x-kubernetes-list-type: set
-                            type: object
-                          id:
-                            description: ID is the ID of the network to use. If ID
-                              is provided, the other filters cannot be provided. Must
-                              be in UUID format.
-                            format: uuid
-                            type: string
-                        type: object
-                      externalRouterIPs:
-                        description: |-
-                          ExternalRouterIPs is an array of externalIPs on the respective subnets.
-                          This is necessary if the router needs a fixed ip in a specific subnet.
-                        items:
-                          properties:
-                            fixedIP:
-                              description: The FixedIP in the corresponding subnet
-                              type: string
-                            subnet:
-                              description: The subnet in which the FixedIP is used
-                                for the Gateway of this router
-                              maxProperties: 1
-                              minProperties: 1
-                              properties:
-                                filter:
-                                  description: Filter specifies a filter to select
-                                    the subnet. It must match exactly one subnet.
-                                  minProperties: 1
-                                  properties:
-                                    cidr:
-                                      type: string
-                                    description:
-                                      type: string
-                                    gatewayIP:
-                                      type: string
-                                    ipVersion:
-                                      type: integer
-                                    ipv6AddressMode:
-                                      type: string
-                                    ipv6RAMode:
-                                      type: string
-                                    name:
-                                      type: string
-                                    notTags:
-                                      description: |-
-                                        NotTags is a list of tags to filter by. If specified, resources which
-                                        contain all of the given tags will be excluded from the result.
-                                      items:
-                                        description: |-
-                                          NeutronTag represents a tag on a Neutron resource.
-                                          It may not be empty and may not contain commas.
-                                        minLength: 1
-                                        pattern: ^[^,]+$
-                                        type: string
-                                      type: array
-                                      x-kubernetes-list-type: set
-                                    notTagsAny:
-                                      description: |-
-                                        NotTagsAny is a list of tags to filter by. If specified, resources
-                                        which contain any of the given tags will be excluded from the result.
-                                      items:
-                                        description: |-
-                                          NeutronTag represents a tag on a Neutron resource.
-                                          It may not be empty and may not contain commas.
-                                        minLength: 1
-                                        pattern: ^[^,]+$
-                                        type: string
-                                      type: array
-                                      x-kubernetes-list-type: set
-                                    projectID:
-                                      type: string
-                                    tags:
-                                      description: |-
-                                        Tags is a list of tags to filter by. If specified, the resource must
-                                        have all of the tags specified to be included in the result.
-                                      items:
-                                        description: |-
-                                          NeutronTag represents a tag on a Neutron resource.
-                                          It may not be empty and may not contain commas.
-                                        minLength: 1
-                                        pattern: ^[^,]+$
-                                        type: string
-                                      type: array
-                                      x-kubernetes-list-type: set
-                                    tagsAny:
-                                      description: |-
-                                        TagsAny is a list of tags to filter by. If specified, the resource
-                                        must have at least one of the tags specified to be included in the
-                                        result.
-                                      items:
-                                        description: |-
-                                          NeutronTag represents a tag on a Neutron resource.
-                                          It may not be empty and may not contain commas.
-                                        minLength: 1
-                                        pattern: ^[^,]+$
-                                        type: string
-                                      type: array
-                                      x-kubernetes-list-type: set
-                                  type: object
-                                id:
-                                  description: ID is the uuid of the subnet. It will
-                                    not be validated.
-                                  format: uuid
-                                  type: string
-                              type: object
-                          required:
-                          - subnet
-                          type: object
-                        type: array
-                        x-kubernetes-list-type: atomic
-                      identityRef:
-                        description: |-
-                          IdentityRef is a reference to a secret holding OpenStack credentials
-                          to be used when reconciling this cluster. It is also to reconcile
-                          machines unless overridden in the machine spec.
-                        properties:
-                          cloudName:
-                            description: CloudName specifies the name of the entry
-                              in the clouds.yaml file to use.
-                            type: string
-                          name:
-                            description: |-
-                              Name is the name of a secret in the same namespace as the resource being provisioned.
-                              The secret must contain a key named `clouds.yaml` which contains an OpenStack clouds.yaml file.
-                              The secret may optionally contain a key named `cacert` containing a PEM-encoded CA certificate.
-                            type: string
-                          region:
-                            description: |-
-                              Region specifies an OpenStack region to use. If specified, it overrides
-                              any value in clouds.yaml. If specified for an OpenStackMachine, its
-                              value will be included in providerID.
-                            type: string
-                        required:
-                        - cloudName
-                        - name
-                        type: object
-                        x-kubernetes-validations:
-                        - message: region is immutable
-                          rule: (!has(self.region) && !has(oldSelf.region)) || self.region
-                            == oldSelf.region
-                      managedSecurityGroups:
-                        description: |-
-                          ManagedSecurityGroups determines whether OpenStack security groups for the cluster
-                          will be managed by the OpenStack provider or whether pre-existing security groups will
-                          be specified as part of the configuration.
-                          By default, the managed security groups have rules that allow the Kubelet, etcd, and the
-                          Kubernetes API server to function correctly.
-                          It's possible to add additional rules to the managed security groups.
-                          When defined to an empty struct, the managed security groups will be created with the default rules.
-                        properties:
-                          allNodesSecurityGroupRules:
-                            description: allNodesSecurityGroupRules defines the rules
-                              that should be applied to all nodes.
-                            items:
-                              description: |-
-                                SecurityGroupRuleSpec represent the basic information of the associated OpenStack
-                                Security Group Role.
-                                For now this is only used for the allNodesSecurityGroupRules but when we add
-                                other security groups, we'll need to add a validation because
-                                Remote* fields are mutually exclusive.
-                              properties:
-                                description:
-                                  description: description of the security group rule.
-                                  type: string
-                                direction:
-                                  description: |-
-                                    direction in which the security group rule is applied. The only values
-                                    allowed are "ingress" or "egress". For a compute instance, an ingress
-                                    security group rule is applied to incoming (ingress) traffic for that
-                                    instance. An egress rule is applied to traffic leaving the instance.
-                                  type: string
-                                etherType:
-                                  description: |-
-                                    etherType must be IPv4 or IPv6, and addresses represented in CIDR must match the
-                                    ingress or egress rules.
-                                  type: string
-                                name:
-                                  description: |-
-                                    name of the security group rule.
-                                    It's used to identify the rule so it can be patched and will not be sent to the OpenStack API.
-                                  type: string
-                                portRangeMax:
-                                  description: |-
-                                    portRangeMax is a number in the range that is matched by the security group
-                                    rule. The portRangeMin attribute constrains the portRangeMax attribute.
-                                  type: integer
-                                portRangeMin:
-                                  description: |-
-                                    portRangeMin is a number in the range that is matched by the security group
-                                    rule. If the protocol is TCP or UDP, this value must be less than or equal
-                                    to the value of the portRangeMax attribute.
-                                  type: integer
-                                protocol:
-                                  description: protocol is the protocol that is matched
-                                    by the security group rule.
-                                  type: string
-                                remoteGroupID:
-                                  description: |-
-                                    remoteGroupID is the remote group ID to be associated with this security group rule.
-                                    You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
-                                  type: string
-                                remoteIPPrefix:
-                                  description: |-
-                                    remoteIPPrefix is the remote IP prefix to be associated with this security group rule.
-                                    You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
-                                  type: string
-                                remoteManagedGroups:
-                                  description: |-
-                                    remoteManagedGroups is the remote managed groups to be associated with this security group rule.
-                                    You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
-                                  items:
-                                    enum:
-                                    - bastion
-                                    - controlplane
-                                    - worker
-                                    type: string
-                                  type: array
-                              required:
-                              - direction
-                              - name
-                              type: object
-                            type: array
-                            x-kubernetes-list-map-keys:
-                            - name
-                            x-kubernetes-list-type: map
-                          allowAllInClusterTraffic:
-                            default: false
-                            description: AllowAllInClusterTraffic allows all ingress
-                              and egress traffic between cluster nodes when set to
-                              true.
-                            type: boolean
-                          controlPlaneNodesSecurityGroupRules:
-                            description: controlPlaneNodesSecurityGroupRules defines
-                              the rules that should be applied to control plane nodes.
-                            items:
-                              description: |-
-                                SecurityGroupRuleSpec represent the basic information of the associated OpenStack
-                                Security Group Role.
-                                For now this is only used for the allNodesSecurityGroupRules but when we add
-                                other security groups, we'll need to add a validation because
-                                Remote* fields are mutually exclusive.
-                              properties:
-                                description:
-                                  description: description of the security group rule.
-                                  type: string
-                                direction:
-                                  description: |-
-                                    direction in which the security group rule is applied. The only values
-                                    allowed are "ingress" or "egress". For a compute instance, an ingress
-                                    security group rule is applied to incoming (ingress) traffic for that
-                                    instance. An egress rule is applied to traffic leaving the instance.
-                                  type: string
-                                etherType:
-                                  description: |-
-                                    etherType must be IPv4 or IPv6, and addresses represented in CIDR must match the
-                                    ingress or egress rules.
-                                  type: string
-                                name:
-                                  description: |-
-                                    name of the security group rule.
-                                    It's used to identify the rule so it can be patched and will not be sent to the OpenStack API.
-                                  type: string
-                                portRangeMax:
-                                  description: |-
-                                    portRangeMax is a number in the range that is matched by the security group
-                                    rule. The portRangeMin attribute constrains the portRangeMax attribute.
-                                  type: integer
-                                portRangeMin:
-                                  description: |-
-                                    portRangeMin is a number in the range that is matched by the security group
-                                    rule. If the protocol is TCP or UDP, this value must be less than or equal
-                                    to the value of the portRangeMax attribute.
-                                  type: integer
-                                protocol:
-                                  description: protocol is the protocol that is matched
-                                    by the security group rule.
-                                  type: string
-                                remoteGroupID:
-                                  description: |-
-                                    remoteGroupID is the remote group ID to be associated with this security group rule.
-                                    You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
-                                  type: string
-                                remoteIPPrefix:
-                                  description: |-
-                                    remoteIPPrefix is the remote IP prefix to be associated with this security group rule.
-                                    You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
-                                  type: string
-                                remoteManagedGroups:
-                                  description: |-
-                                    remoteManagedGroups is the remote managed groups to be associated with this security group rule.
-                                    You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
-                                  items:
-                                    enum:
-                                    - bastion
-                                    - controlplane
-                                    - worker
-                                    type: string
-                                  type: array
-                              required:
-                              - direction
-                              - name
-                              type: object
-                            type: array
-                            x-kubernetes-list-map-keys:
-                            - name
-                            x-kubernetes-list-type: map
-                          workerNodesSecurityGroupRules:
-                            description: workerNodesSecurityGroupRules defines the
-                              rules that should be applied to worker nodes.
-                            items:
-                              description: |-
-                                SecurityGroupRuleSpec represent the basic information of the associated OpenStack
-                                Security Group Role.
-                                For now this is only used for the allNodesSecurityGroupRules but when we add
-                                other security groups, we'll need to add a validation because
-                                Remote* fields are mutually exclusive.
-                              properties:
-                                description:
-                                  description: description of the security group rule.
-                                  type: string
-                                direction:
-                                  description: |-
-                                    direction in which the security group rule is applied. The only values
-                                    allowed are "ingress" or "egress". For a compute instance, an ingress
-                                    security group rule is applied to incoming (ingress) traffic for that
-                                    instance. An egress rule is applied to traffic leaving the instance.
-                                  type: string
-                                etherType:
-                                  description: |-
-                                    etherType must be IPv4 or IPv6, and addresses represented in CIDR must match the
-                                    ingress or egress rules.
-                                  type: string
-                                name:
-                                  description: |-
-                                    name of the security group rule.
-                                    It's used to identify the rule so it can be patched and will not be sent to the OpenStack API.
-                                  type: string
-                                portRangeMax:
-                                  description: |-
-                                    portRangeMax is a number in the range that is matched by the security group
-                                    rule. The portRangeMin attribute constrains the portRangeMax attribute.
-                                  type: integer
-                                portRangeMin:
-                                  description: |-
-                                    portRangeMin is a number in the range that is matched by the security group
-                                    rule. If the protocol is TCP or UDP, this value must be less than or equal
-                                    to the value of the portRangeMax attribute.
-                                  type: integer
-                                protocol:
-                                  description: protocol is the protocol that is matched
-                                    by the security group rule.
-                                  type: string
-                                remoteGroupID:
-                                  description: |-
-                                    remoteGroupID is the remote group ID to be associated with this security group rule.
-                                    You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
-                                  type: string
-                                remoteIPPrefix:
-                                  description: |-
-                                    remoteIPPrefix is the remote IP prefix to be associated with this security group rule.
-                                    You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
-                                  type: string
-                                remoteManagedGroups:
-                                  description: |-
-                                    remoteManagedGroups is the remote managed groups to be associated with this security group rule.
-                                    You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
-                                  items:
-                                    enum:
-                                    - bastion
-                                    - controlplane
-                                    - worker
-                                    type: string
-                                  type: array
-                              required:
-                              - direction
-                              - name
-                              type: object
-                            type: array
-                            x-kubernetes-list-map-keys:
-                            - name
-                            x-kubernetes-list-type: map
-                        required:
-                        - allowAllInClusterTraffic
-                        type: object
-                      managedSubnets:
-                        description: |-
-                          ManagedSubnets describe OpenStack Subnets to be created. Cluster actuator will create a network,
-                          subnets with the defined CIDR, and a router connected to these subnets. Currently only one IPv4
-                          subnet is supported. If you leave this empty, no network will be created.
-                        items:
-                          properties:
-                            allocationPools:
-                              description: |-
-                                AllocationPools is an array of AllocationPool objects that will be applied to OpenStack Subnet being created.
-                                If set, OpenStack will only allocate these IPs for Machines. It will still be possible to create ports from
-                                outside of these ranges manually.
-                              items:
-                                properties:
-                                  end:
-                                    description: End represents the end of the AlloctionPool,
-                                      that is the highest IP of the pool.
-                                    type: string
-                                  start:
-                                    description: Start represents the start of the
-                                      AllocationPool, that is the lowest IP of the
-                                      pool.
-                                    type: string
-                                required:
-                                - end
-                                - start
-                                type: object
-                              type: array
-                            cidr:
-                              description: |-
-                                CIDR is representing the IP address range used to create the subnet, e.g. 10.0.0.0/24.
-                                This field is required when defining a subnet.
-                              type: string
-                            dnsNameservers:
-                              description: |-
-                                DNSNameservers holds a list of DNS server addresses that will be provided when creating
-                                the subnet. These addresses need to have the same IP version as CIDR.
-                              items:
-                                type: string
-                              type: array
-                          required:
-                          - cidr
-                          type: object
-                        maxItems: 1
-                        type: array
-                        x-kubernetes-list-type: atomic
-                      network:
-                        description: |-
-                          Network specifies an existing network to use if no ManagedSubnets
-                          are specified.
-                        maxProperties: 1
-                        minProperties: 1
-                        properties:
-                          filter:
-                            description: Filter specifies a filter to select an OpenStack
-                              network. If provided, cannot be empty.
-                            minProperties: 1
-                            properties:
-                              description:
-                                type: string
-                              name:
-                                type: string
-                              notTags:
-                                description: |-
-                                  NotTags is a list of tags to filter by. If specified, resources which
-                                  contain all of the given tags will be excluded from the result.
-                                items:
-                                  description: |-
-                                    NeutronTag represents a tag on a Neutron resource.
-                                    It may not be empty and may not contain commas.
-                                  minLength: 1
-                                  pattern: ^[^,]+$
-                                  type: string
-                                type: array
-                                x-kubernetes-list-type: set
-                              notTagsAny:
-                                description: |-
-                                  NotTagsAny is a list of tags to filter by. If specified, resources
-                                  which contain any of the given tags will be excluded from the result.
-                                items:
-                                  description: |-
-                                    NeutronTag represents a tag on a Neutron resource.
-                                    It may not be empty and may not contain commas.
-                                  minLength: 1
-                                  pattern: ^[^,]+$
-                                  type: string
-                                type: array
-                                x-kubernetes-list-type: set
-                              projectID:
-                                type: string
-                              tags:
-                                description: |-
-                                  Tags is a list of tags to filter by. If specified, the resource must
-                                  have all of the tags specified to be included in the result.
-                                items:
-                                  description: |-
-                                    NeutronTag represents a tag on a Neutron resource.
-                                    It may not be empty and may not contain commas.
-                                  minLength: 1
-                                  pattern: ^[^,]+$
-                                  type: string
-                                type: array
-                                x-kubernetes-list-type: set
-                              tagsAny:
-                                description: |-
-                                  TagsAny is a list of tags to filter by. If specified, the resource
-                                  must have at least one of the tags specified to be included in the
-                                  result.
-                                items:
-                                  description: |-
-                                    NeutronTag represents a tag on a Neutron resource.
-                                    It may not be empty and may not contain commas.
-                                  minLength: 1
-                                  pattern: ^[^,]+$
-                                  type: string
-                                type: array
-                                x-kubernetes-list-type: set
-                            type: object
-                          id:
-                            description: ID is the ID of the network to use. If ID
-                              is provided, the other filters cannot be provided. Must
-                              be in UUID format.
-                            format: uuid
-                            type: string
-                        type: object
-                      networkMTU:
-                        description: |-
-                          NetworkMTU sets the maximum transmission unit (MTU) value to address fragmentation for the private network ID.
-                          This value will be used only if the Cluster actuator creates the network.
-                          If left empty, the network will have the default MTU defined in Openstack network service.
-                          To use this field, the Openstack installation requires the net-mtu neutron API extension.
-                        type: integer
-                      router:
-                        description: |-
-                          Router specifies an existing router to be used if ManagedSubnets are
-                          specified. If specified, no new router will be created.
-                        maxProperties: 1
-                        minProperties: 1
-                        properties:
-                          filter:
-                            description: Filter specifies a filter to select an OpenStack
-                              router. If provided, cannot be empty.
-                            minProperties: 1
-                            properties:
-                              description:
-                                type: string
-                              name:
-                                type: string
-                              notTags:
-                                description: |-
-                                  NotTags is a list of tags to filter by. If specified, resources which
-                                  contain all of the given tags will be excluded from the result.
-                                items:
-                                  description: |-
-                                    NeutronTag represents a tag on a Neutron resource.
-                                    It may not be empty and may not contain commas.
-                                  minLength: 1
-                                  pattern: ^[^,]+$
-                                  type: string
-                                type: array
-                                x-kubernetes-list-type: set
-                              notTagsAny:
-                                description: |-
-                                  NotTagsAny is a list of tags to filter by. If specified, resources
-                                  which contain any of the given tags will be excluded from the result.
-                                items:
-                                  description: |-
-                                    NeutronTag represents a tag on a Neutron resource.
-                                    It may not be empty and may not contain commas.
-                                  minLength: 1
-                                  pattern: ^[^,]+$
-                                  type: string
-                                type: array
-                                x-kubernetes-list-type: set
-                              projectID:
-                                type: string
-                              tags:
-                                description: |-
-                                  Tags is a list of tags to filter by. If specified, the resource must
-                                  have all of the tags specified to be included in the result.
-                                items:
-                                  description: |-
-                                    NeutronTag represents a tag on a Neutron resource.
-                                    It may not be empty and may not contain commas.
-                                  minLength: 1
-                                  pattern: ^[^,]+$
-                                  type: string
-                                type: array
-                                x-kubernetes-list-type: set
-                              tagsAny:
-                                description: |-
-                                  TagsAny is a list of tags to filter by. If specified, the resource
-                                  must have at least one of the tags specified to be included in the
-                                  result.
-                                items:
-                                  description: |-
-                                    NeutronTag represents a tag on a Neutron resource.
-                                    It may not be empty and may not contain commas.
-                                  minLength: 1
-                                  pattern: ^[^,]+$
-                                  type: string
-                                type: array
-                                x-kubernetes-list-type: set
-                            type: object
-                          id:
-                            description: ID is the ID of the router to use. If ID
-                              is provided, the other filters cannot be provided. Must
-                              be in UUID format.
-                            format: uuid
-                            type: string
-                        type: object
-                      subnets:
-                        description: |-
-                          Subnets specifies existing subnets to use if not ManagedSubnets are
-                          specified. All subnets must be in the network specified by Network.
-                          There can be zero, one, or two subnets. If no subnets are specified,
-                          all subnets in Network will be used. If 2 subnets are specified, one
-                          must be IPv4 and the other IPv6.
-                        items:
-                          description: SubnetParam specifies an OpenStack subnet to
-                            use. It may be specified by either ID or filter, but not
-                            both.
-                          maxProperties: 1
-                          minProperties: 1
-                          properties:
-                            filter:
-                              description: Filter specifies a filter to select the
-                                subnet. It must match exactly one subnet.
-                              minProperties: 1
-                              properties:
-                                cidr:
-                                  type: string
-                                description:
-                                  type: string
-                                gatewayIP:
-                                  type: string
-                                ipVersion:
-                                  type: integer
-                                ipv6AddressMode:
-                                  type: string
-                                ipv6RAMode:
-                                  type: string
-                                name:
-                                  type: string
-                                notTags:
-                                  description: |-
-                                    NotTags is a list of tags to filter by. If specified, resources which
-                                    contain all of the given tags will be excluded from the result.
-                                  items:
-                                    description: |-
-                                      NeutronTag represents a tag on a Neutron resource.
-                                      It may not be empty and may not contain commas.
-                                    minLength: 1
-                                    pattern: ^[^,]+$
-                                    type: string
-                                  type: array
-                                  x-kubernetes-list-type: set
-                                notTagsAny:
-                                  description: |-
-                                    NotTagsAny is a list of tags to filter by. If specified, resources
-                                    which contain any of the given tags will be excluded from the result.
-                                  items:
-                                    description: |-
-                                      NeutronTag represents a tag on a Neutron resource.
-                                      It may not be empty and may not contain commas.
-                                    minLength: 1
-                                    pattern: ^[^,]+$
-                                    type: string
-                                  type: array
-                                  x-kubernetes-list-type: set
-                                projectID:
-                                  type: string
-                                tags:
-                                  description: |-
-                                    Tags is a list of tags to filter by. If specified, the resource must
-                                    have all of the tags specified to be included in the result.
-                                  items:
-                                    description: |-
-                                      NeutronTag represents a tag on a Neutron resource.
-                                      It may not be empty and may not contain commas.
-                                    minLength: 1
-                                    pattern: ^[^,]+$
-                                    type: string
-                                  type: array
-                                  x-kubernetes-list-type: set
-                                tagsAny:
-                                  description: |-
-                                    TagsAny is a list of tags to filter by. If specified, the resource
-                                    must have at least one of the tags specified to be included in the
-                                    result.
-                                  items:
-                                    description: |-
-                                      NeutronTag represents a tag on a Neutron resource.
-                                      It may not be empty and may not contain commas.
-                                    minLength: 1
-                                    pattern: ^[^,]+$
-                                    type: string
-                                  type: array
-                                  x-kubernetes-list-type: set
-                              type: object
-                            id:
-                              description: ID is the uuid of the subnet. It will not
-                                be validated.
-                              format: uuid
-                              type: string
-                          type: object
-                        maxItems: 2
-                        type: array
-                        x-kubernetes-list-type: atomic
-                      tags:
-                        description: Tags to set on all resources in cluster which
-                          support tags
-                        items:
-                          type: string
-                        type: array
-                        x-kubernetes-list-type: set
-                    required:
-                    - identityRef
-                    type: object
-                    x-kubernetes-validations:
-                    - message: bastion floating IP cannot be set when disableExternalNetwork
-                        is true
-                      rule: 'has(self.disableExternalNetwork) && self.disableExternalNetwork
-                        ? !has(self.bastion) || !has(self.bastion.floatingIP) : true'
-                    - message: disableAPIServerFloatingIP cannot be false when disableExternalNetwork
-                        is true
-                      rule: 'has(self.disableExternalNetwork) && self.disableExternalNetwork
-                        ? has(self.disableAPIServerFloatingIP) && self.disableAPIServerFloatingIP
-                        : true'
-                required:
-                - spec
-                type: object
-            required:
-            - template
-            type: object
-        type: object
-    served: true
-    storage: true
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: null
-  storedVersions: null
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  annotations:
-    cert-manager.io/inject-ca-from: capo-system/capo-serving-cert
-    controller-gen.kubebuilder.io/version: v0.16.5
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: infrastructure-openstack
-    cluster.x-k8s.io/v1beta1: v1alpha7_v1beta1
-    clusterctl.cluster.x-k8s.io: ""
-  name: openstackfloatingippools.infrastructure.cluster.x-k8s.io
-spec:
-  group: infrastructure.cluster.x-k8s.io
-  names:
-    kind: OpenStackFloatingIPPool
-    listKind: OpenStackFloatingIPPoolList
-    plural: openstackfloatingippools
-    singular: openstackfloatingippool
-  scope: Namespaced
-  versions:
-  - name: v1alpha1
-    schema:
-      openAPIV3Schema:
-        description: OpenStackFloatingIPPool is the Schema for the openstackfloatingippools
-          API.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: OpenStackFloatingIPPoolSpec defines the desired state of
-              OpenStackFloatingIPPool.
-            properties:
-              floatingIPNetwork:
-                description: FloatingIPNetwork is the external network to use for
-                  floating ips, if there's only one external network it will be used
-                  by default
-                maxProperties: 1
-                minProperties: 1
-                properties:
-                  filter:
-                    description: Filter specifies a filter to select an OpenStack
-                      network. If provided, cannot be empty.
-                    minProperties: 1
-                    properties:
-                      description:
-                        type: string
-                      name:
-                        type: string
-                      notTags:
-                        description: |-
-                          NotTags is a list of tags to filter by. If specified, resources which
-                          contain all of the given tags will be excluded from the result.
-                        items:
-                          description: |-
-                            NeutronTag represents a tag on a Neutron resource.
-                            It may not be empty and may not contain commas.
-                          minLength: 1
-                          pattern: ^[^,]+$
-                          type: string
-                        type: array
-                        x-kubernetes-list-type: set
-                      notTagsAny:
-                        description: |-
-                          NotTagsAny is a list of tags to filter by. If specified, resources
-                          which contain any of the given tags will be excluded from the result.
-                        items:
-                          description: |-
-                            NeutronTag represents a tag on a Neutron resource.
-                            It may not be empty and may not contain commas.
-                          minLength: 1
-                          pattern: ^[^,]+$
-                          type: string
-                        type: array
-                        x-kubernetes-list-type: set
-                      projectID:
-                        type: string
-                      tags:
-                        description: |-
-                          Tags is a list of tags to filter by. If specified, the resource must
-                          have all of the tags specified to be included in the result.
-                        items:
-                          description: |-
-                            NeutronTag represents a tag on a Neutron resource.
-                            It may not be empty and may not contain commas.
-                          minLength: 1
-                          pattern: ^[^,]+$
-                          type: string
-                        type: array
-                        x-kubernetes-list-type: set
-                      tagsAny:
-                        description: |-
-                          TagsAny is a list of tags to filter by. If specified, the resource
-                          must have at least one of the tags specified to be included in the
-                          result.
-                        items:
-                          description: |-
-                            NeutronTag represents a tag on a Neutron resource.
-                            It may not be empty and may not contain commas.
-                          minLength: 1
-                          pattern: ^[^,]+$
-                          type: string
-                        type: array
-                        x-kubernetes-list-type: set
-                    type: object
-                  id:
-                    description: ID is the ID of the network to use. If ID is provided,
-                      the other filters cannot be provided. Must be in UUID format.
-                    format: uuid
-                    type: string
-                type: object
-              identityRef:
-                description: IdentityRef is a reference to a identity to be used when
-                  reconciling this pool.
-                properties:
-                  cloudName:
-                    description: CloudName specifies the name of the entry in the
-                      clouds.yaml file to use.
-                    type: string
-                  name:
-                    description: |-
-                      Name is the name of a secret in the same namespace as the resource being provisioned.
-                      The secret must contain a key named `clouds.yaml` which contains an OpenStack clouds.yaml file.
-                      The secret may optionally contain a key named `cacert` containing a PEM-encoded CA certificate.
-                    type: string
-                  region:
-                    description: |-
-                      Region specifies an OpenStack region to use. If specified, it overrides
-                      any value in clouds.yaml. If specified for an OpenStackMachine, its
-                      value will be included in providerID.
-                    type: string
-                required:
-                - cloudName
-                - name
-                type: object
-                x-kubernetes-validations:
-                - message: region is immutable
-                  rule: (!has(self.region) && !has(oldSelf.region)) || self.region
-                    == oldSelf.region
-              maxIPs:
-                description: |-
-                  MaxIPs is the maximum number of floating ips that can be allocated from this pool, if nil there is no limit.
-                  If set, the pool will stop allocating floating ips when it reaches this number of ClaimedIPs.
-                type: integer
-              preAllocatedFloatingIPs:
-                description: |-
-                  PreAllocatedFloatingIPs is a list of floating IPs precreated in OpenStack that should be used by this pool.
-                  These are used before allocating new ones and are not deleted from OpenStack when the pool is deleted.
-                items:
-                  type: string
-                type: array
-              reclaimPolicy:
-                description: The stratergy to use for reclaiming floating ips when
-                  they are released from a machine
-                enum:
-                - Retain
-                - Delete
-                type: string
-            required:
-            - identityRef
-            - reclaimPolicy
-            type: object
-          status:
-            description: OpenStackFloatingIPPoolStatus defines the observed state
-              of OpenStackFloatingIPPool.
-            properties:
-              availableIPs:
-                default: []
-                items:
-                  type: string
-                type: array
-              claimedIPs:
-                default: []
-                items:
-                  type: string
-                type: array
-              conditions:
-                description: Conditions provide observations of the operational state
-                  of a Cluster API resource.
-                items:
-                  description: Condition defines an observation of a Cluster API resource
-                    operational state.
-                  properties:
-                    lastTransitionTime:
-                      description: |-
-                        Last time the condition transitioned from one status to another.
-                        This should be when the underlying condition changed. If that is not known, then using the time when
-                        the API field changed is acceptable.
-                      format: date-time
-                      type: string
-                    message:
-                      description: |-
-                        A human readable message indicating details about the transition.
-                        This field may be empty.
-                      type: string
-                    reason:
-                      description: |-
-                        The reason for the condition's last transition in CamelCase.
-                        The specific API may choose whether or not this field is considered a guaranteed API.
-                        This field may be empty.
-                      type: string
-                    severity:
-                      description: |-
-                        severity provides an explicit classification of Reason code, so the users or machines can immediately
-                        understand the current situation and act accordingly.
-                        The Severity field MUST be set only when Status=False.
-                      type: string
-                    status:
-                      description: status of the condition, one of True, False, Unknown.
-                      type: string
-                    type:
-                      description: |-
-                        type of condition in CamelCase or in foo.example.com/CamelCase.
-                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
-                        can be useful (see .node.status.conditions), the ability to deconflict is important.
-                      type: string
-                  required:
-                  - lastTransitionTime
-                  - status
-                  - type
-                  type: object
-                type: array
-              failedIPs:
-                description: FailedIPs contains a list of floating ips that failed
-                  to be allocated
-                items:
-                  type: string
-                type: array
-              floatingIPNetwork:
-                description: floatingIPNetwork contains information about the network
-                  used for floating ips
-                properties:
-                  id:
-                    type: string
-                  name:
-                    type: string
-                  tags:
-                    items:
-                      type: string
-                    type: array
-                required:
-                - id
-                - name
-                type: object
-            type: object
-        type: object
-    served: true
-    storage: true
-    subresources:
-      status: {}
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: null
-  storedVersions: null
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  annotations:
-    cert-manager.io/inject-ca-from: capo-system/capo-serving-cert
-    controller-gen.kubebuilder.io/version: v0.16.5
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: infrastructure-openstack
-    cluster.x-k8s.io/v1beta1: v1alpha7_v1beta1
-    clusterctl.cluster.x-k8s.io: ""
-  name: openstackmachines.infrastructure.cluster.x-k8s.io
-spec:
-  conversion:
-    strategy: Webhook
-    webhook:
-      clientConfig:
-        service:
-          name: capo-webhook-service
-          namespace: capo-system
-          path: /convert
-      conversionReviewVersions:
-      - v1
-      - v1beta1
-  group: infrastructure.cluster.x-k8s.io
-  names:
-    categories:
-    - cluster-api
-    kind: OpenStackMachine
-    listKind: OpenStackMachineList
-    plural: openstackmachines
-    shortNames:
-    - osm
-    singular: openstackmachine
-  scope: Namespaced
-  versions:
-  - additionalPrinterColumns:
-    - description: Cluster to which this OpenStackMachine belongs
-      jsonPath: .metadata.labels.cluster\.x-k8s\.io/cluster-name
-      name: Cluster
-      type: string
-    - description: OpenStack instance state
-      jsonPath: .status.instanceState
-      name: InstanceState
-      type: string
-    - description: Machine ready status
-      jsonPath: .status.ready
-      name: Ready
-      type: string
-    - description: OpenStack instance ID
-      jsonPath: .spec.providerID
-      name: ProviderID
-      type: string
-    - description: Machine object which owns with this OpenStackMachine
-      jsonPath: .metadata.ownerReferences[?(@.kind=="Machine")].name
-      name: Machine
-      type: string
-    - description: Time duration since creation of OpenStackMachine
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    deprecated: true
-    deprecationWarning: The v1alpha7 version of OpenStackMachine has been deprecated
-      and will be removed in a future release.
-    name: v1alpha7
-    schema:
-      openAPIV3Schema:
-        description: |-
-          OpenStackMachine is the Schema for the openstackmachines API.
-
-          Deprecated: v1alpha7.OpenStackMachine has been replaced by v1beta1.OpenStackMachine.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: OpenStackMachineSpec defines the desired state of OpenStackMachine.
-            properties:
-              additionalBlockDevices:
-                description: AdditionalBlockDevices is a list of specifications for
-                  additional block devices to attach to the server instance
-                items:
-                  description: AdditionalBlockDevice is a block device to attach to
-                    the server.
-                  properties:
-                    name:
-                      description: |-
-                        Name of the block device in the context of a machine.
-                        If the block device is a volume, the Cinder volume will be named
-                        as a combination of the machine name and this name.
-                        Also, this name will be used for tagging the block device.
-                        Information about the block device tag can be obtained from the OpenStack
-                        metadata API or the config drive.
-                      type: string
-                    sizeGiB:
-                      description: SizeGiB is the size of the block device in gibibytes
-                        (GiB).
-                      type: integer
-                    storage:
-                      description: |-
-                        Storage specifies the storage type of the block device and
-                        additional storage options.
-                      properties:
-                        type:
-                          description: |-
-                            Type is the type of block device to create.
-                            This can be either "Volume" or "Local".
-                          type: string
-                        volume:
-                          description: Volume contains additional storage options
-                            for a volume block device.
-                          properties:
-                            availabilityZone:
-                              description: |-
-                                AvailabilityZone is the volume availability zone to create the volume in.
-                                If omitted, the availability zone of the server will be used.
-                                The availability zone must NOT contain spaces otherwise it will lead to volume that belongs
-                                to this availability zone register failure, see kubernetes/cloud-provider-openstack#1379 for
-                                further information.
-                              type: string
-                            type:
-                              description: |-
-                                Type is the Cinder volume type of the volume.
-                                If omitted, the default Cinder volume type that is configured in the OpenStack cloud
-                                will be used.
-                              type: string
-                          type: object
-                      required:
-                      - type
-                      type: object
-                  required:
-                  - name
-                  - sizeGiB
-                  - storage
-                  type: object
-                type: array
-                x-kubernetes-list-map-keys:
-                - name
-                x-kubernetes-list-type: map
-              cloudName:
-                description: The name of the cloud to use from the clouds secret
-                type: string
-              configDrive:
-                description: Config Drive support
-                type: boolean
-              flavor:
-                description: The flavor reference for the flavor for your server instance.
-                minLength: 1
-                type: string
-              flavorID:
-                description: |-
-                  FlavorID allows flavors to be specified by ID.  This field takes precedence
-                  over Flavor.
-                minLength: 1
-                type: string
-              floatingIP:
-                description: |-
-                  The floatingIP which will be associated to the machine, only used for master.
-                  The floatingIP should have been created and haven't been associated.
-                type: string
-              identityRef:
-                description: |-
-                  IdentityRef is a reference to a identity to be used when reconciling this cluster.
-                  If not specified, the identity ref of the cluster will be used instead.
-                properties:
-                  kind:
-                    description: |-
-                      Kind of the identity. Must be supported by the infrastructure
-                      provider and may be either cluster or namespace-scoped.
-                    minLength: 1
-                    type: string
-                  name:
-                    description: |-
-                      Name of the infrastructure identity to be used.
-                      Must be either a cluster-scoped resource, or namespaced-scoped
-                      resource the same namespace as the resource(s) being provisioned.
-                    type: string
-                required:
-                - kind
-                - name
-                type: object
-              image:
-                description: |-
-                  The name of the image to use for your server instance.
-                  If the RootVolume is specified, this will be ignored and use rootVolume directly.
-                type: string
-              imageUUID:
-                description: |-
-                  The uuid of the image to use for your server instance.
-                  if it's empty, Image name will be used
-                type: string
-              instanceID:
-                description: InstanceID is the OpenStack instance ID for this machine.
-                type: string
-              ports:
-                description: |-
-                  Ports to be attached to the server instance. They are created if a port with the given name does not already exist.
-                  If not specified a default port will be added for the default cluster network.
-                items:
-                  properties:
-                    adminStateUp:
-                      type: boolean
-                    allowedAddressPairs:
-                      items:
-                        properties:
-                          ipAddress:
-                            type: string
-                          macAddress:
-                            type: string
-                        type: object
-                      type: array
-                    description:
-                      type: string
-                    disablePortSecurity:
-                      description: |-
-                        DisablePortSecurity enables or disables the port security when set.
-                        When not set, it takes the value of the corresponding field at the network level.
-                      type: boolean
-                    fixedIPs:
-                      description: Specify pairs of subnet and/or IP address. These
-                        should be subnets of the network with the given NetworkID.
-                      items:
-                        properties:
-                          ipAddress:
-                            type: string
-                          subnet:
-                            description: |-
-                              Subnet is an openstack subnet query that will return the id of a subnet to create
-                              the fixed IP of a port in. This query must not return more than one subnet.
-                            properties:
-                              cidr:
-                                type: string
-                              description:
-                                type: string
-                              gateway_ip:
-                                type: string
-                              id:
-                                type: string
-                              ipVersion:
-                                type: integer
-                              ipv6AddressMode:
-                                type: string
-                              ipv6RaMode:
-                                type: string
-                              name:
-                                type: string
-                              notTags:
-                                type: string
-                              notTagsAny:
-                                type: string
-                              projectId:
-                                type: string
-                              tags:
-                                type: string
-                              tagsAny:
-                                type: string
-                            type: object
-                        required:
-                        - subnet
-                        type: object
-                      type: array
-                    hostId:
-                      description: The ID of the host where the port is allocated
-                      type: string
-                    macAddress:
-                      type: string
-                    nameSuffix:
-                      description: Used to make the name of the port unique. If unspecified,
-                        instead the 0-based index of the port in the list is used.
-                      type: string
-                    network:
-                      description: |-
-                        Network is a query for an openstack network that the port will be created or discovered on.
-                        This will fail if the query returns more than one network.
-                      properties:
-                        description:
-                          type: string
-                        id:
-                          type: string
-                        name:
-                          type: string
-                        notTags:
-                          type: string
-                        notTagsAny:
-                          type: string
-                        projectId:
-                          type: string
-                        tags:
-                          type: string
-                        tagsAny:
-                          type: string
-                      type: object
-                    profile:
-                      description: |-
-                        Profile is a set of key-value pairs that are used for binding details.
-                        We intentionally don't expose this as a map[string]string because we only want to enable
-                        the users to set the values of the keys that are known to work in OpenStack Networking API.
-                        See https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
-                      properties:
-                        ovsHWOffload:
-                          description: OVSHWOffload enables or disables the OVS hardware
-                            offload feature.
-                          type: boolean
-                        trustedVF:
-                          description: TrustedVF enables or disables the “trusted
-                            mode” for the VF.
-                          type: boolean
-                      type: object
-                    propagateUplinkStatus:
-                      description: PropageteUplinkStatus enables or disables the propagate
-                        uplink status on the port.
-                      type: boolean
-                    securityGroupFilters:
-                      description: The names, uuids, filters or any combination these
-                        of the security groups to assign to the instance
-                      items:
-                        properties:
-                          description:
-                            type: string
-                          id:
-                            type: string
-                          name:
-                            type: string
-                          notTags:
-                            type: string
-                          notTagsAny:
-                            type: string
-                          projectId:
-                            type: string
-                          tags:
-                            type: string
-                          tagsAny:
-                            type: string
-                        type: object
-                      type: array
-                    tags:
-                      description: |-
-                        Tags applied to the port (and corresponding trunk, if a trunk is configured.)
-                        These tags are applied in addition to the instance's tags, which will also be applied to the port.
-                      items:
-                        type: string
-                      type: array
-                      x-kubernetes-list-type: set
-                    trunk:
-                      description: Enables and disables trunk at port level. If not
-                        provided, openStackMachine.Spec.Trunk is inherited.
-                      type: boolean
-                    valueSpecs:
-                      description: |-
-                        Value specs are extra parameters to include in the API request with OpenStack.
-                        This is an extension point for the API, so what they do and if they are supported,
-                        depends on the specific OpenStack implementation.
-                      items:
-                        description: ValueSpec represents a single value_spec key-value
-                          pair.
-                        properties:
-                          key:
-                            description: Key is the key in the key-value pair.
-                            type: string
-                          name:
-                            description: |-
-                              Name is the name of the key-value pair.
-                              This is just for identifying the pair and will not be sent to the OpenStack API.
-                            type: string
-                          value:
-                            description: Value is the value in the key-value pair.
-                            type: string
-                        required:
-                        - key
-                        - name
-                        - value
-                        type: object
-                      type: array
-                      x-kubernetes-list-map-keys:
-                      - name
-                      x-kubernetes-list-type: map
-                    vnicType:
-                      description: The virtual network interface card (vNIC) type
-                        that is bound to the neutron port.
-                      type: string
-                  type: object
-                type: array
-              providerID:
-                description: ProviderID is the unique identifier as specified by the
-                  cloud provider.
-                type: string
-              rootVolume:
-                description: The volume metadata to boot from
-                properties:
-                  availabilityZone:
-                    type: string
-                  diskSize:
-                    type: integer
-                  volumeType:
-                    type: string
-                type: object
-              securityGroups:
-                description: The names of the security groups to assign to the instance
-                items:
-                  properties:
-                    description:
-                      type: string
-                    id:
-                      type: string
-                    name:
-                      type: string
-                    notTags:
-                      type: string
-                    notTagsAny:
-                      type: string
-                    projectId:
-                      type: string
-                    tags:
-                      type: string
-                    tagsAny:
-                      type: string
-                  type: object
-                type: array
-              serverGroupID:
-                description: The server group to assign the machine to
-                type: string
-              serverMetadata:
-                additionalProperties:
-                  type: string
-                description: Metadata mapping. Allows you to create a map of key value
-                  pairs to add to the server instance.
-                type: object
-              sshKeyName:
-                description: The ssh key to inject in the instance
-                type: string
-              tags:
-                description: |-
-                  Machine tags
-                  Requires Nova api 2.52 minimum!
-                items:
-                  type: string
-                type: array
-                x-kubernetes-list-type: set
-              trunk:
-                description: Whether the server instance is created on a trunk port
-                  or not.
-                type: boolean
-            type: object
-          status:
-            description: OpenStackMachineStatus defines the observed state of OpenStackMachine.
-            properties:
-              addresses:
-                description: Addresses contains the OpenStack instance associated
-                  addresses.
-                items:
-                  description: NodeAddress contains information for the node's address.
-                  properties:
-                    address:
-                      description: The node address.
-                      type: string
-                    type:
-                      description: Node address type, one of Hostname, ExternalIP
-                        or InternalIP.
-                      type: string
-                  required:
-                  - address
-                  - type
-                  type: object
-                type: array
-              conditions:
-                description: Conditions provide observations of the operational state
-                  of a Cluster API resource.
-                items:
-                  description: Condition defines an observation of a Cluster API resource
-                    operational state.
-                  properties:
-                    lastTransitionTime:
-                      description: |-
-                        Last time the condition transitioned from one status to another.
-                        This should be when the underlying condition changed. If that is not known, then using the time when
-                        the API field changed is acceptable.
-                      format: date-time
-                      type: string
-                    message:
-                      description: |-
-                        A human readable message indicating details about the transition.
-                        This field may be empty.
-                      type: string
-                    reason:
-                      description: |-
-                        The reason for the condition's last transition in CamelCase.
-                        The specific API may choose whether or not this field is considered a guaranteed API.
-                        This field may be empty.
-                      type: string
-                    severity:
-                      description: |-
-                        severity provides an explicit classification of Reason code, so the users or machines can immediately
-                        understand the current situation and act accordingly.
-                        The Severity field MUST be set only when Status=False.
-                      type: string
-                    status:
-                      description: status of the condition, one of True, False, Unknown.
-                      type: string
-                    type:
-                      description: |-
-                        type of condition in CamelCase or in foo.example.com/CamelCase.
-                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
-                        can be useful (see .node.status.conditions), the ability to deconflict is important.
-                      type: string
-                  required:
-                  - lastTransitionTime
-                  - status
-                  - type
-                  type: object
-                type: array
-              failureMessage:
-                description: |-
-                  FailureMessage will be set in the event that there is a terminal problem
-                  reconciling the Machine and will contain a more verbose string suitable
-                  for logging and human consumption.
-
-                  This field should not be set for transitive errors that a controller
-                  faces that are expected to be fixed automatically over
-                  time (like service outages), but instead indicate that something is
-                  fundamentally wrong with the Machine's spec or the configuration of
-                  the controller, and that manual intervention is required. Examples
-                  of terminal errors would be invalid combinations of settings in the
-                  spec, values that are unsupported by the controller, or the
-                  responsible controller itself being critically misconfigured.
-
-                  Any transient errors that occur during the reconciliation of Machines
-                  can be added as events to the Machine object and/or logged in the
-                  controller's output.
-                type: string
-              failureReason:
-                description: DeprecatedCAPIMachineStatusError defines errors states
-                  for Machine objects.
-                type: string
-              instanceState:
-                description: InstanceState is the state of the OpenStack instance
-                  for this machine.
-                type: string
-              ready:
-                description: Ready is true when the provider resource is ready.
-                type: boolean
-            type: object
-        type: object
-    served: false
-    storage: false
-    subresources:
-      status: {}
-  - additionalPrinterColumns:
-    - description: Cluster to which this OpenStackMachine belongs
-      jsonPath: .metadata.labels.cluster\.x-k8s\.io/cluster-name
-      name: Cluster
-      type: string
-    - description: Machine ready status
-      jsonPath: .status.ready
-      name: Ready
-      type: string
-    - description: OpenStack instance ID
-      jsonPath: .spec.providerID
-      name: ProviderID
-      type: string
-    - description: Machine object which owns with this OpenStackMachine
-      jsonPath: .metadata.ownerReferences[?(@.kind=="Machine")].name
-      name: Machine
-      type: string
-    - description: Time duration since creation of OpenStackMachine
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    name: v1beta1
-    schema:
-      openAPIV3Schema:
-        description: OpenStackMachine is the Schema for the openstackmachines API.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: OpenStackMachineSpec defines the desired state of OpenStackMachine.
-            properties:
-              additionalBlockDevices:
-                description: AdditionalBlockDevices is a list of specifications for
-                  additional block devices to attach to the server instance
-                items:
-                  description: AdditionalBlockDevice is a block device to attach to
-                    the server.
-                  properties:
-                    name:
-                      description: |-
-                        Name of the block device in the context of a machine.
-                        If the block device is a volume, the Cinder volume will be named
-                        as a combination of the machine name and this name.
-                        Also, this name will be used for tagging the block device.
-                        Information about the block device tag can be obtained from the OpenStack
-                        metadata API or the config drive.
-                        Name cannot be 'root', which is reserved for the root volume.
-                      type: string
-                    sizeGiB:
-                      description: SizeGiB is the size of the block device in gibibytes
-                        (GiB).
-                      minimum: 1
-                      type: integer
-                    storage:
-                      description: |-
-                        Storage specifies the storage type of the block device and
-                        additional storage options.
-                      properties:
-                        type:
-                          description: |-
-                            Type is the type of block device to create.
-                            This can be either "Volume" or "Local".
-                          type: string
-                        volume:
-                          description: Volume contains additional storage options
-                            for a volume block device.
-                          properties:
-                            availabilityZone:
-                              description: |-
-                                AvailabilityZone is the volume availability zone to create the volume
-                                in. If not specified, the volume will be created without an explicit
-                                availability zone.
-                              properties:
-                                from:
-                                  default: Name
-                                  description: |-
-                                    From specifies where we will obtain the availability zone for the
-                                    volume. The options are "Name" and "Machine". If "Name" is specified
-                                    then the Name field must also be specified. If "Machine" is specified
-                                    the volume will use the value of FailureDomain, if any, from the
-                                    associated Machine.
-                                  enum:
-                                  - Name
-                                  - Machine
-                                  type: string
-                                name:
-                                  description: |-
-                                    Name is the name of a volume availability zone to use. It is required
-                                    if From is "Name". The volume availability zone name may not contain
-                                    spaces.
-                                  minLength: 1
-                                  pattern: ^[^ ]+$
-                                  type: string
-                              type: object
-                              x-kubernetes-validations:
-                              - message: name is required when from is 'Name' or default
-                                rule: '!has(self.from) || self.from == ''Name'' ?
-                                  has(self.name) : !has(self.name)'
-                            type:
-                              description: |-
-                                Type is the Cinder volume type of the volume.
-                                If omitted, the default Cinder volume type that is configured in the OpenStack cloud
-                                will be used.
-                              type: string
-                          type: object
-                      required:
-                      - type
-                      type: object
-                  required:
-                  - name
-                  - sizeGiB
-                  - storage
-                  type: object
-                type: array
-                x-kubernetes-list-map-keys:
-                - name
-                x-kubernetes-list-type: map
-              configDrive:
-                description: Config Drive support
-                type: boolean
-              flavor:
-                description: The flavor reference for the flavor for your server instance.
-                minLength: 1
-                type: string
-              flavorID:
-                description: |-
-                  FlavorID allows flavors to be specified by ID.  This field takes precedence
-                  over Flavor.
-                minLength: 1
-                type: string
-              floatingIPPoolRef:
-                description: |-
-                  floatingIPPoolRef is a reference to a IPPool that will be assigned
-                  to an IPAddressClaim. Once the IPAddressClaim is fulfilled, the FloatingIP
-                  will be assigned to the OpenStackMachine.
-                properties:
-                  apiGroup:
-                    description: |-
-                      APIGroup is the group for the resource being referenced.
-                      If APIGroup is not specified, the specified Kind must be in the core API group.
-                      For any other third-party types, APIGroup is required.
-                    type: string
-                  kind:
-                    description: Kind is the type of resource being referenced
-                    type: string
-                  name:
-                    description: Name is the name of resource being referenced
-                    type: string
-                required:
-                - kind
-                - name
-                type: object
-                x-kubernetes-map-type: atomic
-              identityRef:
-                description: |-
-                  IdentityRef is a reference to a secret holding OpenStack credentials
-                  to be used when reconciling this machine. If not specified, the
-                  credentials specified in the cluster will be used.
-                properties:
-                  cloudName:
-                    description: CloudName specifies the name of the entry in the
-                      clouds.yaml file to use.
-                    type: string
-                  name:
-                    description: |-
-                      Name is the name of a secret in the same namespace as the resource being provisioned.
-                      The secret must contain a key named `clouds.yaml` which contains an OpenStack clouds.yaml file.
-                      The secret may optionally contain a key named `cacert` containing a PEM-encoded CA certificate.
-                    type: string
-                  region:
-                    description: |-
-                      Region specifies an OpenStack region to use. If specified, it overrides
-                      any value in clouds.yaml. If specified for an OpenStackMachine, its
-                      value will be included in providerID.
-                    type: string
-                required:
-                - cloudName
-                - name
-                type: object
-                x-kubernetes-validations:
-                - message: region is immutable
-                  rule: (!has(self.region) && !has(oldSelf.region)) || self.region
-                    == oldSelf.region
-              image:
-                description: |-
-                  The image to use for your server instance.
-                  If the rootVolume is specified, this will be used when creating the root volume.
-                maxProperties: 1
-                minProperties: 1
-                properties:
-                  filter:
-                    description: |-
-                      Filter describes a query for an image. If specified, the combination
-                      of name and tags must return a single matching image or an error will
-                      be raised.
-                    minProperties: 1
-                    properties:
-                      name:
-                        description: The name of the desired image. If specified,
-                          the combination of name and tags must return a single matching
-                          image or an error will be raised.
-                        type: string
-                      tags:
-                        description: The tags associated with the desired image. If
-                          specified, the combination of name and tags must return
-                          a single matching image or an error will be raised.
-                        items:
-                          type: string
-                        type: array
-                        x-kubernetes-list-type: set
-                    type: object
-                  id:
-                    description: ID is the uuid of the image. ID will not be validated
-                      before use.
-                    format: uuid
-                    type: string
-                  imageRef:
-                    description: |-
-                      ImageRef is a reference to an ORC Image in the same namespace as the
-                      referring object.
-                    properties:
-                      name:
-                        description: Name is the name of the referenced resource
-                        type: string
-                    required:
-                    - name
-                    type: object
-                type: object
-              ports:
-                description: |-
-                  Ports to be attached to the server instance. They are created if a port with the given name does not already exist.
-                  If not specified a default port will be added for the default cluster network.
-                items:
-                  properties:
-                    adminStateUp:
-                      description: AdminStateUp specifies whether the port should
-                        be created in the up (true) or down (false) state. The default
-                        is up.
-                      type: boolean
-                    allowedAddressPairs:
-                      description: |-
-                        AllowedAddressPairs is a list of address pairs which Neutron will
-                        allow the port to send traffic from in addition to the port's
-                        addresses. If not specified, the MAC Address will be the MAC Address
-                        of the port. Depending on the configuration of Neutron, it may be
-                        supported to specify a CIDR instead of a specific IP address.
-                      items:
-                        properties:
-                          ipAddress:
-                            description: |-
-                              IPAddress is the IP address of the allowed address pair. Depending on
-                              the configuration of Neutron, it may be supported to specify a CIDR
-                              instead of a specific IP address.
-                            type: string
-                          macAddress:
-                            description: |-
-                              MACAddress is the MAC address of the allowed address pair. If not
-                              specified, the MAC address will be the MAC address of the port.
-                            type: string
-                        required:
-                        - ipAddress
-                        type: object
-                      type: array
-                    description:
-                      description: Description is a human-readable description for
-                        the port.
-                      type: string
-                    disablePortSecurity:
-                      description: |-
-                        DisablePortSecurity enables or disables the port security when set.
-                        When not set, it takes the value of the corresponding field at the network level.
-                      type: boolean
-                    fixedIPs:
-                      description: FixedIPs is a list of pairs of subnet and/or IP
-                        address to assign to the port. If specified, these must be
-                        subnets of the port's network.
-                      items:
-                        properties:
-                          ipAddress:
-                            description: |-
-                              IPAddress is a specific IP address to assign to the port. If Subnet
-                              is also specified, IPAddress must be a valid IP address in the
-                              subnet. If Subnet is not specified, IPAddress must be a valid IP
-                              address in any subnet of the port's network.
-                            type: string
-                          subnet:
-                            description: |-
-                              Subnet is an openstack subnet query that will return the id of a subnet to create
-                              the fixed IP of a port in. This query must not return more than one subnet.
-                            maxProperties: 1
-                            minProperties: 1
-                            properties:
-                              filter:
-                                description: Filter specifies a filter to select the
-                                  subnet. It must match exactly one subnet.
-                                minProperties: 1
-                                properties:
-                                  cidr:
-                                    type: string
-                                  description:
-                                    type: string
-                                  gatewayIP:
-                                    type: string
-                                  ipVersion:
-                                    type: integer
-                                  ipv6AddressMode:
-                                    type: string
-                                  ipv6RAMode:
-                                    type: string
-                                  name:
-                                    type: string
-                                  notTags:
-                                    description: |-
-                                      NotTags is a list of tags to filter by. If specified, resources which
-                                      contain all of the given tags will be excluded from the result.
-                                    items:
-                                      description: |-
-                                        NeutronTag represents a tag on a Neutron resource.
-                                        It may not be empty and may not contain commas.
-                                      minLength: 1
-                                      pattern: ^[^,]+$
-                                      type: string
-                                    type: array
-                                    x-kubernetes-list-type: set
-                                  notTagsAny:
-                                    description: |-
-                                      NotTagsAny is a list of tags to filter by. If specified, resources
-                                      which contain any of the given tags will be excluded from the result.
-                                    items:
-                                      description: |-
-                                        NeutronTag represents a tag on a Neutron resource.
-                                        It may not be empty and may not contain commas.
-                                      minLength: 1
-                                      pattern: ^[^,]+$
-                                      type: string
-                                    type: array
-                                    x-kubernetes-list-type: set
-                                  projectID:
-                                    type: string
-                                  tags:
-                                    description: |-
-                                      Tags is a list of tags to filter by. If specified, the resource must
-                                      have all of the tags specified to be included in the result.
-                                    items:
-                                      description: |-
-                                        NeutronTag represents a tag on a Neutron resource.
-                                        It may not be empty and may not contain commas.
-                                      minLength: 1
-                                      pattern: ^[^,]+$
-                                      type: string
-                                    type: array
-                                    x-kubernetes-list-type: set
-                                  tagsAny:
-                                    description: |-
-                                      TagsAny is a list of tags to filter by. If specified, the resource
-                                      must have at least one of the tags specified to be included in the
-                                      result.
-                                    items:
-                                      description: |-
-                                        NeutronTag represents a tag on a Neutron resource.
-                                        It may not be empty and may not contain commas.
-                                      minLength: 1
-                                      pattern: ^[^,]+$
-                                      type: string
-                                    type: array
-                                    x-kubernetes-list-type: set
-                                type: object
-                              id:
-                                description: ID is the uuid of the subnet. It will
-                                  not be validated.
-                                format: uuid
-                                type: string
-                            type: object
-                        type: object
-                      type: array
-                      x-kubernetes-list-type: atomic
-                    hostID:
-                      description: HostID specifies the ID of the host where the port
-                        resides.
-                      type: string
-                    macAddress:
-                      description: MACAddress specifies the MAC address of the port.
-                        If not specified, the MAC address will be generated.
-                      type: string
-                    nameSuffix:
-                      description: NameSuffix will be appended to the name of the
-                        port if specified. If unspecified, instead the 0-based index
-                        of the port in the list is used.
-                      type: string
-                    network:
-                      description: |-
-                        Network is a query for an openstack network that the port will be created or discovered on.
-                        This will fail if the query returns more than one network.
-                      maxProperties: 1
-                      minProperties: 1
-                      properties:
-                        filter:
-                          description: Filter specifies a filter to select an OpenStack
-                            network. If provided, cannot be empty.
-                          minProperties: 1
-                          properties:
-                            description:
-                              type: string
-                            name:
-                              type: string
-                            notTags:
-                              description: |-
-                                NotTags is a list of tags to filter by. If specified, resources which
-                                contain all of the given tags will be excluded from the result.
-                              items:
-                                description: |-
-                                  NeutronTag represents a tag on a Neutron resource.
-                                  It may not be empty and may not contain commas.
-                                minLength: 1
-                                pattern: ^[^,]+$
-                                type: string
-                              type: array
-                              x-kubernetes-list-type: set
-                            notTagsAny:
-                              description: |-
-                                NotTagsAny is a list of tags to filter by. If specified, resources
-                                which contain any of the given tags will be excluded from the result.
-                              items:
-                                description: |-
-                                  NeutronTag represents a tag on a Neutron resource.
-                                  It may not be empty and may not contain commas.
-                                minLength: 1
-                                pattern: ^[^,]+$
-                                type: string
-                              type: array
-                              x-kubernetes-list-type: set
-                            projectID:
-                              type: string
-                            tags:
-                              description: |-
-                                Tags is a list of tags to filter by. If specified, the resource must
-                                have all of the tags specified to be included in the result.
-                              items:
-                                description: |-
-                                  NeutronTag represents a tag on a Neutron resource.
-                                  It may not be empty and may not contain commas.
-                                minLength: 1
-                                pattern: ^[^,]+$
-                                type: string
-                              type: array
-                              x-kubernetes-list-type: set
-                            tagsAny:
-                              description: |-
-                                TagsAny is a list of tags to filter by. If specified, the resource
-                                must have at least one of the tags specified to be included in the
-                                result.
-                              items:
-                                description: |-
-                                  NeutronTag represents a tag on a Neutron resource.
-                                  It may not be empty and may not contain commas.
-                                minLength: 1
-                                pattern: ^[^,]+$
-                                type: string
-                              type: array
-                              x-kubernetes-list-type: set
-                          type: object
-                        id:
-                          description: ID is the ID of the network to use. If ID is
-                            provided, the other filters cannot be provided. Must be
-                            in UUID format.
-                          format: uuid
-                          type: string
-                      type: object
-                    profile:
-                      description: |-
-                        Profile is a set of key-value pairs that are used for binding
-                        details. We intentionally don't expose this as a map[string]string
-                        because we only want to enable the users to set the values of the
-                        keys that are known to work in OpenStack Networking API.  See
-                        https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
-                        To set profiles, your tenant needs permissions rule:create_port, and
-                        rule:create_port:binding:profile
-                      properties:
-                        ovsHWOffload:
-                          description: |-
-                            OVSHWOffload enables or disables the OVS hardware offload feature.
-                            This flag is not required on OpenStack clouds since Yoga as Nova will set it automatically when the port is attached.
-                            See: https://bugs.launchpad.net/nova/+bug/2020813
-                          type: boolean
-                        trustedVF:
-                          description: TrustedVF enables or disables the “trusted
-                            mode” for the VF.
-                          type: boolean
-                      type: object
-                    propagateUplinkStatus:
-                      description: PropageteUplinkStatus enables or disables the propagate
-                        uplink status on the port.
-                      type: boolean
-                    securityGroups:
-                      description: SecurityGroups is a list of the names, uuids, filters
-                        or any combination these of the security groups to assign
-                        to the instance.
-                      items:
-                        description: SecurityGroupParam specifies an OpenStack security
-                          group. It may be specified by ID or filter, but not both.
-                        maxProperties: 1
-                        minProperties: 1
-                        properties:
-                          filter:
-                            description: Filter specifies a query to select an OpenStack
-                              security group. If provided, cannot be empty.
-                            minProperties: 1
-                            properties:
-                              description:
-                                type: string
-                              name:
-                                type: string
-                              notTags:
-                                description: |-
-                                  NotTags is a list of tags to filter by. If specified, resources which
-                                  contain all of the given tags will be excluded from the result.
-                                items:
-                                  description: |-
-                                    NeutronTag represents a tag on a Neutron resource.
-                                    It may not be empty and may not contain commas.
-                                  minLength: 1
-                                  pattern: ^[^,]+$
-                                  type: string
-                                type: array
-                                x-kubernetes-list-type: set
-                              notTagsAny:
-                                description: |-
-                                  NotTagsAny is a list of tags to filter by. If specified, resources
-                                  which contain any of the given tags will be excluded from the result.
-                                items:
-                                  description: |-
-                                    NeutronTag represents a tag on a Neutron resource.
-                                    It may not be empty and may not contain commas.
-                                  minLength: 1
-                                  pattern: ^[^,]+$
-                                  type: string
-                                type: array
-                                x-kubernetes-list-type: set
-                              projectID:
-                                type: string
-                              tags:
-                                description: |-
-                                  Tags is a list of tags to filter by. If specified, the resource must
-                                  have all of the tags specified to be included in the result.
-                                items:
-                                  description: |-
-                                    NeutronTag represents a tag on a Neutron resource.
-                                    It may not be empty and may not contain commas.
-                                  minLength: 1
-                                  pattern: ^[^,]+$
-                                  type: string
-                                type: array
-                                x-kubernetes-list-type: set
-                              tagsAny:
-                                description: |-
-                                  TagsAny is a list of tags to filter by. If specified, the resource
-                                  must have at least one of the tags specified to be included in the
-                                  result.
-                                items:
-                                  description: |-
-                                    NeutronTag represents a tag on a Neutron resource.
-                                    It may not be empty and may not contain commas.
-                                  minLength: 1
-                                  pattern: ^[^,]+$
-                                  type: string
-                                type: array
-                                x-kubernetes-list-type: set
-                            type: object
-                          id:
-                            description: ID is the ID of the security group to use.
-                              If ID is provided, the other filters cannot be provided.
-                              Must be in UUID format.
-                            format: uuid
-                            type: string
-                        type: object
-                      type: array
-                      x-kubernetes-list-type: atomic
-                    tags:
-                      description: |-
-                        Tags applied to the port (and corresponding trunk, if a trunk is configured.)
-                        These tags are applied in addition to the instance's tags, which will also be applied to the port.
-                      items:
-                        type: string
-                      type: array
-                      x-kubernetes-list-type: set
-                    trunk:
-                      description: |-
-                        Trunk specifies whether trunking is enabled at the port level. If not
-                        provided the value is inherited from the machine, or false for a
-                        bastion host.
-                      type: boolean
-                    valueSpecs:
-                      description: |-
-                        Value specs are extra parameters to include in the API request with OpenStack.
-                        This is an extension point for the API, so what they do and if they are supported,
-                        depends on the specific OpenStack implementation.
-                      items:
-                        description: ValueSpec represents a single value_spec key-value
-                          pair.
-                        properties:
-                          key:
-                            description: Key is the key in the key-value pair.
-                            type: string
-                          name:
-                            description: |-
-                              Name is the name of the key-value pair.
-                              This is just for identifying the pair and will not be sent to the OpenStack API.
-                            type: string
-                          value:
-                            description: Value is the value in the key-value pair.
-                            type: string
-                        required:
-                        - key
-                        - name
-                        - value
-                        type: object
-                      type: array
-                      x-kubernetes-list-map-keys:
-                      - name
-                      x-kubernetes-list-type: map
-                    vnicType:
-                      description: |-
-                        VNICType specifies the type of vNIC which this port should be
-                        attached to. This is used to determine which mechanism driver(s) to
-                        be used to bind the port. The valid values are normal, macvtap,
-                        direct, baremetal, direct-physical, virtio-forwarder, smart-nic and
-                        remote-managed, although these values will not be validated in this
-                        API to ensure compatibility with future neutron changes or custom
-                        implementations. What type of vNIC is actually available depends on
-                        deployments. If not specified, the Neutron default value is used.
-                      type: string
-                  type: object
-                type: array
-              providerID:
-                description: ProviderID is the unique identifier as specified by the
-                  cloud provider.
-                type: string
-              rootVolume:
-                description: The volume metadata to boot from
-                properties:
-                  availabilityZone:
-                    description: |-
-                      AvailabilityZone is the volume availability zone to create the volume
-                      in. If not specified, the volume will be created without an explicit
-                      availability zone.
-                    properties:
-                      from:
-                        default: Name
-                        description: |-
-                          From specifies where we will obtain the availability zone for the
-                          volume. The options are "Name" and "Machine". If "Name" is specified
-                          then the Name field must also be specified. If "Machine" is specified
-                          the volume will use the value of FailureDomain, if any, from the
-                          associated Machine.
-                        enum:
-                        - Name
-                        - Machine
-                        type: string
-                      name:
-                        description: |-
-                          Name is the name of a volume availability zone to use. It is required
-                          if From is "Name". The volume availability zone name may not contain
-                          spaces.
-                        minLength: 1
-                        pattern: ^[^ ]+$
-                        type: string
-                    type: object
-                    x-kubernetes-validations:
-                    - message: name is required when from is 'Name' or default
-                      rule: '!has(self.from) || self.from == ''Name'' ? has(self.name)
-                        : !has(self.name)'
-                  sizeGiB:
-                    description: SizeGiB is the size of the block device in gibibytes
-                      (GiB).
-                    minimum: 1
-                    type: integer
-                  type:
-                    description: |-
-                      Type is the Cinder volume type of the volume.
-                      If omitted, the default Cinder volume type that is configured in the OpenStack cloud
-                      will be used.
-                    type: string
-                required:
-                - sizeGiB
-                type: object
-              schedulerHintAdditionalProperties:
-                description: |-
-                  SchedulerHintAdditionalProperties are arbitrary key/value pairs that provide additional hints
-                  to the OpenStack scheduler. These hints can influence how instances are placed on the infrastructure,
-                  such as specifying certain host aggregates or availability zones.
-                items:
-                  description: |-
-                    SchedulerHintAdditionalProperty represents a single additional property for a scheduler hint.
-                    It includes a Name to identify the property and a Value that can be of various types.
-                  properties:
-                    name:
-                      description: |-
-                        Name is the name of the scheduler hint property.
-                        It is a unique identifier for the property.
-                      minLength: 1
-                      type: string
-                    value:
-                      description: |-
-                        Value is the value of the scheduler hint property, which can be of various types
-                        (e.g., bool, string, int). The type is indicated by the Value.Type field.
-                      properties:
-                        bool:
-                          description: |-
-                            Bool is the boolean value of the scheduler hint, used when Type is "Bool".
-                            This field is required if type is 'Bool', and must not be set otherwise.
-                          type: boolean
-                        number:
-                          description: |-
-                            Number is the integer value of the scheduler hint, used when Type is "Number".
-                            This field is required if type is 'Number', and must not be set otherwise.
-                          type: integer
-                        string:
-                          description: |-
-                            String is the string value of the scheduler hint, used when Type is "String".
-                            This field is required if type is 'String', and must not be set otherwise.
-                          maxLength: 255
-                          minLength: 1
-                          type: string
-                        type:
-                          description: |-
-                            Type represents the type of the value.
-                            Valid values are Bool, String, and Number.
-                          enum:
-                          - Bool
-                          - String
-                          - Number
-                          type: string
-                      required:
-                      - type
-                      type: object
-                      x-kubernetes-validations:
-                      - message: bool is required when type is Bool, and forbidden
-                          otherwise
-                        rule: 'has(self.type) && self.type == ''Bool'' ? has(self.bool)
-                          : !has(self.bool)'
-                      - message: number is required when type is Number, and forbidden
-                          otherwise
-                        rule: 'has(self.type) && self.type == ''Number'' ? has(self.number)
-                          : !has(self.number)'
-                      - message: string is required when type is String, and forbidden
-                          otherwise
-                        rule: 'has(self.type) && self.type == ''String'' ? has(self.string)
-                          : !has(self.string)'
-                  required:
-                  - name
-                  - value
-                  type: object
-                type: array
-                x-kubernetes-list-map-keys:
-                - name
-                x-kubernetes-list-type: map
-              securityGroups:
-                description: The names of the security groups to assign to the instance
-                items:
-                  description: SecurityGroupParam specifies an OpenStack security
-                    group. It may be specified by ID or filter, but not both.
-                  maxProperties: 1
-                  minProperties: 1
-                  properties:
-                    filter:
-                      description: Filter specifies a query to select an OpenStack
-                        security group. If provided, cannot be empty.
-                      minProperties: 1
-                      properties:
-                        description:
-                          type: string
-                        name:
-                          type: string
-                        notTags:
-                          description: |-
-                            NotTags is a list of tags to filter by. If specified, resources which
-                            contain all of the given tags will be excluded from the result.
-                          items:
-                            description: |-
-                              NeutronTag represents a tag on a Neutron resource.
-                              It may not be empty and may not contain commas.
-                            minLength: 1
-                            pattern: ^[^,]+$
-                            type: string
-                          type: array
-                          x-kubernetes-list-type: set
-                        notTagsAny:
-                          description: |-
-                            NotTagsAny is a list of tags to filter by. If specified, resources
-                            which contain any of the given tags will be excluded from the result.
-                          items:
-                            description: |-
-                              NeutronTag represents a tag on a Neutron resource.
-                              It may not be empty and may not contain commas.
-                            minLength: 1
-                            pattern: ^[^,]+$
-                            type: string
-                          type: array
-                          x-kubernetes-list-type: set
-                        projectID:
-                          type: string
-                        tags:
-                          description: |-
-                            Tags is a list of tags to filter by. If specified, the resource must
-                            have all of the tags specified to be included in the result.
-                          items:
-                            description: |-
-                              NeutronTag represents a tag on a Neutron resource.
-                              It may not be empty and may not contain commas.
-                            minLength: 1
-                            pattern: ^[^,]+$
-                            type: string
-                          type: array
-                          x-kubernetes-list-type: set
-                        tagsAny:
-                          description: |-
-                            TagsAny is a list of tags to filter by. If specified, the resource
-                            must have at least one of the tags specified to be included in the
-                            result.
-                          items:
-                            description: |-
-                              NeutronTag represents a tag on a Neutron resource.
-                              It may not be empty and may not contain commas.
-                            minLength: 1
-                            pattern: ^[^,]+$
-                            type: string
-                          type: array
-                          x-kubernetes-list-type: set
-                      type: object
-                    id:
-                      description: ID is the ID of the security group to use. If ID
-                        is provided, the other filters cannot be provided. Must be
-                        in UUID format.
-                      format: uuid
-                      type: string
-                  type: object
-                type: array
-              serverGroup:
-                description: The server group to assign the machine to.
-                maxProperties: 1
-                minProperties: 1
-                properties:
-                  filter:
-                    description: Filter specifies a query to select an OpenStack server
-                      group. If provided, it cannot be empty.
-                    minProperties: 1
-                    properties:
-                      name:
-                        description: Name is the name of a server group to look for.
-                        type: string
-                    type: object
-                  id:
-                    description: ID is the ID of the server group to use.
-                    format: uuid
-                    type: string
-                type: object
-              serverMetadata:
-                description: Metadata mapping. Allows you to create a map of key value
-                  pairs to add to the server instance.
-                items:
-                  properties:
-                    key:
-                      description: Key is the server metadata key
-                      maxLength: 255
-                      type: string
-                    value:
-                      description: Value is the server metadata value
-                      maxLength: 255
-                      type: string
-                  required:
-                  - key
-                  - value
-                  type: object
-                type: array
-                x-kubernetes-list-map-keys:
-                - key
-                x-kubernetes-list-type: map
-              sshKeyName:
-                description: The ssh key to inject in the instance
-                type: string
-              tags:
-                description: |-
-                  Tags which will be added to the machine and all dependent resources
-                  which support them. These are in addition to Tags defined on the
-                  cluster.
-                  Requires Nova api 2.52 minimum!
-                items:
-                  type: string
-                type: array
-                x-kubernetes-list-type: set
-              trunk:
-                description: Whether the server instance is created on a trunk port
-                  or not.
-                type: boolean
-            required:
-            - image
-            type: object
-            x-kubernetes-validations:
-            - message: at least one of flavor or flavorID must be set
-              rule: (has(self.flavor) || has(self.flavorID))
-          status:
-            description: OpenStackMachineStatus defines the observed state of OpenStackMachine.
-            properties:
-              addresses:
-                description: Addresses contains the OpenStack instance associated
-                  addresses.
-                items:
-                  description: NodeAddress contains information for the node's address.
-                  properties:
-                    address:
-                      description: The node address.
-                      type: string
-                    type:
-                      description: Node address type, one of Hostname, ExternalIP
-                        or InternalIP.
-                      type: string
-                  required:
-                  - address
-                  - type
-                  type: object
-                type: array
-              conditions:
-                description: Conditions provide observations of the operational state
-                  of a Cluster API resource.
-                items:
-                  description: Condition defines an observation of a Cluster API resource
-                    operational state.
-                  properties:
-                    lastTransitionTime:
-                      description: |-
-                        Last time the condition transitioned from one status to another.
-                        This should be when the underlying condition changed. If that is not known, then using the time when
-                        the API field changed is acceptable.
-                      format: date-time
-                      type: string
-                    message:
-                      description: |-
-                        A human readable message indicating details about the transition.
-                        This field may be empty.
-                      type: string
-                    reason:
-                      description: |-
-                        The reason for the condition's last transition in CamelCase.
-                        The specific API may choose whether or not this field is considered a guaranteed API.
-                        This field may be empty.
-                      type: string
-                    severity:
-                      description: |-
-                        severity provides an explicit classification of Reason code, so the users or machines can immediately
-                        understand the current situation and act accordingly.
-                        The Severity field MUST be set only when Status=False.
-                      type: string
-                    status:
-                      description: status of the condition, one of True, False, Unknown.
-                      type: string
-                    type:
-                      description: |-
-                        type of condition in CamelCase or in foo.example.com/CamelCase.
-                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
-                        can be useful (see .node.status.conditions), the ability to deconflict is important.
-                      type: string
-                  required:
-                  - lastTransitionTime
-                  - status
-                  - type
-                  type: object
-                type: array
-              failureMessage:
-                description: |-
-                  FailureMessage will be set in the event that there is a terminal problem
-                  reconciling the Machine and will contain a more verbose string suitable
-                  for logging and human consumption.
-
-                  This field should not be set for transitive errors that a controller
-                  faces that are expected to be fixed automatically over
-                  time (like service outages), but instead indicate that something is
-                  fundamentally wrong with the Machine's spec or the configuration of
-                  the controller, and that manual intervention is required. Examples
-                  of terminal errors would be invalid combinations of settings in the
-                  spec, values that are unsupported by the controller, or the
-                  responsible controller itself being critically misconfigured.
-
-                  Any transient errors that occur during the reconciliation of Machines
-                  can be added as events to the Machine object and/or logged in the
-                  controller's output.
-                type: string
-              failureReason:
-                description: DeprecatedCAPIMachineStatusError defines errors states
-                  for Machine objects.
-                type: string
-              instanceID:
-                description: InstanceID is the OpenStack instance ID for this machine.
-                type: string
-              instanceState:
-                description: |-
-                  InstanceState is the state of the OpenStack instance for this machine.
-                  This field is not set anymore by the OpenStackMachine controller.
-                  Instead, it's set by the OpenStackServer controller.
-                type: string
-              ready:
-                description: Ready is true when the provider resource is ready.
-                type: boolean
-              resolved:
-                description: |-
-                  Resolved contains parts of the machine spec with all external
-                  references fully resolved.
-                properties:
-                  flavorID:
-                    description: FlavorID is the ID of the flavor to use.
-                    type: string
-                  imageID:
-                    description: ImageID is the ID of the image to use for the machine
-                      and is calculated based on ImageFilter.
-                    type: string
-                  ports:
-                    description: Ports is the fully resolved list of ports to create
-                      for the machine.
-                    items:
-                      description: ResolvedPortSpec is a PortOpts with all contained
-                        references fully resolved.
-                      properties:
-                        adminStateUp:
-                          description: AdminStateUp specifies whether the port should
-                            be created in the up (true) or down (false) state. The
-                            default is up.
-                          type: boolean
-                        allowedAddressPairs:
-                          description: |-
-                            AllowedAddressPairs is a list of address pairs which Neutron will
-                            allow the port to send traffic from in addition to the port's
-                            addresses. If not specified, the MAC Address will be the MAC Address
-                            of the port. Depending on the configuration of Neutron, it may be
-                            supported to specify a CIDR instead of a specific IP address.
-                          items:
-                            properties:
-                              ipAddress:
-                                description: |-
-                                  IPAddress is the IP address of the allowed address pair. Depending on
-                                  the configuration of Neutron, it may be supported to specify a CIDR
-                                  instead of a specific IP address.
-                                type: string
-                              macAddress:
-                                description: |-
-                                  MACAddress is the MAC address of the allowed address pair. If not
-                                  specified, the MAC address will be the MAC address of the port.
-                                type: string
-                            required:
-                            - ipAddress
-                            type: object
-                          type: array
-                        description:
-                          description: Description is a human-readable description
-                            for the port.
-                          type: string
-                        disablePortSecurity:
-                          description: |-
-                            DisablePortSecurity enables or disables the port security when set.
-                            When not set, it takes the value of the corresponding field at the network level.
-                          type: boolean
-                        fixedIPs:
-                          description: FixedIPs is a list of pairs of subnet and/or
-                            IP address to assign to the port. If specified, these
-                            must be subnets of the port's network.
-                          items:
-                            description: ResolvedFixedIP is a FixedIP with the Subnet
-                              resolved to an ID.
-                            properties:
-                              ipAddress:
-                                description: |-
-                                  IPAddress is a specific IP address to assign to the port. If SubnetID
-                                  is also specified, IPAddress must be a valid IP address in the
-                                  subnet. If Subnet is not specified, IPAddress must be a valid IP
-                                  address in any subnet of the port's network.
-                                type: string
-                              subnet:
-                                description: SubnetID is the id of a subnet to create
-                                  the fixed IP of a port in.
-                                type: string
-                            type: object
-                          type: array
-                          x-kubernetes-list-type: atomic
-                        hostID:
-                          description: HostID specifies the ID of the host where the
-                            port resides.
-                          type: string
-                        macAddress:
-                          description: MACAddress specifies the MAC address of the
-                            port. If not specified, the MAC address will be generated.
-                          type: string
-                        name:
-                          description: Name is the name of the port.
-                          type: string
-                        networkID:
-                          description: NetworkID is the ID of the network the port
-                            will be created in.
-                          type: string
-                        profile:
-                          description: |-
-                            Profile is a set of key-value pairs that are used for binding
-                            details. We intentionally don't expose this as a map[string]string
-                            because we only want to enable the users to set the values of the
-                            keys that are known to work in OpenStack Networking API.  See
-                            https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
-                            To set profiles, your tenant needs permissions rule:create_port, and
-                            rule:create_port:binding:profile
-                          properties:
-                            ovsHWOffload:
-                              description: |-
-                                OVSHWOffload enables or disables the OVS hardware offload feature.
-                                This flag is not required on OpenStack clouds since Yoga as Nova will set it automatically when the port is attached.
-                                See: https://bugs.launchpad.net/nova/+bug/2020813
-                              type: boolean
-                            trustedVF:
-                              description: TrustedVF enables or disables the “trusted
-                                mode” for the VF.
-                              type: boolean
-                          type: object
-                        propagateUplinkStatus:
-                          description: PropageteUplinkStatus enables or disables the
-                            propagate uplink status on the port.
-                          type: boolean
-                        securityGroups:
-                          description: SecurityGroups is a list of security group
-                            IDs to assign to the port.
-                          items:
-                            type: string
-                          type: array
-                          x-kubernetes-list-type: atomic
-                        tags:
-                          description: Tags applied to the port (and corresponding
-                            trunk, if a trunk is configured.)
-                          items:
-                            type: string
-                          type: array
-                          x-kubernetes-list-type: set
-                        trunk:
-                          description: Trunk specifies whether trunking is enabled
-                            at the port level.
-                          type: boolean
-                        valueSpecs:
-                          description: |-
-                            Value specs are extra parameters to include in the API request with OpenStack.
-                            This is an extension point for the API, so what they do and if they are supported,
-                            depends on the specific OpenStack implementation.
-                          items:
-                            description: ValueSpec represents a single value_spec
-                              key-value pair.
-                            properties:
-                              key:
-                                description: Key is the key in the key-value pair.
-                                type: string
-                              name:
-                                description: |-
-                                  Name is the name of the key-value pair.
-                                  This is just for identifying the pair and will not be sent to the OpenStack API.
-                                type: string
-                              value:
-                                description: Value is the value in the key-value pair.
-                                type: string
-                            required:
-                            - key
-                            - name
-                            - value
-                            type: object
-                          type: array
-                          x-kubernetes-list-map-keys:
-                          - name
-                          x-kubernetes-list-type: map
-                        vnicType:
-                          description: |-
-                            VNICType specifies the type of vNIC which this port should be
-                            attached to. This is used to determine which mechanism driver(s) to
-                            be used to bind the port. The valid values are normal, macvtap,
-                            direct, baremetal, direct-physical, virtio-forwarder, smart-nic and
-                            remote-managed, although these values will not be validated in this
-                            API to ensure compatibility with future neutron changes or custom
-                            implementations. What type of vNIC is actually available depends on
-                            deployments. If not specified, the Neutron default value is used.
-                          type: string
-                      required:
-                      - description
-                      - name
-                      - networkID
-                      type: object
-                    type: array
-                  serverGroupID:
-                    description: ServerGroupID is the ID of the server group the machine
-                      should be added to and is calculated based on ServerGroupFilter.
-                    type: string
-                type: object
-              resources:
-                description: Resources contains references to OpenStack resources
-                  created for the machine.
-                properties:
-                  ports:
-                    description: Ports is the status of the ports created for the
-                      machine.
-                    items:
-                      properties:
-                        id:
-                          description: ID is the unique identifier of the port.
-                          type: string
-                      required:
-                      - id
-                      type: object
-                    type: array
-                type: object
-            type: object
-        type: object
-    served: true
-    storage: true
-    subresources:
-      status: {}
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: null
-  storedVersions: null
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  annotations:
-    cert-manager.io/inject-ca-from: capo-system/capo-serving-cert
-    controller-gen.kubebuilder.io/version: v0.16.5
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: infrastructure-openstack
-    cluster.x-k8s.io/v1beta1: v1alpha7_v1beta1
-    clusterctl.cluster.x-k8s.io: ""
-  name: openstackmachinetemplates.infrastructure.cluster.x-k8s.io
-spec:
-  conversion:
-    strategy: Webhook
-    webhook:
-      clientConfig:
-        service:
-          name: capo-webhook-service
-          namespace: capo-system
-          path: /convert
-      conversionReviewVersions:
-      - v1
-      - v1beta1
-  group: infrastructure.cluster.x-k8s.io
-  names:
-    categories:
-    - cluster-api
-    kind: OpenStackMachineTemplate
-    listKind: OpenStackMachineTemplateList
-    plural: openstackmachinetemplates
-    shortNames:
-    - osmt
-    singular: openstackmachinetemplate
-  scope: Namespaced
-  versions:
-  - deprecated: true
-    deprecationWarning: The v1alpha7 version of OpenStackMachineTemplate has been
-      deprecated and will be removed in a future release.
-    name: v1alpha7
-    schema:
-      openAPIV3Schema:
-        description: |-
-          OpenStackMachineTemplate is the Schema for the openstackmachinetemplates API.
-
-          Deprecated: v1alpha7.OpenStackMachineTemplate has been replaced by v1beta1.OpenStackMachineTemplate.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: OpenStackMachineTemplateSpec defines the desired state of
-              OpenStackMachineTemplate.
-            properties:
-              template:
-                description: OpenStackMachineTemplateResource describes the data needed
-                  to create a OpenStackMachine from a template.
-                properties:
-                  spec:
-                    description: Spec is the specification of the desired behavior
-                      of the machine.
-                    properties:
-                      additionalBlockDevices:
-                        description: AdditionalBlockDevices is a list of specifications
-                          for additional block devices to attach to the server instance
-                        items:
-                          description: AdditionalBlockDevice is a block device to
-                            attach to the server.
-                          properties:
-                            name:
-                              description: |-
-                                Name of the block device in the context of a machine.
-                                If the block device is a volume, the Cinder volume will be named
-                                as a combination of the machine name and this name.
-                                Also, this name will be used for tagging the block device.
-                                Information about the block device tag can be obtained from the OpenStack
-                                metadata API or the config drive.
-                              type: string
-                            sizeGiB:
-                              description: SizeGiB is the size of the block device
-                                in gibibytes (GiB).
-                              type: integer
-                            storage:
-                              description: |-
-                                Storage specifies the storage type of the block device and
-                                additional storage options.
-                              properties:
-                                type:
-                                  description: |-
-                                    Type is the type of block device to create.
-                                    This can be either "Volume" or "Local".
-                                  type: string
-                                volume:
-                                  description: Volume contains additional storage
-                                    options for a volume block device.
-                                  properties:
-                                    availabilityZone:
-                                      description: |-
-                                        AvailabilityZone is the volume availability zone to create the volume in.
-                                        If omitted, the availability zone of the server will be used.
-                                        The availability zone must NOT contain spaces otherwise it will lead to volume that belongs
-                                        to this availability zone register failure, see kubernetes/cloud-provider-openstack#1379 for
-                                        further information.
-                                      type: string
-                                    type:
-                                      description: |-
-                                        Type is the Cinder volume type of the volume.
-                                        If omitted, the default Cinder volume type that is configured in the OpenStack cloud
-                                        will be used.
-                                      type: string
-                                  type: object
-                              required:
-                              - type
-                              type: object
-                          required:
-                          - name
-                          - sizeGiB
-                          - storage
-                          type: object
-                        type: array
-                        x-kubernetes-list-map-keys:
-                        - name
-                        x-kubernetes-list-type: map
-                      cloudName:
-                        description: The name of the cloud to use from the clouds
-                          secret
-                        type: string
-                      configDrive:
-                        description: Config Drive support
-                        type: boolean
-                      flavor:
-                        description: The flavor reference for the flavor for your
-                          server instance.
-                        minLength: 1
-                        type: string
-                      flavorID:
-                        description: |-
-                          FlavorID allows flavors to be specified by ID.  This field takes precedence
-                          over Flavor.
-                        minLength: 1
-                        type: string
-                      floatingIP:
-                        description: |-
-                          The floatingIP which will be associated to the machine, only used for master.
-                          The floatingIP should have been created and haven't been associated.
-                        type: string
-                      identityRef:
-                        description: |-
-                          IdentityRef is a reference to a identity to be used when reconciling this cluster.
-                          If not specified, the identity ref of the cluster will be used instead.
-                        properties:
-                          kind:
-                            description: |-
-                              Kind of the identity. Must be supported by the infrastructure
-                              provider and may be either cluster or namespace-scoped.
-                            minLength: 1
-                            type: string
-                          name:
-                            description: |-
-                              Name of the infrastructure identity to be used.
-                              Must be either a cluster-scoped resource, or namespaced-scoped
-                              resource the same namespace as the resource(s) being provisioned.
-                            type: string
-                        required:
-                        - kind
-                        - name
-                        type: object
-                      image:
-                        description: |-
-                          The name of the image to use for your server instance.
-                          If the RootVolume is specified, this will be ignored and use rootVolume directly.
-                        type: string
-                      imageUUID:
-                        description: |-
-                          The uuid of the image to use for your server instance.
-                          if it's empty, Image name will be used
-                        type: string
-                      instanceID:
-                        description: InstanceID is the OpenStack instance ID for this
-                          machine.
-                        type: string
-                      ports:
-                        description: |-
-                          Ports to be attached to the server instance. They are created if a port with the given name does not already exist.
-                          If not specified a default port will be added for the default cluster network.
-                        items:
-                          properties:
-                            adminStateUp:
-                              type: boolean
-                            allowedAddressPairs:
-                              items:
-                                properties:
-                                  ipAddress:
-                                    type: string
-                                  macAddress:
-                                    type: string
-                                type: object
-                              type: array
-                            description:
-                              type: string
-                            disablePortSecurity:
-                              description: |-
-                                DisablePortSecurity enables or disables the port security when set.
-                                When not set, it takes the value of the corresponding field at the network level.
-                              type: boolean
-                            fixedIPs:
-                              description: Specify pairs of subnet and/or IP address.
-                                These should be subnets of the network with the given
-                                NetworkID.
-                              items:
-                                properties:
-                                  ipAddress:
-                                    type: string
-                                  subnet:
-                                    description: |-
-                                      Subnet is an openstack subnet query that will return the id of a subnet to create
-                                      the fixed IP of a port in. This query must not return more than one subnet.
-                                    properties:
-                                      cidr:
-                                        type: string
-                                      description:
-                                        type: string
-                                      gateway_ip:
-                                        type: string
-                                      id:
-                                        type: string
-                                      ipVersion:
-                                        type: integer
-                                      ipv6AddressMode:
-                                        type: string
-                                      ipv6RaMode:
-                                        type: string
-                                      name:
-                                        type: string
-                                      notTags:
-                                        type: string
-                                      notTagsAny:
-                                        type: string
-                                      projectId:
-                                        type: string
-                                      tags:
-                                        type: string
-                                      tagsAny:
-                                        type: string
-                                    type: object
-                                required:
-                                - subnet
-                                type: object
-                              type: array
-                            hostId:
-                              description: The ID of the host where the port is allocated
-                              type: string
-                            macAddress:
-                              type: string
-                            nameSuffix:
-                              description: Used to make the name of the port unique.
-                                If unspecified, instead the 0-based index of the port
-                                in the list is used.
-                              type: string
-                            network:
-                              description: |-
-                                Network is a query for an openstack network that the port will be created or discovered on.
-                                This will fail if the query returns more than one network.
-                              properties:
-                                description:
-                                  type: string
-                                id:
-                                  type: string
-                                name:
-                                  type: string
-                                notTags:
-                                  type: string
-                                notTagsAny:
-                                  type: string
-                                projectId:
-                                  type: string
-                                tags:
-                                  type: string
-                                tagsAny:
-                                  type: string
-                              type: object
-                            profile:
-                              description: |-
-                                Profile is a set of key-value pairs that are used for binding details.
-                                We intentionally don't expose this as a map[string]string because we only want to enable
-                                the users to set the values of the keys that are known to work in OpenStack Networking API.
-                                See https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
-                              properties:
-                                ovsHWOffload:
-                                  description: OVSHWOffload enables or disables the
-                                    OVS hardware offload feature.
-                                  type: boolean
-                                trustedVF:
-                                  description: TrustedVF enables or disables the “trusted
-                                    mode” for the VF.
-                                  type: boolean
-                              type: object
-                            propagateUplinkStatus:
-                              description: PropageteUplinkStatus enables or disables
-                                the propagate uplink status on the port.
-                              type: boolean
-                            securityGroupFilters:
-                              description: The names, uuids, filters or any combination
-                                these of the security groups to assign to the instance
-                              items:
-                                properties:
-                                  description:
-                                    type: string
-                                  id:
-                                    type: string
-                                  name:
-                                    type: string
-                                  notTags:
-                                    type: string
-                                  notTagsAny:
-                                    type: string
-                                  projectId:
-                                    type: string
-                                  tags:
-                                    type: string
-                                  tagsAny:
-                                    type: string
-                                type: object
-                              type: array
-                            tags:
-                              description: |-
-                                Tags applied to the port (and corresponding trunk, if a trunk is configured.)
-                                These tags are applied in addition to the instance's tags, which will also be applied to the port.
-                              items:
-                                type: string
-                              type: array
-                              x-kubernetes-list-type: set
-                            trunk:
-                              description: Enables and disables trunk at port level.
-                                If not provided, openStackMachine.Spec.Trunk is inherited.
-                              type: boolean
-                            valueSpecs:
-                              description: |-
-                                Value specs are extra parameters to include in the API request with OpenStack.
-                                This is an extension point for the API, so what they do and if they are supported,
-                                depends on the specific OpenStack implementation.
-                              items:
-                                description: ValueSpec represents a single value_spec
-                                  key-value pair.
-                                properties:
-                                  key:
-                                    description: Key is the key in the key-value pair.
-                                    type: string
-                                  name:
-                                    description: |-
-                                      Name is the name of the key-value pair.
-                                      This is just for identifying the pair and will not be sent to the OpenStack API.
-                                    type: string
-                                  value:
-                                    description: Value is the value in the key-value
-                                      pair.
-                                    type: string
-                                required:
-                                - key
-                                - name
-                                - value
-                                type: object
-                              type: array
-                              x-kubernetes-list-map-keys:
-                              - name
-                              x-kubernetes-list-type: map
-                            vnicType:
-                              description: The virtual network interface card (vNIC)
-                                type that is bound to the neutron port.
-                              type: string
-                          type: object
-                        type: array
-                      providerID:
-                        description: ProviderID is the unique identifier as specified
-                          by the cloud provider.
-                        type: string
-                      rootVolume:
-                        description: The volume metadata to boot from
-                        properties:
-                          availabilityZone:
-                            type: string
-                          diskSize:
-                            type: integer
-                          volumeType:
-                            type: string
-                        type: object
-                      securityGroups:
-                        description: The names of the security groups to assign to
-                          the instance
-                        items:
-                          properties:
-                            description:
-                              type: string
-                            id:
-                              type: string
-                            name:
-                              type: string
-                            notTags:
-                              type: string
-                            notTagsAny:
-                              type: string
-                            projectId:
-                              type: string
-                            tags:
-                              type: string
-                            tagsAny:
-                              type: string
-                          type: object
-                        type: array
-                      serverGroupID:
-                        description: The server group to assign the machine to
-                        type: string
-                      serverMetadata:
-                        additionalProperties:
-                          type: string
-                        description: Metadata mapping. Allows you to create a map
-                          of key value pairs to add to the server instance.
-                        type: object
-                      sshKeyName:
-                        description: The ssh key to inject in the instance
-                        type: string
-                      tags:
-                        description: |-
-                          Machine tags
-                          Requires Nova api 2.52 minimum!
-                        items:
-                          type: string
-                        type: array
-                        x-kubernetes-list-type: set
-                      trunk:
-                        description: Whether the server instance is created on a trunk
-                          port or not.
-                        type: boolean
-                    type: object
-                required:
-                - spec
-                type: object
-            required:
-            - template
-            type: object
-        type: object
-    served: false
-    storage: false
-  - name: v1beta1
-    schema:
-      openAPIV3Schema:
-        description: OpenStackMachineTemplate is the Schema for the openstackmachinetemplates
-          API.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: OpenStackMachineTemplateSpec defines the desired state of
-              OpenStackMachineTemplate.
-            properties:
-              template:
-                description: OpenStackMachineTemplateResource describes the data needed
-                  to create a OpenStackMachine from a template.
-                properties:
-                  spec:
-                    description: Spec is the specification of the desired behavior
-                      of the machine.
-                    properties:
-                      additionalBlockDevices:
-                        description: AdditionalBlockDevices is a list of specifications
-                          for additional block devices to attach to the server instance
-                        items:
-                          description: AdditionalBlockDevice is a block device to
-                            attach to the server.
-                          properties:
-                            name:
-                              description: |-
-                                Name of the block device in the context of a machine.
-                                If the block device is a volume, the Cinder volume will be named
-                                as a combination of the machine name and this name.
-                                Also, this name will be used for tagging the block device.
-                                Information about the block device tag can be obtained from the OpenStack
-                                metadata API or the config drive.
-                                Name cannot be 'root', which is reserved for the root volume.
-                              type: string
-                            sizeGiB:
-                              description: SizeGiB is the size of the block device
-                                in gibibytes (GiB).
-                              minimum: 1
-                              type: integer
-                            storage:
-                              description: |-
-                                Storage specifies the storage type of the block device and
-                                additional storage options.
-                              properties:
-                                type:
-                                  description: |-
-                                    Type is the type of block device to create.
-                                    This can be either "Volume" or "Local".
-                                  type: string
-                                volume:
-                                  description: Volume contains additional storage
-                                    options for a volume block device.
-                                  properties:
-                                    availabilityZone:
-                                      description: |-
-                                        AvailabilityZone is the volume availability zone to create the volume
-                                        in. If not specified, the volume will be created without an explicit
-                                        availability zone.
-                                      properties:
-                                        from:
-                                          default: Name
-                                          description: |-
-                                            From specifies where we will obtain the availability zone for the
-                                            volume. The options are "Name" and "Machine". If "Name" is specified
-                                            then the Name field must also be specified. If "Machine" is specified
-                                            the volume will use the value of FailureDomain, if any, from the
-                                            associated Machine.
-                                          enum:
-                                          - Name
-                                          - Machine
-                                          type: string
-                                        name:
-                                          description: |-
-                                            Name is the name of a volume availability zone to use. It is required
-                                            if From is "Name". The volume availability zone name may not contain
-                                            spaces.
-                                          minLength: 1
-                                          pattern: ^[^ ]+$
-                                          type: string
-                                      type: object
-                                      x-kubernetes-validations:
-                                      - message: name is required when from is 'Name'
-                                          or default
-                                        rule: '!has(self.from) || self.from == ''Name''
-                                          ? has(self.name) : !has(self.name)'
-                                    type:
-                                      description: |-
-                                        Type is the Cinder volume type of the volume.
-                                        If omitted, the default Cinder volume type that is configured in the OpenStack cloud
-                                        will be used.
-                                      type: string
-                                  type: object
-                              required:
-                              - type
-                              type: object
-                          required:
-                          - name
-                          - sizeGiB
-                          - storage
-                          type: object
-                        type: array
-                        x-kubernetes-list-map-keys:
-                        - name
-                        x-kubernetes-list-type: map
-                      configDrive:
-                        description: Config Drive support
-                        type: boolean
-                      flavor:
-                        description: The flavor reference for the flavor for your
-                          server instance.
-                        minLength: 1
-                        type: string
-                      flavorID:
-                        description: |-
-                          FlavorID allows flavors to be specified by ID.  This field takes precedence
-                          over Flavor.
-                        minLength: 1
-                        type: string
-                      floatingIPPoolRef:
-                        description: |-
-                          floatingIPPoolRef is a reference to a IPPool that will be assigned
-                          to an IPAddressClaim. Once the IPAddressClaim is fulfilled, the FloatingIP
-                          will be assigned to the OpenStackMachine.
-                        properties:
-                          apiGroup:
-                            description: |-
-                              APIGroup is the group for the resource being referenced.
-                              If APIGroup is not specified, the specified Kind must be in the core API group.
-                              For any other third-party types, APIGroup is required.
-                            type: string
-                          kind:
-                            description: Kind is the type of resource being referenced
-                            type: string
-                          name:
-                            description: Name is the name of resource being referenced
-                            type: string
-                        required:
-                        - kind
-                        - name
-                        type: object
-                        x-kubernetes-map-type: atomic
-                      identityRef:
-                        description: |-
-                          IdentityRef is a reference to a secret holding OpenStack credentials
-                          to be used when reconciling this machine. If not specified, the
-                          credentials specified in the cluster will be used.
-                        properties:
-                          cloudName:
-                            description: CloudName specifies the name of the entry
-                              in the clouds.yaml file to use.
-                            type: string
-                          name:
-                            description: |-
-                              Name is the name of a secret in the same namespace as the resource being provisioned.
-                              The secret must contain a key named `clouds.yaml` which contains an OpenStack clouds.yaml file.
-                              The secret may optionally contain a key named `cacert` containing a PEM-encoded CA certificate.
-                            type: string
-                          region:
-                            description: |-
-                              Region specifies an OpenStack region to use. If specified, it overrides
-                              any value in clouds.yaml. If specified for an OpenStackMachine, its
-                              value will be included in providerID.
-                            type: string
-                        required:
-                        - cloudName
-                        - name
-                        type: object
-                        x-kubernetes-validations:
-                        - message: region is immutable
-                          rule: (!has(self.region) && !has(oldSelf.region)) || self.region
-                            == oldSelf.region
-                      image:
-                        description: |-
-                          The image to use for your server instance.
-                          If the rootVolume is specified, this will be used when creating the root volume.
-                        maxProperties: 1
-                        minProperties: 1
-                        properties:
-                          filter:
-                            description: |-
-                              Filter describes a query for an image. If specified, the combination
-                              of name and tags must return a single matching image or an error will
-                              be raised.
-                            minProperties: 1
-                            properties:
-                              name:
-                                description: The name of the desired image. If specified,
-                                  the combination of name and tags must return a single
-                                  matching image or an error will be raised.
-                                type: string
-                              tags:
-                                description: The tags associated with the desired
-                                  image. If specified, the combination of name and
-                                  tags must return a single matching image or an error
-                                  will be raised.
-                                items:
-                                  type: string
-                                type: array
-                                x-kubernetes-list-type: set
-                            type: object
-                          id:
-                            description: ID is the uuid of the image. ID will not
-                              be validated before use.
-                            format: uuid
-                            type: string
-                          imageRef:
-                            description: |-
-                              ImageRef is a reference to an ORC Image in the same namespace as the
-                              referring object.
-                            properties:
-                              name:
-                                description: Name is the name of the referenced resource
-                                type: string
-                            required:
-                            - name
-                            type: object
-                        type: object
-                      ports:
-                        description: |-
-                          Ports to be attached to the server instance. They are created if a port with the given name does not already exist.
-                          If not specified a default port will be added for the default cluster network.
-                        items:
-                          properties:
-                            adminStateUp:
-                              description: AdminStateUp specifies whether the port
-                                should be created in the up (true) or down (false)
-                                state. The default is up.
-                              type: boolean
-                            allowedAddressPairs:
-                              description: |-
-                                AllowedAddressPairs is a list of address pairs which Neutron will
-                                allow the port to send traffic from in addition to the port's
-                                addresses. If not specified, the MAC Address will be the MAC Address
-                                of the port. Depending on the configuration of Neutron, it may be
-                                supported to specify a CIDR instead of a specific IP address.
-                              items:
-                                properties:
-                                  ipAddress:
-                                    description: |-
-                                      IPAddress is the IP address of the allowed address pair. Depending on
-                                      the configuration of Neutron, it may be supported to specify a CIDR
-                                      instead of a specific IP address.
-                                    type: string
-                                  macAddress:
-                                    description: |-
-                                      MACAddress is the MAC address of the allowed address pair. If not
-                                      specified, the MAC address will be the MAC address of the port.
-                                    type: string
-                                required:
-                                - ipAddress
-                                type: object
-                              type: array
-                            description:
-                              description: Description is a human-readable description
-                                for the port.
-                              type: string
-                            disablePortSecurity:
-                              description: |-
-                                DisablePortSecurity enables or disables the port security when set.
-                                When not set, it takes the value of the corresponding field at the network level.
-                              type: boolean
-                            fixedIPs:
-                              description: FixedIPs is a list of pairs of subnet and/or
-                                IP address to assign to the port. If specified, these
-                                must be subnets of the port's network.
-                              items:
-                                properties:
-                                  ipAddress:
-                                    description: |-
-                                      IPAddress is a specific IP address to assign to the port. If Subnet
-                                      is also specified, IPAddress must be a valid IP address in the
-                                      subnet. If Subnet is not specified, IPAddress must be a valid IP
-                                      address in any subnet of the port's network.
-                                    type: string
-                                  subnet:
-                                    description: |-
-                                      Subnet is an openstack subnet query that will return the id of a subnet to create
-                                      the fixed IP of a port in. This query must not return more than one subnet.
-                                    maxProperties: 1
-                                    minProperties: 1
-                                    properties:
-                                      filter:
-                                        description: Filter specifies a filter to
-                                          select the subnet. It must match exactly
-                                          one subnet.
-                                        minProperties: 1
-                                        properties:
-                                          cidr:
-                                            type: string
-                                          description:
-                                            type: string
-                                          gatewayIP:
-                                            type: string
-                                          ipVersion:
-                                            type: integer
-                                          ipv6AddressMode:
-                                            type: string
-                                          ipv6RAMode:
-                                            type: string
-                                          name:
-                                            type: string
-                                          notTags:
-                                            description: |-
-                                              NotTags is a list of tags to filter by. If specified, resources which
-                                              contain all of the given tags will be excluded from the result.
-                                            items:
-                                              description: |-
-                                                NeutronTag represents a tag on a Neutron resource.
-                                                It may not be empty and may not contain commas.
-                                              minLength: 1
-                                              pattern: ^[^,]+$
-                                              type: string
-                                            type: array
-                                            x-kubernetes-list-type: set
-                                          notTagsAny:
-                                            description: |-
-                                              NotTagsAny is a list of tags to filter by. If specified, resources
-                                              which contain any of the given tags will be excluded from the result.
-                                            items:
-                                              description: |-
-                                                NeutronTag represents a tag on a Neutron resource.
-                                                It may not be empty and may not contain commas.
-                                              minLength: 1
-                                              pattern: ^[^,]+$
-                                              type: string
-                                            type: array
-                                            x-kubernetes-list-type: set
-                                          projectID:
-                                            type: string
-                                          tags:
-                                            description: |-
-                                              Tags is a list of tags to filter by. If specified, the resource must
-                                              have all of the tags specified to be included in the result.
-                                            items:
-                                              description: |-
-                                                NeutronTag represents a tag on a Neutron resource.
-                                                It may not be empty and may not contain commas.
-                                              minLength: 1
-                                              pattern: ^[^,]+$
-                                              type: string
-                                            type: array
-                                            x-kubernetes-list-type: set
-                                          tagsAny:
-                                            description: |-
-                                              TagsAny is a list of tags to filter by. If specified, the resource
-                                              must have at least one of the tags specified to be included in the
-                                              result.
-                                            items:
-                                              description: |-
-                                                NeutronTag represents a tag on a Neutron resource.
-                                                It may not be empty and may not contain commas.
-                                              minLength: 1
-                                              pattern: ^[^,]+$
-                                              type: string
-                                            type: array
-                                            x-kubernetes-list-type: set
-                                        type: object
-                                      id:
-                                        description: ID is the uuid of the subnet.
-                                          It will not be validated.
-                                        format: uuid
-                                        type: string
-                                    type: object
-                                type: object
-                              type: array
-                              x-kubernetes-list-type: atomic
-                            hostID:
-                              description: HostID specifies the ID of the host where
-                                the port resides.
-                              type: string
-                            macAddress:
-                              description: MACAddress specifies the MAC address of
-                                the port. If not specified, the MAC address will be
-                                generated.
-                              type: string
-                            nameSuffix:
-                              description: NameSuffix will be appended to the name
-                                of the port if specified. If unspecified, instead
-                                the 0-based index of the port in the list is used.
-                              type: string
-                            network:
-                              description: |-
-                                Network is a query for an openstack network that the port will be created or discovered on.
-                                This will fail if the query returns more than one network.
-                              maxProperties: 1
-                              minProperties: 1
-                              properties:
-                                filter:
-                                  description: Filter specifies a filter to select
-                                    an OpenStack network. If provided, cannot be empty.
-                                  minProperties: 1
-                                  properties:
-                                    description:
-                                      type: string
-                                    name:
-                                      type: string
-                                    notTags:
-                                      description: |-
-                                        NotTags is a list of tags to filter by. If specified, resources which
-                                        contain all of the given tags will be excluded from the result.
-                                      items:
-                                        description: |-
-                                          NeutronTag represents a tag on a Neutron resource.
-                                          It may not be empty and may not contain commas.
-                                        minLength: 1
-                                        pattern: ^[^,]+$
-                                        type: string
-                                      type: array
-                                      x-kubernetes-list-type: set
-                                    notTagsAny:
-                                      description: |-
-                                        NotTagsAny is a list of tags to filter by. If specified, resources
-                                        which contain any of the given tags will be excluded from the result.
-                                      items:
-                                        description: |-
-                                          NeutronTag represents a tag on a Neutron resource.
-                                          It may not be empty and may not contain commas.
-                                        minLength: 1
-                                        pattern: ^[^,]+$
-                                        type: string
-                                      type: array
-                                      x-kubernetes-list-type: set
-                                    projectID:
-                                      type: string
-                                    tags:
-                                      description: |-
-                                        Tags is a list of tags to filter by. If specified, the resource must
-                                        have all of the tags specified to be included in the result.
-                                      items:
-                                        description: |-
-                                          NeutronTag represents a tag on a Neutron resource.
-                                          It may not be empty and may not contain commas.
-                                        minLength: 1
-                                        pattern: ^[^,]+$
-                                        type: string
-                                      type: array
-                                      x-kubernetes-list-type: set
-                                    tagsAny:
-                                      description: |-
-                                        TagsAny is a list of tags to filter by. If specified, the resource
-                                        must have at least one of the tags specified to be included in the
-                                        result.
-                                      items:
-                                        description: |-
-                                          NeutronTag represents a tag on a Neutron resource.
-                                          It may not be empty and may not contain commas.
-                                        minLength: 1
-                                        pattern: ^[^,]+$
-                                        type: string
-                                      type: array
-                                      x-kubernetes-list-type: set
-                                  type: object
-                                id:
-                                  description: ID is the ID of the network to use.
-                                    If ID is provided, the other filters cannot be
-                                    provided. Must be in UUID format.
-                                  format: uuid
-                                  type: string
-                              type: object
-                            profile:
-                              description: |-
-                                Profile is a set of key-value pairs that are used for binding
-                                details. We intentionally don't expose this as a map[string]string
-                                because we only want to enable the users to set the values of the
-                                keys that are known to work in OpenStack Networking API.  See
-                                https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
-                                To set profiles, your tenant needs permissions rule:create_port, and
-                                rule:create_port:binding:profile
-                              properties:
-                                ovsHWOffload:
-                                  description: |-
-                                    OVSHWOffload enables or disables the OVS hardware offload feature.
-                                    This flag is not required on OpenStack clouds since Yoga as Nova will set it automatically when the port is attached.
-                                    See: https://bugs.launchpad.net/nova/+bug/2020813
-                                  type: boolean
-                                trustedVF:
-                                  description: TrustedVF enables or disables the “trusted
-                                    mode” for the VF.
-                                  type: boolean
-                              type: object
-                            propagateUplinkStatus:
-                              description: PropageteUplinkStatus enables or disables
-                                the propagate uplink status on the port.
-                              type: boolean
-                            securityGroups:
-                              description: SecurityGroups is a list of the names,
-                                uuids, filters or any combination these of the security
-                                groups to assign to the instance.
-                              items:
-                                description: SecurityGroupParam specifies an OpenStack
-                                  security group. It may be specified by ID or filter,
-                                  but not both.
-                                maxProperties: 1
-                                minProperties: 1
-                                properties:
-                                  filter:
-                                    description: Filter specifies a query to select
-                                      an OpenStack security group. If provided, cannot
-                                      be empty.
-                                    minProperties: 1
-                                    properties:
-                                      description:
-                                        type: string
-                                      name:
-                                        type: string
-                                      notTags:
-                                        description: |-
-                                          NotTags is a list of tags to filter by. If specified, resources which
-                                          contain all of the given tags will be excluded from the result.
-                                        items:
-                                          description: |-
-                                            NeutronTag represents a tag on a Neutron resource.
-                                            It may not be empty and may not contain commas.
-                                          minLength: 1
-                                          pattern: ^[^,]+$
-                                          type: string
-                                        type: array
-                                        x-kubernetes-list-type: set
-                                      notTagsAny:
-                                        description: |-
-                                          NotTagsAny is a list of tags to filter by. If specified, resources
-                                          which contain any of the given tags will be excluded from the result.
-                                        items:
-                                          description: |-
-                                            NeutronTag represents a tag on a Neutron resource.
-                                            It may not be empty and may not contain commas.
-                                          minLength: 1
-                                          pattern: ^[^,]+$
-                                          type: string
-                                        type: array
-                                        x-kubernetes-list-type: set
-                                      projectID:
-                                        type: string
-                                      tags:
-                                        description: |-
-                                          Tags is a list of tags to filter by. If specified, the resource must
-                                          have all of the tags specified to be included in the result.
-                                        items:
-                                          description: |-
-                                            NeutronTag represents a tag on a Neutron resource.
-                                            It may not be empty and may not contain commas.
-                                          minLength: 1
-                                          pattern: ^[^,]+$
-                                          type: string
-                                        type: array
-                                        x-kubernetes-list-type: set
-                                      tagsAny:
-                                        description: |-
-                                          TagsAny is a list of tags to filter by. If specified, the resource
-                                          must have at least one of the tags specified to be included in the
-                                          result.
-                                        items:
-                                          description: |-
-                                            NeutronTag represents a tag on a Neutron resource.
-                                            It may not be empty and may not contain commas.
-                                          minLength: 1
-                                          pattern: ^[^,]+$
-                                          type: string
-                                        type: array
-                                        x-kubernetes-list-type: set
-                                    type: object
-                                  id:
-                                    description: ID is the ID of the security group
-                                      to use. If ID is provided, the other filters
-                                      cannot be provided. Must be in UUID format.
-                                    format: uuid
-                                    type: string
-                                type: object
-                              type: array
-                              x-kubernetes-list-type: atomic
-                            tags:
-                              description: |-
-                                Tags applied to the port (and corresponding trunk, if a trunk is configured.)
-                                These tags are applied in addition to the instance's tags, which will also be applied to the port.
-                              items:
-                                type: string
-                              type: array
-                              x-kubernetes-list-type: set
-                            trunk:
-                              description: |-
-                                Trunk specifies whether trunking is enabled at the port level. If not
-                                provided the value is inherited from the machine, or false for a
-                                bastion host.
-                              type: boolean
-                            valueSpecs:
-                              description: |-
-                                Value specs are extra parameters to include in the API request with OpenStack.
-                                This is an extension point for the API, so what they do and if they are supported,
-                                depends on the specific OpenStack implementation.
-                              items:
-                                description: ValueSpec represents a single value_spec
-                                  key-value pair.
-                                properties:
-                                  key:
-                                    description: Key is the key in the key-value pair.
-                                    type: string
-                                  name:
-                                    description: |-
-                                      Name is the name of the key-value pair.
-                                      This is just for identifying the pair and will not be sent to the OpenStack API.
-                                    type: string
-                                  value:
-                                    description: Value is the value in the key-value
-                                      pair.
-                                    type: string
-                                required:
-                                - key
-                                - name
-                                - value
-                                type: object
-                              type: array
-                              x-kubernetes-list-map-keys:
-                              - name
-                              x-kubernetes-list-type: map
-                            vnicType:
-                              description: |-
-                                VNICType specifies the type of vNIC which this port should be
-                                attached to. This is used to determine which mechanism driver(s) to
-                                be used to bind the port. The valid values are normal, macvtap,
-                                direct, baremetal, direct-physical, virtio-forwarder, smart-nic and
-                                remote-managed, although these values will not be validated in this
-                                API to ensure compatibility with future neutron changes or custom
-                                implementations. What type of vNIC is actually available depends on
-                                deployments. If not specified, the Neutron default value is used.
-                              type: string
-                          type: object
-                        type: array
-                      providerID:
-                        description: ProviderID is the unique identifier as specified
-                          by the cloud provider.
-                        type: string
-                      rootVolume:
-                        description: The volume metadata to boot from
-                        properties:
-                          availabilityZone:
-                            description: |-
-                              AvailabilityZone is the volume availability zone to create the volume
-                              in. If not specified, the volume will be created without an explicit
-                              availability zone.
-                            properties:
-                              from:
-                                default: Name
-                                description: |-
-                                  From specifies where we will obtain the availability zone for the
-                                  volume. The options are "Name" and "Machine". If "Name" is specified
-                                  then the Name field must also be specified. If "Machine" is specified
-                                  the volume will use the value of FailureDomain, if any, from the
-                                  associated Machine.
-                                enum:
-                                - Name
-                                - Machine
-                                type: string
-                              name:
-                                description: |-
-                                  Name is the name of a volume availability zone to use. It is required
-                                  if From is "Name". The volume availability zone name may not contain
-                                  spaces.
-                                minLength: 1
-                                pattern: ^[^ ]+$
-                                type: string
-                            type: object
-                            x-kubernetes-validations:
-                            - message: name is required when from is 'Name' or default
-                              rule: '!has(self.from) || self.from == ''Name'' ? has(self.name)
-                                : !has(self.name)'
-                          sizeGiB:
-                            description: SizeGiB is the size of the block device in
-                              gibibytes (GiB).
-                            minimum: 1
-                            type: integer
-                          type:
-                            description: |-
-                              Type is the Cinder volume type of the volume.
-                              If omitted, the default Cinder volume type that is configured in the OpenStack cloud
-                              will be used.
-                            type: string
-                        required:
-                        - sizeGiB
-                        type: object
-                      schedulerHintAdditionalProperties:
-                        description: |-
-                          SchedulerHintAdditionalProperties are arbitrary key/value pairs that provide additional hints
-                          to the OpenStack scheduler. These hints can influence how instances are placed on the infrastructure,
-                          such as specifying certain host aggregates or availability zones.
-                        items:
-                          description: |-
-                            SchedulerHintAdditionalProperty represents a single additional property for a scheduler hint.
-                            It includes a Name to identify the property and a Value that can be of various types.
-                          properties:
-                            name:
-                              description: |-
-                                Name is the name of the scheduler hint property.
-                                It is a unique identifier for the property.
-                              minLength: 1
-                              type: string
-                            value:
-                              description: |-
-                                Value is the value of the scheduler hint property, which can be of various types
-                                (e.g., bool, string, int). The type is indicated by the Value.Type field.
-                              properties:
-                                bool:
-                                  description: |-
-                                    Bool is the boolean value of the scheduler hint, used when Type is "Bool".
-                                    This field is required if type is 'Bool', and must not be set otherwise.
-                                  type: boolean
-                                number:
-                                  description: |-
-                                    Number is the integer value of the scheduler hint, used when Type is "Number".
-                                    This field is required if type is 'Number', and must not be set otherwise.
-                                  type: integer
-                                string:
-                                  description: |-
-                                    String is the string value of the scheduler hint, used when Type is "String".
-                                    This field is required if type is 'String', and must not be set otherwise.
-                                  maxLength: 255
-                                  minLength: 1
-                                  type: string
-                                type:
-                                  description: |-
-                                    Type represents the type of the value.
-                                    Valid values are Bool, String, and Number.
-                                  enum:
-                                  - Bool
-                                  - String
-                                  - Number
-                                  type: string
-                              required:
-                              - type
-                              type: object
-                              x-kubernetes-validations:
-                              - message: bool is required when type is Bool, and forbidden
-                                  otherwise
-                                rule: 'has(self.type) && self.type == ''Bool'' ? has(self.bool)
-                                  : !has(self.bool)'
-                              - message: number is required when type is Number, and
-                                  forbidden otherwise
-                                rule: 'has(self.type) && self.type == ''Number'' ?
-                                  has(self.number) : !has(self.number)'
-                              - message: string is required when type is String, and
-                                  forbidden otherwise
-                                rule: 'has(self.type) && self.type == ''String'' ?
-                                  has(self.string) : !has(self.string)'
-                          required:
-                          - name
-                          - value
-                          type: object
-                        type: array
-                        x-kubernetes-list-map-keys:
-                        - name
-                        x-kubernetes-list-type: map
-                      securityGroups:
-                        description: The names of the security groups to assign to
-                          the instance
-                        items:
-                          description: SecurityGroupParam specifies an OpenStack security
-                            group. It may be specified by ID or filter, but not both.
-                          maxProperties: 1
-                          minProperties: 1
-                          properties:
-                            filter:
-                              description: Filter specifies a query to select an OpenStack
-                                security group. If provided, cannot be empty.
-                              minProperties: 1
-                              properties:
-                                description:
-                                  type: string
-                                name:
-                                  type: string
-                                notTags:
-                                  description: |-
-                                    NotTags is a list of tags to filter by. If specified, resources which
-                                    contain all of the given tags will be excluded from the result.
-                                  items:
-                                    description: |-
-                                      NeutronTag represents a tag on a Neutron resource.
-                                      It may not be empty and may not contain commas.
-                                    minLength: 1
-                                    pattern: ^[^,]+$
-                                    type: string
-                                  type: array
-                                  x-kubernetes-list-type: set
-                                notTagsAny:
-                                  description: |-
-                                    NotTagsAny is a list of tags to filter by. If specified, resources
-                                    which contain any of the given tags will be excluded from the result.
-                                  items:
-                                    description: |-
-                                      NeutronTag represents a tag on a Neutron resource.
-                                      It may not be empty and may not contain commas.
-                                    minLength: 1
-                                    pattern: ^[^,]+$
-                                    type: string
-                                  type: array
-                                  x-kubernetes-list-type: set
-                                projectID:
-                                  type: string
-                                tags:
-                                  description: |-
-                                    Tags is a list of tags to filter by. If specified, the resource must
-                                    have all of the tags specified to be included in the result.
-                                  items:
-                                    description: |-
-                                      NeutronTag represents a tag on a Neutron resource.
-                                      It may not be empty and may not contain commas.
-                                    minLength: 1
-                                    pattern: ^[^,]+$
-                                    type: string
-                                  type: array
-                                  x-kubernetes-list-type: set
-                                tagsAny:
-                                  description: |-
-                                    TagsAny is a list of tags to filter by. If specified, the resource
-                                    must have at least one of the tags specified to be included in the
-                                    result.
-                                  items:
-                                    description: |-
-                                      NeutronTag represents a tag on a Neutron resource.
-                                      It may not be empty and may not contain commas.
-                                    minLength: 1
-                                    pattern: ^[^,]+$
-                                    type: string
-                                  type: array
-                                  x-kubernetes-list-type: set
-                              type: object
-                            id:
-                              description: ID is the ID of the security group to use.
-                                If ID is provided, the other filters cannot be provided.
-                                Must be in UUID format.
-                              format: uuid
-                              type: string
-                          type: object
-                        type: array
-                      serverGroup:
-                        description: The server group to assign the machine to.
-                        maxProperties: 1
-                        minProperties: 1
-                        properties:
-                          filter:
-                            description: Filter specifies a query to select an OpenStack
-                              server group. If provided, it cannot be empty.
-                            minProperties: 1
-                            properties:
-                              name:
-                                description: Name is the name of a server group to
-                                  look for.
-                                type: string
-                            type: object
-                          id:
-                            description: ID is the ID of the server group to use.
-                            format: uuid
-                            type: string
-                        type: object
-                      serverMetadata:
-                        description: Metadata mapping. Allows you to create a map
-                          of key value pairs to add to the server instance.
-                        items:
-                          properties:
-                            key:
-                              description: Key is the server metadata key
-                              maxLength: 255
-                              type: string
-                            value:
-                              description: Value is the server metadata value
-                              maxLength: 255
-                              type: string
-                          required:
-                          - key
-                          - value
-                          type: object
-                        type: array
-                        x-kubernetes-list-map-keys:
-                        - key
-                        x-kubernetes-list-type: map
-                      sshKeyName:
-                        description: The ssh key to inject in the instance
-                        type: string
-                      tags:
-                        description: |-
-                          Tags which will be added to the machine and all dependent resources
-                          which support them. These are in addition to Tags defined on the
-                          cluster.
-                          Requires Nova api 2.52 minimum!
-                        items:
-                          type: string
-                        type: array
-                        x-kubernetes-list-type: set
-                      trunk:
-                        description: Whether the server instance is created on a trunk
-                          port or not.
-                        type: boolean
-                    required:
-                    - image
-                    type: object
-                    x-kubernetes-validations:
-                    - message: at least one of flavor or flavorID must be set
-                      rule: (has(self.flavor) || has(self.flavorID))
-                required:
-                - spec
-                type: object
-            required:
-            - template
-            type: object
-        type: object
-    served: true
-    storage: true
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: null
-  storedVersions: null
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  annotations:
-    cert-manager.io/inject-ca-from: capo-system/capo-serving-cert
-    controller-gen.kubebuilder.io/version: v0.16.5
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: infrastructure-openstack
-    cluster.x-k8s.io/v1beta1: v1alpha7_v1beta1
-    clusterctl.cluster.x-k8s.io: ""
-  name: openstackservers.infrastructure.cluster.x-k8s.io
-spec:
-  group: infrastructure.cluster.x-k8s.io
-  names:
-    categories:
-    - cluster-api
-    kind: OpenStackServer
-    listKind: OpenStackServerList
-    plural: openstackservers
-    shortNames:
-    - oss
-    singular: openstackserver
-  scope: Namespaced
-  versions:
-  - additionalPrinterColumns:
-    - description: OpenStack instance state
-      jsonPath: .status.instanceState
-      name: InstanceState
-      type: string
-    - description: OpenStack instance ready status
-      jsonPath: .status.ready
-      name: Ready
-      type: string
-    - description: OpenStack instance ID
-      jsonPath: .status.instanceID
-      name: InstanceID
-      type: string
-    - description: Time duration since creation of OpenStack instance
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    name: v1alpha1
-    schema:
-      openAPIV3Schema:
-        description: OpenStackServer is the Schema for the openstackservers API.
-        properties:
-          apiVersion:
-            description: |-
-              APIVersion defines the versioned schema of this representation of an object.
-              Servers should convert recognized schemas to the latest internal value, and
-              may reject unrecognized values.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-            type: string
-          kind:
-            description: |-
-              Kind is a string value representing the REST resource this object represents.
-              Servers may infer this from the endpoint the client submits requests to.
-              Cannot be updated.
-              In CamelCase.
-              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: OpenStackServerSpec defines the desired state of OpenStackServer.
-            properties:
-              additionalBlockDevices:
-                description: AdditionalBlockDevices is a list of specifications for
-                  additional block devices to attach to the server instance.
-                items:
-                  description: AdditionalBlockDevice is a block device to attach to
-                    the server.
-                  properties:
-                    name:
-                      description: |-
-                        Name of the block device in the context of a machine.
-                        If the block device is a volume, the Cinder volume will be named
-                        as a combination of the machine name and this name.
-                        Also, this name will be used for tagging the block device.
-                        Information about the block device tag can be obtained from the OpenStack
-                        metadata API or the config drive.
-                        Name cannot be 'root', which is reserved for the root volume.
-                      type: string
-                    sizeGiB:
-                      description: SizeGiB is the size of the block device in gibibytes
-                        (GiB).
-                      minimum: 1
-                      type: integer
-                    storage:
-                      description: |-
-                        Storage specifies the storage type of the block device and
-                        additional storage options.
-                      properties:
-                        type:
-                          description: |-
-                            Type is the type of block device to create.
-                            This can be either "Volume" or "Local".
-                          type: string
-                        volume:
-                          description: Volume contains additional storage options
-                            for a volume block device.
-                          properties:
-                            availabilityZone:
-                              description: |-
-                                AvailabilityZone is the volume availability zone to create the volume
-                                in. If not specified, the volume will be created without an explicit
-                                availability zone.
-                              properties:
-                                from:
-                                  default: Name
-                                  description: |-
-                                    From specifies where we will obtain the availability zone for the
-                                    volume. The options are "Name" and "Machine". If "Name" is specified
-                                    then the Name field must also be specified. If "Machine" is specified
-                                    the volume will use the value of FailureDomain, if any, from the
-                                    associated Machine.
-                                  enum:
-                                  - Name
-                                  - Machine
-                                  type: string
-                                name:
-                                  description: |-
-                                    Name is the name of a volume availability zone to use. It is required
-                                    if From is "Name". The volume availability zone name may not contain
-                                    spaces.
-                                  minLength: 1
-                                  pattern: ^[^ ]+$
-                                  type: string
-                              type: object
-                              x-kubernetes-validations:
-                              - message: name is required when from is 'Name' or default
-                                rule: '!has(self.from) || self.from == ''Name'' ?
-                                  has(self.name) : !has(self.name)'
-                            type:
-                              description: |-
-                                Type is the Cinder volume type of the volume.
-                                If omitted, the default Cinder volume type that is configured in the OpenStack cloud
-                                will be used.
-                              type: string
-                          type: object
-                      required:
-                      - type
-                      type: object
-                  required:
-                  - name
-                  - sizeGiB
-                  - storage
-                  type: object
-                type: array
-                x-kubernetes-list-map-keys:
-                - name
-                x-kubernetes-list-type: map
-              availabilityZone:
-                description: AvailabilityZone is the availability zone in which to
-                  create the server instance.
-                type: string
-              configDrive:
-                description: ConfigDrive is a flag to enable config drive for the
-                  server instance.
-                type: boolean
-              flavor:
-                description: The flavor reference for the flavor for the server instance.
-                minLength: 1
-                type: string
-              flavorID:
-                description: |-
-                  FlavorID allows flavors to be specified by ID.  This field takes precedence
-                  over Flavor.
-                minLength: 1
-                type: string
-              floatingIPPoolRef:
-                description: FloatingIPPoolRef is a reference to a FloatingIPPool
-                  to allocate a floating IP from.
-                properties:
-                  apiGroup:
-                    description: |-
-                      APIGroup is the group for the resource being referenced.
-                      If APIGroup is not specified, the specified Kind must be in the core API group.
-                      For any other third-party types, APIGroup is required.
-                    type: string
-                  kind:
-                    description: Kind is the type of resource being referenced
-                    type: string
-                  name:
-                    description: Name is the name of resource being referenced
-                    type: string
-                required:
-                - kind
-                - name
-                type: object
-                x-kubernetes-map-type: atomic
-              identityRef:
-                description: IdentityRef is a reference to a secret holding OpenStack
-                  credentials.
-                properties:
-                  cloudName:
-                    description: CloudName specifies the name of the entry in the
-                      clouds.yaml file to use.
-                    type: string
-                  name:
-                    description: |-
-                      Name is the name of a secret in the same namespace as the resource being provisioned.
-                      The secret must contain a key named `clouds.yaml` which contains an OpenStack clouds.yaml file.
-                      The secret may optionally contain a key named `cacert` containing a PEM-encoded CA certificate.
-                    type: string
-                  region:
-                    description: |-
-                      Region specifies an OpenStack region to use. If specified, it overrides
-                      any value in clouds.yaml. If specified for an OpenStackMachine, its
-                      value will be included in providerID.
-                    type: string
-                required:
-                - cloudName
-                - name
-                type: object
-                x-kubernetes-validations:
-                - message: region is immutable
-                  rule: (!has(self.region) && !has(oldSelf.region)) || self.region
-                    == oldSelf.region
-              image:
-                description: The image to use for the server instance.
-                maxProperties: 1
-                minProperties: 1
-                properties:
-                  filter:
-                    description: |-
-                      Filter describes a query for an image. If specified, the combination
-                      of name and tags must return a single matching image or an error will
-                      be raised.
-                    minProperties: 1
-                    properties:
-                      name:
-                        description: The name of the desired image. If specified,
-                          the combination of name and tags must return a single matching
-                          image or an error will be raised.
-                        type: string
-                      tags:
-                        description: The tags associated with the desired image. If
-                          specified, the combination of name and tags must return
-                          a single matching image or an error will be raised.
-                        items:
-                          type: string
-                        type: array
-                        x-kubernetes-list-type: set
-                    type: object
-                  id:
-                    description: ID is the uuid of the image. ID will not be validated
-                      before use.
-                    format: uuid
-                    type: string
-                  imageRef:
-                    description: |-
-                      ImageRef is a reference to an ORC Image in the same namespace as the
-                      referring object.
-                    properties:
-                      name:
-                        description: Name is the name of the referenced resource
-                        type: string
-                    required:
-                    - name
-                    type: object
-                type: object
-              ports:
-                description: Ports to be attached to the server instance.
-                items:
-                  properties:
-                    adminStateUp:
-                      description: AdminStateUp specifies whether the port should
-                        be created in the up (true) or down (false) state. The default
-                        is up.
-                      type: boolean
-                    allowedAddressPairs:
-                      description: |-
-                        AllowedAddressPairs is a list of address pairs which Neutron will
-                        allow the port to send traffic from in addition to the port's
-                        addresses. If not specified, the MAC Address will be the MAC Address
-                        of the port. Depending on the configuration of Neutron, it may be
-                        supported to specify a CIDR instead of a specific IP address.
-                      items:
-                        properties:
-                          ipAddress:
-                            description: |-
-                              IPAddress is the IP address of the allowed address pair. Depending on
-                              the configuration of Neutron, it may be supported to specify a CIDR
-                              instead of a specific IP address.
-                            type: string
-                          macAddress:
-                            description: |-
-                              MACAddress is the MAC address of the allowed address pair. If not
-                              specified, the MAC address will be the MAC address of the port.
-                            type: string
-                        required:
-                        - ipAddress
-                        type: object
-                      type: array
-                    description:
-                      description: Description is a human-readable description for
-                        the port.
-                      type: string
-                    disablePortSecurity:
-                      description: |-
-                        DisablePortSecurity enables or disables the port security when set.
-                        When not set, it takes the value of the corresponding field at the network level.
-                      type: boolean
-                    fixedIPs:
-                      description: FixedIPs is a list of pairs of subnet and/or IP
-                        address to assign to the port. If specified, these must be
-                        subnets of the port's network.
-                      items:
-                        properties:
-                          ipAddress:
-                            description: |-
-                              IPAddress is a specific IP address to assign to the port. If Subnet
-                              is also specified, IPAddress must be a valid IP address in the
-                              subnet. If Subnet is not specified, IPAddress must be a valid IP
-                              address in any subnet of the port's network.
-                            type: string
-                          subnet:
-                            description: |-
-                              Subnet is an openstack subnet query that will return the id of a subnet to create
-                              the fixed IP of a port in. This query must not return more than one subnet.
-                            maxProperties: 1
-                            minProperties: 1
-                            properties:
-                              filter:
-                                description: Filter specifies a filter to select the
-                                  subnet. It must match exactly one subnet.
-                                minProperties: 1
-                                properties:
-                                  cidr:
-                                    type: string
-                                  description:
-                                    type: string
-                                  gatewayIP:
-                                    type: string
-                                  ipVersion:
-                                    type: integer
-                                  ipv6AddressMode:
-                                    type: string
-                                  ipv6RAMode:
-                                    type: string
-                                  name:
-                                    type: string
-                                  notTags:
-                                    description: |-
-                                      NotTags is a list of tags to filter by. If specified, resources which
-                                      contain all of the given tags will be excluded from the result.
-                                    items:
-                                      description: |-
-                                        NeutronTag represents a tag on a Neutron resource.
-                                        It may not be empty and may not contain commas.
-                                      minLength: 1
-                                      pattern: ^[^,]+$
-                                      type: string
-                                    type: array
-                                    x-kubernetes-list-type: set
-                                  notTagsAny:
-                                    description: |-
-                                      NotTagsAny is a list of tags to filter by. If specified, resources
-                                      which contain any of the given tags will be excluded from the result.
-                                    items:
-                                      description: |-
-                                        NeutronTag represents a tag on a Neutron resource.
-                                        It may not be empty and may not contain commas.
-                                      minLength: 1
-                                      pattern: ^[^,]+$
-                                      type: string
-                                    type: array
-                                    x-kubernetes-list-type: set
-                                  projectID:
-                                    type: string
-                                  tags:
-                                    description: |-
-                                      Tags is a list of tags to filter by. If specified, the resource must
-                                      have all of the tags specified to be included in the result.
-                                    items:
-                                      description: |-
-                                        NeutronTag represents a tag on a Neutron resource.
-                                        It may not be empty and may not contain commas.
-                                      minLength: 1
-                                      pattern: ^[^,]+$
-                                      type: string
-                                    type: array
-                                    x-kubernetes-list-type: set
-                                  tagsAny:
-                                    description: |-
-                                      TagsAny is a list of tags to filter by. If specified, the resource
-                                      must have at least one of the tags specified to be included in the
-                                      result.
-                                    items:
-                                      description: |-
-                                        NeutronTag represents a tag on a Neutron resource.
-                                        It may not be empty and may not contain commas.
-                                      minLength: 1
-                                      pattern: ^[^,]+$
-                                      type: string
-                                    type: array
-                                    x-kubernetes-list-type: set
-                                type: object
-                              id:
-                                description: ID is the uuid of the subnet. It will
-                                  not be validated.
-                                format: uuid
-                                type: string
-                            type: object
-                        type: object
-                      type: array
-                      x-kubernetes-list-type: atomic
-                    hostID:
-                      description: HostID specifies the ID of the host where the port
-                        resides.
-                      type: string
-                    macAddress:
-                      description: MACAddress specifies the MAC address of the port.
-                        If not specified, the MAC address will be generated.
-                      type: string
-                    nameSuffix:
-                      description: NameSuffix will be appended to the name of the
-                        port if specified. If unspecified, instead the 0-based index
-                        of the port in the list is used.
-                      type: string
-                    network:
-                      description: |-
-                        Network is a query for an openstack network that the port will be created or discovered on.
-                        This will fail if the query returns more than one network.
-                      maxProperties: 1
-                      minProperties: 1
-                      properties:
-                        filter:
-                          description: Filter specifies a filter to select an OpenStack
-                            network. If provided, cannot be empty.
-                          minProperties: 1
-                          properties:
-                            description:
-                              type: string
-                            name:
-                              type: string
-                            notTags:
-                              description: |-
-                                NotTags is a list of tags to filter by. If specified, resources which
-                                contain all of the given tags will be excluded from the result.
-                              items:
-                                description: |-
-                                  NeutronTag represents a tag on a Neutron resource.
-                                  It may not be empty and may not contain commas.
-                                minLength: 1
-                                pattern: ^[^,]+$
-                                type: string
-                              type: array
-                              x-kubernetes-list-type: set
-                            notTagsAny:
-                              description: |-
-                                NotTagsAny is a list of tags to filter by. If specified, resources
-                                which contain any of the given tags will be excluded from the result.
-                              items:
-                                description: |-
-                                  NeutronTag represents a tag on a Neutron resource.
-                                  It may not be empty and may not contain commas.
-                                minLength: 1
-                                pattern: ^[^,]+$
-                                type: string
-                              type: array
-                              x-kubernetes-list-type: set
-                            projectID:
-                              type: string
-                            tags:
-                              description: |-
-                                Tags is a list of tags to filter by. If specified, the resource must
-                                have all of the tags specified to be included in the result.
-                              items:
-                                description: |-
-                                  NeutronTag represents a tag on a Neutron resource.
-                                  It may not be empty and may not contain commas.
-                                minLength: 1
-                                pattern: ^[^,]+$
-                                type: string
-                              type: array
-                              x-kubernetes-list-type: set
-                            tagsAny:
-                              description: |-
-                                TagsAny is a list of tags to filter by. If specified, the resource
-                                must have at least one of the tags specified to be included in the
-                                result.
-                              items:
-                                description: |-
-                                  NeutronTag represents a tag on a Neutron resource.
-                                  It may not be empty and may not contain commas.
-                                minLength: 1
-                                pattern: ^[^,]+$
-                                type: string
-                              type: array
-                              x-kubernetes-list-type: set
-                          type: object
-                        id:
-                          description: ID is the ID of the network to use. If ID is
-                            provided, the other filters cannot be provided. Must be
-                            in UUID format.
-                          format: uuid
-                          type: string
-                      type: object
-                    profile:
-                      description: |-
-                        Profile is a set of key-value pairs that are used for binding
-                        details. We intentionally don't expose this as a map[string]string
-                        because we only want to enable the users to set the values of the
-                        keys that are known to work in OpenStack Networking API.  See
-                        https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
-                        To set profiles, your tenant needs permissions rule:create_port, and
-                        rule:create_port:binding:profile
-                      properties:
-                        ovsHWOffload:
-                          description: |-
-                            OVSHWOffload enables or disables the OVS hardware offload feature.
-                            This flag is not required on OpenStack clouds since Yoga as Nova will set it automatically when the port is attached.
-                            See: https://bugs.launchpad.net/nova/+bug/2020813
-                          type: boolean
-                        trustedVF:
-                          description: TrustedVF enables or disables the “trusted
-                            mode” for the VF.
-                          type: boolean
-                      type: object
-                    propagateUplinkStatus:
-                      description: PropageteUplinkStatus enables or disables the propagate
-                        uplink status on the port.
-                      type: boolean
-                    securityGroups:
-                      description: SecurityGroups is a list of the names, uuids, filters
-                        or any combination these of the security groups to assign
-                        to the instance.
-                      items:
-                        description: SecurityGroupParam specifies an OpenStack security
-                          group. It may be specified by ID or filter, but not both.
-                        maxProperties: 1
-                        minProperties: 1
-                        properties:
-                          filter:
-                            description: Filter specifies a query to select an OpenStack
-                              security group. If provided, cannot be empty.
-                            minProperties: 1
-                            properties:
-                              description:
-                                type: string
-                              name:
-                                type: string
-                              notTags:
-                                description: |-
-                                  NotTags is a list of tags to filter by. If specified, resources which
-                                  contain all of the given tags will be excluded from the result.
-                                items:
-                                  description: |-
-                                    NeutronTag represents a tag on a Neutron resource.
-                                    It may not be empty and may not contain commas.
-                                  minLength: 1
-                                  pattern: ^[^,]+$
-                                  type: string
-                                type: array
-                                x-kubernetes-list-type: set
-                              notTagsAny:
-                                description: |-
-                                  NotTagsAny is a list of tags to filter by. If specified, resources
-                                  which contain any of the given tags will be excluded from the result.
-                                items:
-                                  description: |-
-                                    NeutronTag represents a tag on a Neutron resource.
-                                    It may not be empty and may not contain commas.
-                                  minLength: 1
-                                  pattern: ^[^,]+$
-                                  type: string
-                                type: array
-                                x-kubernetes-list-type: set
-                              projectID:
-                                type: string
-                              tags:
-                                description: |-
-                                  Tags is a list of tags to filter by. If specified, the resource must
-                                  have all of the tags specified to be included in the result.
-                                items:
-                                  description: |-
-                                    NeutronTag represents a tag on a Neutron resource.
-                                    It may not be empty and may not contain commas.
-                                  minLength: 1
-                                  pattern: ^[^,]+$
-                                  type: string
-                                type: array
-                                x-kubernetes-list-type: set
-                              tagsAny:
-                                description: |-
-                                  TagsAny is a list of tags to filter by. If specified, the resource
-                                  must have at least one of the tags specified to be included in the
-                                  result.
-                                items:
-                                  description: |-
-                                    NeutronTag represents a tag on a Neutron resource.
-                                    It may not be empty and may not contain commas.
-                                  minLength: 1
-                                  pattern: ^[^,]+$
-                                  type: string
-                                type: array
-                                x-kubernetes-list-type: set
-                            type: object
-                          id:
-                            description: ID is the ID of the security group to use.
-                              If ID is provided, the other filters cannot be provided.
-                              Must be in UUID format.
-                            format: uuid
-                            type: string
-                        type: object
-                      type: array
-                      x-kubernetes-list-type: atomic
-                    tags:
-                      description: |-
-                        Tags applied to the port (and corresponding trunk, if a trunk is configured.)
-                        These tags are applied in addition to the instance's tags, which will also be applied to the port.
-                      items:
-                        type: string
-                      type: array
-                      x-kubernetes-list-type: set
-                    trunk:
-                      description: |-
-                        Trunk specifies whether trunking is enabled at the port level. If not
-                        provided the value is inherited from the machine, or false for a
-                        bastion host.
-                      type: boolean
-                    valueSpecs:
-                      description: |-
-                        Value specs are extra parameters to include in the API request with OpenStack.
-                        This is an extension point for the API, so what they do and if they are supported,
-                        depends on the specific OpenStack implementation.
-                      items:
-                        description: ValueSpec represents a single value_spec key-value
-                          pair.
-                        properties:
-                          key:
-                            description: Key is the key in the key-value pair.
-                            type: string
-                          name:
-                            description: |-
-                              Name is the name of the key-value pair.
-                              This is just for identifying the pair and will not be sent to the OpenStack API.
-                            type: string
-                          value:
-                            description: Value is the value in the key-value pair.
-                            type: string
-                        required:
-                        - key
-                        - name
-                        - value
-                        type: object
-                      type: array
-                      x-kubernetes-list-map-keys:
-                      - name
-                      x-kubernetes-list-type: map
-                    vnicType:
-                      description: |-
-                        VNICType specifies the type of vNIC which this port should be
-                        attached to. This is used to determine which mechanism driver(s) to
-                        be used to bind the port. The valid values are normal, macvtap,
-                        direct, baremetal, direct-physical, virtio-forwarder, smart-nic and
-                        remote-managed, although these values will not be validated in this
-                        API to ensure compatibility with future neutron changes or custom
-                        implementations. What type of vNIC is actually available depends on
-                        deployments. If not specified, the Neutron default value is used.
-                      type: string
-                  type: object
-                type: array
-              rootVolume:
-                description: RootVolume is the specification for the root volume of
-                  the server instance.
-                properties:
-                  availabilityZone:
-                    description: |-
-                      AvailabilityZone is the volume availability zone to create the volume
-                      in. If not specified, the volume will be created without an explicit
-                      availability zone.
-                    properties:
-                      from:
-                        default: Name
-                        description: |-
-                          From specifies where we will obtain the availability zone for the
-                          volume. The options are "Name" and "Machine". If "Name" is specified
-                          then the Name field must also be specified. If "Machine" is specified
-                          the volume will use the value of FailureDomain, if any, from the
-                          associated Machine.
-                        enum:
-                        - Name
-                        - Machine
-                        type: string
-                      name:
-                        description: |-
-                          Name is the name of a volume availability zone to use. It is required
-                          if From is "Name". The volume availability zone name may not contain
-                          spaces.
-                        minLength: 1
-                        pattern: ^[^ ]+$
-                        type: string
-                    type: object
-                    x-kubernetes-validations:
-                    - message: name is required when from is 'Name' or default
-                      rule: '!has(self.from) || self.from == ''Name'' ? has(self.name)
-                        : !has(self.name)'
-                  sizeGiB:
-                    description: SizeGiB is the size of the block device in gibibytes
-                      (GiB).
-                    minimum: 1
-                    type: integer
-                  type:
-                    description: |-
-                      Type is the Cinder volume type of the volume.
-                      If omitted, the default Cinder volume type that is configured in the OpenStack cloud
-                      will be used.
-                    type: string
-                required:
-                - sizeGiB
-                type: object
-              schedulerHintAdditionalProperties:
-                description: |-
-                  SchedulerHintAdditionalProperties are arbitrary key/value pairs that provide additional hints
-                  to the OpenStack scheduler. These hints can influence how instances are placed on the infrastructure,
-                  such as specifying certain host aggregates or availability zones.
-                items:
-                  description: |-
-                    SchedulerHintAdditionalProperty represents a single additional property for a scheduler hint.
-                    It includes a Name to identify the property and a Value that can be of various types.
-                  properties:
-                    name:
-                      description: |-
-                        Name is the name of the scheduler hint property.
-                        It is a unique identifier for the property.
-                      minLength: 1
-                      type: string
-                    value:
-                      description: |-
-                        Value is the value of the scheduler hint property, which can be of various types
-                        (e.g., bool, string, int). The type is indicated by the Value.Type field.
-                      properties:
-                        bool:
-                          description: |-
-                            Bool is the boolean value of the scheduler hint, used when Type is "Bool".
-                            This field is required if type is 'Bool', and must not be set otherwise.
-                          type: boolean
-                        number:
-                          description: |-
-                            Number is the integer value of the scheduler hint, used when Type is "Number".
-                            This field is required if type is 'Number', and must not be set otherwise.
-                          type: integer
-                        string:
-                          description: |-
-                            String is the string value of the scheduler hint, used when Type is "String".
-                            This field is required if type is 'String', and must not be set otherwise.
-                          maxLength: 255
-                          minLength: 1
-                          type: string
-                        type:
-                          description: |-
-                            Type represents the type of the value.
-                            Valid values are Bool, String, and Number.
-                          enum:
-                          - Bool
-                          - String
-                          - Number
-                          type: string
-                      required:
-                      - type
-                      type: object
-                      x-kubernetes-validations:
-                      - message: bool is required when type is Bool, and forbidden
-                          otherwise
-                        rule: 'has(self.type) && self.type == ''Bool'' ? has(self.bool)
-                          : !has(self.bool)'
-                      - message: number is required when type is Number, and forbidden
-                          otherwise
-                        rule: 'has(self.type) && self.type == ''Number'' ? has(self.number)
-                          : !has(self.number)'
-                      - message: string is required when type is String, and forbidden
-                          otherwise
-                        rule: 'has(self.type) && self.type == ''String'' ? has(self.string)
-                          : !has(self.string)'
-                  required:
-                  - name
-                  - value
-                  type: object
-                type: array
-                x-kubernetes-list-map-keys:
-                - name
-                x-kubernetes-list-type: map
-              securityGroups:
-                description: SecurityGroups is a list of security groups names to
-                  assign to the instance.
-                items:
-                  description: SecurityGroupParam specifies an OpenStack security
-                    group. It may be specified by ID or filter, but not both.
-                  maxProperties: 1
-                  minProperties: 1
-                  properties:
-                    filter:
-                      description: Filter specifies a query to select an OpenStack
-                        security group. If provided, cannot be empty.
-                      minProperties: 1
-                      properties:
-                        description:
-                          type: string
-                        name:
-                          type: string
-                        notTags:
-                          description: |-
-                            NotTags is a list of tags to filter by. If specified, resources which
-                            contain all of the given tags will be excluded from the result.
-                          items:
-                            description: |-
-                              NeutronTag represents a tag on a Neutron resource.
-                              It may not be empty and may not contain commas.
-                            minLength: 1
-                            pattern: ^[^,]+$
-                            type: string
-                          type: array
-                          x-kubernetes-list-type: set
-                        notTagsAny:
-                          description: |-
-                            NotTagsAny is a list of tags to filter by. If specified, resources
-                            which contain any of the given tags will be excluded from the result.
-                          items:
-                            description: |-
-                              NeutronTag represents a tag on a Neutron resource.
-                              It may not be empty and may not contain commas.
-                            minLength: 1
-                            pattern: ^[^,]+$
-                            type: string
-                          type: array
-                          x-kubernetes-list-type: set
-                        projectID:
-                          type: string
-                        tags:
-                          description: |-
-                            Tags is a list of tags to filter by. If specified, the resource must
-                            have all of the tags specified to be included in the result.
-                          items:
-                            description: |-
-                              NeutronTag represents a tag on a Neutron resource.
-                              It may not be empty and may not contain commas.
-                            minLength: 1
-                            pattern: ^[^,]+$
-                            type: string
-                          type: array
-                          x-kubernetes-list-type: set
-                        tagsAny:
-                          description: |-
-                            TagsAny is a list of tags to filter by. If specified, the resource
-                            must have at least one of the tags specified to be included in the
-                            result.
-                          items:
-                            description: |-
-                              NeutronTag represents a tag on a Neutron resource.
-                              It may not be empty and may not contain commas.
-                            minLength: 1
-                            pattern: ^[^,]+$
-                            type: string
-                          type: array
-                          x-kubernetes-list-type: set
-                      type: object
-                    id:
-                      description: ID is the ID of the security group to use. If ID
-                        is provided, the other filters cannot be provided. Must be
-                        in UUID format.
-                      format: uuid
-                      type: string
-                  type: object
-                type: array
-              serverGroup:
-                description: ServerGroup is the server group to which the server instance
-                  belongs.
-                maxProperties: 1
-                minProperties: 1
-                properties:
-                  filter:
-                    description: Filter specifies a query to select an OpenStack server
-                      group. If provided, it cannot be empty.
-                    minProperties: 1
-                    properties:
-                      name:
-                        description: Name is the name of a server group to look for.
-                        type: string
-                    type: object
-                  id:
-                    description: ID is the ID of the server group to use.
-                    format: uuid
-                    type: string
-                type: object
-              serverMetadata:
-                description: ServerMetadata is a map of key value pairs to add to
-                  the server instance.
-                items:
-                  properties:
-                    key:
-                      description: Key is the server metadata key
-                      maxLength: 255
-                      type: string
-                    value:
-                      description: Value is the server metadata value
-                      maxLength: 255
-                      type: string
-                  required:
-                  - key
-                  - value
-                  type: object
-                type: array
-                x-kubernetes-list-map-keys:
-                - key
-                x-kubernetes-list-type: map
-              sshKeyName:
-                description: SSHKeyName is the name of the SSH key to inject in the
-                  instance.
-                type: string
-              tags:
-                description: |-
-                  Tags which will be added to the machine and all dependent resources
-                  which support them. These are in addition to Tags defined on the
-                  cluster.
-                  Requires Nova api 2.52 minimum!
-                items:
-                  type: string
-                type: array
-                x-kubernetes-list-type: set
-              trunk:
-                description: Trunk is a flag to indicate if the server instance is
-                  created on a trunk port or not.
-                type: boolean
-              userDataRef:
-                description: |-
-                  UserDataRef is a reference to a secret containing the user data to
-                  be injected into the server instance.
-                properties:
-                  name:
-                    default: ""
-                    description: |-
-                      Name of the referent.
-                      This field is effectively required, but due to backwards compatibility is
-                      allowed to be empty. Instances of this type with an empty value here are
-                      almost certainly wrong.
-                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-                    type: string
-                type: object
-                x-kubernetes-map-type: atomic
-            required:
-            - identityRef
-            - image
-            - ports
-            - sshKeyName
-            type: object
-            x-kubernetes-validations:
-            - message: at least one of flavor or flavorID must be set
-              rule: (has(self.flavor) || has(self.flavorID))
-          status:
-            description: OpenStackServerStatus defines the observed state of OpenStackServer.
-            properties:
-              addresses:
-                description: Addresses is the list of addresses of the server instance.
-                items:
-                  description: NodeAddress contains information for the node's address.
-                  properties:
-                    address:
-                      description: The node address.
-                      type: string
-                    type:
-                      description: Node address type, one of Hostname, ExternalIP
-                        or InternalIP.
-                      type: string
-                  required:
-                  - address
-                  - type
-                  type: object
-                type: array
-              conditions:
-                description: Conditions defines current service state of the OpenStackServer.
-                items:
-                  description: Condition defines an observation of a Cluster API resource
-                    operational state.
-                  properties:
-                    lastTransitionTime:
-                      description: |-
-                        Last time the condition transitioned from one status to another.
-                        This should be when the underlying condition changed. If that is not known, then using the time when
-                        the API field changed is acceptable.
-                      format: date-time
-                      type: string
-                    message:
-                      description: |-
-                        A human readable message indicating details about the transition.
-                        This field may be empty.
-                      type: string
-                    reason:
-                      description: |-
-                        The reason for the condition's last transition in CamelCase.
-                        The specific API may choose whether or not this field is considered a guaranteed API.
-                        This field may be empty.
-                      type: string
-                    severity:
-                      description: |-
-                        severity provides an explicit classification of Reason code, so the users or machines can immediately
-                        understand the current situation and act accordingly.
-                        The Severity field MUST be set only when Status=False.
-                      type: string
-                    status:
-                      description: status of the condition, one of True, False, Unknown.
-                      type: string
-                    type:
-                      description: |-
-                        type of condition in CamelCase or in foo.example.com/CamelCase.
-                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
-                        can be useful (see .node.status.conditions), the ability to deconflict is important.
-                      type: string
-                  required:
-                  - lastTransitionTime
-                  - status
-                  - type
-                  type: object
-                type: array
-              instanceID:
-                description: InstanceID is the ID of the server instance.
-                type: string
-              instanceState:
-                description: InstanceState is the state of the server instance.
-                type: string
-              ready:
-                default: false
-                description: Ready is true when the OpenStack server is ready.
-                type: boolean
-              resolved:
-                description: |-
-                  Resolved contains parts of the machine spec with all external
-                  references fully resolved.
-                properties:
-                  flavorID:
-                    description: FlavorID is the ID of the flavor to use.
-                    type: string
-                  imageID:
-                    description: ImageID is the ID of the image to use for the server
-                      and is calculated based on ImageFilter.
-                    type: string
-                  ports:
-                    description: Ports is the fully resolved list of ports to create
-                      for the server.
-                    items:
-                      description: ResolvedPortSpec is a PortOpts with all contained
-                        references fully resolved.
-                      properties:
-                        adminStateUp:
-                          description: AdminStateUp specifies whether the port should
-                            be created in the up (true) or down (false) state. The
-                            default is up.
-                          type: boolean
-                        allowedAddressPairs:
-                          description: |-
-                            AllowedAddressPairs is a list of address pairs which Neutron will
-                            allow the port to send traffic from in addition to the port's
-                            addresses. If not specified, the MAC Address will be the MAC Address
-                            of the port. Depending on the configuration of Neutron, it may be
-                            supported to specify a CIDR instead of a specific IP address.
-                          items:
-                            properties:
-                              ipAddress:
-                                description: |-
-                                  IPAddress is the IP address of the allowed address pair. Depending on
-                                  the configuration of Neutron, it may be supported to specify a CIDR
-                                  instead of a specific IP address.
-                                type: string
-                              macAddress:
-                                description: |-
-                                  MACAddress is the MAC address of the allowed address pair. If not
-                                  specified, the MAC address will be the MAC address of the port.
-                                type: string
-                            required:
-                            - ipAddress
-                            type: object
-                          type: array
-                        description:
-                          description: Description is a human-readable description
-                            for the port.
-                          type: string
-                        disablePortSecurity:
-                          description: |-
-                            DisablePortSecurity enables or disables the port security when set.
-                            When not set, it takes the value of the corresponding field at the network level.
-                          type: boolean
-                        fixedIPs:
-                          description: FixedIPs is a list of pairs of subnet and/or
-                            IP address to assign to the port. If specified, these
-                            must be subnets of the port's network.
-                          items:
-                            description: ResolvedFixedIP is a FixedIP with the Subnet
-                              resolved to an ID.
-                            properties:
-                              ipAddress:
-                                description: |-
-                                  IPAddress is a specific IP address to assign to the port. If SubnetID
-                                  is also specified, IPAddress must be a valid IP address in the
-                                  subnet. If Subnet is not specified, IPAddress must be a valid IP
-                                  address in any subnet of the port's network.
-                                type: string
-                              subnet:
-                                description: SubnetID is the id of a subnet to create
-                                  the fixed IP of a port in.
-                                type: string
-                            type: object
-                          type: array
-                          x-kubernetes-list-type: atomic
-                        hostID:
-                          description: HostID specifies the ID of the host where the
-                            port resides.
-                          type: string
-                        macAddress:
-                          description: MACAddress specifies the MAC address of the
-                            port. If not specified, the MAC address will be generated.
-                          type: string
-                        name:
-                          description: Name is the name of the port.
-                          type: string
-                        networkID:
-                          description: NetworkID is the ID of the network the port
-                            will be created in.
-                          type: string
-                        profile:
-                          description: |-
-                            Profile is a set of key-value pairs that are used for binding
-                            details. We intentionally don't expose this as a map[string]string
-                            because we only want to enable the users to set the values of the
-                            keys that are known to work in OpenStack Networking API.  See
-                            https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
-                            To set profiles, your tenant needs permissions rule:create_port, and
-                            rule:create_port:binding:profile
-                          properties:
-                            ovsHWOffload:
-                              description: |-
-                                OVSHWOffload enables or disables the OVS hardware offload feature.
-                                This flag is not required on OpenStack clouds since Yoga as Nova will set it automatically when the port is attached.
-                                See: https://bugs.launchpad.net/nova/+bug/2020813
-                              type: boolean
-                            trustedVF:
-                              description: TrustedVF enables or disables the “trusted
-                                mode” for the VF.
-                              type: boolean
-                          type: object
-                        propagateUplinkStatus:
-                          description: PropageteUplinkStatus enables or disables the
-                            propagate uplink status on the port.
-                          type: boolean
-                        securityGroups:
-                          description: SecurityGroups is a list of security group
-                            IDs to assign to the port.
-                          items:
-                            type: string
-                          type: array
-                          x-kubernetes-list-type: atomic
-                        tags:
-                          description: Tags applied to the port (and corresponding
-                            trunk, if a trunk is configured.)
-                          items:
-                            type: string
-                          type: array
-                          x-kubernetes-list-type: set
-                        trunk:
-                          description: Trunk specifies whether trunking is enabled
-                            at the port level.
-                          type: boolean
-                        valueSpecs:
-                          description: |-
-                            Value specs are extra parameters to include in the API request with OpenStack.
-                            This is an extension point for the API, so what they do and if they are supported,
-                            depends on the specific OpenStack implementation.
-                          items:
-                            description: ValueSpec represents a single value_spec
-                              key-value pair.
-                            properties:
-                              key:
-                                description: Key is the key in the key-value pair.
-                                type: string
-                              name:
-                                description: |-
-                                  Name is the name of the key-value pair.
-                                  This is just for identifying the pair and will not be sent to the OpenStack API.
-                                type: string
-                              value:
-                                description: Value is the value in the key-value pair.
-                                type: string
-                            required:
-                            - key
-                            - name
-                            - value
-                            type: object
-                          type: array
-                          x-kubernetes-list-map-keys:
-                          - name
-                          x-kubernetes-list-type: map
-                        vnicType:
-                          description: |-
-                            VNICType specifies the type of vNIC which this port should be
-                            attached to. This is used to determine which mechanism driver(s) to
-                            be used to bind the port. The valid values are normal, macvtap,
-                            direct, baremetal, direct-physical, virtio-forwarder, smart-nic and
-                            remote-managed, although these values will not be validated in this
-                            API to ensure compatibility with future neutron changes or custom
-                            implementations. What type of vNIC is actually available depends on
-                            deployments. If not specified, the Neutron default value is used.
-                          type: string
-                      required:
-                      - description
-                      - name
-                      - networkID
-                      type: object
-                    type: array
-                  serverGroupID:
-                    description: ServerGroupID is the ID of the server group the server
-                      should be added to and is calculated based on ServerGroupFilter.
-                    type: string
-                type: object
-              resources:
-                description: Resources contains references to OpenStack resources
-                  created for the machine.
-                properties:
-                  ports:
-                    description: Ports is the status of the ports created for the
-                      server.
-                    items:
-                      properties:
-                        id:
-                          description: ID is the unique identifier of the port.
-                          type: string
-                      required:
-                      - id
-                      type: object
-                    type: array
-                type: object
-            required:
-            - ready
-            type: object
-        type: object
-    served: true
-    storage: true
-    subresources:
-      status: {}
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: null
-  storedVersions: null
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: infrastructure-openstack
-    clusterctl.cluster.x-k8s.io: ""
-  name: capo-manager
-  namespace: capo-system
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: Role
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: infrastructure-openstack
-    clusterctl.cluster.x-k8s.io: ""
-  name: capo-leader-election-role
-  namespace: capo-system
-rules:
-- apiGroups:
-  - ""
-  resources:
-  - configmaps
-  verbs:
-  - get
-  - list
-  - watch
-  - create
-  - update
-  - patch
-  - delete
-- apiGroups:
-  - ""
-  resources:
-  - configmaps/status
-  verbs:
-  - get
-  - update
-  - patch
-- apiGroups:
-  - ""
-  resources:
-  - events
-  verbs:
-  - create
-- apiGroups:
-  - coordination.k8s.io
-  resources:
-  - leases
-  verbs:
-  - get
-  - list
-  - watch
-  - create
-  - update
-  - patch
-  - delete
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: infrastructure-openstack
-    clusterctl.cluster.x-k8s.io: ""
-  name: capo-manager-role
-rules:
-- apiGroups:
-  - ""
-  resources:
-  - events
-  verbs:
-  - create
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - ""
-  resources:
-  - secrets
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - authentication.k8s.io
-  resources:
-  - tokenreviews
-  verbs:
-  - create
-- apiGroups:
-  - authorization.k8s.io
-  resources:
-  - subjectaccessreviews
-  verbs:
-  - create
-- apiGroups:
-  - cluster.x-k8s.io
-  resources:
-  - clusters
-  - clusters/status
-  - machines
-  - machines/status
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - infrastructure.cluster.x-k8s.io
-  resources:
-  - openstackclusters
-  - openstackfloatingippools
-  - openstackmachines
-  - openstackservers
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - infrastructure.cluster.x-k8s.io
-  resources:
-  - openstackclusters/status
-  - openstackfloatingippools/status
-  - openstackmachines/status
-  - openstackservers/status
-  verbs:
-  - get
-  - patch
-  - update
-- apiGroups:
-  - ipam.cluster.x-k8s.io
-  resources:
-  - ipaddressclaims
-  - ipaddressclaims/status
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - ipam.cluster.x-k8s.io
-  resources:
-  - ipaddresses
-  - ipaddresses/status
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - update
-  - watch
-- apiGroups:
-  - openstack.k-orc.cloud
-  resources:
-  - images
-  verbs:
-  - get
-  - list
-  - watch
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: RoleBinding
-metadata:
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: infrastructure-openstack
-    clusterctl.cluster.x-k8s.io: ""
-  name: capo-leader-election-rolebinding
-  namespace: capo-system
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: Role
-  name: capo-leader-election-role
-subjects:
-- kind: ServiceAccount
-  name: capo-manager
-  namespace: capo-system
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: infrastructure-openstack
-    clusterctl.cluster.x-k8s.io: ""
-  name: capo-manager-rolebinding
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: ClusterRole
-  name: capo-manager-role
-subjects:
-- kind: ServiceAccount
-  name: capo-manager
-  namespace: capo-system
----
-apiVersion: v1
-kind: Service
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: infrastructure-openstack
-    clusterctl.cluster.x-k8s.io: ""
-  name: capo-webhook-service
-  namespace: capo-system
-spec:
-  ports:
-  - port: 443
-    targetPort: webhook-server
-  selector:
-    cluster.x-k8s.io/provider: infrastructure-openstack
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: infrastructure-openstack
-    clusterctl.cluster.x-k8s.io: ""
-    control-plane: capo-controller-manager
-  name: capo-controller-manager
-  namespace: capo-system
-spec:
-  replicas: 1
-  selector:
-    matchLabels:
-      cluster.x-k8s.io/provider: infrastructure-openstack
-      control-plane: capo-controller-manager
-  strategy: {}
-  template:
-    metadata:
-      creationTimestamp: null
-      labels:
-        cluster.x-k8s.io/provider: infrastructure-openstack
-        control-plane: capo-controller-manager
-    spec:
-      containers:
-      - args:
-        - --leader-elect
-        - --v=2
-        - --diagnostics-address=127.0.0.1:8080
-        - --insecure-diagnostics=true
-        command:
-        - /manager
-        image: registry.k8s.io/capi-openstack/capi-openstack-controller:v0.12.1
-        imagePullPolicy: IfNotPresent
-        livenessProbe:
-          httpGet:
-            path: /healthz
-            port: healthz
-        name: manager
-        ports:
-        - containerPort: 9443
-          name: webhook-server
-          protocol: TCP
-        - containerPort: 9440
-          name: healthz
-          protocol: TCP
-        readinessProbe:
-          httpGet:
-            path: /readyz
-            port: healthz
-        resources: {}
-        securityContext:
-          allowPrivilegeEscalation: false
-          capabilities:
-            drop:
-            - ALL
-          privileged: false
-          runAsGroup: 65532
-          runAsUser: 65532
-        terminationMessagePolicy: FallbackToLogsOnError
-        volumeMounts:
-        - mountPath: /tmp/k8s-webhook-server/serving-certs
-          name: cert
-          readOnly: true
-      securityContext:
-        runAsNonRoot: true
-        seccompProfile:
-          type: RuntimeDefault
-      serviceAccountName: capo-manager
-      terminationGracePeriodSeconds: 10
-      tolerations:
-      - effect: NoSchedule
-        key: node-role.kubernetes.io/master
-      - effect: NoSchedule
-        key: node-role.kubernetes.io/control-plane
-      volumes:
-      - name: cert
-        secret:
-          defaultMode: 420
-          secretName: capo-webhook-service-cert
-status: {}
----
-apiVersion: admissionregistration.k8s.io/v1
-kind: ValidatingWebhookConfiguration
-metadata:
-  annotations:
-    cert-manager.io/inject-ca-from: capo-system/capo-serving-cert
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: infrastructure-openstack
-    clusterctl.cluster.x-k8s.io: ""
-  name: capo-validating-webhook-configuration
-webhooks:
-- admissionReviewVersions:
-  - v1beta1
-  clientConfig:
-    service:
-      name: capo-webhook-service
-      namespace: capo-system
-      path: /validate-infrastructure-cluster-x-k8s-io-v1beta1-openstackcluster
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: validation.openstackcluster.infrastructure.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - infrastructure.cluster.x-k8s.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - openstackclusters
-  sideEffects: None
-- admissionReviewVersions:
-  - v1beta1
-  clientConfig:
-    service:
-      name: capo-webhook-service
-      namespace: capo-system
-      path: /validate-infrastructure-cluster-x-k8s-io-v1beta1-openstackclustertemplate
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: validation.openstackclustertemplate.infrastructure.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - infrastructure.cluster.x-k8s.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - openstackclustertemplates
-  sideEffects: None
-- admissionReviewVersions:
-  - v1beta1
-  clientConfig:
-    service:
-      name: capo-webhook-service
-      namespace: capo-system
-      path: /validate-infrastructure-cluster-x-k8s-io-v1beta1-openstackmachine
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: validation.openstackmachine.infrastructure.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - infrastructure.cluster.x-k8s.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - openstackmachines
-  sideEffects: None
-- admissionReviewVersions:
-  - v1beta1
-  clientConfig:
-    service:
-      name: capo-webhook-service
-      namespace: capo-system
-      path: /validate-infrastructure-cluster-x-k8s-io-v1beta1-openstackmachinetemplate
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: validation.openstackmachinetemplate.infrastructure.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - infrastructure.cluster.x-k8s.io
-    apiVersions:
-    - v1beta1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - openstackmachinetemplates
-  sideEffects: None
-- admissionReviewVersions:
-  - v1beta1
-  clientConfig:
-    service:
-      name: capo-webhook-service
-      namespace: capo-system
-      path: /validate-infrastructure-cluster-x-k8s-io-v1alpha1-openstackserver
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: validation.openstackserver.infrastructure.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - infrastructure.cluster.x-k8s.io
-    apiVersions:
-    - v1alpha1
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - openstackservers
-  sideEffects: None