Include cluster-api in magnum role instead of separate role
diff --git a/atmosphere/operator/constants.py b/atmosphere/operator/constants.py
index d5c72c9..8f45dbf 100644
--- a/atmosphere/operator/constants.py
+++ b/atmosphere/operator/constants.py
@@ -17,10 +17,6 @@
     "cinder_storage_init": "quay.io/vexxhost/cinder:zed",
     "cinder_volume_usage_audit": "quay.io/vexxhost/cinder:zed",
     "cinder_volume": "quay.io/vexxhost/cinder:zed",
-    "cluster_api_controller": "registry.k8s.io/cluster-api/cluster-api-controller:v1.3.0",
-    "cluster_api_kubeadm_bootstrap_controller": "registry.k8s.io/cluster-api/kubeadm-bootstrap-controller:v1.3.0",
-    "cluster_api_kubeadm_control_plane_controller": "registry.k8s.io/cluster-api/kubeadm-control-plane-controller:v1.3.0",  # noqa
-    "cluster_api_openstack_controller": "gcr.io/k8s-staging-capi-openstack/capi-openstack-controller:nightly_main_20221109",  # noqa
     "csi_node_driver_registrar": "k8s.gcr.io/sig-storage/csi-node-driver-registrar:v2.4.0",
     "csi_rbd_attacher": "k8s.gcr.io/sig-storage/csi-attacher:v3.4.0",
     "csi_rbd_plugin": "quay.io/cephcsi/cephcsi:v3.5.1",
diff --git a/atmosphere/operator/controllers/cloud.py b/atmosphere/operator/controllers/cloud.py
index 9181897..5d99f11 100644
--- a/atmosphere/operator/controllers/cloud.py
+++ b/atmosphere/operator/controllers/cloud.py
@@ -23,11 +23,6 @@
 
     flow = graph_flow.Flow("deploy")
 
-    if spec["magnum"].get("enabled", True):
-        flow.add(
-            tasks.InstallClusterApiTask(),
-        )
-
     engine = engines.load(
         flow,
         store={
diff --git a/atmosphere/operator/manifests/capi-bootstrap.yml b/atmosphere/operator/manifests/capi-bootstrap.yml
deleted file mode 100644
index 27be3d1..0000000
--- a/atmosphere/operator/manifests/capi-bootstrap.yml
+++ /dev/null
@@ -1,6570 +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: 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.10.0
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: bootstrap-kubeadm
-    cluster.x-k8s.io/v1alpha3: v1alpha3
-    cluster.x-k8s.io/v1alpha4: v1alpha4
-    cluster.x-k8s.io/v1beta1: v1beta1
-    clusterctl.cluster.x-k8s.io: ""
-  name: kubeadmconfigs.bootstrap.cluster.x-k8s.io
-spec:
-  conversion:
-    strategy: Webhook
-    webhook:
-      clientConfig:
-        caBundle: Cg==
-        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:
-  - name: v1alpha3
-    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. TODO: This is temporary and
-                          ideally we would like to switch all components to use ComponentConfig
-                          + ConfigMaps.'
-                        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. TODO: This is temporary and
-                          ideally we would like to switch all components to use ComponentConfig
-                          + ConfigMaps.'
-                        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. TODO: This is temporary and
-                          ideally we would like to switch all components to use ComponentConfig
-                          + ConfigMaps.'
-                        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". TODO: revisit when
-                      there is defaulting from k/k'
-                    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 TODO: revisit when there
-                      is defaulting from k/k'
-                    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 TODO: revisit when there
-                          is defaulting from k/k'
-                        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. \n 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.
-                  \n This will add about 40KB to userdata \n 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. \n
-                  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: true
-    storage: false
-    subresources:
-      status: {}
-  - additionalPrinterColumns:
-    - description: Time duration since creation of KubeadmConfig
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    name: v1alpha4
-    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. TODO: This is temporary and
-                          ideally we would like to switch all components to use ComponentConfig
-                          + ConfigMaps.'
-                        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. TODO: This is temporary and
-                          ideally we would like to switch all components to use ComponentConfig
-                          + ConfigMaps.'
-                        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. TODO: This is temporary and
-                          ideally we would like to switch all components to use ComponentConfig
-                          + ConfigMaps.'
-                        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". TODO: revisit when
-                      there is defaulting from k/k'
-                    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 TODO: revisit when there
-                      is defaulting from k/k'
-                    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. \n 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.
-                  \n This will add about 40KB to userdata \n 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: true
-    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. TODO: This is temporary and
-                          ideally we would like to switch all components to use ComponentConfig
-                          + ConfigMaps.'
-                        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. TODO: This is temporary and
-                          ideally we would like to switch all components to use ComponentConfig
-                          + ConfigMaps.'
-                        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. TODO: This is temporary and
-                          ideally we would like to switch all components to use ComponentConfig
-                          + ConfigMaps.'
-                        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:
-                    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
-                          \n 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
-                      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". TODO: revisit when
-                      there is defaulting from k/k'
-                    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 TODO: revisit when there
-                      is defaulting from k/k'
-                    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
-                  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. \n 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.
-                  \n This will add about 40KB to userdata \n For more information,
-                  refer to https://github.com/kubernetes-sigs/cluster-api/pull/2763#discussion_r397306055.
-                  \n 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 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:
-                  - 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
-                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: 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.10.0
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: bootstrap-kubeadm
-    cluster.x-k8s.io/v1alpha3: v1alpha3
-    cluster.x-k8s.io/v1alpha4: v1alpha4
-    cluster.x-k8s.io/v1beta1: v1beta1
-    clusterctl.cluster.x-k8s.io: ""
-  name: kubeadmconfigtemplates.bootstrap.cluster.x-k8s.io
-spec:
-  conversion:
-    strategy: Webhook
-    webhook:
-      clientConfig:
-        caBundle: Cg==
-        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:
-  - name: v1alpha3
-    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:
-                  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. TODO: This
-                                  is temporary and ideally we would like to switch
-                                  all components to use ComponentConfig + ConfigMaps.'
-                                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. TODO: This
-                                  is temporary and ideally we would like to switch
-                                  all components to use ComponentConfig + ConfigMaps.'
-                                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. TODO: This
-                                  is temporary and ideally we would like to switch
-                                  all components to use ComponentConfig + ConfigMaps.'
-                                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".
-                              TODO: revisit when there is defaulting from k/k'
-                            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 TODO:
-                              revisit when there is defaulting from k/k'
-                            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 TODO: revisit
-                                  when there is defaulting from k/k'
-                                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. \n 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. \n This will add about 40KB to userdata
-                          \n 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: true
-    storage: false
-  - additionalPrinterColumns:
-    - description: Time duration since creation of KubeadmConfigTemplate
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    name: v1alpha4
-    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:
-                  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. TODO: This
-                                  is temporary and ideally we would like to switch
-                                  all components to use ComponentConfig + ConfigMaps.'
-                                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. TODO: This
-                                  is temporary and ideally we would like to switch
-                                  all components to use ComponentConfig + ConfigMaps.'
-                                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. TODO: This
-                                  is temporary and ideally we would like to switch
-                                  all components to use ComponentConfig + ConfigMaps.'
-                                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".
-                              TODO: revisit when there is defaulting from k/k'
-                            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 TODO:
-                              revisit when there is defaulting from k/k'
-                            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. \n 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. \n This will add about 40KB to userdata
-                          \n 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: true
-    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:
-                  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. TODO: This
-                                  is temporary and ideally we would like to switch
-                                  all components to use ComponentConfig + ConfigMaps.'
-                                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. TODO: This
-                                  is temporary and ideally we would like to switch
-                                  all components to use ComponentConfig + ConfigMaps.'
-                                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. TODO: This
-                                  is temporary and ideally we would like to switch
-                                  all components to use ComponentConfig + ConfigMaps.'
-                                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:
-                            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
-                                  \n 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
-                              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".
-                              TODO: revisit when there is defaulting from k/k'
-                            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 TODO:
-                              revisit when there is defaulting from k/k'
-                            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
-                          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. \n 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. \n This will add about 40KB to userdata
-                          \n For more information, refer to https://github.com/kubernetes-sigs/cluster-api/pull/2763#discussion_r397306055.
-                          \n 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:
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: bootstrap-kubeadm
-    clusterctl.cluster.x-k8s.io: ""
-  name: capi-kubeadm-bootstrap-system-capi-kubeadm-bootstrap-manager-role
-rules:
-- apiGroups:
-  - ""
-  resources:
-  - configmaps
-  - events
-  - secrets
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- 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
----
-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-system-capi-kubeadm-bootstrap-manager-rolebinding
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: ClusterRole
-  name: capi-kubeadm-bootstrap-system-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
-        - --metrics-bind-addr=localhost:8080
-        - --feature-gates=MachinePool=false,KubeadmBootstrapFormatIgnition=false
-        - --bootstrap-token-ttl=15m
-        command:
-        - /manager
-        image: registry.k8s.io/cluster-api/kubeadm-bootstrap-controller:v1.3.0
-        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: {}
-        volumeMounts:
-        - mountPath: /tmp/k8s-webhook-server/serving-certs
-          name: cert
-          readOnly: true
-      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: 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: 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: 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/atmosphere/operator/manifests/capi-control-plane.yml b/atmosphere/operator/manifests/capi-control-plane.yml
deleted file mode 100644
index 624401d..0000000
--- a/atmosphere/operator/manifests/capi-control-plane.yml
+++ /dev/null
@@ -1,6645 +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: 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.10.0
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: control-plane-kubeadm
-    cluster.x-k8s.io/v1alpha3: v1alpha3
-    cluster.x-k8s.io/v1alpha4: v1alpha4
-    cluster.x-k8s.io/v1beta1: v1beta1
-    clusterctl.cluster.x-k8s.io: ""
-  name: kubeadmcontrolplanes.controlplane.cluster.x-k8s.io
-spec:
-  conversion:
-    strategy: Webhook
-    webhook:
-      clientConfig:
-        caBundle: Cg==
-        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
-    name: v1alpha3
-    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:
-              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. TODO: this design is not final and this field is
-                      subject to change in the future.'
-                    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. TODO: This is temporary
-                              and ideally we would like to switch all components to
-                              use ComponentConfig + ConfigMaps.'
-                            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. TODO: This is temporary
-                              and ideally we would like to switch all components to
-                              use ComponentConfig + ConfigMaps.'
-                            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. TODO: This is temporary
-                              and ideally we would like to switch all components to
-                              use ComponentConfig + ConfigMaps.'
-                            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".
-                          TODO: revisit when there is defaulting from k/k'
-                        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 TODO: revisit when
-                          there is defaulting from k/k'
-                        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 TODO: revisit when there is defaulting from
-                              k/k'
-                            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. \n 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. \n This will add about 40KB to userdata
-                      \n 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: true
-    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
-    name: v1alpha4
-    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. TODO: This is temporary
-                              and ideally we would like to switch all components to
-                              use ComponentConfig + ConfigMaps.'
-                            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. TODO: This is temporary
-                              and ideally we would like to switch all components to
-                              use ComponentConfig + ConfigMaps.'
-                            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. TODO: This is temporary
-                              and ideally we would like to switch all components to
-                              use ComponentConfig + ConfigMaps.'
-                            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".
-                          TODO: revisit when there is defaulting from k/k'
-                        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 TODO: revisit when
-                          there is defaulting from k/k'
-                        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. \n 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. \n This will add about 40KB to userdata
-                      \n 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. TODO: this design is not final and this field
-                          is subject to change in the future.'
-                        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: true
-    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. TODO: This is temporary
-                              and ideally we would like to switch all components to
-                              use ComponentConfig + ConfigMaps.'
-                            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. TODO: This is temporary
-                              and ideally we would like to switch all components to
-                              use ComponentConfig + ConfigMaps.'
-                            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. TODO: This is temporary
-                              and ideally we would like to switch all components to
-                              use ComponentConfig + ConfigMaps.'
-                            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:
-                        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
-                              \n 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
-                          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".
-                          TODO: revisit when there is defaulting from k/k'
-                        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 TODO: revisit when
-                          there is defaulting from k/k'
-                        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
-                      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. \n 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. \n This will add about 40KB to userdata
-                      \n For more information, refer to https://github.com/kubernetes-sigs/cluster-api/pull/2763#discussion_r397306055.
-                      \n 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
-              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. TODO: this design is not final and this field
-                          is subject to change in the future.'
-                        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
-              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
-              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.
-                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:
-                  - 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.
-                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: 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.10.0
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: control-plane-kubeadm
-    cluster.x-k8s.io/v1alpha3: v1alpha3
-    cluster.x-k8s.io/v1alpha4: v1alpha4
-    cluster.x-k8s.io/v1beta1: v1beta1
-    clusterctl.cluster.x-k8s.io: ""
-  name: kubeadmcontrolplanetemplates.controlplane.cluster.x-k8s.io
-spec:
-  conversion:
-    strategy: Webhook
-    webhook:
-      clientConfig:
-        caBundle: Cg==
-        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
-    name: v1alpha4
-    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:
-                  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. TODO:
-                                      This is temporary and ideally we would like
-                                      to switch all components to use ComponentConfig
-                                      + ConfigMaps.'
-                                    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. TODO:
-                                      This is temporary and ideally we would like
-                                      to switch all components to use ComponentConfig
-                                      + ConfigMaps.'
-                                    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. TODO:
-                                      This is temporary and ideally we would like
-                                      to switch all components to use ComponentConfig
-                                      + ConfigMaps.'
-                                    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".
-                                  TODO: revisit when there is defaulting from k/k'
-                                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
-                                  TODO: revisit when there is defaulting from k/k'
-                                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. \n 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.
-                              \n This will add about 40KB to userdata \n 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. TODO: this design is not final and
-                                  this field is subject to change in the future.'
-                                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: true
-    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:
-                  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. TODO:
-                                      This is temporary and ideally we would like
-                                      to switch all components to use ComponentConfig
-                                      + ConfigMaps.'
-                                    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. TODO:
-                                      This is temporary and ideally we would like
-                                      to switch all components to use ComponentConfig
-                                      + ConfigMaps.'
-                                    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. TODO:
-                                      This is temporary and ideally we would like
-                                      to switch all components to use ComponentConfig
-                                      + ConfigMaps.'
-                                    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:
-                                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
-                                      \n 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
-                                  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".
-                                  TODO: revisit when there is defaulting from k/k'
-                                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
-                                  TODO: revisit when there is defaulting from k/k'
-                                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
-                              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. \n 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.
-                              \n This will add about 40KB to userdata \n For more
-                              information, refer to https://github.com/kubernetes-sigs/cluster-api/pull/2763#discussion_r397306055.
-                              \n 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
-                      machineTemplate:
-                        description: MachineTemplate contains information about how
-                          machines should be shaped when creating or updating a control
-                          plane.
-                        properties:
-                          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
-                      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-system-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-system-capi-kubeadm-control-plane-manager-role
-rules:
-- apiGroups:
-  - apiextensions.k8s.io
-  resources:
-  - customresourcedefinitions
-  verbs:
-  - get
-  - list
-  - watch
-- 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
-  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
-  - get
-  - list
-  - patch
-  - watch
-- 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-system-capi-kubeadm-control-plane-manager-rolebinding
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: ClusterRole
-  name: capi-kubeadm-control-plane-system-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
-        - --metrics-bind-addr=localhost:8080
-        - --feature-gates=ClusterTopology=true,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.3.0
-        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: {}
-        volumeMounts:
-        - mountPath: /tmp/k8s-webhook-server/serving-certs
-          name: cert
-          readOnly: true
-      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: 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: 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: 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-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
-- 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
diff --git a/atmosphere/operator/manifests/capi-core.yml b/atmosphere/operator/manifests/capi-core.yml
deleted file mode 100644
index 512a675..0000000
--- a/atmosphere/operator/manifests/capi-core.yml
+++ /dev/null
@@ -1,11515 +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: 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.10.0
-  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:
-        caBundle: Cg==
-        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
-    name: v1alpha4
-    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:
-                  machineInfrastructure:
-                    description: "MachineTemplate defines the metadata and infrastructure
-                      information for control plane machines. \n 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. TODO: this design
-                              is not final and this field is subject to change in
-                              the future.'
-                            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. \n 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. TODO: this design is not final and this field
-                          is subject to change in the future.'
-                        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. TODO: this design is not final and this field
-                          is subject to change in the future.'
-                        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. TODO:
-                                        this design is not final and this field is
-                                        subject to change in the future.'
-                                      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. TODO:
-                                        this design is not final and this field is
-                                        subject to change in the future.'
-                                      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: true
-    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: Machines older than this duration without a node
-                          will be considered to have failed and will be remediated.
-                          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. \n 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. TODO: this design
-                              is not final and this field is subject to change in
-                              the future.'
-                            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. \n 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. TODO: this design
-                              is not final and this field is subject to change in
-                              the future.'
-                            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. \n 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
-                  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. TODO: this design is not final and this field
-                          is subject to change in the future.'
-                        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. TODO: this design is not final and this field
-                          is subject to change in the future.'
-                        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
-                                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:
-                        generateExtension:
-                          description: GenerateExtension references an extension which
-                            is called to generate patches.
-                          type: string
-                        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:
-                    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
-                            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
-                            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
-                            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
-                            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-preserve-unknown-fields:
-                              description: XPreserveUnknownFields 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
-                          required:
-                          - type
-                          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: Machines older than this duration without
-                                a node will be considered to have failed and will
-                                be remediated. 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. \n 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. TODO: this design
-                                    is not final and this field is subject to change
-                                    in the future.'
-                                  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
-                        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:
-                            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 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. TODO:
-                                        this design is not final and this field is
-                                        subject to change in the future.'
-                                      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. TODO:
-                                        this design is not final and this field is
-                                        subject to change in the future.'
-                                      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
-          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 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:
-                  - 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:
-    cert-manager.io/inject-ca-from: capi-system/capi-serving-cert
-    controller-gen.kubebuilder.io/version: v0.10.0
-  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:
-        caBundle: Cg==
-        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:
-  - name: v1alpha3
-    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
-            type: object
-        type: object
-    served: true
-    storage: false
-    subresources:
-      status: {}
-  - additionalPrinterColumns:
-    - description: Time duration since creation of ClusterResourceSetBinding
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    name: v1alpha4
-    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
-            type: object
-        type: object
-    served: true
-    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
-            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.10.0
-  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:
-        caBundle: Cg==
-        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:
-  - name: v1alpha3
-    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.
-                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
-                      required:
-                      - key
-                      - operator
-                      type: object
-                    type: array
-                  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
-              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: true
-    storage: false
-    subresources:
-      status: {}
-  - additionalPrinterColumns:
-    - description: Time duration since creation of ClusterResourceSet
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    name: v1alpha4
-    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
-                      required:
-                      - key
-                      - operator
-                      type: object
-                    type: array
-                  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
-              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: true
-    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
-                      required:
-                      - key
-                      - operator
-                      type: object
-                    type: array
-                  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
-              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:
-                  - lastTransitionTime
-                  - 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: 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.10.0
-  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:
-        caBundle: Cg==
-        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
-    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. TODO: this design is not final and this field is
-                      subject to change in the future.'
-                    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. TODO: this design is not final and this field is
-                      subject to change in the future.'
-                    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: true
-    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
-    name: v1alpha4
-    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. TODO: this design is not final and this field is
-                      subject to change in the future.'
-                    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. TODO: this design is not final and this field is
-                      subject to change in the future.'
-                    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. \n
-                          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: true
-    storage: false
-    subresources:
-      status: {}
-  - additionalPrinterColumns:
-    - 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:
-              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. TODO: this design is not final and this field is
-                      subject to change in the future.'
-                    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. TODO: this design is not final and this field is
-                      subject to change in the future.'
-                    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:
-                      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. \n If false:
-                              No MachineHealthCheck will be created. \n 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. \n 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: Machines older than this duration without
-                              a node will be considered to have failed and will be
-                              remediated. 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.
-                              \n 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. TODO: this design is not final and
-                                  this field is subject to change in the future.'
-                                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 machines
-                          of the ControlPlane. At runtime this metadata is merged
-                          with the corresponding metadata from the ClusterClass. \n
-                          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
-                      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
-                    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
-                  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. It must comply to the corresponding ClusterClassVariable
-                        defined in the ClusterClass.
-                      properties:
-                        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
-                  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. \n
-                                    If false: No MachineHealthCheck will be created.
-                                    \n 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. \n 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: Machines older than this duration without
-                                    a node will be considered to have failed and will
-                                    be remediated. 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. \n 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. TODO:
-                                        this design is not final and this field is
-                                        subject to change in the future.'
-                                      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
-                                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 zero) 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:
-                                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
-                            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. It must comply
-                                      to the corresponding ClusterClassVariable defined
-                                      in the ClusterClass.
-                                    properties:
-                                      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
-                              type: object
-                          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:
-                  - lastTransitionTime
-                  - 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: 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.10.0
-  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. \n 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. \n The scheme must
-                      be \"https\". \n The `host` should not refer to a service running
-                      in the cluster; use the `service` field instead. \n 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. \n 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
-                      required:
-                      - key
-                      - operator
-                      type: object
-                    type: array
-                  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
-            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 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:
-                  - 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.10.0
-  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
-    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:
-                - apiGroup
-                - kind
-                - name
-                type: object
-            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:
-                    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
-                type: object
-              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 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:
-                  - lastTransitionTime
-                  - status
-                  - type
-                  type: object
-                type: array
-            required:
-            - addressRef
-            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.10.0
-  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
-    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:
-                    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
-                type: object
-              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:
-                - apiGroup
-                - kind
-                - name
-                type: object
-              prefix:
-                description: Prefix is the prefix of the address.
-                type: integer
-            required:
-            - address
-            - claimRef
-            - gateway
-            - 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.10.0
-  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:
-        caBundle: Cg==
-        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
-    name: v1alpha3
-    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: 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
-                      required:
-                      - key
-                      - operator
-                      type: object
-                    type: array
-                  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. \n 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). \n Applied only if Name is not specified.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency
-                          \n 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 \n
-                          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. \n Must be a DNS_LABEL. Cannot be updated.
-                          More info: http://kubernetes.io/docs/user-guide/namespaces
-                          \n 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. \n 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: http://kubernetes.io/docs/user-guide/identifiers#names'
-                              type: string
-                            uid:
-                              description: 'UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#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. TODO: this design is not final and
-                                  this field is subject to change in the future.'
-                                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. \n 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. TODO: this design
-                              is not final and this field is subject to change in
-                              the future.'
-                            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: true
-    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
-    name: v1alpha4
-    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: 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
-                      required:
-                      - key
-                      - operator
-                      type: object
-                    type: array
-                  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. TODO: this design is not final and
-                                  this field is subject to change in the future.'
-                                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. TODO: this design
-                              is not final and this field is subject to change in
-                              the future.'
-                            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: true
-    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: 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
-                      required:
-                      - key
-                      - operator
-                      type: object
-                    type: array
-                  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. TODO: this design is not final and
-                                  this field is subject to change in the future.'
-                                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. TODO: this design
-                              is not final and this field is subject to change in
-                              the future.'
-                            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
-                      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:
-                  - 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.
-                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: 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.10.0
-  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:
-        caBundle: Cg==
-        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
-    name: v1alpha3
-    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.
-                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. \n 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. TODO: this design is not final and this field is
-                      subject to change in the future.'
-                    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
-                      required:
-                      - key
-                      - operator
-                      type: object
-                    type: array
-                  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: true
-    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
-    name: v1alpha4
-    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.
-                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. \n 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. TODO: this design is not final and this field is
-                      subject to change in the future.'
-                    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
-                      required:
-                      - key
-                      - operator
-                      type: object
-                    type: array
-                  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: true
-    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.
-                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. \n 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. TODO: this design is not final and this field is
-                      subject to change in the future.'
-                    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
-                      required:
-                      - key
-                      - operator
-                      type: object
-                    type: array
-                  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:
-                  - 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
-            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.10.0
-  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:
-        caBundle: Cg==
-        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
-    name: v1alpha3
-    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
-              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. \n 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). \n Applied only if Name is not specified.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency
-                          \n 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 \n
-                          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. \n Must be a DNS_LABEL. Cannot be updated.
-                          More info: http://kubernetes.io/docs/user-guide/namespaces
-                          \n 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. \n 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: http://kubernetes.io/docs/user-guide/identifiers#names'
-                              type: string
-                            uid:
-                              description: 'UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#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. TODO: this design is not final and
-                                  this field is subject to change in the future.'
-                                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. \n 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. TODO: this design
-                              is not final and this field is subject to change in
-                              the future.'
-                            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. --- New uses of this
-                    type are discouraged because of difficulty describing its usage
-                    when embedded in APIs. 1. Ignored fields.  It includes many fields
-                    which are not generally honored.  For instance, ResourceVersion
-                    and FieldPath are both very rarely valid in actual usage. 2. Invalid
-                    usage help.  It is impossible to add specific help for individual
-                    usage.  In most embedded usages, there are particular restrictions
-                    like, \"must refer only to types A and B\" or \"UID not honored\"
-                    or \"name must be restricted\". Those cannot be well described
-                    when embedded. 3. Inconsistent validation.  Because the usages
-                    are different, the validation rules are different by usage, which
-                    makes it hard for users to predict what will happen. 4. The fields
-                    are both imprecise and overly precise.  Kind is not a precise
-                    mapping to a URL. This can produce ambiguity during interpretation
-                    and require a REST mapping.  In most cases, the dependency is
-                    on the group,resource tuple and the version of the actual struct
-                    is irrelevant. 5. We cannot easily change it.  Because this type
-                    is embedded in many locations, updates to this type will affect
-                    numerous schemas.  Don't make new APIs embed an underspecified
-                    API type they do not control. \n Instead of using this type, create
-                    a locally provided and used type that is well-focused on your
-                    reference. For example, ServiceReferences for admission registration:
-                    https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533
-                    ."
-                  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. TODO: this design is not final and this field is
-                        subject to change in the future.'
-                      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
-                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: true
-    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
-    name: v1alpha4
-    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. TODO: this design is not final and
-                                  this field is subject to change in the future.'
-                                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. TODO: this design
-                              is not final and this field is subject to change in
-                              the future.'
-                            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. --- New uses of this
-                    type are discouraged because of difficulty describing its usage
-                    when embedded in APIs. 1. Ignored fields.  It includes many fields
-                    which are not generally honored.  For instance, ResourceVersion
-                    and FieldPath are both very rarely valid in actual usage. 2. Invalid
-                    usage help.  It is impossible to add specific help for individual
-                    usage.  In most embedded usages, there are particular restrictions
-                    like, \"must refer only to types A and B\" or \"UID not honored\"
-                    or \"name must be restricted\". Those cannot be well described
-                    when embedded. 3. Inconsistent validation.  Because the usages
-                    are different, the validation rules are different by usage, which
-                    makes it hard for users to predict what will happen. 4. The fields
-                    are both imprecise and overly precise.  Kind is not a precise
-                    mapping to a URL. This can produce ambiguity during interpretation
-                    and require a REST mapping.  In most cases, the dependency is
-                    on the group,resource tuple and the version of the actual struct
-                    is irrelevant. 5. We cannot easily change it.  Because this type
-                    is embedded in many locations, updates to this type will affect
-                    numerous schemas.  Don't make new APIs embed an underspecified
-                    API type they do not control. \n Instead of using this type, create
-                    a locally provided and used type that is well-focused on your
-                    reference. For example, ServiceReferences for admission registration:
-                    https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533
-                    ."
-                  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. TODO: this design is not final and this field is
-                        subject to change in the future.'
-                      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
-                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: true
-    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. TODO: this design is not final and
-                                  this field is subject to change in the future.'
-                                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. TODO: this design
-                              is not final and this field is subject to change in
-                              the future.'
-                            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
-                      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:
-                  - 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.
-                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. --- New uses of this
-                    type are discouraged because of difficulty describing its usage
-                    when embedded in APIs. 1. Ignored fields.  It includes many fields
-                    which are not generally honored.  For instance, ResourceVersion
-                    and FieldPath are both very rarely valid in actual usage. 2. Invalid
-                    usage help.  It is impossible to add specific help for individual
-                    usage.  In most embedded usages, there are particular restrictions
-                    like, \"must refer only to types A and B\" or \"UID not honored\"
-                    or \"name must be restricted\". Those cannot be well described
-                    when embedded. 3. Inconsistent validation.  Because the usages
-                    are different, the validation rules are different by usage, which
-                    makes it hard for users to predict what will happen. 4. The fields
-                    are both imprecise and overly precise.  Kind is not a precise
-                    mapping to a URL. This can produce ambiguity during interpretation
-                    and require a REST mapping.  In most cases, the dependency is
-                    on the group,resource tuple and the version of the actual struct
-                    is irrelevant. 5. We cannot easily change it.  Because this type
-                    is embedded in many locations, updates to this type will affect
-                    numerous schemas.  Don't make new APIs embed an underspecified
-                    API type they do not control. \n Instead of using this type, create
-                    a locally provided and used type that is well-focused on your
-                    reference. For example, ServiceReferences for admission registration:
-                    https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533
-                    ."
-                  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. TODO: this design is not final and this field is
-                        subject to change in the future.'
-                      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
-                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: 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.10.0
-  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:
-        caBundle: Cg==
-        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
-    name: v1alpha3
-    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.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. TODO: this design is not final and this field
-                          is subject to change in the future.'
-                        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. \n 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. TODO: this design is not final and this field is
-                      subject to change in the future.'
-                    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. \n 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. \n 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. \n 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. \n 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. TODO: this design is not final and this field is
-                      subject to change in the future.'
-                    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: true
-    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
-    name: v1alpha4
-    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. TODO: this design is not final and this field
-                          is subject to change in the future.'
-                        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. TODO: this design is not final and this field is
-                      subject to change in the future.'
-                    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. \n 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. \n 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. \n 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. \n 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: 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. TODO: this design is not final and this field is
-                      subject to change in the future.'
-                    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: true
-    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. TODO: this design is not final and this field
-                          is subject to change in the future.'
-                        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. TODO: this design is not final and this field is
-                      subject to change in the future.'
-                    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
-              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
-              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 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:
-                  - 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. \n 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. \n 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. \n 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. \n 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: 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. TODO: this design is not final and this field is
-                      subject to change in the future.'
-                    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
-            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.10.0
-  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:
-        caBundle: Cg==
-        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
-    name: v1alpha3
-    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 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
-                      required:
-                      - key
-                      - operator
-                      type: object
-                    type: array
-                  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. \n 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). \n Applied only if Name is not specified.
-                          More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency
-                          \n 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 \n
-                          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. \n Must be a DNS_LABEL. Cannot be updated.
-                          More info: http://kubernetes.io/docs/user-guide/namespaces
-                          \n 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. \n 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: http://kubernetes.io/docs/user-guide/identifiers#names'
-                              type: string
-                            uid:
-                              description: 'UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#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. TODO: this design is not final and
-                                  this field is subject to change in the future.'
-                                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. \n 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. TODO: this design
-                              is not final and this field is subject to change in
-                              the future.'
-                            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. \n 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.
-                  \n 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: true
-    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
-    name: v1alpha4
-    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 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
-                      required:
-                      - key
-                      - operator
-                      type: object
-                    type: array
-                  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. TODO: this design is not final and
-                                  this field is subject to change in the future.'
-                                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. TODO: this design
-                              is not final and this field is subject to change in
-                              the future.'
-                            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. \n 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.
-                  \n 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: true
-    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 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
-                      required:
-                      - key
-                      - operator
-                      type: object
-                    type: array
-                  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. TODO: this design is not final and
-                                  this field is subject to change in the future.'
-                                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. TODO: this design
-                              is not final and this field is subject to change in
-                              the future.'
-                            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
-                      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:
-                  - lastTransitionTime
-                  - 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. \n 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.
-                  \n 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: 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-system-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-system-capi-manager-role
-rules:
-- apiGroups:
-  - ""
-  resources:
-  - namespaces
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - addons.cluster.x-k8s.io
-  resources:
-  - '*'
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - addons.cluster.x-k8s.io
-  resources:
-  - clusterresourcesets/finalizers
-  - clusterresourcesets/status
-  verbs:
-  - get
-  - patch
-  - update
-- apiGroups:
-  - apiextensions.k8s.io
-  resources:
-  - customresourcedefinitions
-  verbs:
-  - get
-  - list
-  - watch
-- 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:
-  - bootstrap.cluster.x-k8s.io
-  - infrastructure.cluster.x-k8s.io
-  resources:
-  - '*'
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - cluster.x-k8s.io
-  resources:
-  - clusterclasses
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - cluster.x-k8s.io
-  resources:
-  - clusterclasses
-  - clusterclasses/status
-  verbs:
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - cluster.x-k8s.io
-  resources:
-  - clusters
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - cluster.x-k8s.io
-  resources:
-  - clusters
-  - clusters/finalizers
-  - clusters/status
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - cluster.x-k8s.io
-  resources:
-  - clusters
-  - clusters/status
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - cluster.x-k8s.io
-  resources:
-  - machinedeployments
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - cluster.x-k8s.io
-  resources:
-  - machinedeployments
-  - machinedeployments/finalizers
-  verbs:
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - cluster.x-k8s.io
-  resources:
-  - machinedeployments
-  - machinedeployments/finalizers
-  - machinedeployments/status
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - cluster.x-k8s.io
-  resources:
-  - machinehealthchecks
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - cluster.x-k8s.io
-  resources:
-  - machinehealthchecks
-  - machinehealthchecks/finalizers
-  - machinehealthchecks/status
-  verbs:
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - cluster.x-k8s.io
-  resources:
-  - machinepools
-  - machinepools/finalizers
-  - machinepools/status
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - cluster.x-k8s.io
-  resources:
-  - machines
-  - machines/finalizers
-  - machines/status
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - cluster.x-k8s.io
-  resources:
-  - machines
-  - machines/status
-  verbs:
-  - delete
-  - get
-  - list
-  - watch
-- apiGroups:
-  - cluster.x-k8s.io
-  resources:
-  - machinesets
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - cluster.x-k8s.io
-  resources:
-  - machinesets
-  - machinesets/finalizers
-  verbs:
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - cluster.x-k8s.io
-  resources:
-  - machinesets
-  - machinesets/finalizers
-  - machinesets/status
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - ""
-  resources:
-  - configmaps
-  verbs:
-  - get
-  - list
-  - patch
-  - watch
-- apiGroups:
-  - ""
-  resources:
-  - events
-  verbs:
-  - create
-  - get
-  - list
-  - patch
-  - watch
-- apiGroups:
-  - ""
-  resources:
-  - nodes
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - ""
-  resources:
-  - secrets
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - 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-system-capi-manager-rolebinding
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: ClusterRole
-  name: capi-system-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
-        - --metrics-bind-addr=localhost:8080
-        - --feature-gates=MachinePool=false,ClusterResourceSet=true,ClusterTopology=true,RuntimeSDK=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/cluster-api-controller:v1.3.0
-        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: {}
-        volumeMounts:
-        - mountPath: /tmp/k8s-webhook-server/serving-certs
-          name: cert
-          readOnly: true
-      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: 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: 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: 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-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-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-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-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-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-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-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-ipam-cluster-x-k8s-io-v1alpha1-ipaddress
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: validation.ipaddress.ipam.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - ipam.cluster.x-k8s.io
-    apiVersions:
-    - v1alpha1
-    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-v1alpha1-ipaddressclaim
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: validation.ipaddressclaim.ipam.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - ipam.cluster.x-k8s.io
-    apiVersions:
-    - v1alpha1
-    operations:
-    - CREATE
-    - UPDATE
-    - DELETE
-    resources:
-    - ipaddressclaims
-  sideEffects: None
diff --git a/atmosphere/operator/manifests/capi-provider.yml b/atmosphere/operator/manifests/capi-provider.yml
deleted file mode 100644
index 56c0eb7..0000000
--- a/atmosphere/operator/manifests/capi-provider.yml
+++ /dev/null
@@ -1,12126 +0,0 @@
-apiVersion: v1
-kind: Namespace
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: infrastructure-openstack
-  name: capo-system
----
-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.9.2
-  labels:
-    cluster.x-k8s.io/provider: infrastructure-openstack
-    cluster.x-k8s.io/v1alpha3: v1alpha3
-    cluster.x-k8s.io/v1beta1: v1alpha4_v1alpha5_v1alpha6
-  name: openstackclusters.infrastructure.cluster.x-k8s.io
-spec:
-  conversion:
-    strategy: Webhook
-    webhook:
-      clientConfig:
-        caBundle: Cg==
-        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: Subnet the cluster is using
-      jsonPath: .status.network.subnet.id
-      name: Subnet
-      type: string
-    - description: API Endpoint
-      jsonPath: .spec.controlPlaneEndpoint.host
-      name: Endpoint
-      priority: 1
-      type: string
-    - description: Bastion floating IP
-      jsonPath: .status.bastion.floatingIP
-      name: Bastion
-      type: string
-    - description: Time duration since creation of OpenStackCluster
-      jsonPath: .metadata.creationTimestamp
-      name: Age
-      type: date
-    name: v1alpha3
-    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:
-              apiServerFloatingIP:
-                description: APIServerFloatingIP is the floatingIP which will be associated
-                  to the APIServer. The floatingIP will be created if it not already
-                  exists.
-                type: string
-              apiServerLoadBalancerAdditionalPorts:
-                description: APIServerLoadBalancerAdditionalPorts adds additional
-                  ports to the APIServerLoadBalancer
-                items:
-                  type: integer
-                type: array
-              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
-                  \n 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:
-                      cloudName:
-                        description: The name of the cloud to use from the clouds
-                          secret
-                        type: string
-                      cloudsSecret:
-                        description: The name of the secret containing the openstack
-                          credentials
-                        properties:
-                          name:
-                            description: name is unique within a namespace to reference
-                              a secret resource.
-                            type: string
-                          namespace:
-                            description: namespace defines the space within which
-                              the secret name must be unique.
-                            type: string
-                        type: object
-                        x-kubernetes-map-type: atomic
-                      configDrive:
-                        description: Config Drive support
-                        type: boolean
-                      flavor:
-                        description: The flavor reference for the flavor for your
-                          server instance.
-                        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
-                      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
-                      instanceID:
-                        description: InstanceID is the OpenStack instance ID for this
-                          machine.
-                        type: string
-                      networks:
-                        description: A networks object. Required parameter when there
-                          are multiple networks defined for the tenant. When you do
-                          not specify the networks parameter, the server attaches
-                          to the only network created for the current tenant.
-                        items:
-                          properties:
-                            filter:
-                              description: Filters for optional network query
-                              properties:
-                                adminStateUp:
-                                  type: boolean
-                                description:
-                                  type: string
-                                id:
-                                  type: string
-                                limit:
-                                  type: integer
-                                marker:
-                                  type: string
-                                name:
-                                  type: string
-                                notTags:
-                                  type: string
-                                notTagsAny:
-                                  type: string
-                                projectId:
-                                  type: string
-                                shared:
-                                  type: boolean
-                                sortDir:
-                                  type: string
-                                sortKey:
-                                  type: string
-                                status:
-                                  type: string
-                                tags:
-                                  type: string
-                                tagsAny:
-                                  type: string
-                                tenantId:
-                                  type: string
-                              type: object
-                            fixedIp:
-                              description: A fixed IPv4 address for the NIC.
-                              type: string
-                            subnets:
-                              description: Subnet within a network to use
-                              items:
-                                properties:
-                                  filter:
-                                    description: Filters for optional network query
-                                    properties:
-                                      cidr:
-                                        type: string
-                                      description:
-                                        type: string
-                                      enableDhcp:
-                                        type: boolean
-                                      gateway_ip:
-                                        type: string
-                                      id:
-                                        type: string
-                                      ipVersion:
-                                        type: integer
-                                      ipv6AddressMode:
-                                        type: string
-                                      ipv6RaMode:
-                                        type: string
-                                      limit:
-                                        type: integer
-                                      marker:
-                                        type: string
-                                      name:
-                                        type: string
-                                      networkId:
-                                        type: string
-                                      notTags:
-                                        type: string
-                                      notTagsAny:
-                                        type: string
-                                      projectId:
-                                        type: string
-                                      sortDir:
-                                        type: string
-                                      sortKey:
-                                        type: string
-                                      subnetpoolId:
-                                        type: string
-                                      tags:
-                                        type: string
-                                      tagsAny:
-                                        type: string
-                                      tenantId:
-                                        type: string
-                                    type: object
-                                  uuid:
-                                    description: The UUID of the network. Required
-                                      if you omit the port attribute.
-                                    type: string
-                                type: object
-                              type: array
-                            uuid:
-                              description: The UUID of the network. Required if you
-                                omit the port attribute.
-                              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:
-                          deviceType:
-                            type: string
-                          diskSize:
-                            type: integer
-                          sourceType:
-                            type: string
-                          sourceUUID:
-                            type: string
-                        type: object
-                      securityGroups:
-                        description: The names of the security groups to assign to
-                          the instance
-                        items:
-                          properties:
-                            filter:
-                              description: Filters used to query security groups in
-                                openstack
-                              properties:
-                                description:
-                                  type: string
-                                id:
-                                  type: string
-                                limit:
-                                  type: integer
-                                marker:
-                                  type: string
-                                name:
-                                  type: string
-                                notTags:
-                                  type: string
-                                notTagsAny:
-                                  type: string
-                                projectId:
-                                  type: string
-                                sortDir:
-                                  type: string
-                                sortKey:
-                                  type: string
-                                tags:
-                                  type: string
-                                tagsAny:
-                                  type: string
-                                tenantId:
-                                  type: string
-                              type: object
-                            name:
-                              description: Security Group name
-                              type: string
-                            uuid:
-                              description: Security Group UID
-                              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
-                      subnet:
-                        description: UUID, IP address of a port from this subnet will
-                          be marked as AccessIPv4 on the created compute instance
-                        type: string
-                      tags:
-                        description: Machine tags Requires Nova api 2.52 minimum!
-                        items:
-                          type: string
-                        type: array
-                      trunk:
-                        description: Whether the server instance is created on a trunk
-                          port or not.
-                        type: boolean
-                      userDataSecret:
-                        description: The name of the secret containing the user data
-                          (startup script in most cases)
-                        properties:
-                          name:
-                            description: name is unique within a namespace to reference
-                              a secret resource.
-                            type: string
-                          namespace:
-                            description: namespace defines the space within which
-                              the secret name must be unique.
-                            type: string
-                        type: object
-                        x-kubernetes-map-type: atomic
-                    required:
-                    - flavor
-                    type: object
-                type: object
-              cloudName:
-                description: The name of the cloud to use from the clouds secret
-                type: string
-              cloudsSecret:
-                description: The name of the secret containing the openstack credentials
-                properties:
-                  name:
-                    description: name is unique within a namespace to reference a
-                      secret resource.
-                    type: string
-                  namespace:
-                    description: namespace defines the space within which the secret
-                      name must be unique.
-                    type: string
-                type: object
-                x-kubernetes-map-type: atomic
-              controlPlaneAvailabilityZones:
-                description: ControlPlaneAvailabilityZones is the az to deploy control
-                  plane to
-                items:
-                  type: string
-                type: array
-              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
-              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
-              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:
-                        filter:
-                          description: Filters for optional network query
-                          properties:
-                            cidr:
-                              type: string
-                            description:
-                              type: string
-                            enableDhcp:
-                              type: boolean
-                            gateway_ip:
-                              type: string
-                            id:
-                              type: string
-                            ipVersion:
-                              type: integer
-                            ipv6AddressMode:
-                              type: string
-                            ipv6RaMode:
-                              type: string
-                            limit:
-                              type: integer
-                            marker:
-                              type: string
-                            name:
-                              type: string
-                            networkId:
-                              type: string
-                            notTags:
-                              type: string
-                            notTagsAny:
-                              type: string
-                            projectId:
-                              type: string
-                            sortDir:
-                              type: string
-                            sortKey:
-                              type: string
-                            subnetpoolId:
-                              type: string
-                            tags:
-                              type: string
-                            tagsAny:
-                              type: string
-                            tenantId:
-                              type: string
-                          type: object
-                        uuid:
-                          description: The UUID of the network. Required if you omit
-                            the port attribute.
-                          type: string
-                      type: object
-                  required:
-                  - subnet
-                  type: object
-                type: array
-              managedAPIServerLoadBalancer:
-                description: 'ManagedAPIServerLoadBalancer defines whether a LoadBalancer
-                  for the APIServer should be created. If set to true the following
-                  properties are mandatory: APIServerFloatingIP, APIServerPort'
-                type: boolean
-              managedSecurityGroups:
-                description: 'ManagedSecurityGroups defines that kubernetes manages
-                  the OpenStack security groups for now, that means that we''ll create
-                  security group allows traffic to/from machines belonging to that
-                  group based on Calico CNI plugin default network requirements: BGP
-                  and IP-in-IP for master node(s) and worker node(s) respectively.
-                  In the future, we could make this more flexible.'
-                type: boolean
-              network:
-                description: If NodeCIDR cannot be set this can be used to detect
-                  an existing network.
-                properties:
-                  adminStateUp:
-                    type: boolean
-                  description:
-                    type: string
-                  id:
-                    type: string
-                  limit:
-                    type: integer
-                  marker:
-                    type: string
-                  name:
-                    type: string
-                  notTags:
-                    type: string
-                  notTagsAny:
-                    type: string
-                  projectId:
-                    type: string
-                  shared:
-                    type: boolean
-                  sortDir:
-                    type: string
-                  sortKey:
-                    type: string
-                  status:
-                    type: string
-                  tags:
-                    type: string
-                  tagsAny:
-                    type: string
-                  tenantId:
-                    type: string
-                type: object
-              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
-              subnet:
-                description: If NodeCIDR cannot be set this can be used to detect
-                  an existing subnet.
-                properties:
-                  cidr:
-                    type: string
-                  description:
-                    type: string
-                  enableDhcp:
-                    type: boolean
-                  gateway_ip:
-                    type: string
-                  id:
-                    type: string
-                  ipVersion:
-                    type: integer
-                  ipv6AddressMode:
-                    type: string
-                  ipv6RaMode:
-                    type: string
-                  limit:
-                    type: integer
-                  marker:
-                    type: string
-                  name:
-                    type: string
-                  networkId:
-                    type: string
-                  notTags:
-                    type: string
-                  notTagsAny:
-                    type: string
-                  projectId:
-                    type: string
-                  sortDir:
-                    type: string
-                  sortKey:
-                    type: string
-                  subnetpoolId:
-                    type: string
-                  tags:
-                    type: string
-                  tagsAny:
-                    type: string
-                  tenantId:
-                    type: string
-                type: object
-              tags:
-                description: Tags for all resources in cluster
-                items:
-                  type: string
-                type: array
-              useOctavia:
-                description: UseOctavia is weather LoadBalancer Service is Octavia
-                  or not
-                type: boolean
-            type: object
-          status:
-            description: OpenStackClusterStatus defines the observed state of OpenStackCluster.
-            properties:
-              bastion:
-                properties:
-                  configDrive:
-                    type: boolean
-                  failureDomain:
-                    type: string
-                  flavor:
-                    type: string
-                  floatingIP:
-                    type: string
-                  id:
-                    type: string
-                  image:
-                    type: string
-                  ip:
-                    type: string
-                  metadata:
-                    additionalProperties:
-                      type: string
-                    type: object
-                  name:
-                    type: string
-                  networks:
-                    items:
-                      description: Network represents basic information about the
-                        associated OpenStach Neutron Network.
-                      properties:
-                        apiServerLoadBalancer:
-                          description: Be careful when using APIServerLoadBalancer,
-                            because this field is optional and therefore not set in
-                            all cases
-                          properties:
-                            id:
-                              type: string
-                            internalIP:
-                              type: string
-                            ip:
-                              type: string
-                            name:
-                              type: string
-                          required:
-                          - id
-                          - internalIP
-                          - ip
-                          - name
-                          type: object
-                        id:
-                          type: string
-                        name:
-                          type: string
-                        router:
-                          description: Router represents basic information about the
-                            associated OpenStack Neutron Router.
-                          properties:
-                            id:
-                              type: string
-                            name:
-                              type: string
-                            tags:
-                              items:
-                                type: string
-                              type: array
-                          required:
-                          - id
-                          - name
-                          type: object
-                        subnet:
-                          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
-                        tags:
-                          items:
-                            type: string
-                          type: array
-                      required:
-                      - id
-                      - name
-                      type: object
-                    type: array
-                  rootVolume:
-                    properties:
-                      deviceType:
-                        type: string
-                      diskSize:
-                        type: integer
-                      sourceType:
-                        type: string
-                      sourceUUID:
-                        type: string
-                    type: object
-                  securigyGroups:
-                    items:
-                      type: string
-                    type: array
-                  serverGroupID:
-                    type: string
-                  sshKeyName:
-                    type: string
-                  state:
-                    description: InstanceState describes the state of an OpenStack
-                      instance.
-                    type: string
-                  subnet:
-                    type: string
-                  tags:
-                    items:
-                      type: string
-                    type: array
-                  trunk:
-                    type: boolean
-                  userData:
-                    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
-                - rules
-                type: object
-              controlPlaneSecurityGroup:
-                description: 'ControlPlaneSecurityGroups contains all the information
-                  about the OpenStack Security Group that needs to be applied to control
-                  plane nodes. TODO: Maybe instead of two properties, we add a property
-                  to the 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
-                - rules
-                type: object
-              externalNetwork:
-                description: External Network contains information about the created
-                  OpenStack external network.
-                properties:
-                  apiServerLoadBalancer:
-                    description: Be careful when using APIServerLoadBalancer, because
-                      this field is optional and therefore not set in all cases
-                    properties:
-                      id:
-                        type: string
-                      internalIP:
-                        type: string
-                      ip:
-                        type: string
-                      name:
-                        type: string
-                    required:
-                    - id
-                    - internalIP
-                    - ip
-                    - name
-                    type: object
-                  id:
-                    type: string
-                  name:
-                    type: string
-                  router:
-                    description: Router represents basic information about the associated
-                      OpenStack Neutron Router.
-                    properties:
-                      id:
-                        type: string
-                      name:
-                        type: string
-                      tags:
-                        items:
-                          type: string
-                        type: array
-                    required:
-                    - id
-                    - name
-                    type: object
-                  subnet:
-                    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
-                  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
-              network:
-                description: Network contains all information about the created OpenStack
-                  Network. It includes Subnets and Router.
-                properties:
-                  apiServerLoadBalancer:
-                    description: Be careful when using APIServerLoadBalancer, because
-                      this field is optional and therefore not set in all cases
-                    properties:
-                      id:
-                        type: string
-                      internalIP:
-                        type: string
-                      ip:
-                        type: string
-                      name:
-                        type: string
-                    required:
-                    - id
-                    - internalIP
-                    - ip
-                    - name
-                    type: object
-                  id:
-                    type: string
-                  name:
-                    type: string
-                  router:
-                    description: Router represents basic information about the associated
-                      OpenStack Neutron Router.
-                    properties:
-                      id:
-                        type: string
-                      name:
-                        type: string
-                      tags:
-                        items:
-                          type: string
-                        type: array
-                    required:
-                    - id
-                    - name
-                    type: object
-                  subnet:
-                    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
-                  tags:
-                    items:
-                      type: string
-                    type: array
-                required:
-                - id
-                - name
-                type: object
-              ready:
-                type: boolean
-              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
-                - rules
-                type: object
-            required:
-            - ready
-            type: object
-        type: object
-    served: true
-    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: Subnet the cluster is using
-      jsonPath: .status.network.subnet.id
-      name: Subnet
-      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: v1alpha4
-    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:
-              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
-              apiServerLoadBalancerAdditionalPorts:
-                description: APIServerLoadBalancerAdditionalPorts adds additional
-                  ports to the APIServerLoadBalancer
-                items:
-                  type: integer
-                type: array
-              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
-                  \n 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:
-                      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.
-                        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
-                        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
-                      instanceID:
-                        description: InstanceID is the OpenStack instance ID for this
-                          machine.
-                        type: string
-                      networks:
-                        description: A networks object. Required parameter when there
-                          are multiple networks defined for the tenant. When you do
-                          not specify both networks and ports parameters, the server
-                          attaches to the only network created for the current tenant.
-                        items:
-                          properties:
-                            filter:
-                              description: Filters for optional network query
-                              properties:
-                                adminStateUp:
-                                  type: boolean
-                                description:
-                                  type: string
-                                id:
-                                  type: string
-                                limit:
-                                  type: integer
-                                marker:
-                                  type: string
-                                name:
-                                  type: string
-                                notTags:
-                                  type: string
-                                notTagsAny:
-                                  type: string
-                                projectId:
-                                  type: string
-                                shared:
-                                  type: boolean
-                                sortDir:
-                                  type: string
-                                sortKey:
-                                  type: string
-                                status:
-                                  type: string
-                                tags:
-                                  type: string
-                                tagsAny:
-                                  type: string
-                                tenantId:
-                                  type: string
-                              type: object
-                            fixedIP:
-                              description: A fixed IPv4 address for the NIC.
-                              type: string
-                            subnets:
-                              description: Subnet within a network to use
-                              items:
-                                properties:
-                                  filter:
-                                    description: Filters for optional subnet query
-                                    properties:
-                                      cidr:
-                                        type: string
-                                      description:
-                                        type: string
-                                      enableDhcp:
-                                        type: boolean
-                                      gateway_ip:
-                                        type: string
-                                      id:
-                                        type: string
-                                      ipVersion:
-                                        type: integer
-                                      ipv6AddressMode:
-                                        type: string
-                                      ipv6RaMode:
-                                        type: string
-                                      limit:
-                                        type: integer
-                                      marker:
-                                        type: string
-                                      name:
-                                        type: string
-                                      networkId:
-                                        type: string
-                                      notTags:
-                                        type: string
-                                      notTagsAny:
-                                        type: string
-                                      projectId:
-                                        type: string
-                                      sortDir:
-                                        type: string
-                                      sortKey:
-                                        type: string
-                                      subnetpoolId:
-                                        type: string
-                                      tags:
-                                        type: string
-                                      tagsAny:
-                                        type: string
-                                      tenantId:
-                                        type: string
-                                    type: object
-                                  uuid:
-                                    description: Optional UUID of the subnet. If specified
-                                      this will not be validated prior to server creation.
-                                      If specified, the enclosing `NetworkParam` must
-                                      also be specified by UUID.
-                                    type: string
-                                type: object
-                              type: array
-                            uuid:
-                              description: Optional UUID of the network. If specified
-                                this will not be validated prior to server creation.
-                                Required if `Subnets` specifies a subnet by UUID.
-                              type: string
-                          type: object
-                        type: array
-                      ports:
-                        description: Ports to be attached to the server instance.
-                          They are created if a port with the given name does not
-                          already exist. When you do not specify both networks and
-                          ports parameters, the server attaches to the only network
-                          created for the current tenant.
-                        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
-                                  subnetId:
-                                    type: string
-                                required:
-                                - subnetId
-                                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
-                            networkId:
-                              description: ID of the OpenStack network on which to
-                                create the port. If unspecified, create the port on
-                                the default cluster network.
-                              type: string
-                            profile:
-                              additionalProperties:
-                                type: string
-                              description: A dictionary that enables the application
-                                running on the specified host to pass and receive
-                                virtual network interface (VIF) port-specific information
-                                to the plug-in.
-                              type: object
-                            projectId:
-                              type: string
-                            securityGroups:
-                              items:
-                                type: string
-                              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
-                            tenantId:
-                              type: string
-                            trunk:
-                              description: Enables and disables trunk at port level.
-                                If not provided, openStackMachine.Spec.Trunk is inherited.
-                              type: boolean
-                            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:
-                          deviceType:
-                            type: string
-                          diskSize:
-                            type: integer
-                          sourceType:
-                            type: string
-                          sourceUUID:
-                            type: string
-                        type: object
-                      securityGroups:
-                        description: The names of the security groups to assign to
-                          the instance
-                        items:
-                          properties:
-                            filter:
-                              description: Filters used to query security groups in
-                                openstack
-                              properties:
-                                description:
-                                  type: string
-                                id:
-                                  type: string
-                                limit:
-                                  type: integer
-                                marker:
-                                  type: string
-                                name:
-                                  type: string
-                                notTags:
-                                  type: string
-                                notTagsAny:
-                                  type: string
-                                projectId:
-                                  type: string
-                                sortDir:
-                                  type: string
-                                sortKey:
-                                  type: string
-                                tags:
-                                  type: string
-                                tagsAny:
-                                  type: string
-                                tenantId:
-                                  type: string
-                              type: object
-                            name:
-                              description: Security Group name
-                              type: string
-                            uuid:
-                              description: Security Group UID
-                              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
-                      subnet:
-                        description: UUID, IP address of a port from this subnet will
-                          be marked as AccessIPv4 on the created compute instance
-                        type: string
-                      tags:
-                        description: Machine tags Requires Nova api 2.52 minimum!
-                        items:
-                          type: string
-                        type: array
-                      trunk:
-                        description: Whether the server instance is created on a trunk
-                          port or not.
-                        type: boolean
-                    required:
-                    - flavor
-                    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
-              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
-              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
-              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:
-                        filter:
-                          description: Filters for optional subnet query
-                          properties:
-                            cidr:
-                              type: string
-                            description:
-                              type: string
-                            enableDhcp:
-                              type: boolean
-                            gateway_ip:
-                              type: string
-                            id:
-                              type: string
-                            ipVersion:
-                              type: integer
-                            ipv6AddressMode:
-                              type: string
-                            ipv6RaMode:
-                              type: string
-                            limit:
-                              type: integer
-                            marker:
-                              type: string
-                            name:
-                              type: string
-                            networkId:
-                              type: string
-                            notTags:
-                              type: string
-                            notTagsAny:
-                              type: string
-                            projectId:
-                              type: string
-                            sortDir:
-                              type: string
-                            sortKey:
-                              type: string
-                            subnetpoolId:
-                              type: string
-                            tags:
-                              type: string
-                            tagsAny:
-                              type: string
-                            tenantId:
-                              type: string
-                          type: object
-                        uuid:
-                          description: Optional UUID of the subnet. If specified this
-                            will not be validated prior to server creation. If specified,
-                            the enclosing `NetworkParam` must also be specified by
-                            UUID.
-                          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
-              managedAPIServerLoadBalancer:
-                description: ManagedAPIServerLoadBalancer defines whether a LoadBalancer
-                  for the APIServer should be created.
-                type: boolean
-              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:
-                  adminStateUp:
-                    type: boolean
-                  description:
-                    type: string
-                  id:
-                    type: string
-                  limit:
-                    type: integer
-                  marker:
-                    type: string
-                  name:
-                    type: string
-                  notTags:
-                    type: string
-                  notTagsAny:
-                    type: string
-                  projectId:
-                    type: string
-                  shared:
-                    type: boolean
-                  sortDir:
-                    type: string
-                  sortKey:
-                    type: string
-                  status:
-                    type: string
-                  tags:
-                    type: string
-                  tagsAny:
-                    type: string
-                  tenantId:
-                    type: string
-                type: object
-              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
-              subnet:
-                description: If NodeCIDR cannot be set this can be used to detect
-                  an existing subnet.
-                properties:
-                  cidr:
-                    type: string
-                  description:
-                    type: string
-                  enableDhcp:
-                    type: boolean
-                  gateway_ip:
-                    type: string
-                  id:
-                    type: string
-                  ipVersion:
-                    type: integer
-                  ipv6AddressMode:
-                    type: string
-                  ipv6RaMode:
-                    type: string
-                  limit:
-                    type: integer
-                  marker:
-                    type: string
-                  name:
-                    type: string
-                  networkId:
-                    type: string
-                  notTags:
-                    type: string
-                  notTagsAny:
-                    type: string
-                  projectId:
-                    type: string
-                  sortDir:
-                    type: string
-                  sortKey:
-                    type: string
-                  subnetpoolId:
-                    type: string
-                  tags:
-                    type: string
-                  tagsAny:
-                    type: string
-                  tenantId:
-                    type: string
-                type: object
-              tags:
-                description: Tags for all resources in cluster
-                items:
-                  type: string
-                type: array
-            type: object
-          status:
-            description: OpenStackClusterStatus defines the observed state of OpenStackCluster.
-            properties:
-              bastion:
-                properties:
-                  configDrive:
-                    type: boolean
-                  failureDomain:
-                    type: string
-                  flavor:
-                    type: string
-                  floatingIP:
-                    type: string
-                  id:
-                    type: string
-                  image:
-                    type: string
-                  ip:
-                    type: string
-                  metadata:
-                    additionalProperties:
-                      type: string
-                    type: object
-                  name:
-                    type: string
-                  networks:
-                    items:
-                      description: Network represents basic information about an OpenStack
-                        Neutron Network associated with an instance's port.
-                      properties:
-                        apiServerLoadBalancer:
-                          description: Be careful when using APIServerLoadBalancer,
-                            because this field is optional and therefore not set in
-                            all cases
-                          properties:
-                            id:
-                              type: string
-                            internalIP:
-                              type: string
-                            ip:
-                              type: string
-                            name:
-                              type: string
-                          required:
-                          - id
-                          - internalIP
-                          - ip
-                          - name
-                          type: object
-                        id:
-                          type: string
-                        name:
-                          type: string
-                        port:
-                          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
-                                  subnetId:
-                                    type: string
-                                required:
-                                - subnetId
-                                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
-                            networkId:
-                              description: ID of the OpenStack network on which to
-                                create the port. If unspecified, create the port on
-                                the default cluster network.
-                              type: string
-                            profile:
-                              additionalProperties:
-                                type: string
-                              description: A dictionary that enables the application
-                                running on the specified host to pass and receive
-                                virtual network interface (VIF) port-specific information
-                                to the plug-in.
-                              type: object
-                            projectId:
-                              type: string
-                            securityGroups:
-                              items:
-                                type: string
-                              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
-                            tenantId:
-                              type: string
-                            trunk:
-                              description: Enables and disables trunk at port level.
-                                If not provided, openStackMachine.Spec.Trunk is inherited.
-                              type: boolean
-                            vnicType:
-                              description: The virtual network interface card (vNIC)
-                                type that is bound to the neutron port.
-                              type: string
-                          type: object
-                        router:
-                          description: Router represents basic information about the
-                            associated OpenStack Neutron Router.
-                          properties:
-                            id:
-                              type: string
-                            name:
-                              type: string
-                            tags:
-                              items:
-                                type: string
-                              type: array
-                          required:
-                          - id
-                          - name
-                          type: object
-                        subnet:
-                          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
-                        tags:
-                          items:
-                            type: string
-                          type: array
-                      required:
-                      - id
-                      - name
-                      type: object
-                    type: array
-                  rootVolume:
-                    properties:
-                      deviceType:
-                        type: string
-                      diskSize:
-                        type: integer
-                      sourceType:
-                        type: string
-                      sourceUUID:
-                        type: string
-                    type: object
-                  securigyGroups:
-                    items:
-                      type: string
-                    type: array
-                  serverGroupID:
-                    type: string
-                  sshKeyName:
-                    type: string
-                  state:
-                    description: InstanceState describes the state of an OpenStack
-                      instance.
-                    type: string
-                  subnet:
-                    type: string
-                  tags:
-                    items:
-                      type: string
-                    type: array
-                  trunk:
-                    type: boolean
-                  userData:
-                    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
-                - rules
-                type: object
-              controlPlaneSecurityGroup:
-                description: 'ControlPlaneSecurityGroups contains all the information
-                  about the OpenStack Security Group that needs to be applied to control
-                  plane nodes. TODO: Maybe instead of two properties, we add a property
-                  to the 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
-                - rules
-                type: object
-              externalNetwork:
-                description: External Network contains information about the created
-                  OpenStack external network.
-                properties:
-                  apiServerLoadBalancer:
-                    description: Be careful when using APIServerLoadBalancer, because
-                      this field is optional and therefore not set in all cases
-                    properties:
-                      id:
-                        type: string
-                      internalIP:
-                        type: string
-                      ip:
-                        type: string
-                      name:
-                        type: string
-                    required:
-                    - id
-                    - internalIP
-                    - ip
-                    - name
-                    type: object
-                  id:
-                    type: string
-                  name:
-                    type: string
-                  port:
-                    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
-                            subnetId:
-                              type: string
-                          required:
-                          - subnetId
-                          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
-                      networkId:
-                        description: ID of the OpenStack network on which to create
-                          the port. If unspecified, create the port on the default
-                          cluster network.
-                        type: string
-                      profile:
-                        additionalProperties:
-                          type: string
-                        description: A dictionary that enables the application running
-                          on the specified host to pass and receive virtual network
-                          interface (VIF) port-specific information to the plug-in.
-                        type: object
-                      projectId:
-                        type: string
-                      securityGroups:
-                        items:
-                          type: string
-                        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
-                      tenantId:
-                        type: string
-                      trunk:
-                        description: Enables and disables trunk at port level. If
-                          not provided, openStackMachine.Spec.Trunk is inherited.
-                        type: boolean
-                      vnicType:
-                        description: The virtual network interface card (vNIC) type
-                          that is bound to the neutron port.
-                        type: string
-                    type: object
-                  router:
-                    description: Router represents basic information about the associated
-                      OpenStack Neutron Router.
-                    properties:
-                      id:
-                        type: string
-                      name:
-                        type: string
-                      tags:
-                        items:
-                          type: string
-                        type: array
-                    required:
-                    - id
-                    - name
-                    type: object
-                  subnet:
-                    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
-                  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.
-                  \n 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. \n 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. \n 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. \n 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 all information about the created OpenStack
-                  Network. It includes Subnets and Router.
-                properties:
-                  apiServerLoadBalancer:
-                    description: Be careful when using APIServerLoadBalancer, because
-                      this field is optional and therefore not set in all cases
-                    properties:
-                      id:
-                        type: string
-                      internalIP:
-                        type: string
-                      ip:
-                        type: string
-                      name:
-                        type: string
-                    required:
-                    - id
-                    - internalIP
-                    - ip
-                    - name
-                    type: object
-                  id:
-                    type: string
-                  name:
-                    type: string
-                  port:
-                    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
-                            subnetId:
-                              type: string
-                          required:
-                          - subnetId
-                          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
-                      networkId:
-                        description: ID of the OpenStack network on which to create
-                          the port. If unspecified, create the port on the default
-                          cluster network.
-                        type: string
-                      profile:
-                        additionalProperties:
-                          type: string
-                        description: A dictionary that enables the application running
-                          on the specified host to pass and receive virtual network
-                          interface (VIF) port-specific information to the plug-in.
-                        type: object
-                      projectId:
-                        type: string
-                      securityGroups:
-                        items:
-                          type: string
-                        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
-                      tenantId:
-                        type: string
-                      trunk:
-                        description: Enables and disables trunk at port level. If
-                          not provided, openStackMachine.Spec.Trunk is inherited.
-                        type: boolean
-                      vnicType:
-                        description: The virtual network interface card (vNIC) type
-                          that is bound to the neutron port.
-                        type: string
-                    type: object
-                  router:
-                    description: Router represents basic information about the associated
-                      OpenStack Neutron Router.
-                    properties:
-                      id:
-                        type: string
-                      name:
-                        type: string
-                      tags:
-                        items:
-                          type: string
-                        type: array
-                    required:
-                    - id
-                    - name
-                    type: object
-                  subnet:
-                    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
-                  tags:
-                    items:
-                      type: string
-                    type: array
-                required:
-                - id
-                - name
-                type: object
-              ready:
-                type: boolean
-              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
-                - rules
-                type: object
-            required:
-            - ready
-            type: object
-        type: object
-    served: true
-    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: Subnet the cluster is using
-      jsonPath: .status.network.subnet.id
-      name: Subnet
-      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: v1alpha5
-    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:
-              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
-                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
-                  \n 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:
-                      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.
-                        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
-                        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
-                      networks:
-                        description: A networks object. Required parameter when there
-                          are multiple networks defined for the tenant. When you do
-                          not specify both networks and ports parameters, the server
-                          attaches to the only network created for the current tenant.
-                        items:
-                          properties:
-                            filter:
-                              description: Filters for optional network query
-                              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
-                            fixedIP:
-                              description: A fixed IPv4 address for the NIC.
-                              type: string
-                            subnets:
-                              description: Subnet within a network to use
-                              items:
-                                properties:
-                                  filter:
-                                    description: Filters for optional subnet query
-                                    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
-                                  uuid:
-                                    description: Optional UUID of the subnet. If specified
-                                      this will not be validated prior to server creation.
-                                      If specified, the enclosing `NetworkParam` must
-                                      also be specified by UUID.
-                                    type: string
-                                type: object
-                              type: array
-                            uuid:
-                              description: Optional UUID of the network. If specified
-                                this will not be validated prior to server creation.
-                                Required if `Subnets` specifies a subnet by UUID.
-                              type: string
-                          type: object
-                        type: array
-                      ports:
-                        description: Ports to be attached to the server instance.
-                          They are created if a port with the given name does not
-                          already exist. When you do not specify both networks and
-                          ports parameters, the server attaches to the only network
-                          created for the current tenant.
-                        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:
-                              additionalProperties:
-                                type: string
-                              description: A dictionary that enables the application
-                                running on the specified host to pass and receive
-                                virtual network interface (VIF) port-specific information
-                                to the plug-in.
-                              type: object
-                            projectId:
-                              type: string
-                            securityGroupFilters:
-                              description: The names, uuids, filters or any combination
-                                these of the security groups to assign to the instance
-                              items:
-                                properties:
-                                  filter:
-                                    description: Filters used to query security groups
-                                      in openstack
-                                    properties:
-                                      description:
-                                        type: string
-                                      id:
-                                        type: string
-                                      limit:
-                                        type: integer
-                                      marker:
-                                        type: string
-                                      name:
-                                        type: string
-                                      notTags:
-                                        type: string
-                                      notTagsAny:
-                                        type: string
-                                      projectId:
-                                        type: string
-                                      sortDir:
-                                        type: string
-                                      sortKey:
-                                        type: string
-                                      tags:
-                                        type: string
-                                      tagsAny:
-                                        type: string
-                                      tenantId:
-                                        type: string
-                                    type: object
-                                  name:
-                                    description: Security Group name
-                                    type: string
-                                  uuid:
-                                    description: Security Group UID
-                                    type: string
-                                type: object
-                              type: array
-                            securityGroups:
-                              description: The uuids of the security groups to assign
-                                to the instance
-                              items:
-                                type: string
-                              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
-                            tenantId:
-                              type: string
-                            trunk:
-                              description: Enables and disables trunk at port level.
-                                If not provided, openStackMachine.Spec.Trunk is inherited.
-                              type: boolean
-                            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:
-                            filter:
-                              description: Filters used to query security groups in
-                                openstack
-                              properties:
-                                description:
-                                  type: string
-                                id:
-                                  type: string
-                                limit:
-                                  type: integer
-                                marker:
-                                  type: string
-                                name:
-                                  type: string
-                                notTags:
-                                  type: string
-                                notTagsAny:
-                                  type: string
-                                projectId:
-                                  type: string
-                                sortDir:
-                                  type: string
-                                sortKey:
-                                  type: string
-                                tags:
-                                  type: string
-                                tagsAny:
-                                  type: string
-                                tenantId:
-                                  type: string
-                              type: object
-                            name:
-                              description: Security Group name
-                              type: string
-                            uuid:
-                              description: Security Group UID
-                              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
-                      subnet:
-                        description: UUID, IP address of a port from this subnet will
-                          be marked as AccessIPv4 on the created compute instance
-                        type: string
-                      tags:
-                        description: Machine tags Requires Nova api 2.52 minimum!
-                        items:
-                          type: string
-                        type: array
-                      trunk:
-                        description: Whether the server instance is created on a trunk
-                          port or not.
-                        type: boolean
-                    required:
-                    - flavor
-                    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
-              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
-              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
-              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:
-                        filter:
-                          description: Filters for optional subnet query
-                          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
-                        uuid:
-                          description: Optional UUID of the subnet. If specified this
-                            will not be validated prior to server creation. If specified,
-                            the enclosing `NetworkParam` must also be specified by
-                            UUID.
-                          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
-              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
-              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
-            type: object
-          status:
-            description: OpenStackClusterStatus defines the observed state of OpenStackCluster.
-            properties:
-              bastion:
-                properties:
-                  configDrive:
-                    type: boolean
-                  failureDomain:
-                    type: string
-                  flavor:
-                    type: string
-                  floatingIP:
-                    type: string
-                  id:
-                    type: string
-                  image:
-                    type: string
-                  imageUUID:
-                    type: string
-                  ip:
-                    type: string
-                  metadata:
-                    additionalProperties:
-                      type: string
-                    type: object
-                  name:
-                    type: string
-                  networks:
-                    items:
-                      description: Network represents basic information about an OpenStack
-                        Neutron Network associated with an instance's port.
-                      properties:
-                        apiServerLoadBalancer:
-                          description: Be careful when using APIServerLoadBalancer,
-                            because this field is optional and therefore not set in
-                            all cases
-                          properties:
-                            allowedCIDRs:
-                              items:
-                                type: string
-                              type: array
-                            id:
-                              type: string
-                            internalIP:
-                              type: string
-                            ip:
-                              type: string
-                            name:
-                              type: string
-                          required:
-                          - id
-                          - internalIP
-                          - ip
-                          - name
-                          type: object
-                        id:
-                          type: string
-                        name:
-                          type: string
-                        port:
-                          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:
-                              additionalProperties:
-                                type: string
-                              description: A dictionary that enables the application
-                                running on the specified host to pass and receive
-                                virtual network interface (VIF) port-specific information
-                                to the plug-in.
-                              type: object
-                            projectId:
-                              type: string
-                            securityGroupFilters:
-                              description: The names, uuids, filters or any combination
-                                these of the security groups to assign to the instance
-                              items:
-                                properties:
-                                  filter:
-                                    description: Filters used to query security groups
-                                      in openstack
-                                    properties:
-                                      description:
-                                        type: string
-                                      id:
-                                        type: string
-                                      limit:
-                                        type: integer
-                                      marker:
-                                        type: string
-                                      name:
-                                        type: string
-                                      notTags:
-                                        type: string
-                                      notTagsAny:
-                                        type: string
-                                      projectId:
-                                        type: string
-                                      sortDir:
-                                        type: string
-                                      sortKey:
-                                        type: string
-                                      tags:
-                                        type: string
-                                      tagsAny:
-                                        type: string
-                                      tenantId:
-                                        type: string
-                                    type: object
-                                  name:
-                                    description: Security Group name
-                                    type: string
-                                  uuid:
-                                    description: Security Group UID
-                                    type: string
-                                type: object
-                              type: array
-                            securityGroups:
-                              description: The uuids of the security groups to assign
-                                to the instance
-                              items:
-                                type: string
-                              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
-                            tenantId:
-                              type: string
-                            trunk:
-                              description: Enables and disables trunk at port level.
-                                If not provided, openStackMachine.Spec.Trunk is inherited.
-                              type: boolean
-                            vnicType:
-                              description: The virtual network interface card (vNIC)
-                                type that is bound to the neutron port.
-                              type: string
-                          type: object
-                        router:
-                          description: Router represents basic information about the
-                            associated OpenStack Neutron 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
-                        subnet:
-                          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
-                        tags:
-                          items:
-                            type: string
-                          type: array
-                      required:
-                      - id
-                      - name
-                      type: object
-                    type: array
-                  rootVolume:
-                    properties:
-                      availabilityZone:
-                        type: string
-                      diskSize:
-                        type: integer
-                      volumeType:
-                        type: string
-                    type: object
-                  securigyGroups:
-                    items:
-                      type: string
-                    type: array
-                  serverGroupID:
-                    type: string
-                  sshKeyName:
-                    type: string
-                  state:
-                    description: InstanceState describes the state of an OpenStack
-                      instance.
-                    type: string
-                  subnet:
-                    type: string
-                  tags:
-                    items:
-                      type: string
-                    type: array
-                  trunk:
-                    type: boolean
-                  userData:
-                    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
-                - rules
-                type: object
-              controlPlaneSecurityGroup:
-                description: 'ControlPlaneSecurityGroups contains all the information
-                  about the OpenStack Security Group that needs to be applied to control
-                  plane nodes. TODO: Maybe instead of two properties, we add a property
-                  to the 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
-                - rules
-                type: object
-              externalNetwork:
-                description: External Network contains information about the created
-                  OpenStack external network.
-                properties:
-                  apiServerLoadBalancer:
-                    description: Be careful when using APIServerLoadBalancer, because
-                      this field is optional and therefore not set in all cases
-                    properties:
-                      allowedCIDRs:
-                        items:
-                          type: string
-                        type: array
-                      id:
-                        type: string
-                      internalIP:
-                        type: string
-                      ip:
-                        type: string
-                      name:
-                        type: string
-                    required:
-                    - id
-                    - internalIP
-                    - ip
-                    - name
-                    type: object
-                  id:
-                    type: string
-                  name:
-                    type: string
-                  port:
-                    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:
-                        additionalProperties:
-                          type: string
-                        description: A dictionary that enables the application running
-                          on the specified host to pass and receive virtual network
-                          interface (VIF) port-specific information to the plug-in.
-                        type: object
-                      projectId:
-                        type: string
-                      securityGroupFilters:
-                        description: The names, uuids, filters or any combination
-                          these of the security groups to assign to the instance
-                        items:
-                          properties:
-                            filter:
-                              description: Filters used to query security groups in
-                                openstack
-                              properties:
-                                description:
-                                  type: string
-                                id:
-                                  type: string
-                                limit:
-                                  type: integer
-                                marker:
-                                  type: string
-                                name:
-                                  type: string
-                                notTags:
-                                  type: string
-                                notTagsAny:
-                                  type: string
-                                projectId:
-                                  type: string
-                                sortDir:
-                                  type: string
-                                sortKey:
-                                  type: string
-                                tags:
-                                  type: string
-                                tagsAny:
-                                  type: string
-                                tenantId:
-                                  type: string
-                              type: object
-                            name:
-                              description: Security Group name
-                              type: string
-                            uuid:
-                              description: Security Group UID
-                              type: string
-                          type: object
-                        type: array
-                      securityGroups:
-                        description: The uuids of the security groups to assign to
-                          the instance
-                        items:
-                          type: string
-                        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
-                      tenantId:
-                        type: string
-                      trunk:
-                        description: Enables and disables trunk at port level. If
-                          not provided, openStackMachine.Spec.Trunk is inherited.
-                        type: boolean
-                      vnicType:
-                        description: The virtual network interface card (vNIC) type
-                          that is bound to the neutron port.
-                        type: string
-                    type: object
-                  router:
-                    description: Router represents basic information about the associated
-                      OpenStack Neutron 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
-                  subnet:
-                    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
-                  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.
-                  \n 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. \n 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. \n 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. \n 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 all information about the created OpenStack
-                  Network. It includes Subnets and Router.
-                properties:
-                  apiServerLoadBalancer:
-                    description: Be careful when using APIServerLoadBalancer, because
-                      this field is optional and therefore not set in all cases
-                    properties:
-                      allowedCIDRs:
-                        items:
-                          type: string
-                        type: array
-                      id:
-                        type: string
-                      internalIP:
-                        type: string
-                      ip:
-                        type: string
-                      name:
-                        type: string
-                    required:
-                    - id
-                    - internalIP
-                    - ip
-                    - name
-                    type: object
-                  id:
-                    type: string
-                  name:
-                    type: string
-                  port:
-                    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:
-                        additionalProperties:
-                          type: string
-                        description: A dictionary that enables the application running
-                          on the specified host to pass and receive virtual network
-                          interface (VIF) port-specific information to the plug-in.
-                        type: object
-                      projectId:
-                        type: string
-                      securityGroupFilters:
-                        description: The names, uuids, filters or any combination
-                          these of the security groups to assign to the instance
-                        items:
-                          properties:
-                            filter:
-                              description: Filters used to query security groups in
-                                openstack
-                              properties:
-                                description:
-                                  type: string
-                                id:
-                                  type: string
-                                limit:
-                                  type: integer
-                                marker:
-                                  type: string
-                                name:
-                                  type: string
-                                notTags:
-                                  type: string
-                                notTagsAny:
-                                  type: string
-                                projectId:
-                                  type: string
-                                sortDir:
-                                  type: string
-                                sortKey:
-                                  type: string
-                                tags:
-                                  type: string
-                                tagsAny:
-                                  type: string
-                                tenantId:
-                                  type: string
-                              type: object
-                            name:
-                              description: Security Group name
-                              type: string
-                            uuid:
-                              description: Security Group UID
-                              type: string
-                          type: object
-                        type: array
-                      securityGroups:
-                        description: The uuids of the security groups to assign to
-                          the instance
-                        items:
-                          type: string
-                        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
-                      tenantId:
-                        type: string
-                      trunk:
-                        description: Enables and disables trunk at port level. If
-                          not provided, openStackMachine.Spec.Trunk is inherited.
-                        type: boolean
-                      vnicType:
-                        description: The virtual network interface card (vNIC) type
-                          that is bound to the neutron port.
-                        type: string
-                    type: object
-                  router:
-                    description: Router represents basic information about the associated
-                      OpenStack Neutron 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
-                  subnet:
-                    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
-                  tags:
-                    items:
-                      type: string
-                    type: array
-                required:
-                - id
-                - name
-                type: object
-              ready:
-                type: boolean
-              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
-                - rules
-                type: object
-            required:
-            - ready
-            type: object
-        type: object
-    served: true
-    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: Subnet the cluster is using
-      jsonPath: .status.network.subnet.id
-      name: Subnet
-      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: v1alpha6
-    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:
-              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
-                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
-                  \n 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:
-                      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.
-                        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
-                        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
-                      networks:
-                        description: A networks object. Required parameter when there
-                          are multiple networks defined for the tenant. When you do
-                          not specify both networks and ports parameters, the server
-                          attaches to the only network created for the current tenant.
-                        items:
-                          properties:
-                            filter:
-                              description: Filters for optional network query
-                              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
-                            fixedIP:
-                              description: A fixed IPv4 address for the NIC.
-                              type: string
-                            subnets:
-                              description: Subnet within a network to use
-                              items:
-                                properties:
-                                  filter:
-                                    description: Filters for optional subnet query
-                                    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
-                                  uuid:
-                                    description: Optional UUID of the subnet. If specified
-                                      this will not be validated prior to server creation.
-                                      If specified, the enclosing `NetworkParam` must
-                                      also be specified by UUID.
-                                    type: string
-                                type: object
-                              type: array
-                            uuid:
-                              description: Optional UUID of the network. If specified
-                                this will not be validated prior to server creation.
-                                Required if `Subnets` specifies a subnet by UUID.
-                              type: string
-                          type: object
-                        type: array
-                      ports:
-                        description: Ports to be attached to the server instance.
-                          They are created if a port with the given name does not
-                          already exist. When you do not specify both networks and
-                          ports parameters, the server attaches to the only network
-                          created for the current tenant.
-                        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:
-                              additionalProperties:
-                                type: string
-                              description: A dictionary that enables the application
-                                running on the specified host to pass and receive
-                                virtual network interface (VIF) port-specific information
-                                to the plug-in.
-                              type: object
-                            projectId:
-                              type: string
-                            securityGroupFilters:
-                              description: The names, uuids, filters or any combination
-                                these of the security groups to assign to the instance
-                              items:
-                                properties:
-                                  filter:
-                                    description: Filters used to query security groups
-                                      in openstack
-                                    properties:
-                                      description:
-                                        type: string
-                                      id:
-                                        type: string
-                                      limit:
-                                        type: integer
-                                      marker:
-                                        type: string
-                                      name:
-                                        type: string
-                                      notTags:
-                                        type: string
-                                      notTagsAny:
-                                        type: string
-                                      projectId:
-                                        type: string
-                                      sortDir:
-                                        type: string
-                                      sortKey:
-                                        type: string
-                                      tags:
-                                        type: string
-                                      tagsAny:
-                                        type: string
-                                      tenantId:
-                                        type: string
-                                    type: object
-                                  name:
-                                    description: Security Group name
-                                    type: string
-                                  uuid:
-                                    description: Security Group UID
-                                    type: string
-                                type: object
-                              type: array
-                            securityGroups:
-                              description: The uuids of the security groups to assign
-                                to the instance
-                              items:
-                                type: string
-                              type: array
-                              x-kubernetes-list-type: set
-                            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
-                            tenantId:
-                              type: string
-                            trunk:
-                              description: Enables and disables trunk at port level.
-                                If not provided, openStackMachine.Spec.Trunk is inherited.
-                              type: boolean
-                            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:
-                            filter:
-                              description: Filters used to query security groups in
-                                openstack
-                              properties:
-                                description:
-                                  type: string
-                                id:
-                                  type: string
-                                limit:
-                                  type: integer
-                                marker:
-                                  type: string
-                                name:
-                                  type: string
-                                notTags:
-                                  type: string
-                                notTagsAny:
-                                  type: string
-                                projectId:
-                                  type: string
-                                sortDir:
-                                  type: string
-                                sortKey:
-                                  type: string
-                                tags:
-                                  type: string
-                                tagsAny:
-                                  type: string
-                                tenantId:
-                                  type: string
-                              type: object
-                            name:
-                              description: Security Group name
-                              type: string
-                            uuid:
-                              description: Security Group UID
-                              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
-                      subnet:
-                        description: UUID, IP address of a port from this subnet will
-                          be marked as AccessIPv4 on the created compute 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
-                    required:
-                    - flavor
-                    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:
-                        filter:
-                          description: Filters for optional subnet query
-                          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
-                        uuid:
-                          description: Optional UUID of the subnet. If specified this
-                            will not be validated prior to server creation. If specified,
-                            the enclosing `NetworkParam` must also be specified by
-                            UUID.
-                          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
-              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
-              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:
-              bastion:
-                properties:
-                  configDrive:
-                    type: boolean
-                  failureDomain:
-                    type: string
-                  flavor:
-                    type: string
-                  floatingIP:
-                    type: string
-                  id:
-                    type: string
-                  image:
-                    type: string
-                  imageUUID:
-                    type: string
-                  ip:
-                    type: string
-                  metadata:
-                    additionalProperties:
-                      type: string
-                    type: object
-                  name:
-                    type: string
-                  networks:
-                    items:
-                      description: Network represents basic information about an OpenStack
-                        Neutron Network associated with an instance's port.
-                      properties:
-                        apiServerLoadBalancer:
-                          description: Be careful when using APIServerLoadBalancer,
-                            because this field is optional and therefore not set in
-                            all cases
-                          properties:
-                            allowedCIDRs:
-                              items:
-                                type: string
-                              type: array
-                            id:
-                              type: string
-                            internalIP:
-                              type: string
-                            ip:
-                              type: string
-                            name:
-                              type: string
-                          required:
-                          - id
-                          - internalIP
-                          - ip
-                          - name
-                          type: object
-                        id:
-                          type: string
-                        name:
-                          type: string
-                        port:
-                          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:
-                              additionalProperties:
-                                type: string
-                              description: A dictionary that enables the application
-                                running on the specified host to pass and receive
-                                virtual network interface (VIF) port-specific information
-                                to the plug-in.
-                              type: object
-                            projectId:
-                              type: string
-                            securityGroupFilters:
-                              description: The names, uuids, filters or any combination
-                                these of the security groups to assign to the instance
-                              items:
-                                properties:
-                                  filter:
-                                    description: Filters used to query security groups
-                                      in openstack
-                                    properties:
-                                      description:
-                                        type: string
-                                      id:
-                                        type: string
-                                      limit:
-                                        type: integer
-                                      marker:
-                                        type: string
-                                      name:
-                                        type: string
-                                      notTags:
-                                        type: string
-                                      notTagsAny:
-                                        type: string
-                                      projectId:
-                                        type: string
-                                      sortDir:
-                                        type: string
-                                      sortKey:
-                                        type: string
-                                      tags:
-                                        type: string
-                                      tagsAny:
-                                        type: string
-                                      tenantId:
-                                        type: string
-                                    type: object
-                                  name:
-                                    description: Security Group name
-                                    type: string
-                                  uuid:
-                                    description: Security Group UID
-                                    type: string
-                                type: object
-                              type: array
-                            securityGroups:
-                              description: The uuids of the security groups to assign
-                                to the instance
-                              items:
-                                type: string
-                              type: array
-                              x-kubernetes-list-type: set
-                            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
-                            tenantId:
-                              type: string
-                            trunk:
-                              description: Enables and disables trunk at port level.
-                                If not provided, openStackMachine.Spec.Trunk is inherited.
-                              type: boolean
-                            vnicType:
-                              description: The virtual network interface card (vNIC)
-                                type that is bound to the neutron port.
-                              type: string
-                          type: object
-                        router:
-                          description: Router represents basic information about the
-                            associated OpenStack Neutron 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
-                        subnet:
-                          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
-                        tags:
-                          items:
-                            type: string
-                          type: array
-                      required:
-                      - id
-                      - name
-                      type: object
-                    type: array
-                  rootVolume:
-                    properties:
-                      availabilityZone:
-                        type: string
-                      diskSize:
-                        type: integer
-                      volumeType:
-                        type: string
-                    type: object
-                  securigyGroups:
-                    items:
-                      type: string
-                    type: array
-                  serverGroupID:
-                    type: string
-                  sshKeyName:
-                    type: string
-                  state:
-                    description: InstanceState describes the state of an OpenStack
-                      instance.
-                    type: string
-                  subnet:
-                    type: string
-                  tags:
-                    items:
-                      type: string
-                    type: array
-                  trunk:
-                    type: boolean
-                  userData:
-                    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
-                - rules
-                type: object
-              controlPlaneSecurityGroup:
-                description: 'ControlPlaneSecurityGroups contains all the information
-                  about the OpenStack Security Group that needs to be applied to control
-                  plane nodes. TODO: Maybe instead of two properties, we add a property
-                  to the 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
-                - rules
-                type: object
-              externalNetwork:
-                description: External Network contains information about the created
-                  OpenStack external network.
-                properties:
-                  apiServerLoadBalancer:
-                    description: Be careful when using APIServerLoadBalancer, because
-                      this field is optional and therefore not set in all cases
-                    properties:
-                      allowedCIDRs:
-                        items:
-                          type: string
-                        type: array
-                      id:
-                        type: string
-                      internalIP:
-                        type: string
-                      ip:
-                        type: string
-                      name:
-                        type: string
-                    required:
-                    - id
-                    - internalIP
-                    - ip
-                    - name
-                    type: object
-                  id:
-                    type: string
-                  name:
-                    type: string
-                  port:
-                    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:
-                        additionalProperties:
-                          type: string
-                        description: A dictionary that enables the application running
-                          on the specified host to pass and receive virtual network
-                          interface (VIF) port-specific information to the plug-in.
-                        type: object
-                      projectId:
-                        type: string
-                      securityGroupFilters:
-                        description: The names, uuids, filters or any combination
-                          these of the security groups to assign to the instance
-                        items:
-                          properties:
-                            filter:
-                              description: Filters used to query security groups in
-                                openstack
-                              properties:
-                                description:
-                                  type: string
-                                id:
-                                  type: string
-                                limit:
-                                  type: integer
-                                marker:
-                                  type: string
-                                name:
-                                  type: string
-                                notTags:
-                                  type: string
-                                notTagsAny:
-                                  type: string
-                                projectId:
-                                  type: string
-                                sortDir:
-                                  type: string
-                                sortKey:
-                                  type: string
-                                tags:
-                                  type: string
-                                tagsAny:
-                                  type: string
-                                tenantId:
-                                  type: string
-                              type: object
-                            name:
-                              description: Security Group name
-                              type: string
-                            uuid:
-                              description: Security Group UID
-                              type: string
-                          type: object
-                        type: array
-                      securityGroups:
-                        description: The uuids of the security groups to assign to
-                          the instance
-                        items:
-                          type: string
-                        type: array
-                        x-kubernetes-list-type: set
-                      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
-                      tenantId:
-                        type: string
-                      trunk:
-                        description: Enables and disables trunk at port level. If
-                          not provided, openStackMachine.Spec.Trunk is inherited.
-                        type: boolean
-                      vnicType:
-                        description: The virtual network interface card (vNIC) type
-                          that is bound to the neutron port.
-                        type: string
-                    type: object
-                  router:
-                    description: Router represents basic information about the associated
-                      OpenStack Neutron 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
-                  subnet:
-                    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
-                  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.
-                  \n 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. \n 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. \n 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. \n 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 all information about the created OpenStack
-                  Network. It includes Subnets and Router.
-                properties:
-                  apiServerLoadBalancer:
-                    description: Be careful when using APIServerLoadBalancer, because
-                      this field is optional and therefore not set in all cases
-                    properties:
-                      allowedCIDRs:
-                        items:
-                          type: string
-                        type: array
-                      id:
-                        type: string
-                      internalIP:
-                        type: string
-                      ip:
-                        type: string
-                      name:
-                        type: string
-                    required:
-                    - id
-                    - internalIP
-                    - ip
-                    - name
-                    type: object
-                  id:
-                    type: string
-                  name:
-                    type: string
-                  port:
-                    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:
-                        additionalProperties:
-                          type: string
-                        description: A dictionary that enables the application running
-                          on the specified host to pass and receive virtual network
-                          interface (VIF) port-specific information to the plug-in.
-                        type: object
-                      projectId:
-                        type: string
-                      securityGroupFilters:
-                        description: The names, uuids, filters or any combination
-                          these of the security groups to assign to the instance
-                        items:
-                          properties:
-                            filter:
-                              description: Filters used to query security groups in
-                                openstack
-                              properties:
-                                description:
-                                  type: string
-                                id:
-                                  type: string
-                                limit:
-                                  type: integer
-                                marker:
-                                  type: string
-                                name:
-                                  type: string
-                                notTags:
-                                  type: string
-                                notTagsAny:
-                                  type: string
-                                projectId:
-                                  type: string
-                                sortDir:
-                                  type: string
-                                sortKey:
-                                  type: string
-                                tags:
-                                  type: string
-                                tagsAny:
-                                  type: string
-                                tenantId:
-                                  type: string
-                              type: object
-                            name:
-                              description: Security Group name
-                              type: string
-                            uuid:
-                              description: Security Group UID
-                              type: string
-                          type: object
-                        type: array
-                      securityGroups:
-                        description: The uuids of the security groups to assign to
-                          the instance
-                        items:
-                          type: string
-                        type: array
-                        x-kubernetes-list-type: set
-                      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
-                      tenantId:
-                        type: string
-                      trunk:
-                        description: Enables and disables trunk at port level. If
-                          not provided, openStackMachine.Spec.Trunk is inherited.
-                        type: boolean
-                      vnicType:
-                        description: The virtual network interface card (vNIC) type
-                          that is bound to the neutron port.
-                        type: string
-                    type: object
-                  router:
-                    description: Router represents basic information about the associated
-                      OpenStack Neutron 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
-                  subnet:
-                    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
-                  tags:
-                    items:
-                      type: string
-                    type: array
-                required:
-                - id
-                - name
-                type: object
-              ready:
-                type: boolean
-              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
-                - rules
-                type: object
-            required:
-            - ready
-            type: object
-        type: object
-    served: true
-    storage: true
-    subresources:
-      status: {}
----
-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.9.2
-  labels:
-    cluster.x-k8s.io/provider: infrastructure-openstack
-    cluster.x-k8s.io/v1alpha3: v1alpha3
-    cluster.x-k8s.io/v1beta1: v1alpha4_v1alpha5_v1alpha6
-  name: openstackclustertemplates.infrastructure.cluster.x-k8s.io
-spec:
-  conversion:
-    strategy: Webhook
-    webhook:
-      clientConfig:
-        caBundle: Cg==
-        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:
-  - name: v1alpha4
-    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:
-                      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
-                      apiServerLoadBalancerAdditionalPorts:
-                        description: APIServerLoadBalancerAdditionalPorts adds additional
-                          ports to the APIServerLoadBalancer
-                        items:
-                          type: integer
-                        type: array
-                      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 \n 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:
-                              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.
-                                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
-                                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
-                              instanceID:
-                                description: InstanceID is the OpenStack instance
-                                  ID for this machine.
-                                type: string
-                              networks:
-                                description: A networks object. Required parameter
-                                  when there are multiple networks defined for the
-                                  tenant. When you do not specify both networks and
-                                  ports parameters, the server attaches to the only
-                                  network created for the current tenant.
-                                items:
-                                  properties:
-                                    filter:
-                                      description: Filters for optional network query
-                                      properties:
-                                        adminStateUp:
-                                          type: boolean
-                                        description:
-                                          type: string
-                                        id:
-                                          type: string
-                                        limit:
-                                          type: integer
-                                        marker:
-                                          type: string
-                                        name:
-                                          type: string
-                                        notTags:
-                                          type: string
-                                        notTagsAny:
-                                          type: string
-                                        projectId:
-                                          type: string
-                                        shared:
-                                          type: boolean
-                                        sortDir:
-                                          type: string
-                                        sortKey:
-                                          type: string
-                                        status:
-                                          type: string
-                                        tags:
-                                          type: string
-                                        tagsAny:
-                                          type: string
-                                        tenantId:
-                                          type: string
-                                      type: object
-                                    fixedIP:
-                                      description: A fixed IPv4 address for the NIC.
-                                      type: string
-                                    subnets:
-                                      description: Subnet within a network to use
-                                      items:
-                                        properties:
-                                          filter:
-                                            description: Filters for optional subnet
-                                              query
-                                            properties:
-                                              cidr:
-                                                type: string
-                                              description:
-                                                type: string
-                                              enableDhcp:
-                                                type: boolean
-                                              gateway_ip:
-                                                type: string
-                                              id:
-                                                type: string
-                                              ipVersion:
-                                                type: integer
-                                              ipv6AddressMode:
-                                                type: string
-                                              ipv6RaMode:
-                                                type: string
-                                              limit:
-                                                type: integer
-                                              marker:
-                                                type: string
-                                              name:
-                                                type: string
-                                              networkId:
-                                                type: string
-                                              notTags:
-                                                type: string
-                                              notTagsAny:
-                                                type: string
-                                              projectId:
-                                                type: string
-                                              sortDir:
-                                                type: string
-                                              sortKey:
-                                                type: string
-                                              subnetpoolId:
-                                                type: string
-                                              tags:
-                                                type: string
-                                              tagsAny:
-                                                type: string
-                                              tenantId:
-                                                type: string
-                                            type: object
-                                          uuid:
-                                            description: Optional UUID of the subnet.
-                                              If specified this will not be validated
-                                              prior to server creation. If specified,
-                                              the enclosing `NetworkParam` must also
-                                              be specified by UUID.
-                                            type: string
-                                        type: object
-                                      type: array
-                                    uuid:
-                                      description: Optional UUID of the network. If
-                                        specified this will not be validated prior
-                                        to server creation. Required if `Subnets`
-                                        specifies a subnet by UUID.
-                                      type: string
-                                  type: object
-                                type: array
-                              ports:
-                                description: Ports to be attached to the server instance.
-                                  They are created if a port with the given name does
-                                  not already exist. When you do not specify both
-                                  networks and ports parameters, the server attaches
-                                  to the only network created for the current tenant.
-                                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
-                                          subnetId:
-                                            type: string
-                                        required:
-                                        - subnetId
-                                        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
-                                    networkId:
-                                      description: ID of the OpenStack network on
-                                        which to create the port. If unspecified,
-                                        create the port on the default cluster network.
-                                      type: string
-                                    profile:
-                                      additionalProperties:
-                                        type: string
-                                      description: A dictionary that enables the application
-                                        running on the specified host to pass and
-                                        receive virtual network interface (VIF) port-specific
-                                        information to the plug-in.
-                                      type: object
-                                    projectId:
-                                      type: string
-                                    securityGroups:
-                                      items:
-                                        type: string
-                                      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
-                                    tenantId:
-                                      type: string
-                                    trunk:
-                                      description: Enables and disables trunk at port
-                                        level. If not provided, openStackMachine.Spec.Trunk
-                                        is inherited.
-                                      type: boolean
-                                    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:
-                                  deviceType:
-                                    type: string
-                                  diskSize:
-                                    type: integer
-                                  sourceType:
-                                    type: string
-                                  sourceUUID:
-                                    type: string
-                                type: object
-                              securityGroups:
-                                description: The names of the security groups to assign
-                                  to the instance
-                                items:
-                                  properties:
-                                    filter:
-                                      description: Filters used to query security
-                                        groups in openstack
-                                      properties:
-                                        description:
-                                          type: string
-                                        id:
-                                          type: string
-                                        limit:
-                                          type: integer
-                                        marker:
-                                          type: string
-                                        name:
-                                          type: string
-                                        notTags:
-                                          type: string
-                                        notTagsAny:
-                                          type: string
-                                        projectId:
-                                          type: string
-                                        sortDir:
-                                          type: string
-                                        sortKey:
-                                          type: string
-                                        tags:
-                                          type: string
-                                        tagsAny:
-                                          type: string
-                                        tenantId:
-                                          type: string
-                                      type: object
-                                    name:
-                                      description: Security Group name
-                                      type: string
-                                    uuid:
-                                      description: Security Group UID
-                                      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
-                              subnet:
-                                description: UUID, IP address of a port from this
-                                  subnet will be marked as AccessIPv4 on the created
-                                  compute instance
-                                type: string
-                              tags:
-                                description: Machine tags Requires Nova api 2.52 minimum!
-                                items:
-                                  type: string
-                                type: array
-                              trunk:
-                                description: Whether the server instance is created
-                                  on a trunk port or not.
-                                type: boolean
-                            required:
-                            - flavor
-                            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
-                      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
-                      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
-                      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:
-                                filter:
-                                  description: Filters for optional subnet query
-                                  properties:
-                                    cidr:
-                                      type: string
-                                    description:
-                                      type: string
-                                    enableDhcp:
-                                      type: boolean
-                                    gateway_ip:
-                                      type: string
-                                    id:
-                                      type: string
-                                    ipVersion:
-                                      type: integer
-                                    ipv6AddressMode:
-                                      type: string
-                                    ipv6RaMode:
-                                      type: string
-                                    limit:
-                                      type: integer
-                                    marker:
-                                      type: string
-                                    name:
-                                      type: string
-                                    networkId:
-                                      type: string
-                                    notTags:
-                                      type: string
-                                    notTagsAny:
-                                      type: string
-                                    projectId:
-                                      type: string
-                                    sortDir:
-                                      type: string
-                                    sortKey:
-                                      type: string
-                                    subnetpoolId:
-                                      type: string
-                                    tags:
-                                      type: string
-                                    tagsAny:
-                                      type: string
-                                    tenantId:
-                                      type: string
-                                  type: object
-                                uuid:
-                                  description: Optional UUID of the subnet. If specified
-                                    this will not be validated prior to server creation.
-                                    If specified, the enclosing `NetworkParam` must
-                                    also be specified by UUID.
-                                  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
-                      managedAPIServerLoadBalancer:
-                        description: ManagedAPIServerLoadBalancer defines whether
-                          a LoadBalancer for the APIServer should be created.
-                        type: boolean
-                      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:
-                          adminStateUp:
-                            type: boolean
-                          description:
-                            type: string
-                          id:
-                            type: string
-                          limit:
-                            type: integer
-                          marker:
-                            type: string
-                          name:
-                            type: string
-                          notTags:
-                            type: string
-                          notTagsAny:
-                            type: string
-                          projectId:
-                            type: string
-                          shared:
-                            type: boolean
-                          sortDir:
-                            type: string
-                          sortKey:
-                            type: string
-                          status:
-                            type: string
-                          tags:
-                            type: string
-                          tagsAny:
-                            type: string
-                          tenantId:
-                            type: string
-                        type: object
-                      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
-                      subnet:
-                        description: If NodeCIDR cannot be set this can be used to
-                          detect an existing subnet.
-                        properties:
-                          cidr:
-                            type: string
-                          description:
-                            type: string
-                          enableDhcp:
-                            type: boolean
-                          gateway_ip:
-                            type: string
-                          id:
-                            type: string
-                          ipVersion:
-                            type: integer
-                          ipv6AddressMode:
-                            type: string
-                          ipv6RaMode:
-                            type: string
-                          limit:
-                            type: integer
-                          marker:
-                            type: string
-                          name:
-                            type: string
-                          networkId:
-                            type: string
-                          notTags:
-                            type: string
-                          notTagsAny:
-                            type: string
-                          projectId:
-                            type: string
-                          sortDir:
-                            type: string
-                          sortKey:
-                            type: string
-                          subnetpoolId:
-                            type: string
-                          tags:
-                            type: string
-                          tagsAny:
-                            type: string
-                          tenantId:
-                            type: string
-                        type: object
-                      tags:
-                        description: Tags for all resources in cluster
-                        items:
-                          type: string
-                        type: array
-                    type: object
-                required:
-                - spec
-                type: object
-            required:
-            - template
-            type: object
-        type: object
-    served: true
-    storage: false
-  - name: v1alpha5
-    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:
-                      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
-                        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 \n 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:
-                              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.
-                                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
-                                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
-                              networks:
-                                description: A networks object. Required parameter
-                                  when there are multiple networks defined for the
-                                  tenant. When you do not specify both networks and
-                                  ports parameters, the server attaches to the only
-                                  network created for the current tenant.
-                                items:
-                                  properties:
-                                    filter:
-                                      description: Filters for optional network query
-                                      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
-                                    fixedIP:
-                                      description: A fixed IPv4 address for the NIC.
-                                      type: string
-                                    subnets:
-                                      description: Subnet within a network to use
-                                      items:
-                                        properties:
-                                          filter:
-                                            description: Filters for optional subnet
-                                              query
-                                            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
-                                          uuid:
-                                            description: Optional UUID of the subnet.
-                                              If specified this will not be validated
-                                              prior to server creation. If specified,
-                                              the enclosing `NetworkParam` must also
-                                              be specified by UUID.
-                                            type: string
-                                        type: object
-                                      type: array
-                                    uuid:
-                                      description: Optional UUID of the network. If
-                                        specified this will not be validated prior
-                                        to server creation. Required if `Subnets`
-                                        specifies a subnet by UUID.
-                                      type: string
-                                  type: object
-                                type: array
-                              ports:
-                                description: Ports to be attached to the server instance.
-                                  They are created if a port with the given name does
-                                  not already exist. When you do not specify both
-                                  networks and ports parameters, the server attaches
-                                  to the only network created for the current tenant.
-                                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:
-                                      additionalProperties:
-                                        type: string
-                                      description: A dictionary that enables the application
-                                        running on the specified host to pass and
-                                        receive virtual network interface (VIF) port-specific
-                                        information to the plug-in.
-                                      type: object
-                                    projectId:
-                                      type: string
-                                    securityGroupFilters:
-                                      description: The names, uuids, filters or any
-                                        combination these of the security groups to
-                                        assign to the instance
-                                      items:
-                                        properties:
-                                          filter:
-                                            description: Filters used to query security
-                                              groups in openstack
-                                            properties:
-                                              description:
-                                                type: string
-                                              id:
-                                                type: string
-                                              limit:
-                                                type: integer
-                                              marker:
-                                                type: string
-                                              name:
-                                                type: string
-                                              notTags:
-                                                type: string
-                                              notTagsAny:
-                                                type: string
-                                              projectId:
-                                                type: string
-                                              sortDir:
-                                                type: string
-                                              sortKey:
-                                                type: string
-                                              tags:
-                                                type: string
-                                              tagsAny:
-                                                type: string
-                                              tenantId:
-                                                type: string
-                                            type: object
-                                          name:
-                                            description: Security Group name
-                                            type: string
-                                          uuid:
-                                            description: Security Group UID
-                                            type: string
-                                        type: object
-                                      type: array
-                                    securityGroups:
-                                      description: The uuids of the security groups
-                                        to assign to the instance
-                                      items:
-                                        type: string
-                                      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
-                                    tenantId:
-                                      type: string
-                                    trunk:
-                                      description: Enables and disables trunk at port
-                                        level. If not provided, openStackMachine.Spec.Trunk
-                                        is inherited.
-                                      type: boolean
-                                    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:
-                                    filter:
-                                      description: Filters used to query security
-                                        groups in openstack
-                                      properties:
-                                        description:
-                                          type: string
-                                        id:
-                                          type: string
-                                        limit:
-                                          type: integer
-                                        marker:
-                                          type: string
-                                        name:
-                                          type: string
-                                        notTags:
-                                          type: string
-                                        notTagsAny:
-                                          type: string
-                                        projectId:
-                                          type: string
-                                        sortDir:
-                                          type: string
-                                        sortKey:
-                                          type: string
-                                        tags:
-                                          type: string
-                                        tagsAny:
-                                          type: string
-                                        tenantId:
-                                          type: string
-                                      type: object
-                                    name:
-                                      description: Security Group name
-                                      type: string
-                                    uuid:
-                                      description: Security Group UID
-                                      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
-                              subnet:
-                                description: UUID, IP address of a port from this
-                                  subnet will be marked as AccessIPv4 on the created
-                                  compute instance
-                                type: string
-                              tags:
-                                description: Machine tags Requires Nova api 2.52 minimum!
-                                items:
-                                  type: string
-                                type: array
-                              trunk:
-                                description: Whether the server instance is created
-                                  on a trunk port or not.
-                                type: boolean
-                            required:
-                            - flavor
-                            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
-                      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
-                      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
-                      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:
-                                filter:
-                                  description: Filters for optional subnet query
-                                  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
-                                uuid:
-                                  description: Optional UUID of the subnet. If specified
-                                    this will not be validated prior to server creation.
-                                    If specified, the enclosing `NetworkParam` must
-                                    also be specified by UUID.
-                                  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
-                      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
-                      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
-                    type: object
-                required:
-                - spec
-                type: object
-            required:
-            - template
-            type: object
-        type: object
-    served: true
-    storage: false
-  - name: v1alpha6
-    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:
-                      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
-                        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 \n 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:
-                              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.
-                                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
-                                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
-                              networks:
-                                description: A networks object. Required parameter
-                                  when there are multiple networks defined for the
-                                  tenant. When you do not specify both networks and
-                                  ports parameters, the server attaches to the only
-                                  network created for the current tenant.
-                                items:
-                                  properties:
-                                    filter:
-                                      description: Filters for optional network query
-                                      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
-                                    fixedIP:
-                                      description: A fixed IPv4 address for the NIC.
-                                      type: string
-                                    subnets:
-                                      description: Subnet within a network to use
-                                      items:
-                                        properties:
-                                          filter:
-                                            description: Filters for optional subnet
-                                              query
-                                            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
-                                          uuid:
-                                            description: Optional UUID of the subnet.
-                                              If specified this will not be validated
-                                              prior to server creation. If specified,
-                                              the enclosing `NetworkParam` must also
-                                              be specified by UUID.
-                                            type: string
-                                        type: object
-                                      type: array
-                                    uuid:
-                                      description: Optional UUID of the network. If
-                                        specified this will not be validated prior
-                                        to server creation. Required if `Subnets`
-                                        specifies a subnet by UUID.
-                                      type: string
-                                  type: object
-                                type: array
-                              ports:
-                                description: Ports to be attached to the server instance.
-                                  They are created if a port with the given name does
-                                  not already exist. When you do not specify both
-                                  networks and ports parameters, the server attaches
-                                  to the only network created for the current tenant.
-                                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:
-                                      additionalProperties:
-                                        type: string
-                                      description: A dictionary that enables the application
-                                        running on the specified host to pass and
-                                        receive virtual network interface (VIF) port-specific
-                                        information to the plug-in.
-                                      type: object
-                                    projectId:
-                                      type: string
-                                    securityGroupFilters:
-                                      description: The names, uuids, filters or any
-                                        combination these of the security groups to
-                                        assign to the instance
-                                      items:
-                                        properties:
-                                          filter:
-                                            description: Filters used to query security
-                                              groups in openstack
-                                            properties:
-                                              description:
-                                                type: string
-                                              id:
-                                                type: string
-                                              limit:
-                                                type: integer
-                                              marker:
-                                                type: string
-                                              name:
-                                                type: string
-                                              notTags:
-                                                type: string
-                                              notTagsAny:
-                                                type: string
-                                              projectId:
-                                                type: string
-                                              sortDir:
-                                                type: string
-                                              sortKey:
-                                                type: string
-                                              tags:
-                                                type: string
-                                              tagsAny:
-                                                type: string
-                                              tenantId:
-                                                type: string
-                                            type: object
-                                          name:
-                                            description: Security Group name
-                                            type: string
-                                          uuid:
-                                            description: Security Group UID
-                                            type: string
-                                        type: object
-                                      type: array
-                                    securityGroups:
-                                      description: The uuids of the security groups
-                                        to assign to the instance
-                                      items:
-                                        type: string
-                                      type: array
-                                      x-kubernetes-list-type: set
-                                    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
-                                    tenantId:
-                                      type: string
-                                    trunk:
-                                      description: Enables and disables trunk at port
-                                        level. If not provided, openStackMachine.Spec.Trunk
-                                        is inherited.
-                                      type: boolean
-                                    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:
-                                    filter:
-                                      description: Filters used to query security
-                                        groups in openstack
-                                      properties:
-                                        description:
-                                          type: string
-                                        id:
-                                          type: string
-                                        limit:
-                                          type: integer
-                                        marker:
-                                          type: string
-                                        name:
-                                          type: string
-                                        notTags:
-                                          type: string
-                                        notTagsAny:
-                                          type: string
-                                        projectId:
-                                          type: string
-                                        sortDir:
-                                          type: string
-                                        sortKey:
-                                          type: string
-                                        tags:
-                                          type: string
-                                        tagsAny:
-                                          type: string
-                                        tenantId:
-                                          type: string
-                                      type: object
-                                    name:
-                                      description: Security Group name
-                                      type: string
-                                    uuid:
-                                      description: Security Group UID
-                                      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
-                              subnet:
-                                description: UUID, IP address of a port from this
-                                  subnet will be marked as AccessIPv4 on the created
-                                  compute 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
-                            required:
-                            - flavor
-                            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:
-                                filter:
-                                  description: Filters for optional subnet query
-                                  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
-                                uuid:
-                                  description: Optional UUID of the subnet. If specified
-                                    this will not be validated prior to server creation.
-                                    If specified, the enclosing `NetworkParam` must
-                                    also be specified by UUID.
-                                  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
-                      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
-                      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: true
-    storage: true
----
-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.9.2
-  labels:
-    cluster.x-k8s.io/provider: infrastructure-openstack
-    cluster.x-k8s.io/v1alpha3: v1alpha3
-    cluster.x-k8s.io/v1beta1: v1alpha4_v1alpha5_v1alpha6
-  name: openstackmachines.infrastructure.cluster.x-k8s.io
-spec:
-  conversion:
-    strategy: Webhook
-    webhook:
-      clientConfig:
-        caBundle: Cg==
-        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
-    name: v1alpha3
-    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:
-              cloudName:
-                description: The name of the cloud to use from the clouds secret
-                type: string
-              cloudsSecret:
-                description: The name of the secret containing the openstack credentials
-                properties:
-                  name:
-                    description: name is unique within a namespace to reference a
-                      secret resource.
-                    type: string
-                  namespace:
-                    description: namespace defines the space within which the secret
-                      name must be unique.
-                    type: string
-                type: object
-                x-kubernetes-map-type: atomic
-              configDrive:
-                description: Config Drive support
-                type: boolean
-              flavor:
-                description: The flavor reference for the flavor for your server instance.
-                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
-              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
-              instanceID:
-                description: InstanceID is the OpenStack instance ID for this machine.
-                type: string
-              networks:
-                description: A networks object. Required parameter when there are
-                  multiple networks defined for the tenant. When you do not specify
-                  the networks parameter, the server attaches to the only network
-                  created for the current tenant.
-                items:
-                  properties:
-                    filter:
-                      description: Filters for optional network query
-                      properties:
-                        adminStateUp:
-                          type: boolean
-                        description:
-                          type: string
-                        id:
-                          type: string
-                        limit:
-                          type: integer
-                        marker:
-                          type: string
-                        name:
-                          type: string
-                        notTags:
-                          type: string
-                        notTagsAny:
-                          type: string
-                        projectId:
-                          type: string
-                        shared:
-                          type: boolean
-                        sortDir:
-                          type: string
-                        sortKey:
-                          type: string
-                        status:
-                          type: string
-                        tags:
-                          type: string
-                        tagsAny:
-                          type: string
-                        tenantId:
-                          type: string
-                      type: object
-                    fixedIp:
-                      description: A fixed IPv4 address for the NIC.
-                      type: string
-                    subnets:
-                      description: Subnet within a network to use
-                      items:
-                        properties:
-                          filter:
-                            description: Filters for optional network query
-                            properties:
-                              cidr:
-                                type: string
-                              description:
-                                type: string
-                              enableDhcp:
-                                type: boolean
-                              gateway_ip:
-                                type: string
-                              id:
-                                type: string
-                              ipVersion:
-                                type: integer
-                              ipv6AddressMode:
-                                type: string
-                              ipv6RaMode:
-                                type: string
-                              limit:
-                                type: integer
-                              marker:
-                                type: string
-                              name:
-                                type: string
-                              networkId:
-                                type: string
-                              notTags:
-                                type: string
-                              notTagsAny:
-                                type: string
-                              projectId:
-                                type: string
-                              sortDir:
-                                type: string
-                              sortKey:
-                                type: string
-                              subnetpoolId:
-                                type: string
-                              tags:
-                                type: string
-                              tagsAny:
-                                type: string
-                              tenantId:
-                                type: string
-                            type: object
-                          uuid:
-                            description: The UUID of the network. Required if you
-                              omit the port attribute.
-                            type: string
-                        type: object
-                      type: array
-                    uuid:
-                      description: The UUID of the network. Required if you omit the
-                        port attribute.
-                      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:
-                  deviceType:
-                    type: string
-                  diskSize:
-                    type: integer
-                  sourceType:
-                    type: string
-                  sourceUUID:
-                    type: string
-                type: object
-              securityGroups:
-                description: The names of the security groups to assign to the instance
-                items:
-                  properties:
-                    filter:
-                      description: Filters used to query security groups in openstack
-                      properties:
-                        description:
-                          type: string
-                        id:
-                          type: string
-                        limit:
-                          type: integer
-                        marker:
-                          type: string
-                        name:
-                          type: string
-                        notTags:
-                          type: string
-                        notTagsAny:
-                          type: string
-                        projectId:
-                          type: string
-                        sortDir:
-                          type: string
-                        sortKey:
-                          type: string
-                        tags:
-                          type: string
-                        tagsAny:
-                          type: string
-                        tenantId:
-                          type: string
-                      type: object
-                    name:
-                      description: Security Group name
-                      type: string
-                    uuid:
-                      description: Security Group UID
-                      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
-              subnet:
-                description: UUID, IP address of a port from this subnet will be marked
-                  as AccessIPv4 on the created compute instance
-                type: string
-              tags:
-                description: Machine tags Requires Nova api 2.52 minimum!
-                items:
-                  type: string
-                type: array
-              trunk:
-                description: Whether the server instance is created on a trunk port
-                  or not.
-                type: boolean
-              userDataSecret:
-                description: The name of the secret containing the user data (startup
-                  script in most cases)
-                properties:
-                  name:
-                    description: name is unique within a namespace to reference a
-                      secret resource.
-                    type: string
-                  namespace:
-                    description: namespace defines the space within which the secret
-                      name must be unique.
-                    type: string
-                type: object
-                x-kubernetes-map-type: atomic
-            required:
-            - flavor
-            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 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:
-                  - lastTransitionTime
-                  - status
-                  - type
-                  type: object
-                type: array
-              errorMessage:
-                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. \n 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. \n 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
-              errorReason:
-                description: MachineStatusError 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: true
-    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: 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
-    name: v1alpha4
-    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:
-              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.
-                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
-                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
-              instanceID:
-                description: InstanceID is the OpenStack instance ID for this machine.
-                type: string
-              networks:
-                description: A networks object. Required parameter when there are
-                  multiple networks defined for the tenant. When you do not specify
-                  both networks and ports parameters, the server attaches to the only
-                  network created for the current tenant.
-                items:
-                  properties:
-                    filter:
-                      description: Filters for optional network query
-                      properties:
-                        adminStateUp:
-                          type: boolean
-                        description:
-                          type: string
-                        id:
-                          type: string
-                        limit:
-                          type: integer
-                        marker:
-                          type: string
-                        name:
-                          type: string
-                        notTags:
-                          type: string
-                        notTagsAny:
-                          type: string
-                        projectId:
-                          type: string
-                        shared:
-                          type: boolean
-                        sortDir:
-                          type: string
-                        sortKey:
-                          type: string
-                        status:
-                          type: string
-                        tags:
-                          type: string
-                        tagsAny:
-                          type: string
-                        tenantId:
-                          type: string
-                      type: object
-                    fixedIP:
-                      description: A fixed IPv4 address for the NIC.
-                      type: string
-                    subnets:
-                      description: Subnet within a network to use
-                      items:
-                        properties:
-                          filter:
-                            description: Filters for optional subnet query
-                            properties:
-                              cidr:
-                                type: string
-                              description:
-                                type: string
-                              enableDhcp:
-                                type: boolean
-                              gateway_ip:
-                                type: string
-                              id:
-                                type: string
-                              ipVersion:
-                                type: integer
-                              ipv6AddressMode:
-                                type: string
-                              ipv6RaMode:
-                                type: string
-                              limit:
-                                type: integer
-                              marker:
-                                type: string
-                              name:
-                                type: string
-                              networkId:
-                                type: string
-                              notTags:
-                                type: string
-                              notTagsAny:
-                                type: string
-                              projectId:
-                                type: string
-                              sortDir:
-                                type: string
-                              sortKey:
-                                type: string
-                              subnetpoolId:
-                                type: string
-                              tags:
-                                type: string
-                              tagsAny:
-                                type: string
-                              tenantId:
-                                type: string
-                            type: object
-                          uuid:
-                            description: Optional UUID of the subnet. If specified
-                              this will not be validated prior to server creation.
-                              If specified, the enclosing `NetworkParam` must also
-                              be specified by UUID.
-                            type: string
-                        type: object
-                      type: array
-                    uuid:
-                      description: Optional UUID of the network. If specified this
-                        will not be validated prior to server creation. Required if
-                        `Subnets` specifies a subnet by UUID.
-                      type: string
-                  type: object
-                type: array
-              ports:
-                description: Ports to be attached to the server instance. They are
-                  created if a port with the given name does not already exist. When
-                  you do not specify both networks and ports parameters, the server
-                  attaches to the only network created for the current tenant.
-                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
-                          subnetId:
-                            type: string
-                        required:
-                        - subnetId
-                        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
-                    networkId:
-                      description: ID of the OpenStack network on which to create
-                        the port. If unspecified, create the port on the default cluster
-                        network.
-                      type: string
-                    profile:
-                      additionalProperties:
-                        type: string
-                      description: A dictionary that enables the application running
-                        on the specified host to pass and receive virtual network
-                        interface (VIF) port-specific information to the plug-in.
-                      type: object
-                    projectId:
-                      type: string
-                    securityGroups:
-                      items:
-                        type: string
-                      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
-                    tenantId:
-                      type: string
-                    trunk:
-                      description: Enables and disables trunk at port level. If not
-                        provided, openStackMachine.Spec.Trunk is inherited.
-                      type: boolean
-                    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:
-                  deviceType:
-                    type: string
-                  diskSize:
-                    type: integer
-                  sourceType:
-                    type: string
-                  sourceUUID:
-                    type: string
-                type: object
-              securityGroups:
-                description: The names of the security groups to assign to the instance
-                items:
-                  properties:
-                    filter:
-                      description: Filters used to query security groups in openstack
-                      properties:
-                        description:
-                          type: string
-                        id:
-                          type: string
-                        limit:
-                          type: integer
-                        marker:
-                          type: string
-                        name:
-                          type: string
-                        notTags:
-                          type: string
-                        notTagsAny:
-                          type: string
-                        projectId:
-                          type: string
-                        sortDir:
-                          type: string
-                        sortKey:
-                          type: string
-                        tags:
-                          type: string
-                        tagsAny:
-                          type: string
-                        tenantId:
-                          type: string
-                      type: object
-                    name:
-                      description: Security Group name
-                      type: string
-                    uuid:
-                      description: Security Group UID
-                      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
-              subnet:
-                description: UUID, IP address of a port from this subnet will be marked
-                  as AccessIPv4 on the created compute instance
-                type: string
-              tags:
-                description: Machine tags Requires Nova api 2.52 minimum!
-                items:
-                  type: string
-                type: array
-              trunk:
-                description: Whether the server instance is created on a trunk port
-                  or not.
-                type: boolean
-            required:
-            - flavor
-            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 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:
-                  - lastTransitionTime
-                  - status
-                  - type
-                  type: object
-                type: array
-              errorMessage:
-                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. \n 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. \n 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
-              errorReason:
-                description: MachineStatusError 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: true
-    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: 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
-    name: v1alpha5
-    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:
-              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.
-                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
-                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
-              networks:
-                description: A networks object. Required parameter when there are
-                  multiple networks defined for the tenant. When you do not specify
-                  both networks and ports parameters, the server attaches to the only
-                  network created for the current tenant.
-                items:
-                  properties:
-                    filter:
-                      description: Filters for optional network query
-                      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
-                    fixedIP:
-                      description: A fixed IPv4 address for the NIC.
-                      type: string
-                    subnets:
-                      description: Subnet within a network to use
-                      items:
-                        properties:
-                          filter:
-                            description: Filters for optional subnet query
-                            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
-                          uuid:
-                            description: Optional UUID of the subnet. If specified
-                              this will not be validated prior to server creation.
-                              If specified, the enclosing `NetworkParam` must also
-                              be specified by UUID.
-                            type: string
-                        type: object
-                      type: array
-                    uuid:
-                      description: Optional UUID of the network. If specified this
-                        will not be validated prior to server creation. Required if
-                        `Subnets` specifies a subnet by UUID.
-                      type: string
-                  type: object
-                type: array
-              ports:
-                description: Ports to be attached to the server instance. They are
-                  created if a port with the given name does not already exist. When
-                  you do not specify both networks and ports parameters, the server
-                  attaches to the only network created for the current tenant.
-                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:
-                      additionalProperties:
-                        type: string
-                      description: A dictionary that enables the application running
-                        on the specified host to pass and receive virtual network
-                        interface (VIF) port-specific information to the plug-in.
-                      type: object
-                    projectId:
-                      type: string
-                    securityGroupFilters:
-                      description: The names, uuids, filters or any combination these
-                        of the security groups to assign to the instance
-                      items:
-                        properties:
-                          filter:
-                            description: Filters used to query security groups in
-                              openstack
-                            properties:
-                              description:
-                                type: string
-                              id:
-                                type: string
-                              limit:
-                                type: integer
-                              marker:
-                                type: string
-                              name:
-                                type: string
-                              notTags:
-                                type: string
-                              notTagsAny:
-                                type: string
-                              projectId:
-                                type: string
-                              sortDir:
-                                type: string
-                              sortKey:
-                                type: string
-                              tags:
-                                type: string
-                              tagsAny:
-                                type: string
-                              tenantId:
-                                type: string
-                            type: object
-                          name:
-                            description: Security Group name
-                            type: string
-                          uuid:
-                            description: Security Group UID
-                            type: string
-                        type: object
-                      type: array
-                    securityGroups:
-                      description: The uuids of the security groups to assign to the
-                        instance
-                      items:
-                        type: string
-                      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
-                    tenantId:
-                      type: string
-                    trunk:
-                      description: Enables and disables trunk at port level. If not
-                        provided, openStackMachine.Spec.Trunk is inherited.
-                      type: boolean
-                    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:
-                    filter:
-                      description: Filters used to query security groups in openstack
-                      properties:
-                        description:
-                          type: string
-                        id:
-                          type: string
-                        limit:
-                          type: integer
-                        marker:
-                          type: string
-                        name:
-                          type: string
-                        notTags:
-                          type: string
-                        notTagsAny:
-                          type: string
-                        projectId:
-                          type: string
-                        sortDir:
-                          type: string
-                        sortKey:
-                          type: string
-                        tags:
-                          type: string
-                        tagsAny:
-                          type: string
-                        tenantId:
-                          type: string
-                      type: object
-                    name:
-                      description: Security Group name
-                      type: string
-                    uuid:
-                      description: Security Group UID
-                      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
-              subnet:
-                description: UUID, IP address of a port from this subnet will be marked
-                  as AccessIPv4 on the created compute instance
-                type: string
-              tags:
-                description: Machine tags Requires Nova api 2.52 minimum!
-                items:
-                  type: string
-                type: array
-              trunk:
-                description: Whether the server instance is created on a trunk port
-                  or not.
-                type: boolean
-            required:
-            - flavor
-            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 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:
-                  - 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. \n 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. \n 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: MachineStatusError 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: true
-    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: 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
-    name: v1alpha6
-    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:
-              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.
-                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
-                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
-              networks:
-                description: A networks object. Required parameter when there are
-                  multiple networks defined for the tenant. When you do not specify
-                  both networks and ports parameters, the server attaches to the only
-                  network created for the current tenant.
-                items:
-                  properties:
-                    filter:
-                      description: Filters for optional network query
-                      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
-                    fixedIP:
-                      description: A fixed IPv4 address for the NIC.
-                      type: string
-                    subnets:
-                      description: Subnet within a network to use
-                      items:
-                        properties:
-                          filter:
-                            description: Filters for optional subnet query
-                            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
-                          uuid:
-                            description: Optional UUID of the subnet. If specified
-                              this will not be validated prior to server creation.
-                              If specified, the enclosing `NetworkParam` must also
-                              be specified by UUID.
-                            type: string
-                        type: object
-                      type: array
-                    uuid:
-                      description: Optional UUID of the network. If specified this
-                        will not be validated prior to server creation. Required if
-                        `Subnets` specifies a subnet by UUID.
-                      type: string
-                  type: object
-                type: array
-              ports:
-                description: Ports to be attached to the server instance. They are
-                  created if a port with the given name does not already exist. When
-                  you do not specify both networks and ports parameters, the server
-                  attaches to the only network created for the current tenant.
-                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:
-                      additionalProperties:
-                        type: string
-                      description: A dictionary that enables the application running
-                        on the specified host to pass and receive virtual network
-                        interface (VIF) port-specific information to the plug-in.
-                      type: object
-                    projectId:
-                      type: string
-                    securityGroupFilters:
-                      description: The names, uuids, filters or any combination these
-                        of the security groups to assign to the instance
-                      items:
-                        properties:
-                          filter:
-                            description: Filters used to query security groups in
-                              openstack
-                            properties:
-                              description:
-                                type: string
-                              id:
-                                type: string
-                              limit:
-                                type: integer
-                              marker:
-                                type: string
-                              name:
-                                type: string
-                              notTags:
-                                type: string
-                              notTagsAny:
-                                type: string
-                              projectId:
-                                type: string
-                              sortDir:
-                                type: string
-                              sortKey:
-                                type: string
-                              tags:
-                                type: string
-                              tagsAny:
-                                type: string
-                              tenantId:
-                                type: string
-                            type: object
-                          name:
-                            description: Security Group name
-                            type: string
-                          uuid:
-                            description: Security Group UID
-                            type: string
-                        type: object
-                      type: array
-                    securityGroups:
-                      description: The uuids of the security groups to assign to the
-                        instance
-                      items:
-                        type: string
-                      type: array
-                      x-kubernetes-list-type: set
-                    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
-                    tenantId:
-                      type: string
-                    trunk:
-                      description: Enables and disables trunk at port level. If not
-                        provided, openStackMachine.Spec.Trunk is inherited.
-                      type: boolean
-                    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:
-                    filter:
-                      description: Filters used to query security groups in openstack
-                      properties:
-                        description:
-                          type: string
-                        id:
-                          type: string
-                        limit:
-                          type: integer
-                        marker:
-                          type: string
-                        name:
-                          type: string
-                        notTags:
-                          type: string
-                        notTagsAny:
-                          type: string
-                        projectId:
-                          type: string
-                        sortDir:
-                          type: string
-                        sortKey:
-                          type: string
-                        tags:
-                          type: string
-                        tagsAny:
-                          type: string
-                        tenantId:
-                          type: string
-                      type: object
-                    name:
-                      description: Security Group name
-                      type: string
-                    uuid:
-                      description: Security Group UID
-                      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
-              subnet:
-                description: UUID, IP address of a port from this subnet will be marked
-                  as AccessIPv4 on the created compute 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
-            required:
-            - flavor
-            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 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:
-                  - 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. \n 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. \n 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: MachineStatusError 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: true
-    storage: true
-    subresources:
-      status: {}
----
-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.9.2
-  labels:
-    cluster.x-k8s.io/provider: infrastructure-openstack
-    cluster.x-k8s.io/v1alpha3: v1alpha3
-    cluster.x-k8s.io/v1beta1: v1alpha4_v1alpha5_v1alpha6
-  name: openstackmachinetemplates.infrastructure.cluster.x-k8s.io
-spec:
-  conversion:
-    strategy: Webhook
-    webhook:
-      clientConfig:
-        caBundle: Cg==
-        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:
-  - name: v1alpha3
-    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:
-                      cloudName:
-                        description: The name of the cloud to use from the clouds
-                          secret
-                        type: string
-                      cloudsSecret:
-                        description: The name of the secret containing the openstack
-                          credentials
-                        properties:
-                          name:
-                            description: name is unique within a namespace to reference
-                              a secret resource.
-                            type: string
-                          namespace:
-                            description: namespace defines the space within which
-                              the secret name must be unique.
-                            type: string
-                        type: object
-                        x-kubernetes-map-type: atomic
-                      configDrive:
-                        description: Config Drive support
-                        type: boolean
-                      flavor:
-                        description: The flavor reference for the flavor for your
-                          server instance.
-                        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
-                      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
-                      instanceID:
-                        description: InstanceID is the OpenStack instance ID for this
-                          machine.
-                        type: string
-                      networks:
-                        description: A networks object. Required parameter when there
-                          are multiple networks defined for the tenant. When you do
-                          not specify the networks parameter, the server attaches
-                          to the only network created for the current tenant.
-                        items:
-                          properties:
-                            filter:
-                              description: Filters for optional network query
-                              properties:
-                                adminStateUp:
-                                  type: boolean
-                                description:
-                                  type: string
-                                id:
-                                  type: string
-                                limit:
-                                  type: integer
-                                marker:
-                                  type: string
-                                name:
-                                  type: string
-                                notTags:
-                                  type: string
-                                notTagsAny:
-                                  type: string
-                                projectId:
-                                  type: string
-                                shared:
-                                  type: boolean
-                                sortDir:
-                                  type: string
-                                sortKey:
-                                  type: string
-                                status:
-                                  type: string
-                                tags:
-                                  type: string
-                                tagsAny:
-                                  type: string
-                                tenantId:
-                                  type: string
-                              type: object
-                            fixedIp:
-                              description: A fixed IPv4 address for the NIC.
-                              type: string
-                            subnets:
-                              description: Subnet within a network to use
-                              items:
-                                properties:
-                                  filter:
-                                    description: Filters for optional network query
-                                    properties:
-                                      cidr:
-                                        type: string
-                                      description:
-                                        type: string
-                                      enableDhcp:
-                                        type: boolean
-                                      gateway_ip:
-                                        type: string
-                                      id:
-                                        type: string
-                                      ipVersion:
-                                        type: integer
-                                      ipv6AddressMode:
-                                        type: string
-                                      ipv6RaMode:
-                                        type: string
-                                      limit:
-                                        type: integer
-                                      marker:
-                                        type: string
-                                      name:
-                                        type: string
-                                      networkId:
-                                        type: string
-                                      notTags:
-                                        type: string
-                                      notTagsAny:
-                                        type: string
-                                      projectId:
-                                        type: string
-                                      sortDir:
-                                        type: string
-                                      sortKey:
-                                        type: string
-                                      subnetpoolId:
-                                        type: string
-                                      tags:
-                                        type: string
-                                      tagsAny:
-                                        type: string
-                                      tenantId:
-                                        type: string
-                                    type: object
-                                  uuid:
-                                    description: The UUID of the network. Required
-                                      if you omit the port attribute.
-                                    type: string
-                                type: object
-                              type: array
-                            uuid:
-                              description: The UUID of the network. Required if you
-                                omit the port attribute.
-                              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:
-                          deviceType:
-                            type: string
-                          diskSize:
-                            type: integer
-                          sourceType:
-                            type: string
-                          sourceUUID:
-                            type: string
-                        type: object
-                      securityGroups:
-                        description: The names of the security groups to assign to
-                          the instance
-                        items:
-                          properties:
-                            filter:
-                              description: Filters used to query security groups in
-                                openstack
-                              properties:
-                                description:
-                                  type: string
-                                id:
-                                  type: string
-                                limit:
-                                  type: integer
-                                marker:
-                                  type: string
-                                name:
-                                  type: string
-                                notTags:
-                                  type: string
-                                notTagsAny:
-                                  type: string
-                                projectId:
-                                  type: string
-                                sortDir:
-                                  type: string
-                                sortKey:
-                                  type: string
-                                tags:
-                                  type: string
-                                tagsAny:
-                                  type: string
-                                tenantId:
-                                  type: string
-                              type: object
-                            name:
-                              description: Security Group name
-                              type: string
-                            uuid:
-                              description: Security Group UID
-                              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
-                      subnet:
-                        description: UUID, IP address of a port from this subnet will
-                          be marked as AccessIPv4 on the created compute instance
-                        type: string
-                      tags:
-                        description: Machine tags Requires Nova api 2.52 minimum!
-                        items:
-                          type: string
-                        type: array
-                      trunk:
-                        description: Whether the server instance is created on a trunk
-                          port or not.
-                        type: boolean
-                      userDataSecret:
-                        description: The name of the secret containing the user data
-                          (startup script in most cases)
-                        properties:
-                          name:
-                            description: name is unique within a namespace to reference
-                              a secret resource.
-                            type: string
-                          namespace:
-                            description: namespace defines the space within which
-                              the secret name must be unique.
-                            type: string
-                        type: object
-                        x-kubernetes-map-type: atomic
-                    required:
-                    - flavor
-                    type: object
-                required:
-                - spec
-                type: object
-            required:
-            - template
-            type: object
-        type: object
-    served: true
-    storage: false
-  - name: v1alpha4
-    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:
-                      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.
-                        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
-                        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
-                      instanceID:
-                        description: InstanceID is the OpenStack instance ID for this
-                          machine.
-                        type: string
-                      networks:
-                        description: A networks object. Required parameter when there
-                          are multiple networks defined for the tenant. When you do
-                          not specify both networks and ports parameters, the server
-                          attaches to the only network created for the current tenant.
-                        items:
-                          properties:
-                            filter:
-                              description: Filters for optional network query
-                              properties:
-                                adminStateUp:
-                                  type: boolean
-                                description:
-                                  type: string
-                                id:
-                                  type: string
-                                limit:
-                                  type: integer
-                                marker:
-                                  type: string
-                                name:
-                                  type: string
-                                notTags:
-                                  type: string
-                                notTagsAny:
-                                  type: string
-                                projectId:
-                                  type: string
-                                shared:
-                                  type: boolean
-                                sortDir:
-                                  type: string
-                                sortKey:
-                                  type: string
-                                status:
-                                  type: string
-                                tags:
-                                  type: string
-                                tagsAny:
-                                  type: string
-                                tenantId:
-                                  type: string
-                              type: object
-                            fixedIP:
-                              description: A fixed IPv4 address for the NIC.
-                              type: string
-                            subnets:
-                              description: Subnet within a network to use
-                              items:
-                                properties:
-                                  filter:
-                                    description: Filters for optional subnet query
-                                    properties:
-                                      cidr:
-                                        type: string
-                                      description:
-                                        type: string
-                                      enableDhcp:
-                                        type: boolean
-                                      gateway_ip:
-                                        type: string
-                                      id:
-                                        type: string
-                                      ipVersion:
-                                        type: integer
-                                      ipv6AddressMode:
-                                        type: string
-                                      ipv6RaMode:
-                                        type: string
-                                      limit:
-                                        type: integer
-                                      marker:
-                                        type: string
-                                      name:
-                                        type: string
-                                      networkId:
-                                        type: string
-                                      notTags:
-                                        type: string
-                                      notTagsAny:
-                                        type: string
-                                      projectId:
-                                        type: string
-                                      sortDir:
-                                        type: string
-                                      sortKey:
-                                        type: string
-                                      subnetpoolId:
-                                        type: string
-                                      tags:
-                                        type: string
-                                      tagsAny:
-                                        type: string
-                                      tenantId:
-                                        type: string
-                                    type: object
-                                  uuid:
-                                    description: Optional UUID of the subnet. If specified
-                                      this will not be validated prior to server creation.
-                                      If specified, the enclosing `NetworkParam` must
-                                      also be specified by UUID.
-                                    type: string
-                                type: object
-                              type: array
-                            uuid:
-                              description: Optional UUID of the network. If specified
-                                this will not be validated prior to server creation.
-                                Required if `Subnets` specifies a subnet by UUID.
-                              type: string
-                          type: object
-                        type: array
-                      ports:
-                        description: Ports to be attached to the server instance.
-                          They are created if a port with the given name does not
-                          already exist. When you do not specify both networks and
-                          ports parameters, the server attaches to the only network
-                          created for the current tenant.
-                        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
-                                  subnetId:
-                                    type: string
-                                required:
-                                - subnetId
-                                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
-                            networkId:
-                              description: ID of the OpenStack network on which to
-                                create the port. If unspecified, create the port on
-                                the default cluster network.
-                              type: string
-                            profile:
-                              additionalProperties:
-                                type: string
-                              description: A dictionary that enables the application
-                                running on the specified host to pass and receive
-                                virtual network interface (VIF) port-specific information
-                                to the plug-in.
-                              type: object
-                            projectId:
-                              type: string
-                            securityGroups:
-                              items:
-                                type: string
-                              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
-                            tenantId:
-                              type: string
-                            trunk:
-                              description: Enables and disables trunk at port level.
-                                If not provided, openStackMachine.Spec.Trunk is inherited.
-                              type: boolean
-                            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:
-                          deviceType:
-                            type: string
-                          diskSize:
-                            type: integer
-                          sourceType:
-                            type: string
-                          sourceUUID:
-                            type: string
-                        type: object
-                      securityGroups:
-                        description: The names of the security groups to assign to
-                          the instance
-                        items:
-                          properties:
-                            filter:
-                              description: Filters used to query security groups in
-                                openstack
-                              properties:
-                                description:
-                                  type: string
-                                id:
-                                  type: string
-                                limit:
-                                  type: integer
-                                marker:
-                                  type: string
-                                name:
-                                  type: string
-                                notTags:
-                                  type: string
-                                notTagsAny:
-                                  type: string
-                                projectId:
-                                  type: string
-                                sortDir:
-                                  type: string
-                                sortKey:
-                                  type: string
-                                tags:
-                                  type: string
-                                tagsAny:
-                                  type: string
-                                tenantId:
-                                  type: string
-                              type: object
-                            name:
-                              description: Security Group name
-                              type: string
-                            uuid:
-                              description: Security Group UID
-                              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
-                      subnet:
-                        description: UUID, IP address of a port from this subnet will
-                          be marked as AccessIPv4 on the created compute instance
-                        type: string
-                      tags:
-                        description: Machine tags Requires Nova api 2.52 minimum!
-                        items:
-                          type: string
-                        type: array
-                      trunk:
-                        description: Whether the server instance is created on a trunk
-                          port or not.
-                        type: boolean
-                    required:
-                    - flavor
-                    type: object
-                required:
-                - spec
-                type: object
-            required:
-            - template
-            type: object
-        type: object
-    served: true
-    storage: false
-  - name: v1alpha5
-    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:
-                      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.
-                        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
-                        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
-                      networks:
-                        description: A networks object. Required parameter when there
-                          are multiple networks defined for the tenant. When you do
-                          not specify both networks and ports parameters, the server
-                          attaches to the only network created for the current tenant.
-                        items:
-                          properties:
-                            filter:
-                              description: Filters for optional network query
-                              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
-                            fixedIP:
-                              description: A fixed IPv4 address for the NIC.
-                              type: string
-                            subnets:
-                              description: Subnet within a network to use
-                              items:
-                                properties:
-                                  filter:
-                                    description: Filters for optional subnet query
-                                    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
-                                  uuid:
-                                    description: Optional UUID of the subnet. If specified
-                                      this will not be validated prior to server creation.
-                                      If specified, the enclosing `NetworkParam` must
-                                      also be specified by UUID.
-                                    type: string
-                                type: object
-                              type: array
-                            uuid:
-                              description: Optional UUID of the network. If specified
-                                this will not be validated prior to server creation.
-                                Required if `Subnets` specifies a subnet by UUID.
-                              type: string
-                          type: object
-                        type: array
-                      ports:
-                        description: Ports to be attached to the server instance.
-                          They are created if a port with the given name does not
-                          already exist. When you do not specify both networks and
-                          ports parameters, the server attaches to the only network
-                          created for the current tenant.
-                        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:
-                              additionalProperties:
-                                type: string
-                              description: A dictionary that enables the application
-                                running on the specified host to pass and receive
-                                virtual network interface (VIF) port-specific information
-                                to the plug-in.
-                              type: object
-                            projectId:
-                              type: string
-                            securityGroupFilters:
-                              description: The names, uuids, filters or any combination
-                                these of the security groups to assign to the instance
-                              items:
-                                properties:
-                                  filter:
-                                    description: Filters used to query security groups
-                                      in openstack
-                                    properties:
-                                      description:
-                                        type: string
-                                      id:
-                                        type: string
-                                      limit:
-                                        type: integer
-                                      marker:
-                                        type: string
-                                      name:
-                                        type: string
-                                      notTags:
-                                        type: string
-                                      notTagsAny:
-                                        type: string
-                                      projectId:
-                                        type: string
-                                      sortDir:
-                                        type: string
-                                      sortKey:
-                                        type: string
-                                      tags:
-                                        type: string
-                                      tagsAny:
-                                        type: string
-                                      tenantId:
-                                        type: string
-                                    type: object
-                                  name:
-                                    description: Security Group name
-                                    type: string
-                                  uuid:
-                                    description: Security Group UID
-                                    type: string
-                                type: object
-                              type: array
-                            securityGroups:
-                              description: The uuids of the security groups to assign
-                                to the instance
-                              items:
-                                type: string
-                              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
-                            tenantId:
-                              type: string
-                            trunk:
-                              description: Enables and disables trunk at port level.
-                                If not provided, openStackMachine.Spec.Trunk is inherited.
-                              type: boolean
-                            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:
-                            filter:
-                              description: Filters used to query security groups in
-                                openstack
-                              properties:
-                                description:
-                                  type: string
-                                id:
-                                  type: string
-                                limit:
-                                  type: integer
-                                marker:
-                                  type: string
-                                name:
-                                  type: string
-                                notTags:
-                                  type: string
-                                notTagsAny:
-                                  type: string
-                                projectId:
-                                  type: string
-                                sortDir:
-                                  type: string
-                                sortKey:
-                                  type: string
-                                tags:
-                                  type: string
-                                tagsAny:
-                                  type: string
-                                tenantId:
-                                  type: string
-                              type: object
-                            name:
-                              description: Security Group name
-                              type: string
-                            uuid:
-                              description: Security Group UID
-                              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
-                      subnet:
-                        description: UUID, IP address of a port from this subnet will
-                          be marked as AccessIPv4 on the created compute instance
-                        type: string
-                      tags:
-                        description: Machine tags Requires Nova api 2.52 minimum!
-                        items:
-                          type: string
-                        type: array
-                      trunk:
-                        description: Whether the server instance is created on a trunk
-                          port or not.
-                        type: boolean
-                    required:
-                    - flavor
-                    type: object
-                required:
-                - spec
-                type: object
-            required:
-            - template
-            type: object
-        type: object
-    served: true
-    storage: false
-  - name: v1alpha6
-    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:
-                      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.
-                        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
-                        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
-                      networks:
-                        description: A networks object. Required parameter when there
-                          are multiple networks defined for the tenant. When you do
-                          not specify both networks and ports parameters, the server
-                          attaches to the only network created for the current tenant.
-                        items:
-                          properties:
-                            filter:
-                              description: Filters for optional network query
-                              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
-                            fixedIP:
-                              description: A fixed IPv4 address for the NIC.
-                              type: string
-                            subnets:
-                              description: Subnet within a network to use
-                              items:
-                                properties:
-                                  filter:
-                                    description: Filters for optional subnet query
-                                    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
-                                  uuid:
-                                    description: Optional UUID of the subnet. If specified
-                                      this will not be validated prior to server creation.
-                                      If specified, the enclosing `NetworkParam` must
-                                      also be specified by UUID.
-                                    type: string
-                                type: object
-                              type: array
-                            uuid:
-                              description: Optional UUID of the network. If specified
-                                this will not be validated prior to server creation.
-                                Required if `Subnets` specifies a subnet by UUID.
-                              type: string
-                          type: object
-                        type: array
-                      ports:
-                        description: Ports to be attached to the server instance.
-                          They are created if a port with the given name does not
-                          already exist. When you do not specify both networks and
-                          ports parameters, the server attaches to the only network
-                          created for the current tenant.
-                        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:
-                              additionalProperties:
-                                type: string
-                              description: A dictionary that enables the application
-                                running on the specified host to pass and receive
-                                virtual network interface (VIF) port-specific information
-                                to the plug-in.
-                              type: object
-                            projectId:
-                              type: string
-                            securityGroupFilters:
-                              description: The names, uuids, filters or any combination
-                                these of the security groups to assign to the instance
-                              items:
-                                properties:
-                                  filter:
-                                    description: Filters used to query security groups
-                                      in openstack
-                                    properties:
-                                      description:
-                                        type: string
-                                      id:
-                                        type: string
-                                      limit:
-                                        type: integer
-                                      marker:
-                                        type: string
-                                      name:
-                                        type: string
-                                      notTags:
-                                        type: string
-                                      notTagsAny:
-                                        type: string
-                                      projectId:
-                                        type: string
-                                      sortDir:
-                                        type: string
-                                      sortKey:
-                                        type: string
-                                      tags:
-                                        type: string
-                                      tagsAny:
-                                        type: string
-                                      tenantId:
-                                        type: string
-                                    type: object
-                                  name:
-                                    description: Security Group name
-                                    type: string
-                                  uuid:
-                                    description: Security Group UID
-                                    type: string
-                                type: object
-                              type: array
-                            securityGroups:
-                              description: The uuids of the security groups to assign
-                                to the instance
-                              items:
-                                type: string
-                              type: array
-                              x-kubernetes-list-type: set
-                            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
-                            tenantId:
-                              type: string
-                            trunk:
-                              description: Enables and disables trunk at port level.
-                                If not provided, openStackMachine.Spec.Trunk is inherited.
-                              type: boolean
-                            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:
-                            filter:
-                              description: Filters used to query security groups in
-                                openstack
-                              properties:
-                                description:
-                                  type: string
-                                id:
-                                  type: string
-                                limit:
-                                  type: integer
-                                marker:
-                                  type: string
-                                name:
-                                  type: string
-                                notTags:
-                                  type: string
-                                notTagsAny:
-                                  type: string
-                                projectId:
-                                  type: string
-                                sortDir:
-                                  type: string
-                                sortKey:
-                                  type: string
-                                tags:
-                                  type: string
-                                tagsAny:
-                                  type: string
-                                tenantId:
-                                  type: string
-                              type: object
-                            name:
-                              description: Security Group name
-                              type: string
-                            uuid:
-                              description: Security Group UID
-                              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
-                      subnet:
-                        description: UUID, IP address of a port from this subnet will
-                          be marked as AccessIPv4 on the created compute 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
-                    required:
-                    - flavor
-                    type: object
-                required:
-                - spec
-                type: object
-            required:
-            - template
-            type: object
-        type: object
-    served: true
-    storage: true
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: infrastructure-openstack
-  name: capo-manager
-  namespace: capo-system
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: Role
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: infrastructure-openstack
-  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:
-  creationTimestamp: null
-  labels:
-    cluster.x-k8s.io/provider: infrastructure-openstack
-  name: capo-manager-role
-rules:
-- apiGroups:
-  - ""
-  resources:
-  - events
-  verbs:
-  - create
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - ""
-  resources:
-  - secrets
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - cluster.x-k8s.io
-  resources:
-  - clusters
-  - clusters/status
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - cluster.x-k8s.io
-  resources:
-  - machines
-  - machines/status
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - infrastructure.cluster.x-k8s.io
-  resources:
-  - openstackclusters
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - infrastructure.cluster.x-k8s.io
-  resources:
-  - openstackclusters/status
-  verbs:
-  - get
-  - patch
-  - update
-- apiGroups:
-  - infrastructure.cluster.x-k8s.io
-  resources:
-  - openstackmachines
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - infrastructure.cluster.x-k8s.io
-  resources:
-  - openstackmachines/status
-  verbs:
-  - get
-  - patch
-  - update
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: RoleBinding
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: infrastructure-openstack
-  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:
-  labels:
-    cluster.x-k8s.io/provider: infrastructure-openstack
-  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
-  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:
-  labels:
-    cluster.x-k8s.io/provider: infrastructure-openstack
-    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
-  template:
-    metadata:
-      labels:
-        cluster.x-k8s.io/provider: infrastructure-openstack
-        control-plane: capo-controller-manager
-    spec:
-      containers:
-      - args:
-        - --leader-elect
-        - --v=2
-        - --metrics-bind-addr=127.0.0.1:8080
-        command:
-        - /manager
-        image: gcr.io/k8s-staging-capi-openstack/capi-openstack-controller:nightly_main_20221109
-        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
-        volumeMounts:
-        - mountPath: /tmp/k8s-webhook-server/serving-certs
-          name: cert
-          readOnly: true
-      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
----
-apiVersion: cert-manager.io/v1
-kind: Certificate
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: infrastructure-openstack
-  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: cert-manager.io/v1
-kind: Issuer
-metadata:
-  labels:
-    cluster.x-k8s.io/provider: infrastructure-openstack
-  name: capo-selfsigned-issuer
-  namespace: capo-system
-spec:
-  selfSigned: {}
----
-apiVersion: admissionregistration.k8s.io/v1
-kind: MutatingWebhookConfiguration
-metadata:
-  annotations:
-    cert-manager.io/inject-ca-from: capo-system/capo-serving-cert
-  labels:
-    cluster.x-k8s.io/provider: infrastructure-openstack
-  name: capo-mutating-webhook-configuration
-webhooks:
-- admissionReviewVersions:
-  - v1beta1
-  clientConfig:
-    service:
-      name: capo-webhook-service
-      namespace: capo-system
-      path: /mutate-infrastructure-cluster-x-k8s-io-v1alpha6-openstackcluster
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: default.openstackcluster.infrastructure.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - infrastructure.cluster.x-k8s.io
-    apiVersions:
-    - v1alpha6
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - openstackclusters
-  sideEffects: None
-- admissionReviewVersions:
-  - v1beta1
-  clientConfig:
-    service:
-      name: capo-webhook-service
-      namespace: capo-system
-      path: /mutate-infrastructure-cluster-x-k8s-io-v1alpha6-openstackclustertemplate
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: default.openstackclustertemplate.infrastructure.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - infrastructure.cluster.x-k8s.io
-    apiVersions:
-    - v1alpha6
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - openstackclustertemplates
-  sideEffects: None
-- admissionReviewVersions:
-  - v1beta1
-  clientConfig:
-    service:
-      name: capo-webhook-service
-      namespace: capo-system
-      path: /mutate-infrastructure-cluster-x-k8s-io-v1alpha6-openstackmachine
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: default.openstackmachine.infrastructure.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - infrastructure.cluster.x-k8s.io
-    apiVersions:
-    - v1alpha6
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - openstackmachines
-  sideEffects: None
----
-apiVersion: admissionregistration.k8s.io/v1
-kind: ValidatingWebhookConfiguration
-metadata:
-  annotations:
-    cert-manager.io/inject-ca-from: capo-system/capo-serving-cert
-  labels:
-    cluster.x-k8s.io/provider: infrastructure-openstack
-  name: capo-validating-webhook-configuration
-webhooks:
-- admissionReviewVersions:
-  - v1beta1
-  clientConfig:
-    service:
-      name: capo-webhook-service
-      namespace: capo-system
-      path: /validate-infrastructure-cluster-x-k8s-io-v1alpha6-openstackcluster
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: validation.openstackcluster.infrastructure.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - infrastructure.cluster.x-k8s.io
-    apiVersions:
-    - v1alpha6
-    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-v1alpha6-openstackclustertemplate
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: validation.openstackclustertemplate.infrastructure.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - infrastructure.cluster.x-k8s.io
-    apiVersions:
-    - v1alpha6
-    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-v1alpha6-openstackmachine
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: validation.openstackmachine.infrastructure.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - infrastructure.cluster.x-k8s.io
-    apiVersions:
-    - v1alpha6
-    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-v1alpha6-openstackmachinetemplate
-  failurePolicy: Fail
-  matchPolicy: Equivalent
-  name: validation.openstackmachinetemplate.infrastructure.cluster.x-k8s.io
-  rules:
-  - apiGroups:
-    - infrastructure.cluster.x-k8s.io
-    apiVersions:
-    - v1alpha6
-    operations:
-    - CREATE
-    - UPDATE
-    resources:
-    - openstackmachinetemplates
-  sideEffects: None
diff --git a/atmosphere/operator/manifests/capi-rbac.yml b/atmosphere/operator/manifests/capi-rbac.yml
deleted file mode 100644
index f1f2fdc..0000000
--- a/atmosphere/operator/manifests/capi-rbac.yml
+++ /dev/null
@@ -1,62 +0,0 @@
----
-apiVersion: v1
-kind: Namespace
-metadata:
-  name: magnum-system
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: Role
-metadata:
-  name: magnum-cluster-api
-  namespace: magnum-system
-rules:
-  - apiGroups: [""]
-    resources: [namespaces]
-    verbs: [patch]
-  - apiGroups: [""]
-    resources: [configmaps, secrets]
-    verbs: [create, update, patch, get, delete]
-  - apiGroups: [cluster.x-k8s.io]
-    resources: [clusters]
-    verbs: [create, update, patch, get, delete]
-  - apiGroups: [cluster.x-k8s.io]
-    resources: [clusterclasses]
-    verbs: [create, update, patch]
-  - apiGroups: [cluster.x-k8s.io]
-    resources: [machinedeployments]
-    verbs: [list]
-  - apiGroups: [bootstrap.cluster.x-k8s.io]
-    resources: [kubeadmconfigtemplates]
-    verbs: [create, update, patch]
-  - apiGroups: [controlplane.cluster.x-k8s.io]
-    resources: [kubeadmcontrolplanes]
-    verbs: [list]
-  - apiGroups: [controlplane.cluster.x-k8s.io]
-    resources: [kubeadmcontrolplanetemplates]
-    verbs: [create, update, patch]
-  - apiGroups: [infrastructure.cluster.x-k8s.io]
-    resources: [openstackclustertemplates, openstackmachinetemplates]
-    verbs: [create, update, patch]
-  - apiGroups: [addons.cluster.x-k8s.io]
-    resources: [clusterresourcesets]
-    verbs: [create, update, patch, delete]
-  - apiGroups: [source.toolkit.fluxcd.io]
-    resources: [helmrepositories]
-    verbs: [create, update, patch]
-  - apiGroups: [helm.toolkit.fluxcd.io]
-    resources: [helmreleases]
-    verbs: [delete]
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: RoleBinding
-metadata:
-  name: magnum-cluster-api
-  namespace: magnum-system
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: Role
-  name: magnum-cluster-api
-subjects:
-  - kind: ServiceAccount
-    name: magnum-conductor
-    namespace: openstack
diff --git a/atmosphere/operator/tasks.py b/atmosphere/operator/tasks.py
deleted file mode 100644
index 2c46dd0..0000000
--- a/atmosphere/operator/tasks.py
+++ /dev/null
@@ -1,42 +0,0 @@
-import glob
-import os
-import subprocess
-
-import pkg_resources
-from taskflow import task
-
-from atmosphere.operator import constants, utils
-
-
-class InstallClusterApiTask(task.Task):
-    def execute(self, spec: dict):
-        cluster_api_images = [
-            i for i in constants.IMAGE_LIST if i.startswith("cluster_api")
-        ]
-
-        # TODO(mnaser): Move CAPI and CAPO to run on control plane
-        manifests_path = pkg_resources.resource_filename(__name__, "manifests")
-        manifest_files = glob.glob(os.path.join(manifests_path, "capi-*.yml"))
-
-        for manifest in manifest_files:
-            with open(manifest) as fd:
-                data = fd.read()
-
-            # NOTE(mnaser): Replace all the images for Cluster API
-            for image in cluster_api_images:
-                data = data.replace(
-                    utils.get_image_ref(image).string(),
-                    utils.get_image_ref(
-                        image, override_registry=spec["imageRepository"]
-                    ).string(),
-                )
-
-            subprocess.run(
-                "kubectl apply -f -",
-                shell=True,
-                check=True,
-                input=data,
-                text=True,
-                stdout=subprocess.DEVNULL,
-                stderr=subprocess.DEVNULL,
-            )
diff --git a/roles/cluster_api/README.md b/roles/cluster_api/README.md
deleted file mode 100644
index a3d22cd..0000000
--- a/roles/cluster_api/README.md
+++ /dev/null
@@ -1 +0,0 @@
-# `cluster-api`
diff --git a/roles/cluster_api/meta/main.yml b/roles/cluster_api/meta/main.yml
deleted file mode 100644
index d82cd11..0000000
--- a/roles/cluster_api/meta/main.yml
+++ /dev/null
@@ -1,27 +0,0 @@
-# Copyright (c) 2022 VEXXHOST, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-galaxy_info:
-  author: VEXXHOST, Inc.
-  description: Ansible role for Cluster API
-  license: Apache-2.0
-  min_ansible_version: 5.5.0
-  standalone: false
-  platforms:
-    - name: Ubuntu
-      versions:
-        - focal
-
-dependencies:
-  - role: defaults
diff --git a/roles/cluster_api/tasks/main.yml b/roles/cluster_api/tasks/main.yml
deleted file mode 100644
index d56ada6..0000000
--- a/roles/cluster_api/tasks/main.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-# Copyright (c) 2022 VEXXHOST, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-- name: Deploy resources
-  kubernetes.core.k8s:
-    kubeconfig: /etc/kubernetes/admin.conf
-    state: present
-    template:
-      - path: 'templates/capi-bootstrap.yml'
-      - path: 'templates/capi-control-plane.yml'
-      - path: 'templates/capi-core.yml'
-      - path: 'templates/capi-provider.yml'
-      - path: 'templates/capi-rbac.yml'
-  run_once: true
diff --git a/roles/openstack_helm_magnum/tasks/main.yml b/roles/openstack_helm_magnum/tasks/main.yml
index 587d375..140b15b 100644
--- a/roles/openstack_helm_magnum/tasks/main.yml
+++ b/roles/openstack_helm_magnum/tasks/main.yml
@@ -37,6 +37,18 @@
         name: "{{ openstack_helm_magnum_helm_release_name }}"
         namespace: "{{ openstack_helm_magnum_helm_release_namespace }}"
 
+- name: Deploy cluster api
+  kubernetes.core.k8s:
+    kubeconfig: /etc/kubernetes/admin.conf
+    state: present
+    template:
+      - path: 'templates/capi-bootstrap.yml.j2'
+      - path: 'templates/capi-control-plane.yml.j2'
+      - path: 'templates/capi-core.yml.j2'
+      - path: 'templates/capi-provider.yml.j2'
+      - path: 'templates/capi-rbac.yml.j2'
+  run_once: true
+
 - name: Deploy Helm chart
   run_once: true
   kubernetes.core.helm:
@@ -56,7 +68,7 @@
     openstack_helm_ingress_service_port: 9511
     openstack_helm_ingress_annotations: "{{ openstack_helm_magnum_ingress_annotations }}"
 
-- name: Deploy Helm chart
+- name: Deploy magnum registry
   kubernetes.core.k8s:
     state: present
     definition:
@@ -358,15 +370,6 @@
               nodeSelector:
                 openstack-control-plane: enabled
 
-- name: Create Ingress
-  ansible.builtin.include_role:
-    name: openstack_helm_ingress
-  vars:
-    openstack_helm_ingress_endpoint: container_infra
-    openstack_helm_ingress_service_name: magnum-api
-    openstack_helm_ingress_service_port: 9511
-    openstack_helm_ingress_annotations: "{{ openstack_helm_magnum_ingress_annotations }}"
-
 - name: Create magnum registry Ingress
   ansible.builtin.include_role:
     name: openstack_helm_ingress
diff --git a/roles/cluster_api/templates/capi-bootstrap.yml b/roles/openstack_helm_magnum/templates/capi-bootstrap.yml.j2
similarity index 100%
rename from roles/cluster_api/templates/capi-bootstrap.yml
rename to roles/openstack_helm_magnum/templates/capi-bootstrap.yml.j2
diff --git a/roles/cluster_api/templates/capi-control-plane.yml b/roles/openstack_helm_magnum/templates/capi-control-plane.yml.j2
similarity index 100%
rename from roles/cluster_api/templates/capi-control-plane.yml
rename to roles/openstack_helm_magnum/templates/capi-control-plane.yml.j2
diff --git a/roles/cluster_api/templates/capi-core.yml b/roles/openstack_helm_magnum/templates/capi-core.yml.j2
similarity index 100%
rename from roles/cluster_api/templates/capi-core.yml
rename to roles/openstack_helm_magnum/templates/capi-core.yml.j2
diff --git a/roles/cluster_api/templates/capi-provider.yml b/roles/openstack_helm_magnum/templates/capi-provider.yml.j2
similarity index 100%
rename from roles/cluster_api/templates/capi-provider.yml
rename to roles/openstack_helm_magnum/templates/capi-provider.yml.j2
diff --git a/roles/cluster_api/templates/capi-rbac.yml b/roles/openstack_helm_magnum/templates/capi-rbac.yml.j2
similarity index 100%
rename from roles/cluster_api/templates/capi-rbac.yml
rename to roles/openstack_helm_magnum/templates/capi-rbac.yml.j2