apiVersion: v1
kind: Namespace
metadata:
  labels:
    cluster.x-k8s.io/provider: infrastructure-openstack
    clusterctl.cluster.x-k8s.io: ""
    pod-security.kubernetes.io/audit: restricted
    pod-security.kubernetes.io/enforce: restricted
    pod-security.kubernetes.io/warn: restricted
  name: capo-system
---
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  labels:
    cluster.x-k8s.io/provider: infrastructure-openstack
    clusterctl.cluster.x-k8s.io: ""
  name: capo-selfsigned-issuer
  namespace: capo-system
spec:
  selfSigned: {}
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  labels:
    cluster.x-k8s.io/provider: infrastructure-openstack
    clusterctl.cluster.x-k8s.io: ""
  name: capo-serving-cert
  namespace: capo-system
spec:
  dnsNames:
  - capo-webhook-service.capo-system.svc
  - capo-webhook-service.capo-system.svc.cluster.local
  issuerRef:
    kind: Issuer
    name: capo-selfsigned-issuer
  secretName: capo-webhook-service-cert
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    cert-manager.io/inject-ca-from: capo-system/capo-serving-cert
    controller-gen.kubebuilder.io/version: v0.16.5
  creationTimestamp: null
  labels:
    cluster.x-k8s.io/provider: infrastructure-openstack
    cluster.x-k8s.io/v1beta1: v1alpha7_v1beta1
    clusterctl.cluster.x-k8s.io: ""
  name: openstackclusters.infrastructure.cluster.x-k8s.io
spec:
  conversion:
    strategy: Webhook
    webhook:
      clientConfig:
        service:
          name: capo-webhook-service
          namespace: capo-system
          path: /convert
      conversionReviewVersions:
      - v1
      - v1beta1
  group: infrastructure.cluster.x-k8s.io
  names:
    categories:
    - cluster-api
    kind: OpenStackCluster
    listKind: OpenStackClusterList
    plural: openstackclusters
    shortNames:
    - osc
    singular: openstackcluster
  scope: Namespaced
  versions:
  - additionalPrinterColumns:
    - description: Cluster to which this OpenStackCluster belongs
      jsonPath: .metadata.labels.cluster\.x-k8s\.io/cluster-name
      name: Cluster
      type: string
    - description: Cluster infrastructure is ready for OpenStack instances
      jsonPath: .status.ready
      name: Ready
      type: string
    - description: Network the cluster is using
      jsonPath: .status.network.id
      name: Network
      type: string
    - description: API Endpoint
      jsonPath: .spec.controlPlaneEndpoint.host
      name: Endpoint
      priority: 1
      type: string
    - description: Bastion address for breakglass access
      jsonPath: .status.bastion.floatingIP
      name: Bastion IP
      type: string
    - description: Time duration since creation of OpenStackCluster
      jsonPath: .metadata.creationTimestamp
      name: Age
      type: date
    deprecated: true
    deprecationWarning: The v1alpha7 version of OpenStackCluster has been deprecated
      and will be removed in a future release.
    name: v1alpha7
    schema:
      openAPIV3Schema:
        description: |-
          OpenStackCluster is the Schema for the openstackclusters API.

          Deprecated: v1alpha7.OpenStackCluster has been replaced by v1beta1.OpenStackCluster.
        properties:
          apiVersion:
            description: |-
              APIVersion defines the versioned schema of this representation of an object.
              Servers should convert recognized schemas to the latest internal value, and
              may reject unrecognized values.
              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
            type: string
          kind:
            description: |-
              Kind is a string value representing the REST resource this object represents.
              Servers may infer this from the endpoint the client submits requests to.
              Cannot be updated.
              In CamelCase.
              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
            type: string
          metadata:
            type: object
          spec:
            description: OpenStackClusterSpec defines the desired state of OpenStackCluster.
            properties:
              allowAllInClusterTraffic:
                description: |-
                  AllowAllInClusterTraffic is only used when managed security groups are in use.
                  If set to true, the rules for the managed security groups are configured so that all
                  ingress and egress between cluster nodes is permitted, allowing CNIs other than
                  Calico to be used.
                type: boolean
              apiServerFixedIP:
                description: |-
                  APIServerFixedIP is the fixed IP which will be associated with the API server.
                  In the case where the API server has a floating IP but not a managed load balancer,
                  this field is not used.
                  If a managed load balancer is used and this field is not specified, a fixed IP will
                  be dynamically allocated for the load balancer.
                  If a managed load balancer is not used AND the API server floating IP is disabled,
                  this field MUST be specified and should correspond to a pre-allocated port that
                  holds the fixed IP to be used as a VIP.
                type: string
              apiServerFloatingIP:
                description: |-
                  APIServerFloatingIP is the floatingIP which will be associated with the API server.
                  The floatingIP will be created if it does not already exist.
                  If not specified, a new floatingIP is allocated.
                  This field is not used if DisableAPIServerFloatingIP is set to true.
                type: string
              apiServerLoadBalancer:
                description: |-
                  APIServerLoadBalancer configures the optional LoadBalancer for the APIServer.
                  It must be activated by setting `enabled: true`.
                properties:
                  additionalPorts:
                    description: AdditionalPorts adds additional tcp ports to the
                      load balancer.
                    items:
                      type: integer
                    type: array
                  allowedCidrs:
                    description: AllowedCIDRs restrict access to all API-Server listeners
                      to the given address CIDRs.
                    items:
                      type: string
                    type: array
                  enabled:
                    description: Enabled defines whether a load balancer should be
                      created.
                    type: boolean
                  provider:
                    description: Octavia Provider Used to create load balancer
                    type: string
                type: object
              apiServerPort:
                description: |-
                  APIServerPort is the port on which the listener on the APIServer
                  will be created
                type: integer
              bastion:
                description: |-
                  Bastion is the OpenStack instance to login the nodes

                  As a rolling update is not ideal during a bastion host session, we
                  prevent changes to a running bastion configuration. Set `enabled: false` to
                  make changes.
                properties:
                  availabilityZone:
                    type: string
                  enabled:
                    type: boolean
                  instance:
                    description: Instance for the bastion itself
                    properties:
                      additionalBlockDevices:
                        description: AdditionalBlockDevices is a list of specifications
                          for additional block devices to attach to the server instance
                        items:
                          description: AdditionalBlockDevice is a block device to
                            attach to the server.
                          properties:
                            name:
                              description: |-
                                Name of the block device in the context of a machine.
                                If the block device is a volume, the Cinder volume will be named
                                as a combination of the machine name and this name.
                                Also, this name will be used for tagging the block device.
                                Information about the block device tag can be obtained from the OpenStack
                                metadata API or the config drive.
                              type: string
                            sizeGiB:
                              description: SizeGiB is the size of the block device
                                in gibibytes (GiB).
                              type: integer
                            storage:
                              description: |-
                                Storage specifies the storage type of the block device and
                                additional storage options.
                              properties:
                                type:
                                  description: |-
                                    Type is the type of block device to create.
                                    This can be either "Volume" or "Local".
                                  type: string
                                volume:
                                  description: Volume contains additional storage
                                    options for a volume block device.
                                  properties:
                                    availabilityZone:
                                      description: |-
                                        AvailabilityZone is the volume availability zone to create the volume in.
                                        If omitted, the availability zone of the server will be used.
                                        The availability zone must NOT contain spaces otherwise it will lead to volume that belongs
                                        to this availability zone register failure, see kubernetes/cloud-provider-openstack#1379 for
                                        further information.
                                      type: string
                                    type:
                                      description: |-
                                        Type is the Cinder volume type of the volume.
                                        If omitted, the default Cinder volume type that is configured in the OpenStack cloud
                                        will be used.
                                      type: string
                                  type: object
                              required:
                              - type
                              type: object
                          required:
                          - name
                          - sizeGiB
                          - storage
                          type: object
                        type: array
                        x-kubernetes-list-map-keys:
                        - name
                        x-kubernetes-list-type: map
                      cloudName:
                        description: The name of the cloud to use from the clouds
                          secret
                        type: string
                      configDrive:
                        description: Config Drive support
                        type: boolean
                      flavor:
                        description: The flavor reference for the flavor for your
                          server instance.
                        minLength: 1
                        type: string
                      flavorID:
                        description: |-
                          FlavorID allows flavors to be specified by ID.  This field takes precedence
                          over Flavor.
                        minLength: 1
                        type: string
                      floatingIP:
                        description: |-
                          The floatingIP which will be associated to the machine, only used for master.
                          The floatingIP should have been created and haven't been associated.
                        type: string
                      identityRef:
                        description: |-
                          IdentityRef is a reference to a identity to be used when reconciling this cluster.
                          If not specified, the identity ref of the cluster will be used instead.
                        properties:
                          kind:
                            description: |-
                              Kind of the identity. Must be supported by the infrastructure
                              provider and may be either cluster or namespace-scoped.
                            minLength: 1
                            type: string
                          name:
                            description: |-
                              Name of the infrastructure identity to be used.
                              Must be either a cluster-scoped resource, or namespaced-scoped
                              resource the same namespace as the resource(s) being provisioned.
                            type: string
                        required:
                        - kind
                        - name
                        type: object
                      image:
                        description: |-
                          The name of the image to use for your server instance.
                          If the RootVolume is specified, this will be ignored and use rootVolume directly.
                        type: string
                      imageUUID:
                        description: |-
                          The uuid of the image to use for your server instance.
                          if it's empty, Image name will be used
                        type: string
                      instanceID:
                        description: InstanceID is the OpenStack instance ID for this
                          machine.
                        type: string
                      ports:
                        description: |-
                          Ports to be attached to the server instance. They are created if a port with the given name does not already exist.
                          If not specified a default port will be added for the default cluster network.
                        items:
                          properties:
                            adminStateUp:
                              type: boolean
                            allowedAddressPairs:
                              items:
                                properties:
                                  ipAddress:
                                    type: string
                                  macAddress:
                                    type: string
                                type: object
                              type: array
                            description:
                              type: string
                            disablePortSecurity:
                              description: |-
                                DisablePortSecurity enables or disables the port security when set.
                                When not set, it takes the value of the corresponding field at the network level.
                              type: boolean
                            fixedIPs:
                              description: Specify pairs of subnet and/or IP address.
                                These should be subnets of the network with the given
                                NetworkID.
                              items:
                                properties:
                                  ipAddress:
                                    type: string
                                  subnet:
                                    description: |-
                                      Subnet is an openstack subnet query that will return the id of a subnet to create
                                      the fixed IP of a port in. This query must not return more than one subnet.
                                    properties:
                                      cidr:
                                        type: string
                                      description:
                                        type: string
                                      gateway_ip:
                                        type: string
                                      id:
                                        type: string
                                      ipVersion:
                                        type: integer
                                      ipv6AddressMode:
                                        type: string
                                      ipv6RaMode:
                                        type: string
                                      name:
                                        type: string
                                      notTags:
                                        type: string
                                      notTagsAny:
                                        type: string
                                      projectId:
                                        type: string
                                      tags:
                                        type: string
                                      tagsAny:
                                        type: string
                                    type: object
                                required:
                                - subnet
                                type: object
                              type: array
                            hostId:
                              description: The ID of the host where the port is allocated
                              type: string
                            macAddress:
                              type: string
                            nameSuffix:
                              description: Used to make the name of the port unique.
                                If unspecified, instead the 0-based index of the port
                                in the list is used.
                              type: string
                            network:
                              description: |-
                                Network is a query for an openstack network that the port will be created or discovered on.
                                This will fail if the query returns more than one network.
                              properties:
                                description:
                                  type: string
                                id:
                                  type: string
                                name:
                                  type: string
                                notTags:
                                  type: string
                                notTagsAny:
                                  type: string
                                projectId:
                                  type: string
                                tags:
                                  type: string
                                tagsAny:
                                  type: string
                              type: object
                            profile:
                              description: |-
                                Profile is a set of key-value pairs that are used for binding details.
                                We intentionally don't expose this as a map[string]string because we only want to enable
                                the users to set the values of the keys that are known to work in OpenStack Networking API.
                                See https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
                              properties:
                                ovsHWOffload:
                                  description: OVSHWOffload enables or disables the
                                    OVS hardware offload feature.
                                  type: boolean
                                trustedVF:
                                  description: TrustedVF enables or disables the “trusted
                                    mode” for the VF.
                                  type: boolean
                              type: object
                            propagateUplinkStatus:
                              description: PropageteUplinkStatus enables or disables
                                the propagate uplink status on the port.
                              type: boolean
                            securityGroupFilters:
                              description: The names, uuids, filters or any combination
                                these of the security groups to assign to the instance
                              items:
                                properties:
                                  description:
                                    type: string
                                  id:
                                    type: string
                                  name:
                                    type: string
                                  notTags:
                                    type: string
                                  notTagsAny:
                                    type: string
                                  projectId:
                                    type: string
                                  tags:
                                    type: string
                                  tagsAny:
                                    type: string
                                type: object
                              type: array
                            tags:
                              description: |-
                                Tags applied to the port (and corresponding trunk, if a trunk is configured.)
                                These tags are applied in addition to the instance's tags, which will also be applied to the port.
                              items:
                                type: string
                              type: array
                              x-kubernetes-list-type: set
                            trunk:
                              description: Enables and disables trunk at port level.
                                If not provided, openStackMachine.Spec.Trunk is inherited.
                              type: boolean
                            valueSpecs:
                              description: |-
                                Value specs are extra parameters to include in the API request with OpenStack.
                                This is an extension point for the API, so what they do and if they are supported,
                                depends on the specific OpenStack implementation.
                              items:
                                description: ValueSpec represents a single value_spec
                                  key-value pair.
                                properties:
                                  key:
                                    description: Key is the key in the key-value pair.
                                    type: string
                                  name:
                                    description: |-
                                      Name is the name of the key-value pair.
                                      This is just for identifying the pair and will not be sent to the OpenStack API.
                                    type: string
                                  value:
                                    description: Value is the value in the key-value
                                      pair.
                                    type: string
                                required:
                                - key
                                - name
                                - value
                                type: object
                              type: array
                              x-kubernetes-list-map-keys:
                              - name
                              x-kubernetes-list-type: map
                            vnicType:
                              description: The virtual network interface card (vNIC)
                                type that is bound to the neutron port.
                              type: string
                          type: object
                        type: array
                      providerID:
                        description: ProviderID is the unique identifier as specified
                          by the cloud provider.
                        type: string
                      rootVolume:
                        description: The volume metadata to boot from
                        properties:
                          availabilityZone:
                            type: string
                          diskSize:
                            type: integer
                          volumeType:
                            type: string
                        type: object
                      securityGroups:
                        description: The names of the security groups to assign to
                          the instance
                        items:
                          properties:
                            description:
                              type: string
                            id:
                              type: string
                            name:
                              type: string
                            notTags:
                              type: string
                            notTagsAny:
                              type: string
                            projectId:
                              type: string
                            tags:
                              type: string
                            tagsAny:
                              type: string
                          type: object
                        type: array
                      serverGroupID:
                        description: The server group to assign the machine to
                        type: string
                      serverMetadata:
                        additionalProperties:
                          type: string
                        description: Metadata mapping. Allows you to create a map
                          of key value pairs to add to the server instance.
                        type: object
                      sshKeyName:
                        description: The ssh key to inject in the instance
                        type: string
                      tags:
                        description: |-
                          Machine tags
                          Requires Nova api 2.52 minimum!
                        items:
                          type: string
                        type: array
                        x-kubernetes-list-type: set
                      trunk:
                        description: Whether the server instance is created on a trunk
                          port or not.
                        type: boolean
                    type: object
                type: object
              cloudName:
                description: The name of the cloud to use from the clouds secret
                type: string
              controlPlaneAvailabilityZones:
                description: ControlPlaneAvailabilityZones is the az to deploy control
                  plane to
                items:
                  type: string
                type: array
                x-kubernetes-list-type: set
              controlPlaneEndpoint:
                description: ControlPlaneEndpoint represents the endpoint used to
                  communicate with the control plane.
                properties:
                  host:
                    description: The hostname on which the API server is serving.
                    type: string
                  port:
                    description: The port on which the API server is serving.
                    format: int32
                    type: integer
                required:
                - host
                - port
                type: object
              controlPlaneOmitAvailabilityZone:
                description: |-
                  Indicates whether to omit the az for control plane nodes, allowing the Nova scheduler
                  to make a decision on which az to use based on other scheduling constraints
                type: boolean
              disableAPIServerFloatingIP:
                description: |-
                  DisableAPIServerFloatingIP determines whether or not to attempt to attach a floating
                  IP to the API server. This allows for the creation of clusters when attaching a floating
                  IP to the API server (and hence, in many cases, exposing the API server to the internet)
                  is not possible or desirable, e.g. if using a shared VLAN for communication between
                  management and workload clusters or when the management cluster is inside the
                  project network.
                  This option requires that the API server use a VIP on the cluster network so that the
                  underlying machines can change without changing ControlPlaneEndpoint.Host.
                  When using a managed load balancer, this VIP will be managed automatically.
                  If not using a managed load balancer, cluster configuration will fail without additional
                  configuration to manage the VIP on the control plane machines, which falls outside of
                  the scope of this controller.
                type: boolean
              disablePortSecurity:
                description: |-
                  DisablePortSecurity disables the port security of the network created for the
                  Kubernetes cluster, which also disables SecurityGroups
                type: boolean
              dnsNameservers:
                description: |-
                  DNSNameservers is the list of nameservers for OpenStack Subnet being created.
                  Set this value when you need create a new network/subnet while the access
                  through DNS is required.
                items:
                  type: string
                type: array
                x-kubernetes-list-type: set
              externalNetworkId:
                description: |-
                  ExternalNetworkID is the ID of an external OpenStack Network. This is necessary
                  to get public internet to the VMs.
                type: string
              externalRouterIPs:
                description: |-
                  ExternalRouterIPs is an array of externalIPs on the respective subnets.
                  This is necessary if the router needs a fixed ip in a specific subnet.
                items:
                  properties:
                    fixedIP:
                      description: The FixedIP in the corresponding subnet
                      type: string
                    subnet:
                      description: The subnet in which the FixedIP is used for the
                        Gateway of this router
                      properties:
                        cidr:
                          type: string
                        description:
                          type: string
                        gateway_ip:
                          type: string
                        id:
                          type: string
                        ipVersion:
                          type: integer
                        ipv6AddressMode:
                          type: string
                        ipv6RaMode:
                          type: string
                        name:
                          type: string
                        notTags:
                          type: string
                        notTagsAny:
                          type: string
                        projectId:
                          type: string
                        tags:
                          type: string
                        tagsAny:
                          type: string
                      type: object
                  required:
                  - subnet
                  type: object
                type: array
              identityRef:
                description: IdentityRef is a reference to a identity to be used when
                  reconciling this cluster
                properties:
                  kind:
                    description: |-
                      Kind of the identity. Must be supported by the infrastructure
                      provider and may be either cluster or namespace-scoped.
                    minLength: 1
                    type: string
                  name:
                    description: |-
                      Name of the infrastructure identity to be used.
                      Must be either a cluster-scoped resource, or namespaced-scoped
                      resource the same namespace as the resource(s) being provisioned.
                    type: string
                required:
                - kind
                - name
                type: object
              managedSecurityGroups:
                description: |-
                  ManagedSecurityGroups determines whether OpenStack security groups for the cluster
                  will be managed by the OpenStack provider or whether pre-existing security groups will
                  be specified as part of the configuration.
                  By default, the managed security groups have rules that allow the Kubelet, etcd, the
                  Kubernetes API server and the Calico CNI plugin to function correctly.
                type: boolean
              network:
                description: If NodeCIDR cannot be set this can be used to detect
                  an existing network.
                properties:
                  description:
                    type: string
                  id:
                    type: string
                  name:
                    type: string
                  notTags:
                    type: string
                  notTagsAny:
                    type: string
                  projectId:
                    type: string
                  tags:
                    type: string
                  tagsAny:
                    type: string
                type: object
              networkMtu:
                description: |-
                  NetworkMTU sets the maximum transmission unit (MTU) value to address fragmentation for the private network ID.
                  This value will be used only if the Cluster actuator creates the network.
                  If leaved empty, the network will have the default MTU defined in Openstack network service.
                  To use this field, the Openstack installation requires the net-mtu neutron API extension.
                type: integer
              nodeCidr:
                description: |-
                  NodeCIDR is the OpenStack Subnet to be created. Cluster actuator will create a
                  network, a subnet with NodeCIDR, and a router connected to this subnet.
                  If you leave this empty, no network will be created.
                type: string
              router:
                description: |-
                  If NodeCIDR is set this option can be used to detect an existing router.
                  If specified, no new router will be created.
                properties:
                  description:
                    type: string
                  id:
                    type: string
                  name:
                    type: string
                  notTags:
                    type: string
                  notTagsAny:
                    type: string
                  projectId:
                    type: string
                  tags:
                    type: string
                  tagsAny:
                    type: string
                type: object
              subnet:
                description: If NodeCIDR cannot be set this can be used to detect
                  an existing subnet.
                properties:
                  cidr:
                    type: string
                  description:
                    type: string
                  gateway_ip:
                    type: string
                  id:
                    type: string
                  ipVersion:
                    type: integer
                  ipv6AddressMode:
                    type: string
                  ipv6RaMode:
                    type: string
                  name:
                    type: string
                  notTags:
                    type: string
                  notTagsAny:
                    type: string
                  projectId:
                    type: string
                  tags:
                    type: string
                  tagsAny:
                    type: string
                type: object
              tags:
                description: Tags for all resources in cluster
                items:
                  type: string
                type: array
                x-kubernetes-list-type: set
            type: object
          status:
            description: OpenStackClusterStatus defines the observed state of OpenStackCluster.
            properties:
              apiServerLoadBalancer:
                description: APIServerLoadBalancer describes the api server load balancer
                  if one exists
                properties:
                  allowedCIDRs:
                    items:
                      type: string
                    type: array
                  id:
                    type: string
                  internalIP:
                    type: string
                  ip:
                    type: string
                  name:
                    type: string
                  tags:
                    items:
                      type: string
                    type: array
                required:
                - id
                - internalIP
                - ip
                - name
                type: object
              bastion:
                properties:
                  floatingIP:
                    type: string
                  id:
                    type: string
                  ip:
                    type: string
                  name:
                    type: string
                  sshKeyName:
                    type: string
                  state:
                    description: InstanceState describes the state of an OpenStack
                      instance.
                    type: string
                type: object
              bastionSecurityGroup:
                description: |-
                  SecurityGroup represents the basic information of the associated
                  OpenStack Neutron Security Group.
                properties:
                  id:
                    type: string
                  name:
                    type: string
                  rules:
                    items:
                      description: |-
                        SecurityGroupRule represent the basic information of the associated OpenStack
                        Security Group Role.
                      properties:
                        description:
                          type: string
                        direction:
                          type: string
                        etherType:
                          type: string
                        name:
                          type: string
                        portRangeMax:
                          type: integer
                        portRangeMin:
                          type: integer
                        protocol:
                          type: string
                        remoteGroupID:
                          type: string
                        remoteIPPrefix:
                          type: string
                        securityGroupID:
                          type: string
                      required:
                      - description
                      - direction
                      - etherType
                      - name
                      - portRangeMax
                      - portRangeMin
                      - protocol
                      - remoteGroupID
                      - remoteIPPrefix
                      - securityGroupID
                      type: object
                    type: array
                required:
                - id
                - name
                type: object
              controlPlaneSecurityGroup:
                description: |-
                  ControlPlaneSecurityGroups contains all the information about the OpenStack
                  Security Group that needs to be applied to control plane nodes.
                properties:
                  id:
                    type: string
                  name:
                    type: string
                  rules:
                    items:
                      description: |-
                        SecurityGroupRule represent the basic information of the associated OpenStack
                        Security Group Role.
                      properties:
                        description:
                          type: string
                        direction:
                          type: string
                        etherType:
                          type: string
                        name:
                          type: string
                        portRangeMax:
                          type: integer
                        portRangeMin:
                          type: integer
                        protocol:
                          type: string
                        remoteGroupID:
                          type: string
                        remoteIPPrefix:
                          type: string
                        securityGroupID:
                          type: string
                      required:
                      - description
                      - direction
                      - etherType
                      - name
                      - portRangeMax
                      - portRangeMin
                      - protocol
                      - remoteGroupID
                      - remoteIPPrefix
                      - securityGroupID
                      type: object
                    type: array
                required:
                - id
                - name
                type: object
              externalNetwork:
                description: externalNetwork contains information about the external
                  network used for default ingress and egress traffic.
                properties:
                  id:
                    type: string
                  name:
                    type: string
                  tags:
                    items:
                      type: string
                    type: array
                required:
                - id
                - name
                type: object
              failureDomains:
                additionalProperties:
                  description: |-
                    FailureDomainSpec is the Schema for Cluster API failure domains.
                    It allows controllers to understand how many failure domains a cluster can optionally span across.
                  properties:
                    attributes:
                      additionalProperties:
                        type: string
                      description: attributes is a free form map of attributes an
                        infrastructure provider might use or require.
                      type: object
                    controlPlane:
                      description: controlPlane determines if this failure domain
                        is suitable for use by control plane machines.
                      type: boolean
                  type: object
                description: FailureDomains represent OpenStack availability zones
                type: object
              failureMessage:
                description: |-
                  FailureMessage will be set in the event that there is a terminal problem
                  reconciling the OpenStackCluster and will contain a more verbose string suitable
                  for logging and human consumption.

                  This field should not be set for transitive errors that a controller
                  faces that are expected to be fixed automatically over
                  time (like service outages), but instead indicate that something is
                  fundamentally wrong with the OpenStackCluster's spec or the configuration of
                  the controller, and that manual intervention is required. Examples
                  of terminal errors would be invalid combinations of settings in the
                  spec, values that are unsupported by the controller, or the
                  responsible controller itself being critically misconfigured.

                  Any transient errors that occur during the reconciliation of
                  OpenStackClusters can be added as events to the OpenStackCluster object
                  and/or logged in the controller's output.
                type: string
              failureReason:
                description: |-
                  FailureReason will be set in the event that there is a terminal problem
                  reconciling the OpenStackCluster and will contain a succinct value suitable
                  for machine interpretation.

                  This field should not be set for transitive errors that a controller
                  faces that are expected to be fixed automatically over
                  time (like service outages), but instead indicate that something is
                  fundamentally wrong with the OpenStackCluster's spec or the configuration of
                  the controller, and that manual intervention is required. Examples
                  of terminal errors would be invalid combinations of settings in the
                  spec, values that are unsupported by the controller, or the
                  responsible controller itself being critically misconfigured.

                  Any transient errors that occur during the reconciliation of
                  OpenStackClusters can be added as events to the OpenStackCluster object
                  and/or logged in the controller's output.
                type: string
              network:
                description: Network contains information about the created OpenStack
                  Network.
                properties:
                  id:
                    type: string
                  name:
                    type: string
                  subnets:
                    description: Subnets is a list of subnets associated with the
                      default cluster network. Machines which use the default cluster
                      network will get an address from all of these subnets.
                    items:
                      description: Subnet represents basic information about the associated
                        OpenStack Neutron Subnet.
                      properties:
                        cidr:
                          type: string
                        id:
                          type: string
                        name:
                          type: string
                        tags:
                          items:
                            type: string
                          type: array
                      required:
                      - cidr
                      - id
                      - name
                      type: object
                    type: array
                  tags:
                    items:
                      type: string
                    type: array
                required:
                - id
                - name
                type: object
              ready:
                type: boolean
              router:
                description: Router describes the default cluster router
                properties:
                  id:
                    type: string
                  ips:
                    items:
                      type: string
                    type: array
                  name:
                    type: string
                  tags:
                    items:
                      type: string
                    type: array
                required:
                - id
                - name
                type: object
              workerSecurityGroup:
                description: |-
                  WorkerSecurityGroup contains all the information about the OpenStack Security
                  Group that needs to be applied to worker nodes.
                properties:
                  id:
                    type: string
                  name:
                    type: string
                  rules:
                    items:
                      description: |-
                        SecurityGroupRule represent the basic information of the associated OpenStack
                        Security Group Role.
                      properties:
                        description:
                          type: string
                        direction:
                          type: string
                        etherType:
                          type: string
                        name:
                          type: string
                        portRangeMax:
                          type: integer
                        portRangeMin:
                          type: integer
                        protocol:
                          type: string
                        remoteGroupID:
                          type: string
                        remoteIPPrefix:
                          type: string
                        securityGroupID:
                          type: string
                      required:
                      - description
                      - direction
                      - etherType
                      - name
                      - portRangeMax
                      - portRangeMin
                      - protocol
                      - remoteGroupID
                      - remoteIPPrefix
                      - securityGroupID
                      type: object
                    type: array
                required:
                - id
                - name
                type: object
            required:
            - ready
            type: object
        type: object
    served: false
    storage: false
    subresources:
      status: {}
  - additionalPrinterColumns:
    - description: Cluster to which this OpenStackCluster belongs
      jsonPath: .metadata.labels.cluster\.x-k8s\.io/cluster-name
      name: Cluster
      type: string
    - description: Cluster infrastructure is ready for OpenStack instances
      jsonPath: .status.ready
      name: Ready
      type: string
    - description: Network the cluster is using
      jsonPath: .status.network.id
      name: Network
      type: string
    - description: API Endpoint
      jsonPath: .spec.controlPlaneEndpoint.host
      name: Endpoint
      priority: 1
      type: string
    - description: Bastion address for breakglass access
      jsonPath: .status.bastion.floatingIP
      name: Bastion IP
      type: string
    - description: Time duration since creation of OpenStackCluster
      jsonPath: .metadata.creationTimestamp
      name: Age
      type: date
    name: v1beta1
    schema:
      openAPIV3Schema:
        description: OpenStackCluster is the Schema for the openstackclusters API.
        properties:
          apiVersion:
            description: |-
              APIVersion defines the versioned schema of this representation of an object.
              Servers should convert recognized schemas to the latest internal value, and
              may reject unrecognized values.
              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
            type: string
          kind:
            description: |-
              Kind is a string value representing the REST resource this object represents.
              Servers may infer this from the endpoint the client submits requests to.
              Cannot be updated.
              In CamelCase.
              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
            type: string
          metadata:
            type: object
          spec:
            description: OpenStackClusterSpec defines the desired state of OpenStackCluster.
            properties:
              apiServerFixedIP:
                description: |-
                  APIServerFixedIP is the fixed IP which will be associated with the API server.
                  In the case where the API server has a floating IP but not a managed load balancer,
                  this field is not used.
                  If a managed load balancer is used and this field is not specified, a fixed IP will
                  be dynamically allocated for the load balancer.
                  If a managed load balancer is not used AND the API server floating IP is disabled,
                  this field MUST be specified and should correspond to a pre-allocated port that
                  holds the fixed IP to be used as a VIP.
                type: string
              apiServerFloatingIP:
                description: |-
                  APIServerFloatingIP is the floatingIP which will be associated with the API server.
                  The floatingIP will be created if it does not already exist.
                  If not specified, a new floatingIP is allocated.
                  This field is not used if DisableAPIServerFloatingIP is set to true.
                type: string
              apiServerLoadBalancer:
                description: |-
                  APIServerLoadBalancer configures the optional LoadBalancer for the APIServer.
                  If not specified, no load balancer will be created for the API server.
                properties:
                  additionalPorts:
                    description: AdditionalPorts adds additional tcp ports to the
                      load balancer.
                    items:
                      type: integer
                    type: array
                    x-kubernetes-list-type: set
                  allowedCIDRs:
                    description: AllowedCIDRs restrict access to all API-Server listeners
                      to the given address CIDRs.
                    items:
                      type: string
                    type: array
                    x-kubernetes-list-type: set
                  availabilityZone:
                    description: AvailabilityZone is the failure domain that will
                      be used to create the APIServerLoadBalancer Spec.
                    type: string
                  enabled:
                    default: true
                    description: |-
                      Enabled defines whether a load balancer should be created. This value
                      defaults to true if an APIServerLoadBalancer is given.

                      There is no reason to set this to false. To disable creation of the
                      API server loadbalancer, omit the APIServerLoadBalancer field in the
                      cluster spec instead.
                    type: boolean
                  flavor:
                    description: Flavor is the flavor name that will be used to create
                      the APIServerLoadBalancer Spec.
                    type: string
                  network:
                    description: Network defines which network should the load balancer
                      be allocated on.
                    maxProperties: 1
                    minProperties: 1
                    properties:
                      filter:
                        description: Filter specifies a filter to select an OpenStack
                          network. If provided, cannot be empty.
                        minProperties: 1
                        properties:
                          description:
                            type: string
                          name:
                            type: string
                          notTags:
                            description: |-
                              NotTags is a list of tags to filter by. If specified, resources which
                              contain all of the given tags will be excluded from the result.
                            items:
                              description: |-
                                NeutronTag represents a tag on a Neutron resource.
                                It may not be empty and may not contain commas.
                              minLength: 1
                              pattern: ^[^,]+$
                              type: string
                            type: array
                            x-kubernetes-list-type: set
                          notTagsAny:
                            description: |-
                              NotTagsAny is a list of tags to filter by. If specified, resources
                              which contain any of the given tags will be excluded from the result.
                            items:
                              description: |-
                                NeutronTag represents a tag on a Neutron resource.
                                It may not be empty and may not contain commas.
                              minLength: 1
                              pattern: ^[^,]+$
                              type: string
                            type: array
                            x-kubernetes-list-type: set
                          projectID:
                            type: string
                          tags:
                            description: |-
                              Tags is a list of tags to filter by. If specified, the resource must
                              have all of the tags specified to be included in the result.
                            items:
                              description: |-
                                NeutronTag represents a tag on a Neutron resource.
                                It may not be empty and may not contain commas.
                              minLength: 1
                              pattern: ^[^,]+$
                              type: string
                            type: array
                            x-kubernetes-list-type: set
                          tagsAny:
                            description: |-
                              TagsAny is a list of tags to filter by. If specified, the resource
                              must have at least one of the tags specified to be included in the
                              result.
                            items:
                              description: |-
                                NeutronTag represents a tag on a Neutron resource.
                                It may not be empty and may not contain commas.
                              minLength: 1
                              pattern: ^[^,]+$
                              type: string
                            type: array
                            x-kubernetes-list-type: set
                        type: object
                      id:
                        description: ID is the ID of the network to use. If ID is
                          provided, the other filters cannot be provided. Must be
                          in UUID format.
                        format: uuid
                        type: string
                    type: object
                  provider:
                    description: |-
                      Provider specifies name of a specific Octavia provider to use for the
                      API load balancer. The Octavia default will be used if it is not
                      specified.
                    type: string
                  subnets:
                    description: |-
                      Subnets define which subnets should the load balancer be allocated on.
                      It is expected that subnets are located on the network specified in this resource.
                      Only the first element is taken into account.
                      kubebuilder:validation:MaxLength:=2
                    items:
                      description: SubnetParam specifies an OpenStack subnet to use.
                        It may be specified by either ID or filter, but not both.
                      maxProperties: 1
                      minProperties: 1
                      properties:
                        filter:
                          description: Filter specifies a filter to select the subnet.
                            It must match exactly one subnet.
                          minProperties: 1
                          properties:
                            cidr:
                              type: string
                            description:
                              type: string
                            gatewayIP:
                              type: string
                            ipVersion:
                              type: integer
                            ipv6AddressMode:
                              type: string
                            ipv6RAMode:
                              type: string
                            name:
                              type: string
                            notTags:
                              description: |-
                                NotTags is a list of tags to filter by. If specified, resources which
                                contain all of the given tags will be excluded from the result.
                              items:
                                description: |-
                                  NeutronTag represents a tag on a Neutron resource.
                                  It may not be empty and may not contain commas.
                                minLength: 1
                                pattern: ^[^,]+$
                                type: string
                              type: array
                              x-kubernetes-list-type: set
                            notTagsAny:
                              description: |-
                                NotTagsAny is a list of tags to filter by. If specified, resources
                                which contain any of the given tags will be excluded from the result.
                              items:
                                description: |-
                                  NeutronTag represents a tag on a Neutron resource.
                                  It may not be empty and may not contain commas.
                                minLength: 1
                                pattern: ^[^,]+$
                                type: string
                              type: array
                              x-kubernetes-list-type: set
                            projectID:
                              type: string
                            tags:
                              description: |-
                                Tags is a list of tags to filter by. If specified, the resource must
                                have all of the tags specified to be included in the result.
                              items:
                                description: |-
                                  NeutronTag represents a tag on a Neutron resource.
                                  It may not be empty and may not contain commas.
                                minLength: 1
                                pattern: ^[^,]+$
                                type: string
                              type: array
                              x-kubernetes-list-type: set
                            tagsAny:
                              description: |-
                                TagsAny is a list of tags to filter by. If specified, the resource
                                must have at least one of the tags specified to be included in the
                                result.
                              items:
                                description: |-
                                  NeutronTag represents a tag on a Neutron resource.
                                  It may not be empty and may not contain commas.
                                minLength: 1
                                pattern: ^[^,]+$
                                type: string
                              type: array
                              x-kubernetes-list-type: set
                          type: object
                        id:
                          description: ID is the uuid of the subnet. It will not be
                            validated.
                          format: uuid
                          type: string
                      type: object
                    type: array
                    x-kubernetes-list-type: atomic
                required:
                - enabled
                type: object
              apiServerPort:
                description: |-
                  APIServerPort is the port on which the listener on the APIServer
                  will be created. If specified, it must be an integer between 0 and 65535.
                maximum: 65535
                minimum: 0
                type: integer
              bastion:
                description: |-
                  Bastion is the OpenStack instance to login the nodes

                  As a rolling update is not ideal during a bastion host session, we
                  prevent changes to a running bastion configuration. To make changes, it's required
                  to first set `enabled: false` which will remove the bastion and then changes can be made.
                properties:
                  availabilityZone:
                    description: AvailabilityZone is the failure domain that will
                      be used to create the Bastion Spec.
                    type: string
                  enabled:
                    default: true
                    description: |-
                      Enabled means that bastion is enabled. The bastion is enabled by
                      default if this field is not specified. Set this field to false to disable the
                      bastion.

                      It is not currently possible to remove the bastion from the cluster
                      spec without first disabling it by setting this field to false and
                      waiting until the bastion has been deleted.
                    type: boolean
                  floatingIP:
                    description: |-
                      FloatingIP which will be associated to the bastion machine. It's the IP address, not UUID.
                      The floating IP should already exist and should not be associated with a port. If FIP of this address does not
                      exist, CAPO will try to create it, but by default only OpenStack administrators have privileges to do so.
                    format: ipv4
                    type: string
                  spec:
                    description: Spec for the bastion itself
                    properties:
                      additionalBlockDevices:
                        description: AdditionalBlockDevices is a list of specifications
                          for additional block devices to attach to the server instance
                        items:
                          description: AdditionalBlockDevice is a block device to
                            attach to the server.
                          properties:
                            name:
                              description: |-
                                Name of the block device in the context of a machine.
                                If the block device is a volume, the Cinder volume will be named
                                as a combination of the machine name and this name.
                                Also, this name will be used for tagging the block device.
                                Information about the block device tag can be obtained from the OpenStack
                                metadata API or the config drive.
                                Name cannot be 'root', which is reserved for the root volume.
                              type: string
                            sizeGiB:
                              description: SizeGiB is the size of the block device
                                in gibibytes (GiB).
                              minimum: 1
                              type: integer
                            storage:
                              description: |-
                                Storage specifies the storage type of the block device and
                                additional storage options.
                              properties:
                                type:
                                  description: |-
                                    Type is the type of block device to create.
                                    This can be either "Volume" or "Local".
                                  type: string
                                volume:
                                  description: Volume contains additional storage
                                    options for a volume block device.
                                  properties:
                                    availabilityZone:
                                      description: |-
                                        AvailabilityZone is the volume availability zone to create the volume
                                        in. If not specified, the volume will be created without an explicit
                                        availability zone.
                                      properties:
                                        from:
                                          default: Name
                                          description: |-
                                            From specifies where we will obtain the availability zone for the
                                            volume. The options are "Name" and "Machine". If "Name" is specified
                                            then the Name field must also be specified. If "Machine" is specified
                                            the volume will use the value of FailureDomain, if any, from the
                                            associated Machine.
                                          enum:
                                          - Name
                                          - Machine
                                          type: string
                                        name:
                                          description: |-
                                            Name is the name of a volume availability zone to use. It is required
                                            if From is "Name". The volume availability zone name may not contain
                                            spaces.
                                          minLength: 1
                                          pattern: ^[^ ]+$
                                          type: string
                                      type: object
                                      x-kubernetes-validations:
                                      - message: name is required when from is 'Name'
                                          or default
                                        rule: '!has(self.from) || self.from == ''Name''
                                          ? has(self.name) : !has(self.name)'
                                    type:
                                      description: |-
                                        Type is the Cinder volume type of the volume.
                                        If omitted, the default Cinder volume type that is configured in the OpenStack cloud
                                        will be used.
                                      type: string
                                  type: object
                              required:
                              - type
                              type: object
                          required:
                          - name
                          - sizeGiB
                          - storage
                          type: object
                        type: array
                        x-kubernetes-list-map-keys:
                        - name
                        x-kubernetes-list-type: map
                      configDrive:
                        description: Config Drive support
                        type: boolean
                      flavor:
                        description: The flavor reference for the flavor for your
                          server instance.
                        minLength: 1
                        type: string
                      flavorID:
                        description: |-
                          FlavorID allows flavors to be specified by ID.  This field takes precedence
                          over Flavor.
                        minLength: 1
                        type: string
                      floatingIPPoolRef:
                        description: |-
                          floatingIPPoolRef is a reference to a IPPool that will be assigned
                          to an IPAddressClaim. Once the IPAddressClaim is fulfilled, the FloatingIP
                          will be assigned to the OpenStackMachine.
                        properties:
                          apiGroup:
                            description: |-
                              APIGroup is the group for the resource being referenced.
                              If APIGroup is not specified, the specified Kind must be in the core API group.
                              For any other third-party types, APIGroup is required.
                            type: string
                          kind:
                            description: Kind is the type of resource being referenced
                            type: string
                          name:
                            description: Name is the name of resource being referenced
                            type: string
                        required:
                        - kind
                        - name
                        type: object
                        x-kubernetes-map-type: atomic
                      identityRef:
                        description: |-
                          IdentityRef is a reference to a secret holding OpenStack credentials
                          to be used when reconciling this machine. If not specified, the
                          credentials specified in the cluster will be used.
                        properties:
                          cloudName:
                            description: CloudName specifies the name of the entry
                              in the clouds.yaml file to use.
                            type: string
                          name:
                            description: |-
                              Name is the name of a secret in the same namespace as the resource being provisioned.
                              The secret must contain a key named `clouds.yaml` which contains an OpenStack clouds.yaml file.
                              The secret may optionally contain a key named `cacert` containing a PEM-encoded CA certificate.
                            type: string
                          region:
                            description: |-
                              Region specifies an OpenStack region to use. If specified, it overrides
                              any value in clouds.yaml. If specified for an OpenStackMachine, its
                              value will be included in providerID.
                            type: string
                        required:
                        - cloudName
                        - name
                        type: object
                        x-kubernetes-validations:
                        - message: region is immutable
                          rule: (!has(self.region) && !has(oldSelf.region)) || self.region
                            == oldSelf.region
                      image:
                        description: |-
                          The image to use for your server instance.
                          If the rootVolume is specified, this will be used when creating the root volume.
                        maxProperties: 1
                        minProperties: 1
                        properties:
                          filter:
                            description: |-
                              Filter describes a query for an image. If specified, the combination
                              of name and tags must return a single matching image or an error will
                              be raised.
                            minProperties: 1
                            properties:
                              name:
                                description: The name of the desired image. If specified,
                                  the combination of name and tags must return a single
                                  matching image or an error will be raised.
                                type: string
                              tags:
                                description: The tags associated with the desired
                                  image. If specified, the combination of name and
                                  tags must return a single matching image or an error
                                  will be raised.
                                items:
                                  type: string
                                type: array
                                x-kubernetes-list-type: set
                            type: object
                          id:
                            description: ID is the uuid of the image. ID will not
                              be validated before use.
                            format: uuid
                            type: string
                          imageRef:
                            description: |-
                              ImageRef is a reference to an ORC Image in the same namespace as the
                              referring object.
                            properties:
                              name:
                                description: Name is the name of the referenced resource
                                type: string
                            required:
                            - name
                            type: object
                        type: object
                      ports:
                        description: |-
                          Ports to be attached to the server instance. They are created if a port with the given name does not already exist.
                          If not specified a default port will be added for the default cluster network.
                        items:
                          properties:
                            adminStateUp:
                              description: AdminStateUp specifies whether the port
                                should be created in the up (true) or down (false)
                                state. The default is up.
                              type: boolean
                            allowedAddressPairs:
                              description: |-
                                AllowedAddressPairs is a list of address pairs which Neutron will
                                allow the port to send traffic from in addition to the port's
                                addresses. If not specified, the MAC Address will be the MAC Address
                                of the port. Depending on the configuration of Neutron, it may be
                                supported to specify a CIDR instead of a specific IP address.
                              items:
                                properties:
                                  ipAddress:
                                    description: |-
                                      IPAddress is the IP address of the allowed address pair. Depending on
                                      the configuration of Neutron, it may be supported to specify a CIDR
                                      instead of a specific IP address.
                                    type: string
                                  macAddress:
                                    description: |-
                                      MACAddress is the MAC address of the allowed address pair. If not
                                      specified, the MAC address will be the MAC address of the port.
                                    type: string
                                required:
                                - ipAddress
                                type: object
                              type: array
                            description:
                              description: Description is a human-readable description
                                for the port.
                              type: string
                            disablePortSecurity:
                              description: |-
                                DisablePortSecurity enables or disables the port security when set.
                                When not set, it takes the value of the corresponding field at the network level.
                              type: boolean
                            fixedIPs:
                              description: FixedIPs is a list of pairs of subnet and/or
                                IP address to assign to the port. If specified, these
                                must be subnets of the port's network.
                              items:
                                properties:
                                  ipAddress:
                                    description: |-
                                      IPAddress is a specific IP address to assign to the port. If Subnet
                                      is also specified, IPAddress must be a valid IP address in the
                                      subnet. If Subnet is not specified, IPAddress must be a valid IP
                                      address in any subnet of the port's network.
                                    type: string
                                  subnet:
                                    description: |-
                                      Subnet is an openstack subnet query that will return the id of a subnet to create
                                      the fixed IP of a port in. This query must not return more than one subnet.
                                    maxProperties: 1
                                    minProperties: 1
                                    properties:
                                      filter:
                                        description: Filter specifies a filter to
                                          select the subnet. It must match exactly
                                          one subnet.
                                        minProperties: 1
                                        properties:
                                          cidr:
                                            type: string
                                          description:
                                            type: string
                                          gatewayIP:
                                            type: string
                                          ipVersion:
                                            type: integer
                                          ipv6AddressMode:
                                            type: string
                                          ipv6RAMode:
                                            type: string
                                          name:
                                            type: string
                                          notTags:
                                            description: |-
                                              NotTags is a list of tags to filter by. If specified, resources which
                                              contain all of the given tags will be excluded from the result.
                                            items:
                                              description: |-
                                                NeutronTag represents a tag on a Neutron resource.
                                                It may not be empty and may not contain commas.
                                              minLength: 1
                                              pattern: ^[^,]+$
                                              type: string
                                            type: array
                                            x-kubernetes-list-type: set
                                          notTagsAny:
                                            description: |-
                                              NotTagsAny is a list of tags to filter by. If specified, resources
                                              which contain any of the given tags will be excluded from the result.
                                            items:
                                              description: |-
                                                NeutronTag represents a tag on a Neutron resource.
                                                It may not be empty and may not contain commas.
                                              minLength: 1
                                              pattern: ^[^,]+$
                                              type: string
                                            type: array
                                            x-kubernetes-list-type: set
                                          projectID:
                                            type: string
                                          tags:
                                            description: |-
                                              Tags is a list of tags to filter by. If specified, the resource must
                                              have all of the tags specified to be included in the result.
                                            items:
                                              description: |-
                                                NeutronTag represents a tag on a Neutron resource.
                                                It may not be empty and may not contain commas.
                                              minLength: 1
                                              pattern: ^[^,]+$
                                              type: string
                                            type: array
                                            x-kubernetes-list-type: set
                                          tagsAny:
                                            description: |-
                                              TagsAny is a list of tags to filter by. If specified, the resource
                                              must have at least one of the tags specified to be included in the
                                              result.
                                            items:
                                              description: |-
                                                NeutronTag represents a tag on a Neutron resource.
                                                It may not be empty and may not contain commas.
                                              minLength: 1
                                              pattern: ^[^,]+$
                                              type: string
                                            type: array
                                            x-kubernetes-list-type: set
                                        type: object
                                      id:
                                        description: ID is the uuid of the subnet.
                                          It will not be validated.
                                        format: uuid
                                        type: string
                                    type: object
                                type: object
                              type: array
                              x-kubernetes-list-type: atomic
                            hostID:
                              description: HostID specifies the ID of the host where
                                the port resides.
                              type: string
                            macAddress:
                              description: MACAddress specifies the MAC address of
                                the port. If not specified, the MAC address will be
                                generated.
                              type: string
                            nameSuffix:
                              description: NameSuffix will be appended to the name
                                of the port if specified. If unspecified, instead
                                the 0-based index of the port in the list is used.
                              type: string
                            network:
                              description: |-
                                Network is a query for an openstack network that the port will be created or discovered on.
                                This will fail if the query returns more than one network.
                              maxProperties: 1
                              minProperties: 1
                              properties:
                                filter:
                                  description: Filter specifies a filter to select
                                    an OpenStack network. If provided, cannot be empty.
                                  minProperties: 1
                                  properties:
                                    description:
                                      type: string
                                    name:
                                      type: string
                                    notTags:
                                      description: |-
                                        NotTags is a list of tags to filter by. If specified, resources which
                                        contain all of the given tags will be excluded from the result.
                                      items:
                                        description: |-
                                          NeutronTag represents a tag on a Neutron resource.
                                          It may not be empty and may not contain commas.
                                        minLength: 1
                                        pattern: ^[^,]+$
                                        type: string
                                      type: array
                                      x-kubernetes-list-type: set
                                    notTagsAny:
                                      description: |-
                                        NotTagsAny is a list of tags to filter by. If specified, resources
                                        which contain any of the given tags will be excluded from the result.
                                      items:
                                        description: |-
                                          NeutronTag represents a tag on a Neutron resource.
                                          It may not be empty and may not contain commas.
                                        minLength: 1
                                        pattern: ^[^,]+$
                                        type: string
                                      type: array
                                      x-kubernetes-list-type: set
                                    projectID:
                                      type: string
                                    tags:
                                      description: |-
                                        Tags is a list of tags to filter by. If specified, the resource must
                                        have all of the tags specified to be included in the result.
                                      items:
                                        description: |-
                                          NeutronTag represents a tag on a Neutron resource.
                                          It may not be empty and may not contain commas.
                                        minLength: 1
                                        pattern: ^[^,]+$
                                        type: string
                                      type: array
                                      x-kubernetes-list-type: set
                                    tagsAny:
                                      description: |-
                                        TagsAny is a list of tags to filter by. If specified, the resource
                                        must have at least one of the tags specified to be included in the
                                        result.
                                      items:
                                        description: |-
                                          NeutronTag represents a tag on a Neutron resource.
                                          It may not be empty and may not contain commas.
                                        minLength: 1
                                        pattern: ^[^,]+$
                                        type: string
                                      type: array
                                      x-kubernetes-list-type: set
                                  type: object
                                id:
                                  description: ID is the ID of the network to use.
                                    If ID is provided, the other filters cannot be
                                    provided. Must be in UUID format.
                                  format: uuid
                                  type: string
                              type: object
                            profile:
                              description: |-
                                Profile is a set of key-value pairs that are used for binding
                                details. We intentionally don't expose this as a map[string]string
                                because we only want to enable the users to set the values of the
                                keys that are known to work in OpenStack Networking API.  See
                                https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
                                To set profiles, your tenant needs permissions rule:create_port, and
                                rule:create_port:binding:profile
                              properties:
                                ovsHWOffload:
                                  description: |-
                                    OVSHWOffload enables or disables the OVS hardware offload feature.
                                    This flag is not required on OpenStack clouds since Yoga as Nova will set it automatically when the port is attached.
                                    See: https://bugs.launchpad.net/nova/+bug/2020813
                                  type: boolean
                                trustedVF:
                                  description: TrustedVF enables or disables the “trusted
                                    mode” for the VF.
                                  type: boolean
                              type: object
                            propagateUplinkStatus:
                              description: PropageteUplinkStatus enables or disables
                                the propagate uplink status on the port.
                              type: boolean
                            securityGroups:
                              description: SecurityGroups is a list of the names,
                                uuids, filters or any combination these of the security
                                groups to assign to the instance.
                              items:
                                description: SecurityGroupParam specifies an OpenStack
                                  security group. It may be specified by ID or filter,
                                  but not both.
                                maxProperties: 1
                                minProperties: 1
                                properties:
                                  filter:
                                    description: Filter specifies a query to select
                                      an OpenStack security group. If provided, cannot
                                      be empty.
                                    minProperties: 1
                                    properties:
                                      description:
                                        type: string
                                      name:
                                        type: string
                                      notTags:
                                        description: |-
                                          NotTags is a list of tags to filter by. If specified, resources which
                                          contain all of the given tags will be excluded from the result.
                                        items:
                                          description: |-
                                            NeutronTag represents a tag on a Neutron resource.
                                            It may not be empty and may not contain commas.
                                          minLength: 1
                                          pattern: ^[^,]+$
                                          type: string
                                        type: array
                                        x-kubernetes-list-type: set
                                      notTagsAny:
                                        description: |-
                                          NotTagsAny is a list of tags to filter by. If specified, resources
                                          which contain any of the given tags will be excluded from the result.
                                        items:
                                          description: |-
                                            NeutronTag represents a tag on a Neutron resource.
                                            It may not be empty and may not contain commas.
                                          minLength: 1
                                          pattern: ^[^,]+$
                                          type: string
                                        type: array
                                        x-kubernetes-list-type: set
                                      projectID:
                                        type: string
                                      tags:
                                        description: |-
                                          Tags is a list of tags to filter by. If specified, the resource must
                                          have all of the tags specified to be included in the result.
                                        items:
                                          description: |-
                                            NeutronTag represents a tag on a Neutron resource.
                                            It may not be empty and may not contain commas.
                                          minLength: 1
                                          pattern: ^[^,]+$
                                          type: string
                                        type: array
                                        x-kubernetes-list-type: set
                                      tagsAny:
                                        description: |-
                                          TagsAny is a list of tags to filter by. If specified, the resource
                                          must have at least one of the tags specified to be included in the
                                          result.
                                        items:
                                          description: |-
                                            NeutronTag represents a tag on a Neutron resource.
                                            It may not be empty and may not contain commas.
                                          minLength: 1
                                          pattern: ^[^,]+$
                                          type: string
                                        type: array
                                        x-kubernetes-list-type: set
                                    type: object
                                  id:
                                    description: ID is the ID of the security group
                                      to use. If ID is provided, the other filters
                                      cannot be provided. Must be in UUID format.
                                    format: uuid
                                    type: string
                                type: object
                              type: array
                              x-kubernetes-list-type: atomic
                            tags:
                              description: |-
                                Tags applied to the port (and corresponding trunk, if a trunk is configured.)
                                These tags are applied in addition to the instance's tags, which will also be applied to the port.
                              items:
                                type: string
                              type: array
                              x-kubernetes-list-type: set
                            trunk:
                              description: |-
                                Trunk specifies whether trunking is enabled at the port level. If not
                                provided the value is inherited from the machine, or false for a
                                bastion host.
                              type: boolean
                            valueSpecs:
                              description: |-
                                Value specs are extra parameters to include in the API request with OpenStack.
                                This is an extension point for the API, so what they do and if they are supported,
                                depends on the specific OpenStack implementation.
                              items:
                                description: ValueSpec represents a single value_spec
                                  key-value pair.
                                properties:
                                  key:
                                    description: Key is the key in the key-value pair.
                                    type: string
                                  name:
                                    description: |-
                                      Name is the name of the key-value pair.
                                      This is just for identifying the pair and will not be sent to the OpenStack API.
                                    type: string
                                  value:
                                    description: Value is the value in the key-value
                                      pair.
                                    type: string
                                required:
                                - key
                                - name
                                - value
                                type: object
                              type: array
                              x-kubernetes-list-map-keys:
                              - name
                              x-kubernetes-list-type: map
                            vnicType:
                              description: |-
                                VNICType specifies the type of vNIC which this port should be
                                attached to. This is used to determine which mechanism driver(s) to
                                be used to bind the port. The valid values are normal, macvtap,
                                direct, baremetal, direct-physical, virtio-forwarder, smart-nic and
                                remote-managed, although these values will not be validated in this
                                API to ensure compatibility with future neutron changes or custom
                                implementations. What type of vNIC is actually available depends on
                                deployments. If not specified, the Neutron default value is used.
                              type: string
                          type: object
                        type: array
                      providerID:
                        description: ProviderID is the unique identifier as specified
                          by the cloud provider.
                        type: string
                      rootVolume:
                        description: The volume metadata to boot from
                        properties:
                          availabilityZone:
                            description: |-
                              AvailabilityZone is the volume availability zone to create the volume
                              in. If not specified, the volume will be created without an explicit
                              availability zone.
                            properties:
                              from:
                                default: Name
                                description: |-
                                  From specifies where we will obtain the availability zone for the
                                  volume. The options are "Name" and "Machine". If "Name" is specified
                                  then the Name field must also be specified. If "Machine" is specified
                                  the volume will use the value of FailureDomain, if any, from the
                                  associated Machine.
                                enum:
                                - Name
                                - Machine
                                type: string
                              name:
                                description: |-
                                  Name is the name of a volume availability zone to use. It is required
                                  if From is "Name". The volume availability zone name may not contain
                                  spaces.
                                minLength: 1
                                pattern: ^[^ ]+$
                                type: string
                            type: object
                            x-kubernetes-validations:
                            - message: name is required when from is 'Name' or default
                              rule: '!has(self.from) || self.from == ''Name'' ? has(self.name)
                                : !has(self.name)'
                          sizeGiB:
                            description: SizeGiB is the size of the block device in
                              gibibytes (GiB).
                            minimum: 1
                            type: integer
                          type:
                            description: |-
                              Type is the Cinder volume type of the volume.
                              If omitted, the default Cinder volume type that is configured in the OpenStack cloud
                              will be used.
                            type: string
                        required:
                        - sizeGiB
                        type: object
                      schedulerHintAdditionalProperties:
                        description: |-
                          SchedulerHintAdditionalProperties are arbitrary key/value pairs that provide additional hints
                          to the OpenStack scheduler. These hints can influence how instances are placed on the infrastructure,
                          such as specifying certain host aggregates or availability zones.
                        items:
                          description: |-
                            SchedulerHintAdditionalProperty represents a single additional property for a scheduler hint.
                            It includes a Name to identify the property and a Value that can be of various types.
                          properties:
                            name:
                              description: |-
                                Name is the name of the scheduler hint property.
                                It is a unique identifier for the property.
                              minLength: 1
                              type: string
                            value:
                              description: |-
                                Value is the value of the scheduler hint property, which can be of various types
                                (e.g., bool, string, int). The type is indicated by the Value.Type field.
                              properties:
                                bool:
                                  description: |-
                                    Bool is the boolean value of the scheduler hint, used when Type is "Bool".
                                    This field is required if type is 'Bool', and must not be set otherwise.
                                  type: boolean
                                number:
                                  description: |-
                                    Number is the integer value of the scheduler hint, used when Type is "Number".
                                    This field is required if type is 'Number', and must not be set otherwise.
                                  type: integer
                                string:
                                  description: |-
                                    String is the string value of the scheduler hint, used when Type is "String".
                                    This field is required if type is 'String', and must not be set otherwise.
                                  maxLength: 255
                                  minLength: 1
                                  type: string
                                type:
                                  description: |-
                                    Type represents the type of the value.
                                    Valid values are Bool, String, and Number.
                                  enum:
                                  - Bool
                                  - String
                                  - Number
                                  type: string
                              required:
                              - type
                              type: object
                              x-kubernetes-validations:
                              - message: bool is required when type is Bool, and forbidden
                                  otherwise
                                rule: 'has(self.type) && self.type == ''Bool'' ? has(self.bool)
                                  : !has(self.bool)'
                              - message: number is required when type is Number, and
                                  forbidden otherwise
                                rule: 'has(self.type) && self.type == ''Number'' ?
                                  has(self.number) : !has(self.number)'
                              - message: string is required when type is String, and
                                  forbidden otherwise
                                rule: 'has(self.type) && self.type == ''String'' ?
                                  has(self.string) : !has(self.string)'
                          required:
                          - name
                          - value
                          type: object
                        type: array
                        x-kubernetes-list-map-keys:
                        - name
                        x-kubernetes-list-type: map
                      securityGroups:
                        description: The names of the security groups to assign to
                          the instance
                        items:
                          description: SecurityGroupParam specifies an OpenStack security
                            group. It may be specified by ID or filter, but not both.
                          maxProperties: 1
                          minProperties: 1
                          properties:
                            filter:
                              description: Filter specifies a query to select an OpenStack
                                security group. If provided, cannot be empty.
                              minProperties: 1
                              properties:
                                description:
                                  type: string
                                name:
                                  type: string
                                notTags:
                                  description: |-
                                    NotTags is a list of tags to filter by. If specified, resources which
                                    contain all of the given tags will be excluded from the result.
                                  items:
                                    description: |-
                                      NeutronTag represents a tag on a Neutron resource.
                                      It may not be empty and may not contain commas.
                                    minLength: 1
                                    pattern: ^[^,]+$
                                    type: string
                                  type: array
                                  x-kubernetes-list-type: set
                                notTagsAny:
                                  description: |-
                                    NotTagsAny is a list of tags to filter by. If specified, resources
                                    which contain any of the given tags will be excluded from the result.
                                  items:
                                    description: |-
                                      NeutronTag represents a tag on a Neutron resource.
                                      It may not be empty and may not contain commas.
                                    minLength: 1
                                    pattern: ^[^,]+$
                                    type: string
                                  type: array
                                  x-kubernetes-list-type: set
                                projectID:
                                  type: string
                                tags:
                                  description: |-
                                    Tags is a list of tags to filter by. If specified, the resource must
                                    have all of the tags specified to be included in the result.
                                  items:
                                    description: |-
                                      NeutronTag represents a tag on a Neutron resource.
                                      It may not be empty and may not contain commas.
                                    minLength: 1
                                    pattern: ^[^,]+$
                                    type: string
                                  type: array
                                  x-kubernetes-list-type: set
                                tagsAny:
                                  description: |-
                                    TagsAny is a list of tags to filter by. If specified, the resource
                                    must have at least one of the tags specified to be included in the
                                    result.
                                  items:
                                    description: |-
                                      NeutronTag represents a tag on a Neutron resource.
                                      It may not be empty and may not contain commas.
                                    minLength: 1
                                    pattern: ^[^,]+$
                                    type: string
                                  type: array
                                  x-kubernetes-list-type: set
                              type: object
                            id:
                              description: ID is the ID of the security group to use.
                                If ID is provided, the other filters cannot be provided.
                                Must be in UUID format.
                              format: uuid
                              type: string
                          type: object
                        type: array
                      serverGroup:
                        description: The server group to assign the machine to.
                        maxProperties: 1
                        minProperties: 1
                        properties:
                          filter:
                            description: Filter specifies a query to select an OpenStack
                              server group. If provided, it cannot be empty.
                            minProperties: 1
                            properties:
                              name:
                                description: Name is the name of a server group to
                                  look for.
                                type: string
                            type: object
                          id:
                            description: ID is the ID of the server group to use.
                            format: uuid
                            type: string
                        type: object
                      serverMetadata:
                        description: Metadata mapping. Allows you to create a map
                          of key value pairs to add to the server instance.
                        items:
                          properties:
                            key:
                              description: Key is the server metadata key
                              maxLength: 255
                              type: string
                            value:
                              description: Value is the server metadata value
                              maxLength: 255
                              type: string
                          required:
                          - key
                          - value
                          type: object
                        type: array
                        x-kubernetes-list-map-keys:
                        - key
                        x-kubernetes-list-type: map
                      sshKeyName:
                        description: The ssh key to inject in the instance
                        type: string
                      tags:
                        description: |-
                          Tags which will be added to the machine and all dependent resources
                          which support them. These are in addition to Tags defined on the
                          cluster.
                          Requires Nova api 2.52 minimum!
                        items:
                          type: string
                        type: array
                        x-kubernetes-list-type: set
                      trunk:
                        description: Whether the server instance is created on a trunk
                          port or not.
                        type: boolean
                    required:
                    - image
                    type: object
                    x-kubernetes-validations:
                    - message: at least one of flavor or flavorID must be set
                      rule: (has(self.flavor) || has(self.flavorID))
                type: object
                x-kubernetes-validations:
                - message: spec is required if bastion is enabled
                  rule: '!self.enabled || has(self.spec)'
              controlPlaneAvailabilityZones:
                description: |-
                  ControlPlaneAvailabilityZones is the set of availability zones which
                  control plane machines may be deployed to.
                items:
                  type: string
                type: array
                x-kubernetes-list-type: set
              controlPlaneEndpoint:
                description: |-
                  ControlPlaneEndpoint represents the endpoint used to communicate with the control plane.
                  It is normally populated automatically by the OpenStackCluster
                  controller during cluster provisioning. If it is set on creation the
                  control plane endpoint will use the values set here in preference to
                  values set elsewhere.
                  ControlPlaneEndpoint cannot be modified after ControlPlaneEndpoint.Host has been set.
                properties:
                  host:
                    description: The hostname on which the API server is serving.
                    type: string
                  port:
                    description: The port on which the API server is serving.
                    format: int32
                    type: integer
                required:
                - host
                - port
                type: object
              controlPlaneOmitAvailabilityZone:
                description: |-
                  ControlPlaneOmitAvailabilityZone causes availability zone to be
                  omitted when creating control plane nodes, allowing the Nova
                  scheduler to make a decision on which availability zone to use based
                  on other scheduling constraints
                type: boolean
              disableAPIServerFloatingIP:
                description: |-
                  DisableAPIServerFloatingIP determines whether or not to attempt to attach a floating
                  IP to the API server. This allows for the creation of clusters when attaching a floating
                  IP to the API server (and hence, in many cases, exposing the API server to the internet)
                  is not possible or desirable, e.g. if using a shared VLAN for communication between
                  management and workload clusters or when the management cluster is inside the
                  project network.
                  This option requires that the API server use a VIP on the cluster network so that the
                  underlying machines can change without changing ControlPlaneEndpoint.Host.
                  When using a managed load balancer, this VIP will be managed automatically.
                  If not using a managed load balancer, cluster configuration will fail without additional
                  configuration to manage the VIP on the control plane machines, which falls outside of
                  the scope of this controller.
                type: boolean
              disableExternalNetwork:
                description: |-
                  DisableExternalNetwork specifies whether or not to attempt to connect the cluster
                  to an external network. This allows for the creation of clusters when connecting
                  to an external network is not possible or desirable, e.g. if using a provider network.
                type: boolean
              disablePortSecurity:
                description: |-
                  DisablePortSecurity disables the port security of the network created for the
                  Kubernetes cluster, which also disables SecurityGroups
                type: boolean
              externalNetwork:
                description: |-
                  ExternalNetwork is the OpenStack Network to be used to get public internet to the VMs.
                  This option is ignored if DisableExternalNetwork is set to true.

                  If ExternalNetwork is defined it must refer to exactly one external network.

                  If ExternalNetwork is not defined or is empty the controller will use any
                  existing external network as long as there is only one. It is an
                  error if ExternalNetwork is not defined and there are multiple
                  external networks unless DisableExternalNetwork is also set.

                  If ExternalNetwork is not defined and there are no external networks
                  the controller will proceed as though DisableExternalNetwork was set.
                maxProperties: 1
                minProperties: 1
                properties:
                  filter:
                    description: Filter specifies a filter to select an OpenStack
                      network. If provided, cannot be empty.
                    minProperties: 1
                    properties:
                      description:
                        type: string
                      name:
                        type: string
                      notTags:
                        description: |-
                          NotTags is a list of tags to filter by. If specified, resources which
                          contain all of the given tags will be excluded from the result.
                        items:
                          description: |-
                            NeutronTag represents a tag on a Neutron resource.
                            It may not be empty and may not contain commas.
                          minLength: 1
                          pattern: ^[^,]+$
                          type: string
                        type: array
                        x-kubernetes-list-type: set
                      notTagsAny:
                        description: |-
                          NotTagsAny is a list of tags to filter by. If specified, resources
                          which contain any of the given tags will be excluded from the result.
                        items:
                          description: |-
                            NeutronTag represents a tag on a Neutron resource.
                            It may not be empty and may not contain commas.
                          minLength: 1
                          pattern: ^[^,]+$
                          type: string
                        type: array
                        x-kubernetes-list-type: set
                      projectID:
                        type: string
                      tags:
                        description: |-
                          Tags is a list of tags to filter by. If specified, the resource must
                          have all of the tags specified to be included in the result.
                        items:
                          description: |-
                            NeutronTag represents a tag on a Neutron resource.
                            It may not be empty and may not contain commas.
                          minLength: 1
                          pattern: ^[^,]+$
                          type: string
                        type: array
                        x-kubernetes-list-type: set
                      tagsAny:
                        description: |-
                          TagsAny is a list of tags to filter by. If specified, the resource
                          must have at least one of the tags specified to be included in the
                          result.
                        items:
                          description: |-
                            NeutronTag represents a tag on a Neutron resource.
                            It may not be empty and may not contain commas.
                          minLength: 1
                          pattern: ^[^,]+$
                          type: string
                        type: array
                        x-kubernetes-list-type: set
                    type: object
                  id:
                    description: ID is the ID of the network to use. If ID is provided,
                      the other filters cannot be provided. Must be in UUID format.
                    format: uuid
                    type: string
                type: object
              externalRouterIPs:
                description: |-
                  ExternalRouterIPs is an array of externalIPs on the respective subnets.
                  This is necessary if the router needs a fixed ip in a specific subnet.
                items:
                  properties:
                    fixedIP:
                      description: The FixedIP in the corresponding subnet
                      type: string
                    subnet:
                      description: The subnet in which the FixedIP is used for the
                        Gateway of this router
                      maxProperties: 1
                      minProperties: 1
                      properties:
                        filter:
                          description: Filter specifies a filter to select the subnet.
                            It must match exactly one subnet.
                          minProperties: 1
                          properties:
                            cidr:
                              type: string
                            description:
                              type: string
                            gatewayIP:
                              type: string
                            ipVersion:
                              type: integer
                            ipv6AddressMode:
                              type: string
                            ipv6RAMode:
                              type: string
                            name:
                              type: string
                            notTags:
                              description: |-
                                NotTags is a list of tags to filter by. If specified, resources which
                                contain all of the given tags will be excluded from the result.
                              items:
                                description: |-
                                  NeutronTag represents a tag on a Neutron resource.
                                  It may not be empty and may not contain commas.
                                minLength: 1
                                pattern: ^[^,]+$
                                type: string
                              type: array
                              x-kubernetes-list-type: set
                            notTagsAny:
                              description: |-
                                NotTagsAny is a list of tags to filter by. If specified, resources
                                which contain any of the given tags will be excluded from the result.
                              items:
                                description: |-
                                  NeutronTag represents a tag on a Neutron resource.
                                  It may not be empty and may not contain commas.
                                minLength: 1
                                pattern: ^[^,]+$
                                type: string
                              type: array
                              x-kubernetes-list-type: set
                            projectID:
                              type: string
                            tags:
                              description: |-
                                Tags is a list of tags to filter by. If specified, the resource must
                                have all of the tags specified to be included in the result.
                              items:
                                description: |-
                                  NeutronTag represents a tag on a Neutron resource.
                                  It may not be empty and may not contain commas.
                                minLength: 1
                                pattern: ^[^,]+$
                                type: string
                              type: array
                              x-kubernetes-list-type: set
                            tagsAny:
                              description: |-
                                TagsAny is a list of tags to filter by. If specified, the resource
                                must have at least one of the tags specified to be included in the
                                result.
                              items:
                                description: |-
                                  NeutronTag represents a tag on a Neutron resource.
                                  It may not be empty and may not contain commas.
                                minLength: 1
                                pattern: ^[^,]+$
                                type: string
                              type: array
                              x-kubernetes-list-type: set
                          type: object
                        id:
                          description: ID is the uuid of the subnet. It will not be
                            validated.
                          format: uuid
                          type: string
                      type: object
                  required:
                  - subnet
                  type: object
                type: array
                x-kubernetes-list-type: atomic
              identityRef:
                description: |-
                  IdentityRef is a reference to a secret holding OpenStack credentials
                  to be used when reconciling this cluster. It is also to reconcile
                  machines unless overridden in the machine spec.
                properties:
                  cloudName:
                    description: CloudName specifies the name of the entry in the
                      clouds.yaml file to use.
                    type: string
                  name:
                    description: |-
                      Name is the name of a secret in the same namespace as the resource being provisioned.
                      The secret must contain a key named `clouds.yaml` which contains an OpenStack clouds.yaml file.
                      The secret may optionally contain a key named `cacert` containing a PEM-encoded CA certificate.
                    type: string
                  region:
                    description: |-
                      Region specifies an OpenStack region to use. If specified, it overrides
                      any value in clouds.yaml. If specified for an OpenStackMachine, its
                      value will be included in providerID.
                    type: string
                required:
                - cloudName
                - name
                type: object
                x-kubernetes-validations:
                - message: region is immutable
                  rule: (!has(self.region) && !has(oldSelf.region)) || self.region
                    == oldSelf.region
              managedSecurityGroups:
                description: |-
                  ManagedSecurityGroups determines whether OpenStack security groups for the cluster
                  will be managed by the OpenStack provider or whether pre-existing security groups will
                  be specified as part of the configuration.
                  By default, the managed security groups have rules that allow the Kubelet, etcd, and the
                  Kubernetes API server to function correctly.
                  It's possible to add additional rules to the managed security groups.
                  When defined to an empty struct, the managed security groups will be created with the default rules.
                properties:
                  allNodesSecurityGroupRules:
                    description: allNodesSecurityGroupRules defines the rules that
                      should be applied to all nodes.
                    items:
                      description: |-
                        SecurityGroupRuleSpec represent the basic information of the associated OpenStack
                        Security Group Role.
                        For now this is only used for the allNodesSecurityGroupRules but when we add
                        other security groups, we'll need to add a validation because
                        Remote* fields are mutually exclusive.
                      properties:
                        description:
                          description: description of the security group rule.
                          type: string
                        direction:
                          description: |-
                            direction in which the security group rule is applied. The only values
                            allowed are "ingress" or "egress". For a compute instance, an ingress
                            security group rule is applied to incoming (ingress) traffic for that
                            instance. An egress rule is applied to traffic leaving the instance.
                          type: string
                        etherType:
                          description: |-
                            etherType must be IPv4 or IPv6, and addresses represented in CIDR must match the
                            ingress or egress rules.
                          type: string
                        name:
                          description: |-
                            name of the security group rule.
                            It's used to identify the rule so it can be patched and will not be sent to the OpenStack API.
                          type: string
                        portRangeMax:
                          description: |-
                            portRangeMax is a number in the range that is matched by the security group
                            rule. The portRangeMin attribute constrains the portRangeMax attribute.
                          type: integer
                        portRangeMin:
                          description: |-
                            portRangeMin is a number in the range that is matched by the security group
                            rule. If the protocol is TCP or UDP, this value must be less than or equal
                            to the value of the portRangeMax attribute.
                          type: integer
                        protocol:
                          description: protocol is the protocol that is matched by
                            the security group rule.
                          type: string
                        remoteGroupID:
                          description: |-
                            remoteGroupID is the remote group ID to be associated with this security group rule.
                            You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
                          type: string
                        remoteIPPrefix:
                          description: |-
                            remoteIPPrefix is the remote IP prefix to be associated with this security group rule.
                            You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
                          type: string
                        remoteManagedGroups:
                          description: |-
                            remoteManagedGroups is the remote managed groups to be associated with this security group rule.
                            You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
                          items:
                            enum:
                            - bastion
                            - controlplane
                            - worker
                            type: string
                          type: array
                      required:
                      - direction
                      - name
                      type: object
                    type: array
                    x-kubernetes-list-map-keys:
                    - name
                    x-kubernetes-list-type: map
                  allowAllInClusterTraffic:
                    default: false
                    description: AllowAllInClusterTraffic allows all ingress and egress
                      traffic between cluster nodes when set to true.
                    type: boolean
                  controlPlaneNodesSecurityGroupRules:
                    description: controlPlaneNodesSecurityGroupRules defines the rules
                      that should be applied to control plane nodes.
                    items:
                      description: |-
                        SecurityGroupRuleSpec represent the basic information of the associated OpenStack
                        Security Group Role.
                        For now this is only used for the allNodesSecurityGroupRules but when we add
                        other security groups, we'll need to add a validation because
                        Remote* fields are mutually exclusive.
                      properties:
                        description:
                          description: description of the security group rule.
                          type: string
                        direction:
                          description: |-
                            direction in which the security group rule is applied. The only values
                            allowed are "ingress" or "egress". For a compute instance, an ingress
                            security group rule is applied to incoming (ingress) traffic for that
                            instance. An egress rule is applied to traffic leaving the instance.
                          type: string
                        etherType:
                          description: |-
                            etherType must be IPv4 or IPv6, and addresses represented in CIDR must match the
                            ingress or egress rules.
                          type: string
                        name:
                          description: |-
                            name of the security group rule.
                            It's used to identify the rule so it can be patched and will not be sent to the OpenStack API.
                          type: string
                        portRangeMax:
                          description: |-
                            portRangeMax is a number in the range that is matched by the security group
                            rule. The portRangeMin attribute constrains the portRangeMax attribute.
                          type: integer
                        portRangeMin:
                          description: |-
                            portRangeMin is a number in the range that is matched by the security group
                            rule. If the protocol is TCP or UDP, this value must be less than or equal
                            to the value of the portRangeMax attribute.
                          type: integer
                        protocol:
                          description: protocol is the protocol that is matched by
                            the security group rule.
                          type: string
                        remoteGroupID:
                          description: |-
                            remoteGroupID is the remote group ID to be associated with this security group rule.
                            You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
                          type: string
                        remoteIPPrefix:
                          description: |-
                            remoteIPPrefix is the remote IP prefix to be associated with this security group rule.
                            You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
                          type: string
                        remoteManagedGroups:
                          description: |-
                            remoteManagedGroups is the remote managed groups to be associated with this security group rule.
                            You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
                          items:
                            enum:
                            - bastion
                            - controlplane
                            - worker
                            type: string
                          type: array
                      required:
                      - direction
                      - name
                      type: object
                    type: array
                    x-kubernetes-list-map-keys:
                    - name
                    x-kubernetes-list-type: map
                  workerNodesSecurityGroupRules:
                    description: workerNodesSecurityGroupRules defines the rules that
                      should be applied to worker nodes.
                    items:
                      description: |-
                        SecurityGroupRuleSpec represent the basic information of the associated OpenStack
                        Security Group Role.
                        For now this is only used for the allNodesSecurityGroupRules but when we add
                        other security groups, we'll need to add a validation because
                        Remote* fields are mutually exclusive.
                      properties:
                        description:
                          description: description of the security group rule.
                          type: string
                        direction:
                          description: |-
                            direction in which the security group rule is applied. The only values
                            allowed are "ingress" or "egress". For a compute instance, an ingress
                            security group rule is applied to incoming (ingress) traffic for that
                            instance. An egress rule is applied to traffic leaving the instance.
                          type: string
                        etherType:
                          description: |-
                            etherType must be IPv4 or IPv6, and addresses represented in CIDR must match the
                            ingress or egress rules.
                          type: string
                        name:
                          description: |-
                            name of the security group rule.
                            It's used to identify the rule so it can be patched and will not be sent to the OpenStack API.
                          type: string
                        portRangeMax:
                          description: |-
                            portRangeMax is a number in the range that is matched by the security group
                            rule. The portRangeMin attribute constrains the portRangeMax attribute.
                          type: integer
                        portRangeMin:
                          description: |-
                            portRangeMin is a number in the range that is matched by the security group
                            rule. If the protocol is TCP or UDP, this value must be less than or equal
                            to the value of the portRangeMax attribute.
                          type: integer
                        protocol:
                          description: protocol is the protocol that is matched by
                            the security group rule.
                          type: string
                        remoteGroupID:
                          description: |-
                            remoteGroupID is the remote group ID to be associated with this security group rule.
                            You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
                          type: string
                        remoteIPPrefix:
                          description: |-
                            remoteIPPrefix is the remote IP prefix to be associated with this security group rule.
                            You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
                          type: string
                        remoteManagedGroups:
                          description: |-
                            remoteManagedGroups is the remote managed groups to be associated with this security group rule.
                            You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
                          items:
                            enum:
                            - bastion
                            - controlplane
                            - worker
                            type: string
                          type: array
                      required:
                      - direction
                      - name
                      type: object
                    type: array
                    x-kubernetes-list-map-keys:
                    - name
                    x-kubernetes-list-type: map
                required:
                - allowAllInClusterTraffic
                type: object
              managedSubnets:
                description: |-
                  ManagedSubnets describe OpenStack Subnets to be created. Cluster actuator will create a network,
                  subnets with the defined CIDR, and a router connected to these subnets. Currently only one IPv4
                  subnet is supported. If you leave this empty, no network will be created.
                items:
                  properties:
                    allocationPools:
                      description: |-
                        AllocationPools is an array of AllocationPool objects that will be applied to OpenStack Subnet being created.
                        If set, OpenStack will only allocate these IPs for Machines. It will still be possible to create ports from
                        outside of these ranges manually.
                      items:
                        properties:
                          end:
                            description: End represents the end of the AlloctionPool,
                              that is the highest IP of the pool.
                            type: string
                          start:
                            description: Start represents the start of the AllocationPool,
                              that is the lowest IP of the pool.
                            type: string
                        required:
                        - end
                        - start
                        type: object
                      type: array
                    cidr:
                      description: |-
                        CIDR is representing the IP address range used to create the subnet, e.g. 10.0.0.0/24.
                        This field is required when defining a subnet.
                      type: string
                    dnsNameservers:
                      description: |-
                        DNSNameservers holds a list of DNS server addresses that will be provided when creating
                        the subnet. These addresses need to have the same IP version as CIDR.
                      items:
                        type: string
                      type: array
                  required:
                  - cidr
                  type: object
                maxItems: 1
                type: array
                x-kubernetes-list-type: atomic
              network:
                description: |-
                  Network specifies an existing network to use if no ManagedSubnets
                  are specified.
                maxProperties: 1
                minProperties: 1
                properties:
                  filter:
                    description: Filter specifies a filter to select an OpenStack
                      network. If provided, cannot be empty.
                    minProperties: 1
                    properties:
                      description:
                        type: string
                      name:
                        type: string
                      notTags:
                        description: |-
                          NotTags is a list of tags to filter by. If specified, resources which
                          contain all of the given tags will be excluded from the result.
                        items:
                          description: |-
                            NeutronTag represents a tag on a Neutron resource.
                            It may not be empty and may not contain commas.
                          minLength: 1
                          pattern: ^[^,]+$
                          type: string
                        type: array
                        x-kubernetes-list-type: set
                      notTagsAny:
                        description: |-
                          NotTagsAny is a list of tags to filter by. If specified, resources
                          which contain any of the given tags will be excluded from the result.
                        items:
                          description: |-
                            NeutronTag represents a tag on a Neutron resource.
                            It may not be empty and may not contain commas.
                          minLength: 1
                          pattern: ^[^,]+$
                          type: string
                        type: array
                        x-kubernetes-list-type: set
                      projectID:
                        type: string
                      tags:
                        description: |-
                          Tags is a list of tags to filter by. If specified, the resource must
                          have all of the tags specified to be included in the result.
                        items:
                          description: |-
                            NeutronTag represents a tag on a Neutron resource.
                            It may not be empty and may not contain commas.
                          minLength: 1
                          pattern: ^[^,]+$
                          type: string
                        type: array
                        x-kubernetes-list-type: set
                      tagsAny:
                        description: |-
                          TagsAny is a list of tags to filter by. If specified, the resource
                          must have at least one of the tags specified to be included in the
                          result.
                        items:
                          description: |-
                            NeutronTag represents a tag on a Neutron resource.
                            It may not be empty and may not contain commas.
                          minLength: 1
                          pattern: ^[^,]+$
                          type: string
                        type: array
                        x-kubernetes-list-type: set
                    type: object
                  id:
                    description: ID is the ID of the network to use. If ID is provided,
                      the other filters cannot be provided. Must be in UUID format.
                    format: uuid
                    type: string
                type: object
              networkMTU:
                description: |-
                  NetworkMTU sets the maximum transmission unit (MTU) value to address fragmentation for the private network ID.
                  This value will be used only if the Cluster actuator creates the network.
                  If left empty, the network will have the default MTU defined in Openstack network service.
                  To use this field, the Openstack installation requires the net-mtu neutron API extension.
                type: integer
              router:
                description: |-
                  Router specifies an existing router to be used if ManagedSubnets are
                  specified. If specified, no new router will be created.
                maxProperties: 1
                minProperties: 1
                properties:
                  filter:
                    description: Filter specifies a filter to select an OpenStack
                      router. If provided, cannot be empty.
                    minProperties: 1
                    properties:
                      description:
                        type: string
                      name:
                        type: string
                      notTags:
                        description: |-
                          NotTags is a list of tags to filter by. If specified, resources which
                          contain all of the given tags will be excluded from the result.
                        items:
                          description: |-
                            NeutronTag represents a tag on a Neutron resource.
                            It may not be empty and may not contain commas.
                          minLength: 1
                          pattern: ^[^,]+$
                          type: string
                        type: array
                        x-kubernetes-list-type: set
                      notTagsAny:
                        description: |-
                          NotTagsAny is a list of tags to filter by. If specified, resources
                          which contain any of the given tags will be excluded from the result.
                        items:
                          description: |-
                            NeutronTag represents a tag on a Neutron resource.
                            It may not be empty and may not contain commas.
                          minLength: 1
                          pattern: ^[^,]+$
                          type: string
                        type: array
                        x-kubernetes-list-type: set
                      projectID:
                        type: string
                      tags:
                        description: |-
                          Tags is a list of tags to filter by. If specified, the resource must
                          have all of the tags specified to be included in the result.
                        items:
                          description: |-
                            NeutronTag represents a tag on a Neutron resource.
                            It may not be empty and may not contain commas.
                          minLength: 1
                          pattern: ^[^,]+$
                          type: string
                        type: array
                        x-kubernetes-list-type: set
                      tagsAny:
                        description: |-
                          TagsAny is a list of tags to filter by. If specified, the resource
                          must have at least one of the tags specified to be included in the
                          result.
                        items:
                          description: |-
                            NeutronTag represents a tag on a Neutron resource.
                            It may not be empty and may not contain commas.
                          minLength: 1
                          pattern: ^[^,]+$
                          type: string
                        type: array
                        x-kubernetes-list-type: set
                    type: object
                  id:
                    description: ID is the ID of the router to use. If ID is provided,
                      the other filters cannot be provided. Must be in UUID format.
                    format: uuid
                    type: string
                type: object
              subnets:
                description: |-
                  Subnets specifies existing subnets to use if not ManagedSubnets are
                  specified. All subnets must be in the network specified by Network.
                  There can be zero, one, or two subnets. If no subnets are specified,
                  all subnets in Network will be used. If 2 subnets are specified, one
                  must be IPv4 and the other IPv6.
                items:
                  description: SubnetParam specifies an OpenStack subnet to use. It
                    may be specified by either ID or filter, but not both.
                  maxProperties: 1
                  minProperties: 1
                  properties:
                    filter:
                      description: Filter specifies a filter to select the subnet.
                        It must match exactly one subnet.
                      minProperties: 1
                      properties:
                        cidr:
                          type: string
                        description:
                          type: string
                        gatewayIP:
                          type: string
                        ipVersion:
                          type: integer
                        ipv6AddressMode:
                          type: string
                        ipv6RAMode:
                          type: string
                        name:
                          type: string
                        notTags:
                          description: |-
                            NotTags is a list of tags to filter by. If specified, resources which
                            contain all of the given tags will be excluded from the result.
                          items:
                            description: |-
                              NeutronTag represents a tag on a Neutron resource.
                              It may not be empty and may not contain commas.
                            minLength: 1
                            pattern: ^[^,]+$
                            type: string
                          type: array
                          x-kubernetes-list-type: set
                        notTagsAny:
                          description: |-
                            NotTagsAny is a list of tags to filter by. If specified, resources
                            which contain any of the given tags will be excluded from the result.
                          items:
                            description: |-
                              NeutronTag represents a tag on a Neutron resource.
                              It may not be empty and may not contain commas.
                            minLength: 1
                            pattern: ^[^,]+$
                            type: string
                          type: array
                          x-kubernetes-list-type: set
                        projectID:
                          type: string
                        tags:
                          description: |-
                            Tags is a list of tags to filter by. If specified, the resource must
                            have all of the tags specified to be included in the result.
                          items:
                            description: |-
                              NeutronTag represents a tag on a Neutron resource.
                              It may not be empty and may not contain commas.
                            minLength: 1
                            pattern: ^[^,]+$
                            type: string
                          type: array
                          x-kubernetes-list-type: set
                        tagsAny:
                          description: |-
                            TagsAny is a list of tags to filter by. If specified, the resource
                            must have at least one of the tags specified to be included in the
                            result.
                          items:
                            description: |-
                              NeutronTag represents a tag on a Neutron resource.
                              It may not be empty and may not contain commas.
                            minLength: 1
                            pattern: ^[^,]+$
                            type: string
                          type: array
                          x-kubernetes-list-type: set
                      type: object
                    id:
                      description: ID is the uuid of the subnet. It will not be validated.
                      format: uuid
                      type: string
                  type: object
                maxItems: 2
                type: array
                x-kubernetes-list-type: atomic
              tags:
                description: Tags to set on all resources in cluster which support
                  tags
                items:
                  type: string
                type: array
                x-kubernetes-list-type: set
            required:
            - identityRef
            type: object
            x-kubernetes-validations:
            - message: bastion floating IP cannot be set when disableExternalNetwork
                is true
              rule: 'has(self.disableExternalNetwork) && self.disableExternalNetwork
                ? !has(self.bastion) || !has(self.bastion.floatingIP) : true'
            - message: disableAPIServerFloatingIP cannot be false when disableExternalNetwork
                is true
              rule: 'has(self.disableExternalNetwork) && self.disableExternalNetwork
                ? has(self.disableAPIServerFloatingIP) && self.disableAPIServerFloatingIP
                : true'
          status:
            description: OpenStackClusterStatus defines the observed state of OpenStackCluster.
            properties:
              apiServerLoadBalancer:
                description: APIServerLoadBalancer describes the api server load balancer
                  if one exists
                properties:
                  allowedCIDRs:
                    items:
                      type: string
                    type: array
                  id:
                    type: string
                  internalIP:
                    type: string
                  ip:
                    type: string
                  loadBalancerNetwork:
                    description: |-
                      LoadBalancerNetwork contains information about network and/or subnets which the
                      loadbalancer is allocated on.
                      If subnets are specified within the LoadBalancerNetwork currently only the first
                      subnet in the list is taken into account.
                    properties:
                      id:
                        type: string
                      name:
                        type: string
                      subnets:
                        description: Subnets is a list of subnets associated with
                          the default cluster network. Machines which use the default
                          cluster network will get an address from all of these subnets.
                        items:
                          description: Subnet represents basic information about the
                            associated OpenStack Neutron Subnet.
                          properties:
                            cidr:
                              type: string
                            id:
                              type: string
                            name:
                              type: string
                            tags:
                              items:
                                type: string
                              type: array
                          required:
                          - cidr
                          - id
                          - name
                          type: object
                        type: array
                      tags:
                        items:
                          type: string
                        type: array
                    required:
                    - id
                    - name
                    type: object
                  name:
                    type: string
                  tags:
                    items:
                      type: string
                    type: array
                required:
                - id
                - internalIP
                - ip
                - name
                type: object
              bastion:
                description: Bastion contains the information about the deployed bastion
                  host
                properties:
                  floatingIP:
                    type: string
                  id:
                    type: string
                  ip:
                    type: string
                  name:
                    type: string
                  resolved:
                    description: |-
                      Resolved contains parts of the bastion's machine spec with all
                      external references fully resolved.
                    properties:
                      flavorID:
                        description: FlavorID is the ID of the flavor to use.
                        type: string
                      imageID:
                        description: ImageID is the ID of the image to use for the
                          machine and is calculated based on ImageFilter.
                        type: string
                      ports:
                        description: Ports is the fully resolved list of ports to
                          create for the machine.
                        items:
                          description: ResolvedPortSpec is a PortOpts with all contained
                            references fully resolved.
                          properties:
                            adminStateUp:
                              description: AdminStateUp specifies whether the port
                                should be created in the up (true) or down (false)
                                state. The default is up.
                              type: boolean
                            allowedAddressPairs:
                              description: |-
                                AllowedAddressPairs is a list of address pairs which Neutron will
                                allow the port to send traffic from in addition to the port's
                                addresses. If not specified, the MAC Address will be the MAC Address
                                of the port. Depending on the configuration of Neutron, it may be
                                supported to specify a CIDR instead of a specific IP address.
                              items:
                                properties:
                                  ipAddress:
                                    description: |-
                                      IPAddress is the IP address of the allowed address pair. Depending on
                                      the configuration of Neutron, it may be supported to specify a CIDR
                                      instead of a specific IP address.
                                    type: string
                                  macAddress:
                                    description: |-
                                      MACAddress is the MAC address of the allowed address pair. If not
                                      specified, the MAC address will be the MAC address of the port.
                                    type: string
                                required:
                                - ipAddress
                                type: object
                              type: array
                            description:
                              description: Description is a human-readable description
                                for the port.
                              type: string
                            disablePortSecurity:
                              description: |-
                                DisablePortSecurity enables or disables the port security when set.
                                When not set, it takes the value of the corresponding field at the network level.
                              type: boolean
                            fixedIPs:
                              description: FixedIPs is a list of pairs of subnet and/or
                                IP address to assign to the port. If specified, these
                                must be subnets of the port's network.
                              items:
                                description: ResolvedFixedIP is a FixedIP with the
                                  Subnet resolved to an ID.
                                properties:
                                  ipAddress:
                                    description: |-
                                      IPAddress is a specific IP address to assign to the port. If SubnetID
                                      is also specified, IPAddress must be a valid IP address in the
                                      subnet. If Subnet is not specified, IPAddress must be a valid IP
                                      address in any subnet of the port's network.
                                    type: string
                                  subnet:
                                    description: SubnetID is the id of a subnet to
                                      create the fixed IP of a port in.
                                    type: string
                                type: object
                              type: array
                              x-kubernetes-list-type: atomic
                            hostID:
                              description: HostID specifies the ID of the host where
                                the port resides.
                              type: string
                            macAddress:
                              description: MACAddress specifies the MAC address of
                                the port. If not specified, the MAC address will be
                                generated.
                              type: string
                            name:
                              description: Name is the name of the port.
                              type: string
                            networkID:
                              description: NetworkID is the ID of the network the
                                port will be created in.
                              type: string
                            profile:
                              description: |-
                                Profile is a set of key-value pairs that are used for binding
                                details. We intentionally don't expose this as a map[string]string
                                because we only want to enable the users to set the values of the
                                keys that are known to work in OpenStack Networking API.  See
                                https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
                                To set profiles, your tenant needs permissions rule:create_port, and
                                rule:create_port:binding:profile
                              properties:
                                ovsHWOffload:
                                  description: |-
                                    OVSHWOffload enables or disables the OVS hardware offload feature.
                                    This flag is not required on OpenStack clouds since Yoga as Nova will set it automatically when the port is attached.
                                    See: https://bugs.launchpad.net/nova/+bug/2020813
                                  type: boolean
                                trustedVF:
                                  description: TrustedVF enables or disables the “trusted
                                    mode” for the VF.
                                  type: boolean
                              type: object
                            propagateUplinkStatus:
                              description: PropageteUplinkStatus enables or disables
                                the propagate uplink status on the port.
                              type: boolean
                            securityGroups:
                              description: SecurityGroups is a list of security group
                                IDs to assign to the port.
                              items:
                                type: string
                              type: array
                              x-kubernetes-list-type: atomic
                            tags:
                              description: Tags applied to the port (and corresponding
                                trunk, if a trunk is configured.)
                              items:
                                type: string
                              type: array
                              x-kubernetes-list-type: set
                            trunk:
                              description: Trunk specifies whether trunking is enabled
                                at the port level.
                              type: boolean
                            valueSpecs:
                              description: |-
                                Value specs are extra parameters to include in the API request with OpenStack.
                                This is an extension point for the API, so what they do and if they are supported,
                                depends on the specific OpenStack implementation.
                              items:
                                description: ValueSpec represents a single value_spec
                                  key-value pair.
                                properties:
                                  key:
                                    description: Key is the key in the key-value pair.
                                    type: string
                                  name:
                                    description: |-
                                      Name is the name of the key-value pair.
                                      This is just for identifying the pair and will not be sent to the OpenStack API.
                                    type: string
                                  value:
                                    description: Value is the value in the key-value
                                      pair.
                                    type: string
                                required:
                                - key
                                - name
                                - value
                                type: object
                              type: array
                              x-kubernetes-list-map-keys:
                              - name
                              x-kubernetes-list-type: map
                            vnicType:
                              description: |-
                                VNICType specifies the type of vNIC which this port should be
                                attached to. This is used to determine which mechanism driver(s) to
                                be used to bind the port. The valid values are normal, macvtap,
                                direct, baremetal, direct-physical, virtio-forwarder, smart-nic and
                                remote-managed, although these values will not be validated in this
                                API to ensure compatibility with future neutron changes or custom
                                implementations. What type of vNIC is actually available depends on
                                deployments. If not specified, the Neutron default value is used.
                              type: string
                          required:
                          - description
                          - name
                          - networkID
                          type: object
                        type: array
                      serverGroupID:
                        description: ServerGroupID is the ID of the server group the
                          machine should be added to and is calculated based on ServerGroupFilter.
                        type: string
                    type: object
                  resources:
                    description: Resources contains references to OpenStack resources
                      created for the bastion.
                    properties:
                      ports:
                        description: Ports is the status of the ports created for
                          the machine.
                        items:
                          properties:
                            id:
                              description: ID is the unique identifier of the port.
                              type: string
                          required:
                          - id
                          type: object
                        type: array
                    type: object
                  sshKeyName:
                    type: string
                  state:
                    description: InstanceState describes the state of an OpenStack
                      instance.
                    type: string
                type: object
              bastionSecurityGroup:
                description: |-
                  BastionSecurityGroup contains the information about the OpenStack
                  Security Group that needs to be applied to worker nodes.
                properties:
                  id:
                    description: id of the security group
                    type: string
                  name:
                    description: name of the security group
                    type: string
                required:
                - id
                - name
                type: object
              controlPlaneSecurityGroup:
                description: |-
                  ControlPlaneSecurityGroup contains the information about the
                  OpenStack Security Group that needs to be applied to control plane
                  nodes.
                properties:
                  id:
                    description: id of the security group
                    type: string
                  name:
                    description: name of the security group
                    type: string
                required:
                - id
                - name
                type: object
              externalNetwork:
                description: ExternalNetwork contains information about the external
                  network used for default ingress and egress traffic.
                properties:
                  id:
                    type: string
                  name:
                    type: string
                  tags:
                    items:
                      type: string
                    type: array
                required:
                - id
                - name
                type: object
              failureDomains:
                additionalProperties:
                  description: |-
                    FailureDomainSpec is the Schema for Cluster API failure domains.
                    It allows controllers to understand how many failure domains a cluster can optionally span across.
                  properties:
                    attributes:
                      additionalProperties:
                        type: string
                      description: attributes is a free form map of attributes an
                        infrastructure provider might use or require.
                      type: object
                    controlPlane:
                      description: controlPlane determines if this failure domain
                        is suitable for use by control plane machines.
                      type: boolean
                  type: object
                description: FailureDomains represent OpenStack availability zones
                type: object
              failureMessage:
                description: |-
                  FailureMessage will be set in the event that there is a terminal problem
                  reconciling the OpenStackCluster and will contain a more verbose string suitable
                  for logging and human consumption.

                  This field should not be set for transitive errors that a controller
                  faces that are expected to be fixed automatically over
                  time (like service outages), but instead indicate that something is
                  fundamentally wrong with the OpenStackCluster's spec or the configuration of
                  the controller, and that manual intervention is required. Examples
                  of terminal errors would be invalid combinations of settings in the
                  spec, values that are unsupported by the controller, or the
                  responsible controller itself being critically misconfigured.

                  Any transient errors that occur during the reconciliation of
                  OpenStackClusters can be added as events to the OpenStackCluster object
                  and/or logged in the controller's output.
                type: string
              failureReason:
                description: |-
                  FailureReason will be set in the event that there is a terminal problem
                  reconciling the OpenStackCluster and will contain a succinct value suitable
                  for machine interpretation.

                  This field should not be set for transitive errors that a controller
                  faces that are expected to be fixed automatically over
                  time (like service outages), but instead indicate that something is
                  fundamentally wrong with the OpenStackCluster's spec or the configuration of
                  the controller, and that manual intervention is required. Examples
                  of terminal errors would be invalid combinations of settings in the
                  spec, values that are unsupported by the controller, or the
                  responsible controller itself being critically misconfigured.

                  Any transient errors that occur during the reconciliation of
                  OpenStackClusters can be added as events to the OpenStackCluster object
                  and/or logged in the controller's output.
                type: string
              network:
                description: Network contains information about the created OpenStack
                  Network.
                properties:
                  id:
                    type: string
                  name:
                    type: string
                  subnets:
                    description: Subnets is a list of subnets associated with the
                      default cluster network. Machines which use the default cluster
                      network will get an address from all of these subnets.
                    items:
                      description: Subnet represents basic information about the associated
                        OpenStack Neutron Subnet.
                      properties:
                        cidr:
                          type: string
                        id:
                          type: string
                        name:
                          type: string
                        tags:
                          items:
                            type: string
                          type: array
                      required:
                      - cidr
                      - id
                      - name
                      type: object
                    type: array
                  tags:
                    items:
                      type: string
                    type: array
                required:
                - id
                - name
                type: object
              ready:
                default: false
                description: Ready is true when the cluster infrastructure is ready.
                type: boolean
              router:
                description: Router describes the default cluster router
                properties:
                  id:
                    type: string
                  ips:
                    items:
                      type: string
                    type: array
                  name:
                    type: string
                  tags:
                    items:
                      type: string
                    type: array
                required:
                - id
                - name
                type: object
              workerSecurityGroup:
                description: |-
                  WorkerSecurityGroup contains the information about the OpenStack
                  Security Group that needs to be applied to worker nodes.
                properties:
                  id:
                    description: id of the security group
                    type: string
                  name:
                    description: name of the security group
                    type: string
                required:
                - id
                - name
                type: object
            required:
            - ready
            type: object
        type: object
    served: true
    storage: true
    subresources:
      status: {}
status:
  acceptedNames:
    kind: ""
    plural: ""
  conditions: null
  storedVersions: null
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    cert-manager.io/inject-ca-from: capo-system/capo-serving-cert
    controller-gen.kubebuilder.io/version: v0.16.5
  creationTimestamp: null
  labels:
    cluster.x-k8s.io/provider: infrastructure-openstack
    cluster.x-k8s.io/v1beta1: v1alpha7_v1beta1
    clusterctl.cluster.x-k8s.io: ""
  name: openstackclustertemplates.infrastructure.cluster.x-k8s.io
spec:
  conversion:
    strategy: Webhook
    webhook:
      clientConfig:
        service:
          name: capo-webhook-service
          namespace: capo-system
          path: /convert
      conversionReviewVersions:
      - v1
      - v1beta1
  group: infrastructure.cluster.x-k8s.io
  names:
    categories:
    - cluster-api
    kind: OpenStackClusterTemplate
    listKind: OpenStackClusterTemplateList
    plural: openstackclustertemplates
    shortNames:
    - osct
    singular: openstackclustertemplate
  scope: Namespaced
  versions:
  - deprecated: true
    deprecationWarning: The v1alpha7 version of OpenStackClusterTemplate has been
      deprecated and will be removed in a future release.
    name: v1alpha7
    schema:
      openAPIV3Schema:
        description: |-
          OpenStackClusterTemplate is the Schema for the openstackclustertemplates API.

          Deprecated: v1alpha7.OpenStackClusterTemplate has been replaced by v1beta1.OpenStackClusterTemplate.
        properties:
          apiVersion:
            description: |-
              APIVersion defines the versioned schema of this representation of an object.
              Servers should convert recognized schemas to the latest internal value, and
              may reject unrecognized values.
              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
            type: string
          kind:
            description: |-
              Kind is a string value representing the REST resource this object represents.
              Servers may infer this from the endpoint the client submits requests to.
              Cannot be updated.
              In CamelCase.
              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
            type: string
          metadata:
            type: object
          spec:
            description: OpenStackClusterTemplateSpec defines the desired state of
              OpenStackClusterTemplate.
            properties:
              template:
                description: OpenStackClusterTemplateResource describes the data needed
                  to create a OpenStackCluster from a template.
                properties:
                  spec:
                    description: OpenStackClusterSpec defines the desired state of
                      OpenStackCluster.
                    properties:
                      allowAllInClusterTraffic:
                        description: |-
                          AllowAllInClusterTraffic is only used when managed security groups are in use.
                          If set to true, the rules for the managed security groups are configured so that all
                          ingress and egress between cluster nodes is permitted, allowing CNIs other than
                          Calico to be used.
                        type: boolean
                      apiServerFixedIP:
                        description: |-
                          APIServerFixedIP is the fixed IP which will be associated with the API server.
                          In the case where the API server has a floating IP but not a managed load balancer,
                          this field is not used.
                          If a managed load balancer is used and this field is not specified, a fixed IP will
                          be dynamically allocated for the load balancer.
                          If a managed load balancer is not used AND the API server floating IP is disabled,
                          this field MUST be specified and should correspond to a pre-allocated port that
                          holds the fixed IP to be used as a VIP.
                        type: string
                      apiServerFloatingIP:
                        description: |-
                          APIServerFloatingIP is the floatingIP which will be associated with the API server.
                          The floatingIP will be created if it does not already exist.
                          If not specified, a new floatingIP is allocated.
                          This field is not used if DisableAPIServerFloatingIP is set to true.
                        type: string
                      apiServerLoadBalancer:
                        description: |-
                          APIServerLoadBalancer configures the optional LoadBalancer for the APIServer.
                          It must be activated by setting `enabled: true`.
                        properties:
                          additionalPorts:
                            description: AdditionalPorts adds additional tcp ports
                              to the load balancer.
                            items:
                              type: integer
                            type: array
                          allowedCidrs:
                            description: AllowedCIDRs restrict access to all API-Server
                              listeners to the given address CIDRs.
                            items:
                              type: string
                            type: array
                          enabled:
                            description: Enabled defines whether a load balancer should
                              be created.
                            type: boolean
                          provider:
                            description: Octavia Provider Used to create load balancer
                            type: string
                        type: object
                      apiServerPort:
                        description: |-
                          APIServerPort is the port on which the listener on the APIServer
                          will be created
                        type: integer
                      bastion:
                        description: |-
                          Bastion is the OpenStack instance to login the nodes

                          As a rolling update is not ideal during a bastion host session, we
                          prevent changes to a running bastion configuration. Set `enabled: false` to
                          make changes.
                        properties:
                          availabilityZone:
                            type: string
                          enabled:
                            type: boolean
                          instance:
                            description: Instance for the bastion itself
                            properties:
                              additionalBlockDevices:
                                description: AdditionalBlockDevices is a list of specifications
                                  for additional block devices to attach to the server
                                  instance
                                items:
                                  description: AdditionalBlockDevice is a block device
                                    to attach to the server.
                                  properties:
                                    name:
                                      description: |-
                                        Name of the block device in the context of a machine.
                                        If the block device is a volume, the Cinder volume will be named
                                        as a combination of the machine name and this name.
                                        Also, this name will be used for tagging the block device.
                                        Information about the block device tag can be obtained from the OpenStack
                                        metadata API or the config drive.
                                      type: string
                                    sizeGiB:
                                      description: SizeGiB is the size of the block
                                        device in gibibytes (GiB).
                                      type: integer
                                    storage:
                                      description: |-
                                        Storage specifies the storage type of the block device and
                                        additional storage options.
                                      properties:
                                        type:
                                          description: |-
                                            Type is the type of block device to create.
                                            This can be either "Volume" or "Local".
                                          type: string
                                        volume:
                                          description: Volume contains additional
                                            storage options for a volume block device.
                                          properties:
                                            availabilityZone:
                                              description: |-
                                                AvailabilityZone is the volume availability zone to create the volume in.
                                                If omitted, the availability zone of the server will be used.
                                                The availability zone must NOT contain spaces otherwise it will lead to volume that belongs
                                                to this availability zone register failure, see kubernetes/cloud-provider-openstack#1379 for
                                                further information.
                                              type: string
                                            type:
                                              description: |-
                                                Type is the Cinder volume type of the volume.
                                                If omitted, the default Cinder volume type that is configured in the OpenStack cloud
                                                will be used.
                                              type: string
                                          type: object
                                      required:
                                      - type
                                      type: object
                                  required:
                                  - name
                                  - sizeGiB
                                  - storage
                                  type: object
                                type: array
                                x-kubernetes-list-map-keys:
                                - name
                                x-kubernetes-list-type: map
                              cloudName:
                                description: The name of the cloud to use from the
                                  clouds secret
                                type: string
                              configDrive:
                                description: Config Drive support
                                type: boolean
                              flavor:
                                description: The flavor reference for the flavor for
                                  your server instance.
                                minLength: 1
                                type: string
                              flavorID:
                                description: |-
                                  FlavorID allows flavors to be specified by ID.  This field takes precedence
                                  over Flavor.
                                minLength: 1
                                type: string
                              floatingIP:
                                description: |-
                                  The floatingIP which will be associated to the machine, only used for master.
                                  The floatingIP should have been created and haven't been associated.
                                type: string
                              identityRef:
                                description: |-
                                  IdentityRef is a reference to a identity to be used when reconciling this cluster.
                                  If not specified, the identity ref of the cluster will be used instead.
                                properties:
                                  kind:
                                    description: |-
                                      Kind of the identity. Must be supported by the infrastructure
                                      provider and may be either cluster or namespace-scoped.
                                    minLength: 1
                                    type: string
                                  name:
                                    description: |-
                                      Name of the infrastructure identity to be used.
                                      Must be either a cluster-scoped resource, or namespaced-scoped
                                      resource the same namespace as the resource(s) being provisioned.
                                    type: string
                                required:
                                - kind
                                - name
                                type: object
                              image:
                                description: |-
                                  The name of the image to use for your server instance.
                                  If the RootVolume is specified, this will be ignored and use rootVolume directly.
                                type: string
                              imageUUID:
                                description: |-
                                  The uuid of the image to use for your server instance.
                                  if it's empty, Image name will be used
                                type: string
                              instanceID:
                                description: InstanceID is the OpenStack instance
                                  ID for this machine.
                                type: string
                              ports:
                                description: |-
                                  Ports to be attached to the server instance. They are created if a port with the given name does not already exist.
                                  If not specified a default port will be added for the default cluster network.
                                items:
                                  properties:
                                    adminStateUp:
                                      type: boolean
                                    allowedAddressPairs:
                                      items:
                                        properties:
                                          ipAddress:
                                            type: string
                                          macAddress:
                                            type: string
                                        type: object
                                      type: array
                                    description:
                                      type: string
                                    disablePortSecurity:
                                      description: |-
                                        DisablePortSecurity enables or disables the port security when set.
                                        When not set, it takes the value of the corresponding field at the network level.
                                      type: boolean
                                    fixedIPs:
                                      description: Specify pairs of subnet and/or
                                        IP address. These should be subnets of the
                                        network with the given NetworkID.
                                      items:
                                        properties:
                                          ipAddress:
                                            type: string
                                          subnet:
                                            description: |-
                                              Subnet is an openstack subnet query that will return the id of a subnet to create
                                              the fixed IP of a port in. This query must not return more than one subnet.
                                            properties:
                                              cidr:
                                                type: string
                                              description:
                                                type: string
                                              gateway_ip:
                                                type: string
                                              id:
                                                type: string
                                              ipVersion:
                                                type: integer
                                              ipv6AddressMode:
                                                type: string
                                              ipv6RaMode:
                                                type: string
                                              name:
                                                type: string
                                              notTags:
                                                type: string
                                              notTagsAny:
                                                type: string
                                              projectId:
                                                type: string
                                              tags:
                                                type: string
                                              tagsAny:
                                                type: string
                                            type: object
                                        required:
                                        - subnet
                                        type: object
                                      type: array
                                    hostId:
                                      description: The ID of the host where the port
                                        is allocated
                                      type: string
                                    macAddress:
                                      type: string
                                    nameSuffix:
                                      description: Used to make the name of the port
                                        unique. If unspecified, instead the 0-based
                                        index of the port in the list is used.
                                      type: string
                                    network:
                                      description: |-
                                        Network is a query for an openstack network that the port will be created or discovered on.
                                        This will fail if the query returns more than one network.
                                      properties:
                                        description:
                                          type: string
                                        id:
                                          type: string
                                        name:
                                          type: string
                                        notTags:
                                          type: string
                                        notTagsAny:
                                          type: string
                                        projectId:
                                          type: string
                                        tags:
                                          type: string
                                        tagsAny:
                                          type: string
                                      type: object
                                    profile:
                                      description: |-
                                        Profile is a set of key-value pairs that are used for binding details.
                                        We intentionally don't expose this as a map[string]string because we only want to enable
                                        the users to set the values of the keys that are known to work in OpenStack Networking API.
                                        See https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
                                      properties:
                                        ovsHWOffload:
                                          description: OVSHWOffload enables or disables
                                            the OVS hardware offload feature.
                                          type: boolean
                                        trustedVF:
                                          description: TrustedVF enables or disables
                                            the “trusted mode” for the VF.
                                          type: boolean
                                      type: object
                                    propagateUplinkStatus:
                                      description: PropageteUplinkStatus enables or
                                        disables the propagate uplink status on the
                                        port.
                                      type: boolean
                                    securityGroupFilters:
                                      description: The names, uuids, filters or any
                                        combination these of the security groups to
                                        assign to the instance
                                      items:
                                        properties:
                                          description:
                                            type: string
                                          id:
                                            type: string
                                          name:
                                            type: string
                                          notTags:
                                            type: string
                                          notTagsAny:
                                            type: string
                                          projectId:
                                            type: string
                                          tags:
                                            type: string
                                          tagsAny:
                                            type: string
                                        type: object
                                      type: array
                                    tags:
                                      description: |-
                                        Tags applied to the port (and corresponding trunk, if a trunk is configured.)
                                        These tags are applied in addition to the instance's tags, which will also be applied to the port.
                                      items:
                                        type: string
                                      type: array
                                      x-kubernetes-list-type: set
                                    trunk:
                                      description: Enables and disables trunk at port
                                        level. If not provided, openStackMachine.Spec.Trunk
                                        is inherited.
                                      type: boolean
                                    valueSpecs:
                                      description: |-
                                        Value specs are extra parameters to include in the API request with OpenStack.
                                        This is an extension point for the API, so what they do and if they are supported,
                                        depends on the specific OpenStack implementation.
                                      items:
                                        description: ValueSpec represents a single
                                          value_spec key-value pair.
                                        properties:
                                          key:
                                            description: Key is the key in the key-value
                                              pair.
                                            type: string
                                          name:
                                            description: |-
                                              Name is the name of the key-value pair.
                                              This is just for identifying the pair and will not be sent to the OpenStack API.
                                            type: string
                                          value:
                                            description: Value is the value in the
                                              key-value pair.
                                            type: string
                                        required:
                                        - key
                                        - name
                                        - value
                                        type: object
                                      type: array
                                      x-kubernetes-list-map-keys:
                                      - name
                                      x-kubernetes-list-type: map
                                    vnicType:
                                      description: The virtual network interface card
                                        (vNIC) type that is bound to the neutron port.
                                      type: string
                                  type: object
                                type: array
                              providerID:
                                description: ProviderID is the unique identifier as
                                  specified by the cloud provider.
                                type: string
                              rootVolume:
                                description: The volume metadata to boot from
                                properties:
                                  availabilityZone:
                                    type: string
                                  diskSize:
                                    type: integer
                                  volumeType:
                                    type: string
                                type: object
                              securityGroups:
                                description: The names of the security groups to assign
                                  to the instance
                                items:
                                  properties:
                                    description:
                                      type: string
                                    id:
                                      type: string
                                    name:
                                      type: string
                                    notTags:
                                      type: string
                                    notTagsAny:
                                      type: string
                                    projectId:
                                      type: string
                                    tags:
                                      type: string
                                    tagsAny:
                                      type: string
                                  type: object
                                type: array
                              serverGroupID:
                                description: The server group to assign the machine
                                  to
                                type: string
                              serverMetadata:
                                additionalProperties:
                                  type: string
                                description: Metadata mapping. Allows you to create
                                  a map of key value pairs to add to the server instance.
                                type: object
                              sshKeyName:
                                description: The ssh key to inject in the instance
                                type: string
                              tags:
                                description: |-
                                  Machine tags
                                  Requires Nova api 2.52 minimum!
                                items:
                                  type: string
                                type: array
                                x-kubernetes-list-type: set
                              trunk:
                                description: Whether the server instance is created
                                  on a trunk port or not.
                                type: boolean
                            type: object
                        type: object
                      cloudName:
                        description: The name of the cloud to use from the clouds
                          secret
                        type: string
                      controlPlaneAvailabilityZones:
                        description: ControlPlaneAvailabilityZones is the az to deploy
                          control plane to
                        items:
                          type: string
                        type: array
                        x-kubernetes-list-type: set
                      controlPlaneEndpoint:
                        description: ControlPlaneEndpoint represents the endpoint
                          used to communicate with the control plane.
                        properties:
                          host:
                            description: The hostname on which the API server is serving.
                            type: string
                          port:
                            description: The port on which the API server is serving.
                            format: int32
                            type: integer
                        required:
                        - host
                        - port
                        type: object
                      controlPlaneOmitAvailabilityZone:
                        description: |-
                          Indicates whether to omit the az for control plane nodes, allowing the Nova scheduler
                          to make a decision on which az to use based on other scheduling constraints
                        type: boolean
                      disableAPIServerFloatingIP:
                        description: |-
                          DisableAPIServerFloatingIP determines whether or not to attempt to attach a floating
                          IP to the API server. This allows for the creation of clusters when attaching a floating
                          IP to the API server (and hence, in many cases, exposing the API server to the internet)
                          is not possible or desirable, e.g. if using a shared VLAN for communication between
                          management and workload clusters or when the management cluster is inside the
                          project network.
                          This option requires that the API server use a VIP on the cluster network so that the
                          underlying machines can change without changing ControlPlaneEndpoint.Host.
                          When using a managed load balancer, this VIP will be managed automatically.
                          If not using a managed load balancer, cluster configuration will fail without additional
                          configuration to manage the VIP on the control plane machines, which falls outside of
                          the scope of this controller.
                        type: boolean
                      disablePortSecurity:
                        description: |-
                          DisablePortSecurity disables the port security of the network created for the
                          Kubernetes cluster, which also disables SecurityGroups
                        type: boolean
                      dnsNameservers:
                        description: |-
                          DNSNameservers is the list of nameservers for OpenStack Subnet being created.
                          Set this value when you need create a new network/subnet while the access
                          through DNS is required.
                        items:
                          type: string
                        type: array
                        x-kubernetes-list-type: set
                      externalNetworkId:
                        description: |-
                          ExternalNetworkID is the ID of an external OpenStack Network. This is necessary
                          to get public internet to the VMs.
                        type: string
                      externalRouterIPs:
                        description: |-
                          ExternalRouterIPs is an array of externalIPs on the respective subnets.
                          This is necessary if the router needs a fixed ip in a specific subnet.
                        items:
                          properties:
                            fixedIP:
                              description: The FixedIP in the corresponding subnet
                              type: string
                            subnet:
                              description: The subnet in which the FixedIP is used
                                for the Gateway of this router
                              properties:
                                cidr:
                                  type: string
                                description:
                                  type: string
                                gateway_ip:
                                  type: string
                                id:
                                  type: string
                                ipVersion:
                                  type: integer
                                ipv6AddressMode:
                                  type: string
                                ipv6RaMode:
                                  type: string
                                name:
                                  type: string
                                notTags:
                                  type: string
                                notTagsAny:
                                  type: string
                                projectId:
                                  type: string
                                tags:
                                  type: string
                                tagsAny:
                                  type: string
                              type: object
                          required:
                          - subnet
                          type: object
                        type: array
                      identityRef:
                        description: IdentityRef is a reference to a identity to be
                          used when reconciling this cluster
                        properties:
                          kind:
                            description: |-
                              Kind of the identity. Must be supported by the infrastructure
                              provider and may be either cluster or namespace-scoped.
                            minLength: 1
                            type: string
                          name:
                            description: |-
                              Name of the infrastructure identity to be used.
                              Must be either a cluster-scoped resource, or namespaced-scoped
                              resource the same namespace as the resource(s) being provisioned.
                            type: string
                        required:
                        - kind
                        - name
                        type: object
                      managedSecurityGroups:
                        description: |-
                          ManagedSecurityGroups determines whether OpenStack security groups for the cluster
                          will be managed by the OpenStack provider or whether pre-existing security groups will
                          be specified as part of the configuration.
                          By default, the managed security groups have rules that allow the Kubelet, etcd, the
                          Kubernetes API server and the Calico CNI plugin to function correctly.
                        type: boolean
                      network:
                        description: If NodeCIDR cannot be set this can be used to
                          detect an existing network.
                        properties:
                          description:
                            type: string
                          id:
                            type: string
                          name:
                            type: string
                          notTags:
                            type: string
                          notTagsAny:
                            type: string
                          projectId:
                            type: string
                          tags:
                            type: string
                          tagsAny:
                            type: string
                        type: object
                      networkMtu:
                        description: |-
                          NetworkMTU sets the maximum transmission unit (MTU) value to address fragmentation for the private network ID.
                          This value will be used only if the Cluster actuator creates the network.
                          If leaved empty, the network will have the default MTU defined in Openstack network service.
                          To use this field, the Openstack installation requires the net-mtu neutron API extension.
                        type: integer
                      nodeCidr:
                        description: |-
                          NodeCIDR is the OpenStack Subnet to be created. Cluster actuator will create a
                          network, a subnet with NodeCIDR, and a router connected to this subnet.
                          If you leave this empty, no network will be created.
                        type: string
                      router:
                        description: |-
                          If NodeCIDR is set this option can be used to detect an existing router.
                          If specified, no new router will be created.
                        properties:
                          description:
                            type: string
                          id:
                            type: string
                          name:
                            type: string
                          notTags:
                            type: string
                          notTagsAny:
                            type: string
                          projectId:
                            type: string
                          tags:
                            type: string
                          tagsAny:
                            type: string
                        type: object
                      subnet:
                        description: If NodeCIDR cannot be set this can be used to
                          detect an existing subnet.
                        properties:
                          cidr:
                            type: string
                          description:
                            type: string
                          gateway_ip:
                            type: string
                          id:
                            type: string
                          ipVersion:
                            type: integer
                          ipv6AddressMode:
                            type: string
                          ipv6RaMode:
                            type: string
                          name:
                            type: string
                          notTags:
                            type: string
                          notTagsAny:
                            type: string
                          projectId:
                            type: string
                          tags:
                            type: string
                          tagsAny:
                            type: string
                        type: object
                      tags:
                        description: Tags for all resources in cluster
                        items:
                          type: string
                        type: array
                        x-kubernetes-list-type: set
                    type: object
                required:
                - spec
                type: object
            required:
            - template
            type: object
        type: object
    served: false
    storage: false
  - name: v1beta1
    schema:
      openAPIV3Schema:
        description: OpenStackClusterTemplate is the Schema for the openstackclustertemplates
          API.
        properties:
          apiVersion:
            description: |-
              APIVersion defines the versioned schema of this representation of an object.
              Servers should convert recognized schemas to the latest internal value, and
              may reject unrecognized values.
              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
            type: string
          kind:
            description: |-
              Kind is a string value representing the REST resource this object represents.
              Servers may infer this from the endpoint the client submits requests to.
              Cannot be updated.
              In CamelCase.
              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
            type: string
          metadata:
            type: object
          spec:
            description: OpenStackClusterTemplateSpec defines the desired state of
              OpenStackClusterTemplate.
            properties:
              template:
                description: OpenStackClusterTemplateResource describes the data needed
                  to create a OpenStackCluster from a template.
                properties:
                  spec:
                    description: OpenStackClusterSpec defines the desired state of
                      OpenStackCluster.
                    properties:
                      apiServerFixedIP:
                        description: |-
                          APIServerFixedIP is the fixed IP which will be associated with the API server.
                          In the case where the API server has a floating IP but not a managed load balancer,
                          this field is not used.
                          If a managed load balancer is used and this field is not specified, a fixed IP will
                          be dynamically allocated for the load balancer.
                          If a managed load balancer is not used AND the API server floating IP is disabled,
                          this field MUST be specified and should correspond to a pre-allocated port that
                          holds the fixed IP to be used as a VIP.
                        type: string
                      apiServerFloatingIP:
                        description: |-
                          APIServerFloatingIP is the floatingIP which will be associated with the API server.
                          The floatingIP will be created if it does not already exist.
                          If not specified, a new floatingIP is allocated.
                          This field is not used if DisableAPIServerFloatingIP is set to true.
                        type: string
                      apiServerLoadBalancer:
                        description: |-
                          APIServerLoadBalancer configures the optional LoadBalancer for the APIServer.
                          If not specified, no load balancer will be created for the API server.
                        properties:
                          additionalPorts:
                            description: AdditionalPorts adds additional tcp ports
                              to the load balancer.
                            items:
                              type: integer
                            type: array
                            x-kubernetes-list-type: set
                          allowedCIDRs:
                            description: AllowedCIDRs restrict access to all API-Server
                              listeners to the given address CIDRs.
                            items:
                              type: string
                            type: array
                            x-kubernetes-list-type: set
                          availabilityZone:
                            description: AvailabilityZone is the failure domain that
                              will be used to create the APIServerLoadBalancer Spec.
                            type: string
                          enabled:
                            default: true
                            description: |-
                              Enabled defines whether a load balancer should be created. This value
                              defaults to true if an APIServerLoadBalancer is given.

                              There is no reason to set this to false. To disable creation of the
                              API server loadbalancer, omit the APIServerLoadBalancer field in the
                              cluster spec instead.
                            type: boolean
                          flavor:
                            description: Flavor is the flavor name that will be used
                              to create the APIServerLoadBalancer Spec.
                            type: string
                          network:
                            description: Network defines which network should the
                              load balancer be allocated on.
                            maxProperties: 1
                            minProperties: 1
                            properties:
                              filter:
                                description: Filter specifies a filter to select an
                                  OpenStack network. If provided, cannot be empty.
                                minProperties: 1
                                properties:
                                  description:
                                    type: string
                                  name:
                                    type: string
                                  notTags:
                                    description: |-
                                      NotTags is a list of tags to filter by. If specified, resources which
                                      contain all of the given tags will be excluded from the result.
                                    items:
                                      description: |-
                                        NeutronTag represents a tag on a Neutron resource.
                                        It may not be empty and may not contain commas.
                                      minLength: 1
                                      pattern: ^[^,]+$
                                      type: string
                                    type: array
                                    x-kubernetes-list-type: set
                                  notTagsAny:
                                    description: |-
                                      NotTagsAny is a list of tags to filter by. If specified, resources
                                      which contain any of the given tags will be excluded from the result.
                                    items:
                                      description: |-
                                        NeutronTag represents a tag on a Neutron resource.
                                        It may not be empty and may not contain commas.
                                      minLength: 1
                                      pattern: ^[^,]+$
                                      type: string
                                    type: array
                                    x-kubernetes-list-type: set
                                  projectID:
                                    type: string
                                  tags:
                                    description: |-
                                      Tags is a list of tags to filter by. If specified, the resource must
                                      have all of the tags specified to be included in the result.
                                    items:
                                      description: |-
                                        NeutronTag represents a tag on a Neutron resource.
                                        It may not be empty and may not contain commas.
                                      minLength: 1
                                      pattern: ^[^,]+$
                                      type: string
                                    type: array
                                    x-kubernetes-list-type: set
                                  tagsAny:
                                    description: |-
                                      TagsAny is a list of tags to filter by. If specified, the resource
                                      must have at least one of the tags specified to be included in the
                                      result.
                                    items:
                                      description: |-
                                        NeutronTag represents a tag on a Neutron resource.
                                        It may not be empty and may not contain commas.
                                      minLength: 1
                                      pattern: ^[^,]+$
                                      type: string
                                    type: array
                                    x-kubernetes-list-type: set
                                type: object
                              id:
                                description: ID is the ID of the network to use. If
                                  ID is provided, the other filters cannot be provided.
                                  Must be in UUID format.
                                format: uuid
                                type: string
                            type: object
                          provider:
                            description: |-
                              Provider specifies name of a specific Octavia provider to use for the
                              API load balancer. The Octavia default will be used if it is not
                              specified.
                            type: string
                          subnets:
                            description: |-
                              Subnets define which subnets should the load balancer be allocated on.
                              It is expected that subnets are located on the network specified in this resource.
                              Only the first element is taken into account.
                              kubebuilder:validation:MaxLength:=2
                            items:
                              description: SubnetParam specifies an OpenStack subnet
                                to use. It may be specified by either ID or filter,
                                but not both.
                              maxProperties: 1
                              minProperties: 1
                              properties:
                                filter:
                                  description: Filter specifies a filter to select
                                    the subnet. It must match exactly one subnet.
                                  minProperties: 1
                                  properties:
                                    cidr:
                                      type: string
                                    description:
                                      type: string
                                    gatewayIP:
                                      type: string
                                    ipVersion:
                                      type: integer
                                    ipv6AddressMode:
                                      type: string
                                    ipv6RAMode:
                                      type: string
                                    name:
                                      type: string
                                    notTags:
                                      description: |-
                                        NotTags is a list of tags to filter by. If specified, resources which
                                        contain all of the given tags will be excluded from the result.
                                      items:
                                        description: |-
                                          NeutronTag represents a tag on a Neutron resource.
                                          It may not be empty and may not contain commas.
                                        minLength: 1
                                        pattern: ^[^,]+$
                                        type: string
                                      type: array
                                      x-kubernetes-list-type: set
                                    notTagsAny:
                                      description: |-
                                        NotTagsAny is a list of tags to filter by. If specified, resources
                                        which contain any of the given tags will be excluded from the result.
                                      items:
                                        description: |-
                                          NeutronTag represents a tag on a Neutron resource.
                                          It may not be empty and may not contain commas.
                                        minLength: 1
                                        pattern: ^[^,]+$
                                        type: string
                                      type: array
                                      x-kubernetes-list-type: set
                                    projectID:
                                      type: string
                                    tags:
                                      description: |-
                                        Tags is a list of tags to filter by. If specified, the resource must
                                        have all of the tags specified to be included in the result.
                                      items:
                                        description: |-
                                          NeutronTag represents a tag on a Neutron resource.
                                          It may not be empty and may not contain commas.
                                        minLength: 1
                                        pattern: ^[^,]+$
                                        type: string
                                      type: array
                                      x-kubernetes-list-type: set
                                    tagsAny:
                                      description: |-
                                        TagsAny is a list of tags to filter by. If specified, the resource
                                        must have at least one of the tags specified to be included in the
                                        result.
                                      items:
                                        description: |-
                                          NeutronTag represents a tag on a Neutron resource.
                                          It may not be empty and may not contain commas.
                                        minLength: 1
                                        pattern: ^[^,]+$
                                        type: string
                                      type: array
                                      x-kubernetes-list-type: set
                                  type: object
                                id:
                                  description: ID is the uuid of the subnet. It will
                                    not be validated.
                                  format: uuid
                                  type: string
                              type: object
                            type: array
                            x-kubernetes-list-type: atomic
                        required:
                        - enabled
                        type: object
                      apiServerPort:
                        description: |-
                          APIServerPort is the port on which the listener on the APIServer
                          will be created. If specified, it must be an integer between 0 and 65535.
                        maximum: 65535
                        minimum: 0
                        type: integer
                      bastion:
                        description: |-
                          Bastion is the OpenStack instance to login the nodes

                          As a rolling update is not ideal during a bastion host session, we
                          prevent changes to a running bastion configuration. To make changes, it's required
                          to first set `enabled: false` which will remove the bastion and then changes can be made.
                        properties:
                          availabilityZone:
                            description: AvailabilityZone is the failure domain that
                              will be used to create the Bastion Spec.
                            type: string
                          enabled:
                            default: true
                            description: |-
                              Enabled means that bastion is enabled. The bastion is enabled by
                              default if this field is not specified. Set this field to false to disable the
                              bastion.

                              It is not currently possible to remove the bastion from the cluster
                              spec without first disabling it by setting this field to false and
                              waiting until the bastion has been deleted.
                            type: boolean
                          floatingIP:
                            description: |-
                              FloatingIP which will be associated to the bastion machine. It's the IP address, not UUID.
                              The floating IP should already exist and should not be associated with a port. If FIP of this address does not
                              exist, CAPO will try to create it, but by default only OpenStack administrators have privileges to do so.
                            format: ipv4
                            type: string
                          spec:
                            description: Spec for the bastion itself
                            properties:
                              additionalBlockDevices:
                                description: AdditionalBlockDevices is a list of specifications
                                  for additional block devices to attach to the server
                                  instance
                                items:
                                  description: AdditionalBlockDevice is a block device
                                    to attach to the server.
                                  properties:
                                    name:
                                      description: |-
                                        Name of the block device in the context of a machine.
                                        If the block device is a volume, the Cinder volume will be named
                                        as a combination of the machine name and this name.
                                        Also, this name will be used for tagging the block device.
                                        Information about the block device tag can be obtained from the OpenStack
                                        metadata API or the config drive.
                                        Name cannot be 'root', which is reserved for the root volume.
                                      type: string
                                    sizeGiB:
                                      description: SizeGiB is the size of the block
                                        device in gibibytes (GiB).
                                      minimum: 1
                                      type: integer
                                    storage:
                                      description: |-
                                        Storage specifies the storage type of the block device and
                                        additional storage options.
                                      properties:
                                        type:
                                          description: |-
                                            Type is the type of block device to create.
                                            This can be either "Volume" or "Local".
                                          type: string
                                        volume:
                                          description: Volume contains additional
                                            storage options for a volume block device.
                                          properties:
                                            availabilityZone:
                                              description: |-
                                                AvailabilityZone is the volume availability zone to create the volume
                                                in. If not specified, the volume will be created without an explicit
                                                availability zone.
                                              properties:
                                                from:
                                                  default: Name
                                                  description: |-
                                                    From specifies where we will obtain the availability zone for the
                                                    volume. The options are "Name" and "Machine". If "Name" is specified
                                                    then the Name field must also be specified. If "Machine" is specified
                                                    the volume will use the value of FailureDomain, if any, from the
                                                    associated Machine.
                                                  enum:
                                                  - Name
                                                  - Machine
                                                  type: string
                                                name:
                                                  description: |-
                                                    Name is the name of a volume availability zone to use. It is required
                                                    if From is "Name". The volume availability zone name may not contain
                                                    spaces.
                                                  minLength: 1
                                                  pattern: ^[^ ]+$
                                                  type: string
                                              type: object
                                              x-kubernetes-validations:
                                              - message: name is required when from
                                                  is 'Name' or default
                                                rule: '!has(self.from) || self.from
                                                  == ''Name'' ? has(self.name) : !has(self.name)'
                                            type:
                                              description: |-
                                                Type is the Cinder volume type of the volume.
                                                If omitted, the default Cinder volume type that is configured in the OpenStack cloud
                                                will be used.
                                              type: string
                                          type: object
                                      required:
                                      - type
                                      type: object
                                  required:
                                  - name
                                  - sizeGiB
                                  - storage
                                  type: object
                                type: array
                                x-kubernetes-list-map-keys:
                                - name
                                x-kubernetes-list-type: map
                              configDrive:
                                description: Config Drive support
                                type: boolean
                              flavor:
                                description: The flavor reference for the flavor for
                                  your server instance.
                                minLength: 1
                                type: string
                              flavorID:
                                description: |-
                                  FlavorID allows flavors to be specified by ID.  This field takes precedence
                                  over Flavor.
                                minLength: 1
                                type: string
                              floatingIPPoolRef:
                                description: |-
                                  floatingIPPoolRef is a reference to a IPPool that will be assigned
                                  to an IPAddressClaim. Once the IPAddressClaim is fulfilled, the FloatingIP
                                  will be assigned to the OpenStackMachine.
                                properties:
                                  apiGroup:
                                    description: |-
                                      APIGroup is the group for the resource being referenced.
                                      If APIGroup is not specified, the specified Kind must be in the core API group.
                                      For any other third-party types, APIGroup is required.
                                    type: string
                                  kind:
                                    description: Kind is the type of resource being
                                      referenced
                                    type: string
                                  name:
                                    description: Name is the name of resource being
                                      referenced
                                    type: string
                                required:
                                - kind
                                - name
                                type: object
                                x-kubernetes-map-type: atomic
                              identityRef:
                                description: |-
                                  IdentityRef is a reference to a secret holding OpenStack credentials
                                  to be used when reconciling this machine. If not specified, the
                                  credentials specified in the cluster will be used.
                                properties:
                                  cloudName:
                                    description: CloudName specifies the name of the
                                      entry in the clouds.yaml file to use.
                                    type: string
                                  name:
                                    description: |-
                                      Name is the name of a secret in the same namespace as the resource being provisioned.
                                      The secret must contain a key named `clouds.yaml` which contains an OpenStack clouds.yaml file.
                                      The secret may optionally contain a key named `cacert` containing a PEM-encoded CA certificate.
                                    type: string
                                  region:
                                    description: |-
                                      Region specifies an OpenStack region to use. If specified, it overrides
                                      any value in clouds.yaml. If specified for an OpenStackMachine, its
                                      value will be included in providerID.
                                    type: string
                                required:
                                - cloudName
                                - name
                                type: object
                                x-kubernetes-validations:
                                - message: region is immutable
                                  rule: (!has(self.region) && !has(oldSelf.region))
                                    || self.region == oldSelf.region
                              image:
                                description: |-
                                  The image to use for your server instance.
                                  If the rootVolume is specified, this will be used when creating the root volume.
                                maxProperties: 1
                                minProperties: 1
                                properties:
                                  filter:
                                    description: |-
                                      Filter describes a query for an image. If specified, the combination
                                      of name and tags must return a single matching image or an error will
                                      be raised.
                                    minProperties: 1
                                    properties:
                                      name:
                                        description: The name of the desired image.
                                          If specified, the combination of name and
                                          tags must return a single matching image
                                          or an error will be raised.
                                        type: string
                                      tags:
                                        description: The tags associated with the
                                          desired image. If specified, the combination
                                          of name and tags must return a single matching
                                          image or an error will be raised.
                                        items:
                                          type: string
                                        type: array
                                        x-kubernetes-list-type: set
                                    type: object
                                  id:
                                    description: ID is the uuid of the image. ID will
                                      not be validated before use.
                                    format: uuid
                                    type: string
                                  imageRef:
                                    description: |-
                                      ImageRef is a reference to an ORC Image in the same namespace as the
                                      referring object.
                                    properties:
                                      name:
                                        description: Name is the name of the referenced
                                          resource
                                        type: string
                                    required:
                                    - name
                                    type: object
                                type: object
                              ports:
                                description: |-
                                  Ports to be attached to the server instance. They are created if a port with the given name does not already exist.
                                  If not specified a default port will be added for the default cluster network.
                                items:
                                  properties:
                                    adminStateUp:
                                      description: AdminStateUp specifies whether
                                        the port should be created in the up (true)
                                        or down (false) state. The default is up.
                                      type: boolean
                                    allowedAddressPairs:
                                      description: |-
                                        AllowedAddressPairs is a list of address pairs which Neutron will
                                        allow the port to send traffic from in addition to the port's
                                        addresses. If not specified, the MAC Address will be the MAC Address
                                        of the port. Depending on the configuration of Neutron, it may be
                                        supported to specify a CIDR instead of a specific IP address.
                                      items:
                                        properties:
                                          ipAddress:
                                            description: |-
                                              IPAddress is the IP address of the allowed address pair. Depending on
                                              the configuration of Neutron, it may be supported to specify a CIDR
                                              instead of a specific IP address.
                                            type: string
                                          macAddress:
                                            description: |-
                                              MACAddress is the MAC address of the allowed address pair. If not
                                              specified, the MAC address will be the MAC address of the port.
                                            type: string
                                        required:
                                        - ipAddress
                                        type: object
                                      type: array
                                    description:
                                      description: Description is a human-readable
                                        description for the port.
                                      type: string
                                    disablePortSecurity:
                                      description: |-
                                        DisablePortSecurity enables or disables the port security when set.
                                        When not set, it takes the value of the corresponding field at the network level.
                                      type: boolean
                                    fixedIPs:
                                      description: FixedIPs is a list of pairs of
                                        subnet and/or IP address to assign to the
                                        port. If specified, these must be subnets
                                        of the port's network.
                                      items:
                                        properties:
                                          ipAddress:
                                            description: |-
                                              IPAddress is a specific IP address to assign to the port. If Subnet
                                              is also specified, IPAddress must be a valid IP address in the
                                              subnet. If Subnet is not specified, IPAddress must be a valid IP
                                              address in any subnet of the port's network.
                                            type: string
                                          subnet:
                                            description: |-
                                              Subnet is an openstack subnet query that will return the id of a subnet to create
                                              the fixed IP of a port in. This query must not return more than one subnet.
                                            maxProperties: 1
                                            minProperties: 1
                                            properties:
                                              filter:
                                                description: Filter specifies a filter
                                                  to select the subnet. It must match
                                                  exactly one subnet.
                                                minProperties: 1
                                                properties:
                                                  cidr:
                                                    type: string
                                                  description:
                                                    type: string
                                                  gatewayIP:
                                                    type: string
                                                  ipVersion:
                                                    type: integer
                                                  ipv6AddressMode:
                                                    type: string
                                                  ipv6RAMode:
                                                    type: string
                                                  name:
                                                    type: string
                                                  notTags:
                                                    description: |-
                                                      NotTags is a list of tags to filter by. If specified, resources which
                                                      contain all of the given tags will be excluded from the result.
                                                    items:
                                                      description: |-
                                                        NeutronTag represents a tag on a Neutron resource.
                                                        It may not be empty and may not contain commas.
                                                      minLength: 1
                                                      pattern: ^[^,]+$
                                                      type: string
                                                    type: array
                                                    x-kubernetes-list-type: set
                                                  notTagsAny:
                                                    description: |-
                                                      NotTagsAny is a list of tags to filter by. If specified, resources
                                                      which contain any of the given tags will be excluded from the result.
                                                    items:
                                                      description: |-
                                                        NeutronTag represents a tag on a Neutron resource.
                                                        It may not be empty and may not contain commas.
                                                      minLength: 1
                                                      pattern: ^[^,]+$
                                                      type: string
                                                    type: array
                                                    x-kubernetes-list-type: set
                                                  projectID:
                                                    type: string
                                                  tags:
                                                    description: |-
                                                      Tags is a list of tags to filter by. If specified, the resource must
                                                      have all of the tags specified to be included in the result.
                                                    items:
                                                      description: |-
                                                        NeutronTag represents a tag on a Neutron resource.
                                                        It may not be empty and may not contain commas.
                                                      minLength: 1
                                                      pattern: ^[^,]+$
                                                      type: string
                                                    type: array
                                                    x-kubernetes-list-type: set
                                                  tagsAny:
                                                    description: |-
                                                      TagsAny is a list of tags to filter by. If specified, the resource
                                                      must have at least one of the tags specified to be included in the
                                                      result.
                                                    items:
                                                      description: |-
                                                        NeutronTag represents a tag on a Neutron resource.
                                                        It may not be empty and may not contain commas.
                                                      minLength: 1
                                                      pattern: ^[^,]+$
                                                      type: string
                                                    type: array
                                                    x-kubernetes-list-type: set
                                                type: object
                                              id:
                                                description: ID is the uuid of the
                                                  subnet. It will not be validated.
                                                format: uuid
                                                type: string
                                            type: object
                                        type: object
                                      type: array
                                      x-kubernetes-list-type: atomic
                                    hostID:
                                      description: HostID specifies the ID of the
                                        host where the port resides.
                                      type: string
                                    macAddress:
                                      description: MACAddress specifies the MAC address
                                        of the port. If not specified, the MAC address
                                        will be generated.
                                      type: string
                                    nameSuffix:
                                      description: NameSuffix will be appended to
                                        the name of the port if specified. If unspecified,
                                        instead the 0-based index of the port in the
                                        list is used.
                                      type: string
                                    network:
                                      description: |-
                                        Network is a query for an openstack network that the port will be created or discovered on.
                                        This will fail if the query returns more than one network.
                                      maxProperties: 1
                                      minProperties: 1
                                      properties:
                                        filter:
                                          description: Filter specifies a filter to
                                            select an OpenStack network. If provided,
                                            cannot be empty.
                                          minProperties: 1
                                          properties:
                                            description:
                                              type: string
                                            name:
                                              type: string
                                            notTags:
                                              description: |-
                                                NotTags is a list of tags to filter by. If specified, resources which
                                                contain all of the given tags will be excluded from the result.
                                              items:
                                                description: |-
                                                  NeutronTag represents a tag on a Neutron resource.
                                                  It may not be empty and may not contain commas.
                                                minLength: 1
                                                pattern: ^[^,]+$
                                                type: string
                                              type: array
                                              x-kubernetes-list-type: set
                                            notTagsAny:
                                              description: |-
                                                NotTagsAny is a list of tags to filter by. If specified, resources
                                                which contain any of the given tags will be excluded from the result.
                                              items:
                                                description: |-
                                                  NeutronTag represents a tag on a Neutron resource.
                                                  It may not be empty and may not contain commas.
                                                minLength: 1
                                                pattern: ^[^,]+$
                                                type: string
                                              type: array
                                              x-kubernetes-list-type: set
                                            projectID:
                                              type: string
                                            tags:
                                              description: |-
                                                Tags is a list of tags to filter by. If specified, the resource must
                                                have all of the tags specified to be included in the result.
                                              items:
                                                description: |-
                                                  NeutronTag represents a tag on a Neutron resource.
                                                  It may not be empty and may not contain commas.
                                                minLength: 1
                                                pattern: ^[^,]+$
                                                type: string
                                              type: array
                                              x-kubernetes-list-type: set
                                            tagsAny:
                                              description: |-
                                                TagsAny is a list of tags to filter by. If specified, the resource
                                                must have at least one of the tags specified to be included in the
                                                result.
                                              items:
                                                description: |-
                                                  NeutronTag represents a tag on a Neutron resource.
                                                  It may not be empty and may not contain commas.
                                                minLength: 1
                                                pattern: ^[^,]+$
                                                type: string
                                              type: array
                                              x-kubernetes-list-type: set
                                          type: object
                                        id:
                                          description: ID is the ID of the network
                                            to use. If ID is provided, the other filters
                                            cannot be provided. Must be in UUID format.
                                          format: uuid
                                          type: string
                                      type: object
                                    profile:
                                      description: |-
                                        Profile is a set of key-value pairs that are used for binding
                                        details. We intentionally don't expose this as a map[string]string
                                        because we only want to enable the users to set the values of the
                                        keys that are known to work in OpenStack Networking API.  See
                                        https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
                                        To set profiles, your tenant needs permissions rule:create_port, and
                                        rule:create_port:binding:profile
                                      properties:
                                        ovsHWOffload:
                                          description: |-
                                            OVSHWOffload enables or disables the OVS hardware offload feature.
                                            This flag is not required on OpenStack clouds since Yoga as Nova will set it automatically when the port is attached.
                                            See: https://bugs.launchpad.net/nova/+bug/2020813
                                          type: boolean
                                        trustedVF:
                                          description: TrustedVF enables or disables
                                            the “trusted mode” for the VF.
                                          type: boolean
                                      type: object
                                    propagateUplinkStatus:
                                      description: PropageteUplinkStatus enables or
                                        disables the propagate uplink status on the
                                        port.
                                      type: boolean
                                    securityGroups:
                                      description: SecurityGroups is a list of the
                                        names, uuids, filters or any combination these
                                        of the security groups to assign to the instance.
                                      items:
                                        description: SecurityGroupParam specifies
                                          an OpenStack security group. It may be specified
                                          by ID or filter, but not both.
                                        maxProperties: 1
                                        minProperties: 1
                                        properties:
                                          filter:
                                            description: Filter specifies a query
                                              to select an OpenStack security group.
                                              If provided, cannot be empty.
                                            minProperties: 1
                                            properties:
                                              description:
                                                type: string
                                              name:
                                                type: string
                                              notTags:
                                                description: |-
                                                  NotTags is a list of tags to filter by. If specified, resources which
                                                  contain all of the given tags will be excluded from the result.
                                                items:
                                                  description: |-
                                                    NeutronTag represents a tag on a Neutron resource.
                                                    It may not be empty and may not contain commas.
                                                  minLength: 1
                                                  pattern: ^[^,]+$
                                                  type: string
                                                type: array
                                                x-kubernetes-list-type: set
                                              notTagsAny:
                                                description: |-
                                                  NotTagsAny is a list of tags to filter by. If specified, resources
                                                  which contain any of the given tags will be excluded from the result.
                                                items:
                                                  description: |-
                                                    NeutronTag represents a tag on a Neutron resource.
                                                    It may not be empty and may not contain commas.
                                                  minLength: 1
                                                  pattern: ^[^,]+$
                                                  type: string
                                                type: array
                                                x-kubernetes-list-type: set
                                              projectID:
                                                type: string
                                              tags:
                                                description: |-
                                                  Tags is a list of tags to filter by. If specified, the resource must
                                                  have all of the tags specified to be included in the result.
                                                items:
                                                  description: |-
                                                    NeutronTag represents a tag on a Neutron resource.
                                                    It may not be empty and may not contain commas.
                                                  minLength: 1
                                                  pattern: ^[^,]+$
                                                  type: string
                                                type: array
                                                x-kubernetes-list-type: set
                                              tagsAny:
                                                description: |-
                                                  TagsAny is a list of tags to filter by. If specified, the resource
                                                  must have at least one of the tags specified to be included in the
                                                  result.
                                                items:
                                                  description: |-
                                                    NeutronTag represents a tag on a Neutron resource.
                                                    It may not be empty and may not contain commas.
                                                  minLength: 1
                                                  pattern: ^[^,]+$
                                                  type: string
                                                type: array
                                                x-kubernetes-list-type: set
                                            type: object
                                          id:
                                            description: ID is the ID of the security
                                              group to use. If ID is provided, the
                                              other filters cannot be provided. Must
                                              be in UUID format.
                                            format: uuid
                                            type: string
                                        type: object
                                      type: array
                                      x-kubernetes-list-type: atomic
                                    tags:
                                      description: |-
                                        Tags applied to the port (and corresponding trunk, if a trunk is configured.)
                                        These tags are applied in addition to the instance's tags, which will also be applied to the port.
                                      items:
                                        type: string
                                      type: array
                                      x-kubernetes-list-type: set
                                    trunk:
                                      description: |-
                                        Trunk specifies whether trunking is enabled at the port level. If not
                                        provided the value is inherited from the machine, or false for a
                                        bastion host.
                                      type: boolean
                                    valueSpecs:
                                      description: |-
                                        Value specs are extra parameters to include in the API request with OpenStack.
                                        This is an extension point for the API, so what they do and if they are supported,
                                        depends on the specific OpenStack implementation.
                                      items:
                                        description: ValueSpec represents a single
                                          value_spec key-value pair.
                                        properties:
                                          key:
                                            description: Key is the key in the key-value
                                              pair.
                                            type: string
                                          name:
                                            description: |-
                                              Name is the name of the key-value pair.
                                              This is just for identifying the pair and will not be sent to the OpenStack API.
                                            type: string
                                          value:
                                            description: Value is the value in the
                                              key-value pair.
                                            type: string
                                        required:
                                        - key
                                        - name
                                        - value
                                        type: object
                                      type: array
                                      x-kubernetes-list-map-keys:
                                      - name
                                      x-kubernetes-list-type: map
                                    vnicType:
                                      description: |-
                                        VNICType specifies the type of vNIC which this port should be
                                        attached to. This is used to determine which mechanism driver(s) to
                                        be used to bind the port. The valid values are normal, macvtap,
                                        direct, baremetal, direct-physical, virtio-forwarder, smart-nic and
                                        remote-managed, although these values will not be validated in this
                                        API to ensure compatibility with future neutron changes or custom
                                        implementations. What type of vNIC is actually available depends on
                                        deployments. If not specified, the Neutron default value is used.
                                      type: string
                                  type: object
                                type: array
                              providerID:
                                description: ProviderID is the unique identifier as
                                  specified by the cloud provider.
                                type: string
                              rootVolume:
                                description: The volume metadata to boot from
                                properties:
                                  availabilityZone:
                                    description: |-
                                      AvailabilityZone is the volume availability zone to create the volume
                                      in. If not specified, the volume will be created without an explicit
                                      availability zone.
                                    properties:
                                      from:
                                        default: Name
                                        description: |-
                                          From specifies where we will obtain the availability zone for the
                                          volume. The options are "Name" and "Machine". If "Name" is specified
                                          then the Name field must also be specified. If "Machine" is specified
                                          the volume will use the value of FailureDomain, if any, from the
                                          associated Machine.
                                        enum:
                                        - Name
                                        - Machine
                                        type: string
                                      name:
                                        description: |-
                                          Name is the name of a volume availability zone to use. It is required
                                          if From is "Name". The volume availability zone name may not contain
                                          spaces.
                                        minLength: 1
                                        pattern: ^[^ ]+$
                                        type: string
                                    type: object
                                    x-kubernetes-validations:
                                    - message: name is required when from is 'Name'
                                        or default
                                      rule: '!has(self.from) || self.from == ''Name''
                                        ? has(self.name) : !has(self.name)'
                                  sizeGiB:
                                    description: SizeGiB is the size of the block
                                      device in gibibytes (GiB).
                                    minimum: 1
                                    type: integer
                                  type:
                                    description: |-
                                      Type is the Cinder volume type of the volume.
                                      If omitted, the default Cinder volume type that is configured in the OpenStack cloud
                                      will be used.
                                    type: string
                                required:
                                - sizeGiB
                                type: object
                              schedulerHintAdditionalProperties:
                                description: |-
                                  SchedulerHintAdditionalProperties are arbitrary key/value pairs that provide additional hints
                                  to the OpenStack scheduler. These hints can influence how instances are placed on the infrastructure,
                                  such as specifying certain host aggregates or availability zones.
                                items:
                                  description: |-
                                    SchedulerHintAdditionalProperty represents a single additional property for a scheduler hint.
                                    It includes a Name to identify the property and a Value that can be of various types.
                                  properties:
                                    name:
                                      description: |-
                                        Name is the name of the scheduler hint property.
                                        It is a unique identifier for the property.
                                      minLength: 1
                                      type: string
                                    value:
                                      description: |-
                                        Value is the value of the scheduler hint property, which can be of various types
                                        (e.g., bool, string, int). The type is indicated by the Value.Type field.
                                      properties:
                                        bool:
                                          description: |-
                                            Bool is the boolean value of the scheduler hint, used when Type is "Bool".
                                            This field is required if type is 'Bool', and must not be set otherwise.
                                          type: boolean
                                        number:
                                          description: |-
                                            Number is the integer value of the scheduler hint, used when Type is "Number".
                                            This field is required if type is 'Number', and must not be set otherwise.
                                          type: integer
                                        string:
                                          description: |-
                                            String is the string value of the scheduler hint, used when Type is "String".
                                            This field is required if type is 'String', and must not be set otherwise.
                                          maxLength: 255
                                          minLength: 1
                                          type: string
                                        type:
                                          description: |-
                                            Type represents the type of the value.
                                            Valid values are Bool, String, and Number.
                                          enum:
                                          - Bool
                                          - String
                                          - Number
                                          type: string
                                      required:
                                      - type
                                      type: object
                                      x-kubernetes-validations:
                                      - message: bool is required when type is Bool,
                                          and forbidden otherwise
                                        rule: 'has(self.type) && self.type == ''Bool''
                                          ? has(self.bool) : !has(self.bool)'
                                      - message: number is required when type is Number,
                                          and forbidden otherwise
                                        rule: 'has(self.type) && self.type == ''Number''
                                          ? has(self.number) : !has(self.number)'
                                      - message: string is required when type is String,
                                          and forbidden otherwise
                                        rule: 'has(self.type) && self.type == ''String''
                                          ? has(self.string) : !has(self.string)'
                                  required:
                                  - name
                                  - value
                                  type: object
                                type: array
                                x-kubernetes-list-map-keys:
                                - name
                                x-kubernetes-list-type: map
                              securityGroups:
                                description: The names of the security groups to assign
                                  to the instance
                                items:
                                  description: SecurityGroupParam specifies an OpenStack
                                    security group. It may be specified by ID or filter,
                                    but not both.
                                  maxProperties: 1
                                  minProperties: 1
                                  properties:
                                    filter:
                                      description: Filter specifies a query to select
                                        an OpenStack security group. If provided,
                                        cannot be empty.
                                      minProperties: 1
                                      properties:
                                        description:
                                          type: string
                                        name:
                                          type: string
                                        notTags:
                                          description: |-
                                            NotTags is a list of tags to filter by. If specified, resources which
                                            contain all of the given tags will be excluded from the result.
                                          items:
                                            description: |-
                                              NeutronTag represents a tag on a Neutron resource.
                                              It may not be empty and may not contain commas.
                                            minLength: 1
                                            pattern: ^[^,]+$
                                            type: string
                                          type: array
                                          x-kubernetes-list-type: set
                                        notTagsAny:
                                          description: |-
                                            NotTagsAny is a list of tags to filter by. If specified, resources
                                            which contain any of the given tags will be excluded from the result.
                                          items:
                                            description: |-
                                              NeutronTag represents a tag on a Neutron resource.
                                              It may not be empty and may not contain commas.
                                            minLength: 1
                                            pattern: ^[^,]+$
                                            type: string
                                          type: array
                                          x-kubernetes-list-type: set
                                        projectID:
                                          type: string
                                        tags:
                                          description: |-
                                            Tags is a list of tags to filter by. If specified, the resource must
                                            have all of the tags specified to be included in the result.
                                          items:
                                            description: |-
                                              NeutronTag represents a tag on a Neutron resource.
                                              It may not be empty and may not contain commas.
                                            minLength: 1
                                            pattern: ^[^,]+$
                                            type: string
                                          type: array
                                          x-kubernetes-list-type: set
                                        tagsAny:
                                          description: |-
                                            TagsAny is a list of tags to filter by. If specified, the resource
                                            must have at least one of the tags specified to be included in the
                                            result.
                                          items:
                                            description: |-
                                              NeutronTag represents a tag on a Neutron resource.
                                              It may not be empty and may not contain commas.
                                            minLength: 1
                                            pattern: ^[^,]+$
                                            type: string
                                          type: array
                                          x-kubernetes-list-type: set
                                      type: object
                                    id:
                                      description: ID is the ID of the security group
                                        to use. If ID is provided, the other filters
                                        cannot be provided. Must be in UUID format.
                                      format: uuid
                                      type: string
                                  type: object
                                type: array
                              serverGroup:
                                description: The server group to assign the machine
                                  to.
                                maxProperties: 1
                                minProperties: 1
                                properties:
                                  filter:
                                    description: Filter specifies a query to select
                                      an OpenStack server group. If provided, it cannot
                                      be empty.
                                    minProperties: 1
                                    properties:
                                      name:
                                        description: Name is the name of a server
                                          group to look for.
                                        type: string
                                    type: object
                                  id:
                                    description: ID is the ID of the server group
                                      to use.
                                    format: uuid
                                    type: string
                                type: object
                              serverMetadata:
                                description: Metadata mapping. Allows you to create
                                  a map of key value pairs to add to the server instance.
                                items:
                                  properties:
                                    key:
                                      description: Key is the server metadata key
                                      maxLength: 255
                                      type: string
                                    value:
                                      description: Value is the server metadata value
                                      maxLength: 255
                                      type: string
                                  required:
                                  - key
                                  - value
                                  type: object
                                type: array
                                x-kubernetes-list-map-keys:
                                - key
                                x-kubernetes-list-type: map
                              sshKeyName:
                                description: The ssh key to inject in the instance
                                type: string
                              tags:
                                description: |-
                                  Tags which will be added to the machine and all dependent resources
                                  which support them. These are in addition to Tags defined on the
                                  cluster.
                                  Requires Nova api 2.52 minimum!
                                items:
                                  type: string
                                type: array
                                x-kubernetes-list-type: set
                              trunk:
                                description: Whether the server instance is created
                                  on a trunk port or not.
                                type: boolean
                            required:
                            - image
                            type: object
                            x-kubernetes-validations:
                            - message: at least one of flavor or flavorID must be
                                set
                              rule: (has(self.flavor) || has(self.flavorID))
                        type: object
                        x-kubernetes-validations:
                        - message: spec is required if bastion is enabled
                          rule: '!self.enabled || has(self.spec)'
                      controlPlaneAvailabilityZones:
                        description: |-
                          ControlPlaneAvailabilityZones is the set of availability zones which
                          control plane machines may be deployed to.
                        items:
                          type: string
                        type: array
                        x-kubernetes-list-type: set
                      controlPlaneEndpoint:
                        description: |-
                          ControlPlaneEndpoint represents the endpoint used to communicate with the control plane.
                          It is normally populated automatically by the OpenStackCluster
                          controller during cluster provisioning. If it is set on creation the
                          control plane endpoint will use the values set here in preference to
                          values set elsewhere.
                          ControlPlaneEndpoint cannot be modified after ControlPlaneEndpoint.Host has been set.
                        properties:
                          host:
                            description: The hostname on which the API server is serving.
                            type: string
                          port:
                            description: The port on which the API server is serving.
                            format: int32
                            type: integer
                        required:
                        - host
                        - port
                        type: object
                      controlPlaneOmitAvailabilityZone:
                        description: |-
                          ControlPlaneOmitAvailabilityZone causes availability zone to be
                          omitted when creating control plane nodes, allowing the Nova
                          scheduler to make a decision on which availability zone to use based
                          on other scheduling constraints
                        type: boolean
                      disableAPIServerFloatingIP:
                        description: |-
                          DisableAPIServerFloatingIP determines whether or not to attempt to attach a floating
                          IP to the API server. This allows for the creation of clusters when attaching a floating
                          IP to the API server (and hence, in many cases, exposing the API server to the internet)
                          is not possible or desirable, e.g. if using a shared VLAN for communication between
                          management and workload clusters or when the management cluster is inside the
                          project network.
                          This option requires that the API server use a VIP on the cluster network so that the
                          underlying machines can change without changing ControlPlaneEndpoint.Host.
                          When using a managed load balancer, this VIP will be managed automatically.
                          If not using a managed load balancer, cluster configuration will fail without additional
                          configuration to manage the VIP on the control plane machines, which falls outside of
                          the scope of this controller.
                        type: boolean
                      disableExternalNetwork:
                        description: |-
                          DisableExternalNetwork specifies whether or not to attempt to connect the cluster
                          to an external network. This allows for the creation of clusters when connecting
                          to an external network is not possible or desirable, e.g. if using a provider network.
                        type: boolean
                      disablePortSecurity:
                        description: |-
                          DisablePortSecurity disables the port security of the network created for the
                          Kubernetes cluster, which also disables SecurityGroups
                        type: boolean
                      externalNetwork:
                        description: |-
                          ExternalNetwork is the OpenStack Network to be used to get public internet to the VMs.
                          This option is ignored if DisableExternalNetwork is set to true.

                          If ExternalNetwork is defined it must refer to exactly one external network.

                          If ExternalNetwork is not defined or is empty the controller will use any
                          existing external network as long as there is only one. It is an
                          error if ExternalNetwork is not defined and there are multiple
                          external networks unless DisableExternalNetwork is also set.

                          If ExternalNetwork is not defined and there are no external networks
                          the controller will proceed as though DisableExternalNetwork was set.
                        maxProperties: 1
                        minProperties: 1
                        properties:
                          filter:
                            description: Filter specifies a filter to select an OpenStack
                              network. If provided, cannot be empty.
                            minProperties: 1
                            properties:
                              description:
                                type: string
                              name:
                                type: string
                              notTags:
                                description: |-
                                  NotTags is a list of tags to filter by. If specified, resources which
                                  contain all of the given tags will be excluded from the result.
                                items:
                                  description: |-
                                    NeutronTag represents a tag on a Neutron resource.
                                    It may not be empty and may not contain commas.
                                  minLength: 1
                                  pattern: ^[^,]+$
                                  type: string
                                type: array
                                x-kubernetes-list-type: set
                              notTagsAny:
                                description: |-
                                  NotTagsAny is a list of tags to filter by. If specified, resources
                                  which contain any of the given tags will be excluded from the result.
                                items:
                                  description: |-
                                    NeutronTag represents a tag on a Neutron resource.
                                    It may not be empty and may not contain commas.
                                  minLength: 1
                                  pattern: ^[^,]+$
                                  type: string
                                type: array
                                x-kubernetes-list-type: set
                              projectID:
                                type: string
                              tags:
                                description: |-
                                  Tags is a list of tags to filter by. If specified, the resource must
                                  have all of the tags specified to be included in the result.
                                items:
                                  description: |-
                                    NeutronTag represents a tag on a Neutron resource.
                                    It may not be empty and may not contain commas.
                                  minLength: 1
                                  pattern: ^[^,]+$
                                  type: string
                                type: array
                                x-kubernetes-list-type: set
                              tagsAny:
                                description: |-
                                  TagsAny is a list of tags to filter by. If specified, the resource
                                  must have at least one of the tags specified to be included in the
                                  result.
                                items:
                                  description: |-
                                    NeutronTag represents a tag on a Neutron resource.
                                    It may not be empty and may not contain commas.
                                  minLength: 1
                                  pattern: ^[^,]+$
                                  type: string
                                type: array
                                x-kubernetes-list-type: set
                            type: object
                          id:
                            description: ID is the ID of the network to use. If ID
                              is provided, the other filters cannot be provided. Must
                              be in UUID format.
                            format: uuid
                            type: string
                        type: object
                      externalRouterIPs:
                        description: |-
                          ExternalRouterIPs is an array of externalIPs on the respective subnets.
                          This is necessary if the router needs a fixed ip in a specific subnet.
                        items:
                          properties:
                            fixedIP:
                              description: The FixedIP in the corresponding subnet
                              type: string
                            subnet:
                              description: The subnet in which the FixedIP is used
                                for the Gateway of this router
                              maxProperties: 1
                              minProperties: 1
                              properties:
                                filter:
                                  description: Filter specifies a filter to select
                                    the subnet. It must match exactly one subnet.
                                  minProperties: 1
                                  properties:
                                    cidr:
                                      type: string
                                    description:
                                      type: string
                                    gatewayIP:
                                      type: string
                                    ipVersion:
                                      type: integer
                                    ipv6AddressMode:
                                      type: string
                                    ipv6RAMode:
                                      type: string
                                    name:
                                      type: string
                                    notTags:
                                      description: |-
                                        NotTags is a list of tags to filter by. If specified, resources which
                                        contain all of the given tags will be excluded from the result.
                                      items:
                                        description: |-
                                          NeutronTag represents a tag on a Neutron resource.
                                          It may not be empty and may not contain commas.
                                        minLength: 1
                                        pattern: ^[^,]+$
                                        type: string
                                      type: array
                                      x-kubernetes-list-type: set
                                    notTagsAny:
                                      description: |-
                                        NotTagsAny is a list of tags to filter by. If specified, resources
                                        which contain any of the given tags will be excluded from the result.
                                      items:
                                        description: |-
                                          NeutronTag represents a tag on a Neutron resource.
                                          It may not be empty and may not contain commas.
                                        minLength: 1
                                        pattern: ^[^,]+$
                                        type: string
                                      type: array
                                      x-kubernetes-list-type: set
                                    projectID:
                                      type: string
                                    tags:
                                      description: |-
                                        Tags is a list of tags to filter by. If specified, the resource must
                                        have all of the tags specified to be included in the result.
                                      items:
                                        description: |-
                                          NeutronTag represents a tag on a Neutron resource.
                                          It may not be empty and may not contain commas.
                                        minLength: 1
                                        pattern: ^[^,]+$
                                        type: string
                                      type: array
                                      x-kubernetes-list-type: set
                                    tagsAny:
                                      description: |-
                                        TagsAny is a list of tags to filter by. If specified, the resource
                                        must have at least one of the tags specified to be included in the
                                        result.
                                      items:
                                        description: |-
                                          NeutronTag represents a tag on a Neutron resource.
                                          It may not be empty and may not contain commas.
                                        minLength: 1
                                        pattern: ^[^,]+$
                                        type: string
                                      type: array
                                      x-kubernetes-list-type: set
                                  type: object
                                id:
                                  description: ID is the uuid of the subnet. It will
                                    not be validated.
                                  format: uuid
                                  type: string
                              type: object
                          required:
                          - subnet
                          type: object
                        type: array
                        x-kubernetes-list-type: atomic
                      identityRef:
                        description: |-
                          IdentityRef is a reference to a secret holding OpenStack credentials
                          to be used when reconciling this cluster. It is also to reconcile
                          machines unless overridden in the machine spec.
                        properties:
                          cloudName:
                            description: CloudName specifies the name of the entry
                              in the clouds.yaml file to use.
                            type: string
                          name:
                            description: |-
                              Name is the name of a secret in the same namespace as the resource being provisioned.
                              The secret must contain a key named `clouds.yaml` which contains an OpenStack clouds.yaml file.
                              The secret may optionally contain a key named `cacert` containing a PEM-encoded CA certificate.
                            type: string
                          region:
                            description: |-
                              Region specifies an OpenStack region to use. If specified, it overrides
                              any value in clouds.yaml. If specified for an OpenStackMachine, its
                              value will be included in providerID.
                            type: string
                        required:
                        - cloudName
                        - name
                        type: object
                        x-kubernetes-validations:
                        - message: region is immutable
                          rule: (!has(self.region) && !has(oldSelf.region)) || self.region
                            == oldSelf.region
                      managedSecurityGroups:
                        description: |-
                          ManagedSecurityGroups determines whether OpenStack security groups for the cluster
                          will be managed by the OpenStack provider or whether pre-existing security groups will
                          be specified as part of the configuration.
                          By default, the managed security groups have rules that allow the Kubelet, etcd, and the
                          Kubernetes API server to function correctly.
                          It's possible to add additional rules to the managed security groups.
                          When defined to an empty struct, the managed security groups will be created with the default rules.
                        properties:
                          allNodesSecurityGroupRules:
                            description: allNodesSecurityGroupRules defines the rules
                              that should be applied to all nodes.
                            items:
                              description: |-
                                SecurityGroupRuleSpec represent the basic information of the associated OpenStack
                                Security Group Role.
                                For now this is only used for the allNodesSecurityGroupRules but when we add
                                other security groups, we'll need to add a validation because
                                Remote* fields are mutually exclusive.
                              properties:
                                description:
                                  description: description of the security group rule.
                                  type: string
                                direction:
                                  description: |-
                                    direction in which the security group rule is applied. The only values
                                    allowed are "ingress" or "egress". For a compute instance, an ingress
                                    security group rule is applied to incoming (ingress) traffic for that
                                    instance. An egress rule is applied to traffic leaving the instance.
                                  type: string
                                etherType:
                                  description: |-
                                    etherType must be IPv4 or IPv6, and addresses represented in CIDR must match the
                                    ingress or egress rules.
                                  type: string
                                name:
                                  description: |-
                                    name of the security group rule.
                                    It's used to identify the rule so it can be patched and will not be sent to the OpenStack API.
                                  type: string
                                portRangeMax:
                                  description: |-
                                    portRangeMax is a number in the range that is matched by the security group
                                    rule. The portRangeMin attribute constrains the portRangeMax attribute.
                                  type: integer
                                portRangeMin:
                                  description: |-
                                    portRangeMin is a number in the range that is matched by the security group
                                    rule. If the protocol is TCP or UDP, this value must be less than or equal
                                    to the value of the portRangeMax attribute.
                                  type: integer
                                protocol:
                                  description: protocol is the protocol that is matched
                                    by the security group rule.
                                  type: string
                                remoteGroupID:
                                  description: |-
                                    remoteGroupID is the remote group ID to be associated with this security group rule.
                                    You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
                                  type: string
                                remoteIPPrefix:
                                  description: |-
                                    remoteIPPrefix is the remote IP prefix to be associated with this security group rule.
                                    You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
                                  type: string
                                remoteManagedGroups:
                                  description: |-
                                    remoteManagedGroups is the remote managed groups to be associated with this security group rule.
                                    You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
                                  items:
                                    enum:
                                    - bastion
                                    - controlplane
                                    - worker
                                    type: string
                                  type: array
                              required:
                              - direction
                              - name
                              type: object
                            type: array
                            x-kubernetes-list-map-keys:
                            - name
                            x-kubernetes-list-type: map
                          allowAllInClusterTraffic:
                            default: false
                            description: AllowAllInClusterTraffic allows all ingress
                              and egress traffic between cluster nodes when set to
                              true.
                            type: boolean
                          controlPlaneNodesSecurityGroupRules:
                            description: controlPlaneNodesSecurityGroupRules defines
                              the rules that should be applied to control plane nodes.
                            items:
                              description: |-
                                SecurityGroupRuleSpec represent the basic information of the associated OpenStack
                                Security Group Role.
                                For now this is only used for the allNodesSecurityGroupRules but when we add
                                other security groups, we'll need to add a validation because
                                Remote* fields are mutually exclusive.
                              properties:
                                description:
                                  description: description of the security group rule.
                                  type: string
                                direction:
                                  description: |-
                                    direction in which the security group rule is applied. The only values
                                    allowed are "ingress" or "egress". For a compute instance, an ingress
                                    security group rule is applied to incoming (ingress) traffic for that
                                    instance. An egress rule is applied to traffic leaving the instance.
                                  type: string
                                etherType:
                                  description: |-
                                    etherType must be IPv4 or IPv6, and addresses represented in CIDR must match the
                                    ingress or egress rules.
                                  type: string
                                name:
                                  description: |-
                                    name of the security group rule.
                                    It's used to identify the rule so it can be patched and will not be sent to the OpenStack API.
                                  type: string
                                portRangeMax:
                                  description: |-
                                    portRangeMax is a number in the range that is matched by the security group
                                    rule. The portRangeMin attribute constrains the portRangeMax attribute.
                                  type: integer
                                portRangeMin:
                                  description: |-
                                    portRangeMin is a number in the range that is matched by the security group
                                    rule. If the protocol is TCP or UDP, this value must be less than or equal
                                    to the value of the portRangeMax attribute.
                                  type: integer
                                protocol:
                                  description: protocol is the protocol that is matched
                                    by the security group rule.
                                  type: string
                                remoteGroupID:
                                  description: |-
                                    remoteGroupID is the remote group ID to be associated with this security group rule.
                                    You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
                                  type: string
                                remoteIPPrefix:
                                  description: |-
                                    remoteIPPrefix is the remote IP prefix to be associated with this security group rule.
                                    You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
                                  type: string
                                remoteManagedGroups:
                                  description: |-
                                    remoteManagedGroups is the remote managed groups to be associated with this security group rule.
                                    You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
                                  items:
                                    enum:
                                    - bastion
                                    - controlplane
                                    - worker
                                    type: string
                                  type: array
                              required:
                              - direction
                              - name
                              type: object
                            type: array
                            x-kubernetes-list-map-keys:
                            - name
                            x-kubernetes-list-type: map
                          workerNodesSecurityGroupRules:
                            description: workerNodesSecurityGroupRules defines the
                              rules that should be applied to worker nodes.
                            items:
                              description: |-
                                SecurityGroupRuleSpec represent the basic information of the associated OpenStack
                                Security Group Role.
                                For now this is only used for the allNodesSecurityGroupRules but when we add
                                other security groups, we'll need to add a validation because
                                Remote* fields are mutually exclusive.
                              properties:
                                description:
                                  description: description of the security group rule.
                                  type: string
                                direction:
                                  description: |-
                                    direction in which the security group rule is applied. The only values
                                    allowed are "ingress" or "egress". For a compute instance, an ingress
                                    security group rule is applied to incoming (ingress) traffic for that
                                    instance. An egress rule is applied to traffic leaving the instance.
                                  type: string
                                etherType:
                                  description: |-
                                    etherType must be IPv4 or IPv6, and addresses represented in CIDR must match the
                                    ingress or egress rules.
                                  type: string
                                name:
                                  description: |-
                                    name of the security group rule.
                                    It's used to identify the rule so it can be patched and will not be sent to the OpenStack API.
                                  type: string
                                portRangeMax:
                                  description: |-
                                    portRangeMax is a number in the range that is matched by the security group
                                    rule. The portRangeMin attribute constrains the portRangeMax attribute.
                                  type: integer
                                portRangeMin:
                                  description: |-
                                    portRangeMin is a number in the range that is matched by the security group
                                    rule. If the protocol is TCP or UDP, this value must be less than or equal
                                    to the value of the portRangeMax attribute.
                                  type: integer
                                protocol:
                                  description: protocol is the protocol that is matched
                                    by the security group rule.
                                  type: string
                                remoteGroupID:
                                  description: |-
                                    remoteGroupID is the remote group ID to be associated with this security group rule.
                                    You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
                                  type: string
                                remoteIPPrefix:
                                  description: |-
                                    remoteIPPrefix is the remote IP prefix to be associated with this security group rule.
                                    You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
                                  type: string
                                remoteManagedGroups:
                                  description: |-
                                    remoteManagedGroups is the remote managed groups to be associated with this security group rule.
                                    You can specify either remoteGroupID or remoteIPPrefix or remoteManagedGroups.
                                  items:
                                    enum:
                                    - bastion
                                    - controlplane
                                    - worker
                                    type: string
                                  type: array
                              required:
                              - direction
                              - name
                              type: object
                            type: array
                            x-kubernetes-list-map-keys:
                            - name
                            x-kubernetes-list-type: map
                        required:
                        - allowAllInClusterTraffic
                        type: object
                      managedSubnets:
                        description: |-
                          ManagedSubnets describe OpenStack Subnets to be created. Cluster actuator will create a network,
                          subnets with the defined CIDR, and a router connected to these subnets. Currently only one IPv4
                          subnet is supported. If you leave this empty, no network will be created.
                        items:
                          properties:
                            allocationPools:
                              description: |-
                                AllocationPools is an array of AllocationPool objects that will be applied to OpenStack Subnet being created.
                                If set, OpenStack will only allocate these IPs for Machines. It will still be possible to create ports from
                                outside of these ranges manually.
                              items:
                                properties:
                                  end:
                                    description: End represents the end of the AlloctionPool,
                                      that is the highest IP of the pool.
                                    type: string
                                  start:
                                    description: Start represents the start of the
                                      AllocationPool, that is the lowest IP of the
                                      pool.
                                    type: string
                                required:
                                - end
                                - start
                                type: object
                              type: array
                            cidr:
                              description: |-
                                CIDR is representing the IP address range used to create the subnet, e.g. 10.0.0.0/24.
                                This field is required when defining a subnet.
                              type: string
                            dnsNameservers:
                              description: |-
                                DNSNameservers holds a list of DNS server addresses that will be provided when creating
                                the subnet. These addresses need to have the same IP version as CIDR.
                              items:
                                type: string
                              type: array
                          required:
                          - cidr
                          type: object
                        maxItems: 1
                        type: array
                        x-kubernetes-list-type: atomic
                      network:
                        description: |-
                          Network specifies an existing network to use if no ManagedSubnets
                          are specified.
                        maxProperties: 1
                        minProperties: 1
                        properties:
                          filter:
                            description: Filter specifies a filter to select an OpenStack
                              network. If provided, cannot be empty.
                            minProperties: 1
                            properties:
                              description:
                                type: string
                              name:
                                type: string
                              notTags:
                                description: |-
                                  NotTags is a list of tags to filter by. If specified, resources which
                                  contain all of the given tags will be excluded from the result.
                                items:
                                  description: |-
                                    NeutronTag represents a tag on a Neutron resource.
                                    It may not be empty and may not contain commas.
                                  minLength: 1
                                  pattern: ^[^,]+$
                                  type: string
                                type: array
                                x-kubernetes-list-type: set
                              notTagsAny:
                                description: |-
                                  NotTagsAny is a list of tags to filter by. If specified, resources
                                  which contain any of the given tags will be excluded from the result.
                                items:
                                  description: |-
                                    NeutronTag represents a tag on a Neutron resource.
                                    It may not be empty and may not contain commas.
                                  minLength: 1
                                  pattern: ^[^,]+$
                                  type: string
                                type: array
                                x-kubernetes-list-type: set
                              projectID:
                                type: string
                              tags:
                                description: |-
                                  Tags is a list of tags to filter by. If specified, the resource must
                                  have all of the tags specified to be included in the result.
                                items:
                                  description: |-
                                    NeutronTag represents a tag on a Neutron resource.
                                    It may not be empty and may not contain commas.
                                  minLength: 1
                                  pattern: ^[^,]+$
                                  type: string
                                type: array
                                x-kubernetes-list-type: set
                              tagsAny:
                                description: |-
                                  TagsAny is a list of tags to filter by. If specified, the resource
                                  must have at least one of the tags specified to be included in the
                                  result.
                                items:
                                  description: |-
                                    NeutronTag represents a tag on a Neutron resource.
                                    It may not be empty and may not contain commas.
                                  minLength: 1
                                  pattern: ^[^,]+$
                                  type: string
                                type: array
                                x-kubernetes-list-type: set
                            type: object
                          id:
                            description: ID is the ID of the network to use. If ID
                              is provided, the other filters cannot be provided. Must
                              be in UUID format.
                            format: uuid
                            type: string
                        type: object
                      networkMTU:
                        description: |-
                          NetworkMTU sets the maximum transmission unit (MTU) value to address fragmentation for the private network ID.
                          This value will be used only if the Cluster actuator creates the network.
                          If left empty, the network will have the default MTU defined in Openstack network service.
                          To use this field, the Openstack installation requires the net-mtu neutron API extension.
                        type: integer
                      router:
                        description: |-
                          Router specifies an existing router to be used if ManagedSubnets are
                          specified. If specified, no new router will be created.
                        maxProperties: 1
                        minProperties: 1
                        properties:
                          filter:
                            description: Filter specifies a filter to select an OpenStack
                              router. If provided, cannot be empty.
                            minProperties: 1
                            properties:
                              description:
                                type: string
                              name:
                                type: string
                              notTags:
                                description: |-
                                  NotTags is a list of tags to filter by. If specified, resources which
                                  contain all of the given tags will be excluded from the result.
                                items:
                                  description: |-
                                    NeutronTag represents a tag on a Neutron resource.
                                    It may not be empty and may not contain commas.
                                  minLength: 1
                                  pattern: ^[^,]+$
                                  type: string
                                type: array
                                x-kubernetes-list-type: set
                              notTagsAny:
                                description: |-
                                  NotTagsAny is a list of tags to filter by. If specified, resources
                                  which contain any of the given tags will be excluded from the result.
                                items:
                                  description: |-
                                    NeutronTag represents a tag on a Neutron resource.
                                    It may not be empty and may not contain commas.
                                  minLength: 1
                                  pattern: ^[^,]+$
                                  type: string
                                type: array
                                x-kubernetes-list-type: set
                              projectID:
                                type: string
                              tags:
                                description: |-
                                  Tags is a list of tags to filter by. If specified, the resource must
                                  have all of the tags specified to be included in the result.
                                items:
                                  description: |-
                                    NeutronTag represents a tag on a Neutron resource.
                                    It may not be empty and may not contain commas.
                                  minLength: 1
                                  pattern: ^[^,]+$
                                  type: string
                                type: array
                                x-kubernetes-list-type: set
                              tagsAny:
                                description: |-
                                  TagsAny is a list of tags to filter by. If specified, the resource
                                  must have at least one of the tags specified to be included in the
                                  result.
                                items:
                                  description: |-
                                    NeutronTag represents a tag on a Neutron resource.
                                    It may not be empty and may not contain commas.
                                  minLength: 1
                                  pattern: ^[^,]+$
                                  type: string
                                type: array
                                x-kubernetes-list-type: set
                            type: object
                          id:
                            description: ID is the ID of the router to use. If ID
                              is provided, the other filters cannot be provided. Must
                              be in UUID format.
                            format: uuid
                            type: string
                        type: object
                      subnets:
                        description: |-
                          Subnets specifies existing subnets to use if not ManagedSubnets are
                          specified. All subnets must be in the network specified by Network.
                          There can be zero, one, or two subnets. If no subnets are specified,
                          all subnets in Network will be used. If 2 subnets are specified, one
                          must be IPv4 and the other IPv6.
                        items:
                          description: SubnetParam specifies an OpenStack subnet to
                            use. It may be specified by either ID or filter, but not
                            both.
                          maxProperties: 1
                          minProperties: 1
                          properties:
                            filter:
                              description: Filter specifies a filter to select the
                                subnet. It must match exactly one subnet.
                              minProperties: 1
                              properties:
                                cidr:
                                  type: string
                                description:
                                  type: string
                                gatewayIP:
                                  type: string
                                ipVersion:
                                  type: integer
                                ipv6AddressMode:
                                  type: string
                                ipv6RAMode:
                                  type: string
                                name:
                                  type: string
                                notTags:
                                  description: |-
                                    NotTags is a list of tags to filter by. If specified, resources which
                                    contain all of the given tags will be excluded from the result.
                                  items:
                                    description: |-
                                      NeutronTag represents a tag on a Neutron resource.
                                      It may not be empty and may not contain commas.
                                    minLength: 1
                                    pattern: ^[^,]+$
                                    type: string
                                  type: array
                                  x-kubernetes-list-type: set
                                notTagsAny:
                                  description: |-
                                    NotTagsAny is a list of tags to filter by. If specified, resources
                                    which contain any of the given tags will be excluded from the result.
                                  items:
                                    description: |-
                                      NeutronTag represents a tag on a Neutron resource.
                                      It may not be empty and may not contain commas.
                                    minLength: 1
                                    pattern: ^[^,]+$
                                    type: string
                                  type: array
                                  x-kubernetes-list-type: set
                                projectID:
                                  type: string
                                tags:
                                  description: |-
                                    Tags is a list of tags to filter by. If specified, the resource must
                                    have all of the tags specified to be included in the result.
                                  items:
                                    description: |-
                                      NeutronTag represents a tag on a Neutron resource.
                                      It may not be empty and may not contain commas.
                                    minLength: 1
                                    pattern: ^[^,]+$
                                    type: string
                                  type: array
                                  x-kubernetes-list-type: set
                                tagsAny:
                                  description: |-
                                    TagsAny is a list of tags to filter by. If specified, the resource
                                    must have at least one of the tags specified to be included in the
                                    result.
                                  items:
                                    description: |-
                                      NeutronTag represents a tag on a Neutron resource.
                                      It may not be empty and may not contain commas.
                                    minLength: 1
                                    pattern: ^[^,]+$
                                    type: string
                                  type: array
                                  x-kubernetes-list-type: set
                              type: object
                            id:
                              description: ID is the uuid of the subnet. It will not
                                be validated.
                              format: uuid
                              type: string
                          type: object
                        maxItems: 2
                        type: array
                        x-kubernetes-list-type: atomic
                      tags:
                        description: Tags to set on all resources in cluster which
                          support tags
                        items:
                          type: string
                        type: array
                        x-kubernetes-list-type: set
                    required:
                    - identityRef
                    type: object
                    x-kubernetes-validations:
                    - message: bastion floating IP cannot be set when disableExternalNetwork
                        is true
                      rule: 'has(self.disableExternalNetwork) && self.disableExternalNetwork
                        ? !has(self.bastion) || !has(self.bastion.floatingIP) : true'
                    - message: disableAPIServerFloatingIP cannot be false when disableExternalNetwork
                        is true
                      rule: 'has(self.disableExternalNetwork) && self.disableExternalNetwork
                        ? has(self.disableAPIServerFloatingIP) && self.disableAPIServerFloatingIP
                        : true'
                required:
                - spec
                type: object
            required:
            - template
            type: object
        type: object
    served: true
    storage: true
status:
  acceptedNames:
    kind: ""
    plural: ""
  conditions: null
  storedVersions: null
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    cert-manager.io/inject-ca-from: capo-system/capo-serving-cert
    controller-gen.kubebuilder.io/version: v0.16.5
  creationTimestamp: null
  labels:
    cluster.x-k8s.io/provider: infrastructure-openstack
    cluster.x-k8s.io/v1beta1: v1alpha7_v1beta1
    clusterctl.cluster.x-k8s.io: ""
  name: openstackfloatingippools.infrastructure.cluster.x-k8s.io
spec:
  group: infrastructure.cluster.x-k8s.io
  names:
    kind: OpenStackFloatingIPPool
    listKind: OpenStackFloatingIPPoolList
    plural: openstackfloatingippools
    singular: openstackfloatingippool
  scope: Namespaced
  versions:
  - name: v1alpha1
    schema:
      openAPIV3Schema:
        description: OpenStackFloatingIPPool is the Schema for the openstackfloatingippools
          API.
        properties:
          apiVersion:
            description: |-
              APIVersion defines the versioned schema of this representation of an object.
              Servers should convert recognized schemas to the latest internal value, and
              may reject unrecognized values.
              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
            type: string
          kind:
            description: |-
              Kind is a string value representing the REST resource this object represents.
              Servers may infer this from the endpoint the client submits requests to.
              Cannot be updated.
              In CamelCase.
              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
            type: string
          metadata:
            type: object
          spec:
            description: OpenStackFloatingIPPoolSpec defines the desired state of
              OpenStackFloatingIPPool.
            properties:
              floatingIPNetwork:
                description: FloatingIPNetwork is the external network to use for
                  floating ips, if there's only one external network it will be used
                  by default
                maxProperties: 1
                minProperties: 1
                properties:
                  filter:
                    description: Filter specifies a filter to select an OpenStack
                      network. If provided, cannot be empty.
                    minProperties: 1
                    properties:
                      description:
                        type: string
                      name:
                        type: string
                      notTags:
                        description: |-
                          NotTags is a list of tags to filter by. If specified, resources which
                          contain all of the given tags will be excluded from the result.
                        items:
                          description: |-
                            NeutronTag represents a tag on a Neutron resource.
                            It may not be empty and may not contain commas.
                          minLength: 1
                          pattern: ^[^,]+$
                          type: string
                        type: array
                        x-kubernetes-list-type: set
                      notTagsAny:
                        description: |-
                          NotTagsAny is a list of tags to filter by. If specified, resources
                          which contain any of the given tags will be excluded from the result.
                        items:
                          description: |-
                            NeutronTag represents a tag on a Neutron resource.
                            It may not be empty and may not contain commas.
                          minLength: 1
                          pattern: ^[^,]+$
                          type: string
                        type: array
                        x-kubernetes-list-type: set
                      projectID:
                        type: string
                      tags:
                        description: |-
                          Tags is a list of tags to filter by. If specified, the resource must
                          have all of the tags specified to be included in the result.
                        items:
                          description: |-
                            NeutronTag represents a tag on a Neutron resource.
                            It may not be empty and may not contain commas.
                          minLength: 1
                          pattern: ^[^,]+$
                          type: string
                        type: array
                        x-kubernetes-list-type: set
                      tagsAny:
                        description: |-
                          TagsAny is a list of tags to filter by. If specified, the resource
                          must have at least one of the tags specified to be included in the
                          result.
                        items:
                          description: |-
                            NeutronTag represents a tag on a Neutron resource.
                            It may not be empty and may not contain commas.
                          minLength: 1
                          pattern: ^[^,]+$
                          type: string
                        type: array
                        x-kubernetes-list-type: set
                    type: object
                  id:
                    description: ID is the ID of the network to use. If ID is provided,
                      the other filters cannot be provided. Must be in UUID format.
                    format: uuid
                    type: string
                type: object
              identityRef:
                description: IdentityRef is a reference to a identity to be used when
                  reconciling this pool.
                properties:
                  cloudName:
                    description: CloudName specifies the name of the entry in the
                      clouds.yaml file to use.
                    type: string
                  name:
                    description: |-
                      Name is the name of a secret in the same namespace as the resource being provisioned.
                      The secret must contain a key named `clouds.yaml` which contains an OpenStack clouds.yaml file.
                      The secret may optionally contain a key named `cacert` containing a PEM-encoded CA certificate.
                    type: string
                  region:
                    description: |-
                      Region specifies an OpenStack region to use. If specified, it overrides
                      any value in clouds.yaml. If specified for an OpenStackMachine, its
                      value will be included in providerID.
                    type: string
                required:
                - cloudName
                - name
                type: object
                x-kubernetes-validations:
                - message: region is immutable
                  rule: (!has(self.region) && !has(oldSelf.region)) || self.region
                    == oldSelf.region
              maxIPs:
                description: |-
                  MaxIPs is the maximum number of floating ips that can be allocated from this pool, if nil there is no limit.
                  If set, the pool will stop allocating floating ips when it reaches this number of ClaimedIPs.
                type: integer
              preAllocatedFloatingIPs:
                description: |-
                  PreAllocatedFloatingIPs is a list of floating IPs precreated in OpenStack that should be used by this pool.
                  These are used before allocating new ones and are not deleted from OpenStack when the pool is deleted.
                items:
                  type: string
                type: array
              reclaimPolicy:
                description: The stratergy to use for reclaiming floating ips when
                  they are released from a machine
                enum:
                - Retain
                - Delete
                type: string
            required:
            - identityRef
            - reclaimPolicy
            type: object
          status:
            description: OpenStackFloatingIPPoolStatus defines the observed state
              of OpenStackFloatingIPPool.
            properties:
              availableIPs:
                default: []
                items:
                  type: string
                type: array
              claimedIPs:
                default: []
                items:
                  type: string
                type: array
              conditions:
                description: Conditions provide observations of the operational state
                  of a Cluster API resource.
                items:
                  description: Condition defines an observation of a Cluster API resource
                    operational state.
                  properties:
                    lastTransitionTime:
                      description: |-
                        Last time the condition transitioned from one status to another.
                        This should be when the underlying condition changed. If that is not known, then using the time when
                        the API field changed is acceptable.
                      format: date-time
                      type: string
                    message:
                      description: |-
                        A human readable message indicating details about the transition.
                        This field may be empty.
                      type: string
                    reason:
                      description: |-
                        The reason for the condition's last transition in CamelCase.
                        The specific API may choose whether or not this field is considered a guaranteed API.
                        This field may be empty.
                      type: string
                    severity:
                      description: |-
                        severity provides an explicit classification of Reason code, so the users or machines can immediately
                        understand the current situation and act accordingly.
                        The Severity field MUST be set only when Status=False.
                      type: string
                    status:
                      description: status of the condition, one of True, False, Unknown.
                      type: string
                    type:
                      description: |-
                        type of condition in CamelCase or in foo.example.com/CamelCase.
                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
                        can be useful (see .node.status.conditions), the ability to deconflict is important.
                      type: string
                  required:
                  - lastTransitionTime
                  - status
                  - type
                  type: object
                type: array
              failedIPs:
                description: FailedIPs contains a list of floating ips that failed
                  to be allocated
                items:
                  type: string
                type: array
              floatingIPNetwork:
                description: floatingIPNetwork contains information about the network
                  used for floating ips
                properties:
                  id:
                    type: string
                  name:
                    type: string
                  tags:
                    items:
                      type: string
                    type: array
                required:
                - id
                - name
                type: object
            type: object
        type: object
    served: true
    storage: true
    subresources:
      status: {}
status:
  acceptedNames:
    kind: ""
    plural: ""
  conditions: null
  storedVersions: null
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    cert-manager.io/inject-ca-from: capo-system/capo-serving-cert
    controller-gen.kubebuilder.io/version: v0.16.5
  creationTimestamp: null
  labels:
    cluster.x-k8s.io/provider: infrastructure-openstack
    cluster.x-k8s.io/v1beta1: v1alpha7_v1beta1
    clusterctl.cluster.x-k8s.io: ""
  name: openstackmachines.infrastructure.cluster.x-k8s.io
spec:
  conversion:
    strategy: Webhook
    webhook:
      clientConfig:
        service:
          name: capo-webhook-service
          namespace: capo-system
          path: /convert
      conversionReviewVersions:
      - v1
      - v1beta1
  group: infrastructure.cluster.x-k8s.io
  names:
    categories:
    - cluster-api
    kind: OpenStackMachine
    listKind: OpenStackMachineList
    plural: openstackmachines
    shortNames:
    - osm
    singular: openstackmachine
  scope: Namespaced
  versions:
  - additionalPrinterColumns:
    - description: Cluster to which this OpenStackMachine belongs
      jsonPath: .metadata.labels.cluster\.x-k8s\.io/cluster-name
      name: Cluster
      type: string
    - description: OpenStack instance state
      jsonPath: .status.instanceState
      name: InstanceState
      type: string
    - description: Machine ready status
      jsonPath: .status.ready
      name: Ready
      type: string
    - description: OpenStack instance ID
      jsonPath: .spec.providerID
      name: ProviderID
      type: string
    - description: Machine object which owns with this OpenStackMachine
      jsonPath: .metadata.ownerReferences[?(@.kind=="Machine")].name
      name: Machine
      type: string
    - description: Time duration since creation of OpenStackMachine
      jsonPath: .metadata.creationTimestamp
      name: Age
      type: date
    deprecated: true
    deprecationWarning: The v1alpha7 version of OpenStackMachine has been deprecated
      and will be removed in a future release.
    name: v1alpha7
    schema:
      openAPIV3Schema:
        description: |-
          OpenStackMachine is the Schema for the openstackmachines API.

          Deprecated: v1alpha7.OpenStackMachine has been replaced by v1beta1.OpenStackMachine.
        properties:
          apiVersion:
            description: |-
              APIVersion defines the versioned schema of this representation of an object.
              Servers should convert recognized schemas to the latest internal value, and
              may reject unrecognized values.
              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
            type: string
          kind:
            description: |-
              Kind is a string value representing the REST resource this object represents.
              Servers may infer this from the endpoint the client submits requests to.
              Cannot be updated.
              In CamelCase.
              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
            type: string
          metadata:
            type: object
          spec:
            description: OpenStackMachineSpec defines the desired state of OpenStackMachine.
            properties:
              additionalBlockDevices:
                description: AdditionalBlockDevices is a list of specifications for
                  additional block devices to attach to the server instance
                items:
                  description: AdditionalBlockDevice is a block device to attach to
                    the server.
                  properties:
                    name:
                      description: |-
                        Name of the block device in the context of a machine.
                        If the block device is a volume, the Cinder volume will be named
                        as a combination of the machine name and this name.
                        Also, this name will be used for tagging the block device.
                        Information about the block device tag can be obtained from the OpenStack
                        metadata API or the config drive.
                      type: string
                    sizeGiB:
                      description: SizeGiB is the size of the block device in gibibytes
                        (GiB).
                      type: integer
                    storage:
                      description: |-
                        Storage specifies the storage type of the block device and
                        additional storage options.
                      properties:
                        type:
                          description: |-
                            Type is the type of block device to create.
                            This can be either "Volume" or "Local".
                          type: string
                        volume:
                          description: Volume contains additional storage options
                            for a volume block device.
                          properties:
                            availabilityZone:
                              description: |-
                                AvailabilityZone is the volume availability zone to create the volume in.
                                If omitted, the availability zone of the server will be used.
                                The availability zone must NOT contain spaces otherwise it will lead to volume that belongs
                                to this availability zone register failure, see kubernetes/cloud-provider-openstack#1379 for
                                further information.
                              type: string
                            type:
                              description: |-
                                Type is the Cinder volume type of the volume.
                                If omitted, the default Cinder volume type that is configured in the OpenStack cloud
                                will be used.
                              type: string
                          type: object
                      required:
                      - type
                      type: object
                  required:
                  - name
                  - sizeGiB
                  - storage
                  type: object
                type: array
                x-kubernetes-list-map-keys:
                - name
                x-kubernetes-list-type: map
              cloudName:
                description: The name of the cloud to use from the clouds secret
                type: string
              configDrive:
                description: Config Drive support
                type: boolean
              flavor:
                description: The flavor reference for the flavor for your server instance.
                minLength: 1
                type: string
              flavorID:
                description: |-
                  FlavorID allows flavors to be specified by ID.  This field takes precedence
                  over Flavor.
                minLength: 1
                type: string
              floatingIP:
                description: |-
                  The floatingIP which will be associated to the machine, only used for master.
                  The floatingIP should have been created and haven't been associated.
                type: string
              identityRef:
                description: |-
                  IdentityRef is a reference to a identity to be used when reconciling this cluster.
                  If not specified, the identity ref of the cluster will be used instead.
                properties:
                  kind:
                    description: |-
                      Kind of the identity. Must be supported by the infrastructure
                      provider and may be either cluster or namespace-scoped.
                    minLength: 1
                    type: string
                  name:
                    description: |-
                      Name of the infrastructure identity to be used.
                      Must be either a cluster-scoped resource, or namespaced-scoped
                      resource the same namespace as the resource(s) being provisioned.
                    type: string
                required:
                - kind
                - name
                type: object
              image:
                description: |-
                  The name of the image to use for your server instance.
                  If the RootVolume is specified, this will be ignored and use rootVolume directly.
                type: string
              imageUUID:
                description: |-
                  The uuid of the image to use for your server instance.
                  if it's empty, Image name will be used
                type: string
              instanceID:
                description: InstanceID is the OpenStack instance ID for this machine.
                type: string
              ports:
                description: |-
                  Ports to be attached to the server instance. They are created if a port with the given name does not already exist.
                  If not specified a default port will be added for the default cluster network.
                items:
                  properties:
                    adminStateUp:
                      type: boolean
                    allowedAddressPairs:
                      items:
                        properties:
                          ipAddress:
                            type: string
                          macAddress:
                            type: string
                        type: object
                      type: array
                    description:
                      type: string
                    disablePortSecurity:
                      description: |-
                        DisablePortSecurity enables or disables the port security when set.
                        When not set, it takes the value of the corresponding field at the network level.
                      type: boolean
                    fixedIPs:
                      description: Specify pairs of subnet and/or IP address. These
                        should be subnets of the network with the given NetworkID.
                      items:
                        properties:
                          ipAddress:
                            type: string
                          subnet:
                            description: |-
                              Subnet is an openstack subnet query that will return the id of a subnet to create
                              the fixed IP of a port in. This query must not return more than one subnet.
                            properties:
                              cidr:
                                type: string
                              description:
                                type: string
                              gateway_ip:
                                type: string
                              id:
                                type: string
                              ipVersion:
                                type: integer
                              ipv6AddressMode:
                                type: string
                              ipv6RaMode:
                                type: string
                              name:
                                type: string
                              notTags:
                                type: string
                              notTagsAny:
                                type: string
                              projectId:
                                type: string
                              tags:
                                type: string
                              tagsAny:
                                type: string
                            type: object
                        required:
                        - subnet
                        type: object
                      type: array
                    hostId:
                      description: The ID of the host where the port is allocated
                      type: string
                    macAddress:
                      type: string
                    nameSuffix:
                      description: Used to make the name of the port unique. If unspecified,
                        instead the 0-based index of the port in the list is used.
                      type: string
                    network:
                      description: |-
                        Network is a query for an openstack network that the port will be created or discovered on.
                        This will fail if the query returns more than one network.
                      properties:
                        description:
                          type: string
                        id:
                          type: string
                        name:
                          type: string
                        notTags:
                          type: string
                        notTagsAny:
                          type: string
                        projectId:
                          type: string
                        tags:
                          type: string
                        tagsAny:
                          type: string
                      type: object
                    profile:
                      description: |-
                        Profile is a set of key-value pairs that are used for binding details.
                        We intentionally don't expose this as a map[string]string because we only want to enable
                        the users to set the values of the keys that are known to work in OpenStack Networking API.
                        See https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
                      properties:
                        ovsHWOffload:
                          description: OVSHWOffload enables or disables the OVS hardware
                            offload feature.
                          type: boolean
                        trustedVF:
                          description: TrustedVF enables or disables the “trusted
                            mode” for the VF.
                          type: boolean
                      type: object
                    propagateUplinkStatus:
                      description: PropageteUplinkStatus enables or disables the propagate
                        uplink status on the port.
                      type: boolean
                    securityGroupFilters:
                      description: The names, uuids, filters or any combination these
                        of the security groups to assign to the instance
                      items:
                        properties:
                          description:
                            type: string
                          id:
                            type: string
                          name:
                            type: string
                          notTags:
                            type: string
                          notTagsAny:
                            type: string
                          projectId:
                            type: string
                          tags:
                            type: string
                          tagsAny:
                            type: string
                        type: object
                      type: array
                    tags:
                      description: |-
                        Tags applied to the port (and corresponding trunk, if a trunk is configured.)
                        These tags are applied in addition to the instance's tags, which will also be applied to the port.
                      items:
                        type: string
                      type: array
                      x-kubernetes-list-type: set
                    trunk:
                      description: Enables and disables trunk at port level. If not
                        provided, openStackMachine.Spec.Trunk is inherited.
                      type: boolean
                    valueSpecs:
                      description: |-
                        Value specs are extra parameters to include in the API request with OpenStack.
                        This is an extension point for the API, so what they do and if they are supported,
                        depends on the specific OpenStack implementation.
                      items:
                        description: ValueSpec represents a single value_spec key-value
                          pair.
                        properties:
                          key:
                            description: Key is the key in the key-value pair.
                            type: string
                          name:
                            description: |-
                              Name is the name of the key-value pair.
                              This is just for identifying the pair and will not be sent to the OpenStack API.
                            type: string
                          value:
                            description: Value is the value in the key-value pair.
                            type: string
                        required:
                        - key
                        - name
                        - value
                        type: object
                      type: array
                      x-kubernetes-list-map-keys:
                      - name
                      x-kubernetes-list-type: map
                    vnicType:
                      description: The virtual network interface card (vNIC) type
                        that is bound to the neutron port.
                      type: string
                  type: object
                type: array
              providerID:
                description: ProviderID is the unique identifier as specified by the
                  cloud provider.
                type: string
              rootVolume:
                description: The volume metadata to boot from
                properties:
                  availabilityZone:
                    type: string
                  diskSize:
                    type: integer
                  volumeType:
                    type: string
                type: object
              securityGroups:
                description: The names of the security groups to assign to the instance
                items:
                  properties:
                    description:
                      type: string
                    id:
                      type: string
                    name:
                      type: string
                    notTags:
                      type: string
                    notTagsAny:
                      type: string
                    projectId:
                      type: string
                    tags:
                      type: string
                    tagsAny:
                      type: string
                  type: object
                type: array
              serverGroupID:
                description: The server group to assign the machine to
                type: string
              serverMetadata:
                additionalProperties:
                  type: string
                description: Metadata mapping. Allows you to create a map of key value
                  pairs to add to the server instance.
                type: object
              sshKeyName:
                description: The ssh key to inject in the instance
                type: string
              tags:
                description: |-
                  Machine tags
                  Requires Nova api 2.52 minimum!
                items:
                  type: string
                type: array
                x-kubernetes-list-type: set
              trunk:
                description: Whether the server instance is created on a trunk port
                  or not.
                type: boolean
            type: object
          status:
            description: OpenStackMachineStatus defines the observed state of OpenStackMachine.
            properties:
              addresses:
                description: Addresses contains the OpenStack instance associated
                  addresses.
                items:
                  description: NodeAddress contains information for the node's address.
                  properties:
                    address:
                      description: The node address.
                      type: string
                    type:
                      description: Node address type, one of Hostname, ExternalIP
                        or InternalIP.
                      type: string
                  required:
                  - address
                  - type
                  type: object
                type: array
              conditions:
                description: Conditions provide observations of the operational state
                  of a Cluster API resource.
                items:
                  description: Condition defines an observation of a Cluster API resource
                    operational state.
                  properties:
                    lastTransitionTime:
                      description: |-
                        Last time the condition transitioned from one status to another.
                        This should be when the underlying condition changed. If that is not known, then using the time when
                        the API field changed is acceptable.
                      format: date-time
                      type: string
                    message:
                      description: |-
                        A human readable message indicating details about the transition.
                        This field may be empty.
                      type: string
                    reason:
                      description: |-
                        The reason for the condition's last transition in CamelCase.
                        The specific API may choose whether or not this field is considered a guaranteed API.
                        This field may be empty.
                      type: string
                    severity:
                      description: |-
                        severity provides an explicit classification of Reason code, so the users or machines can immediately
                        understand the current situation and act accordingly.
                        The Severity field MUST be set only when Status=False.
                      type: string
                    status:
                      description: status of the condition, one of True, False, Unknown.
                      type: string
                    type:
                      description: |-
                        type of condition in CamelCase or in foo.example.com/CamelCase.
                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
                        can be useful (see .node.status.conditions), the ability to deconflict is important.
                      type: string
                  required:
                  - lastTransitionTime
                  - status
                  - type
                  type: object
                type: array
              failureMessage:
                description: |-
                  FailureMessage will be set in the event that there is a terminal problem
                  reconciling the Machine and will contain a more verbose string suitable
                  for logging and human consumption.

                  This field should not be set for transitive errors that a controller
                  faces that are expected to be fixed automatically over
                  time (like service outages), but instead indicate that something is
                  fundamentally wrong with the Machine's spec or the configuration of
                  the controller, and that manual intervention is required. Examples
                  of terminal errors would be invalid combinations of settings in the
                  spec, values that are unsupported by the controller, or the
                  responsible controller itself being critically misconfigured.

                  Any transient errors that occur during the reconciliation of Machines
                  can be added as events to the Machine object and/or logged in the
                  controller's output.
                type: string
              failureReason:
                description: DeprecatedCAPIMachineStatusError defines errors states
                  for Machine objects.
                type: string
              instanceState:
                description: InstanceState is the state of the OpenStack instance
                  for this machine.
                type: string
              ready:
                description: Ready is true when the provider resource is ready.
                type: boolean
            type: object
        type: object
    served: false
    storage: false
    subresources:
      status: {}
  - additionalPrinterColumns:
    - description: Cluster to which this OpenStackMachine belongs
      jsonPath: .metadata.labels.cluster\.x-k8s\.io/cluster-name
      name: Cluster
      type: string
    - description: Machine ready status
      jsonPath: .status.ready
      name: Ready
      type: string
    - description: OpenStack instance ID
      jsonPath: .spec.providerID
      name: ProviderID
      type: string
    - description: Machine object which owns with this OpenStackMachine
      jsonPath: .metadata.ownerReferences[?(@.kind=="Machine")].name
      name: Machine
      type: string
    - description: Time duration since creation of OpenStackMachine
      jsonPath: .metadata.creationTimestamp
      name: Age
      type: date
    name: v1beta1
    schema:
      openAPIV3Schema:
        description: OpenStackMachine is the Schema for the openstackmachines API.
        properties:
          apiVersion:
            description: |-
              APIVersion defines the versioned schema of this representation of an object.
              Servers should convert recognized schemas to the latest internal value, and
              may reject unrecognized values.
              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
            type: string
          kind:
            description: |-
              Kind is a string value representing the REST resource this object represents.
              Servers may infer this from the endpoint the client submits requests to.
              Cannot be updated.
              In CamelCase.
              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
            type: string
          metadata:
            type: object
          spec:
            description: OpenStackMachineSpec defines the desired state of OpenStackMachine.
            properties:
              additionalBlockDevices:
                description: AdditionalBlockDevices is a list of specifications for
                  additional block devices to attach to the server instance
                items:
                  description: AdditionalBlockDevice is a block device to attach to
                    the server.
                  properties:
                    name:
                      description: |-
                        Name of the block device in the context of a machine.
                        If the block device is a volume, the Cinder volume will be named
                        as a combination of the machine name and this name.
                        Also, this name will be used for tagging the block device.
                        Information about the block device tag can be obtained from the OpenStack
                        metadata API or the config drive.
                        Name cannot be 'root', which is reserved for the root volume.
                      type: string
                    sizeGiB:
                      description: SizeGiB is the size of the block device in gibibytes
                        (GiB).
                      minimum: 1
                      type: integer
                    storage:
                      description: |-
                        Storage specifies the storage type of the block device and
                        additional storage options.
                      properties:
                        type:
                          description: |-
                            Type is the type of block device to create.
                            This can be either "Volume" or "Local".
                          type: string
                        volume:
                          description: Volume contains additional storage options
                            for a volume block device.
                          properties:
                            availabilityZone:
                              description: |-
                                AvailabilityZone is the volume availability zone to create the volume
                                in. If not specified, the volume will be created without an explicit
                                availability zone.
                              properties:
                                from:
                                  default: Name
                                  description: |-
                                    From specifies where we will obtain the availability zone for the
                                    volume. The options are "Name" and "Machine". If "Name" is specified
                                    then the Name field must also be specified. If "Machine" is specified
                                    the volume will use the value of FailureDomain, if any, from the
                                    associated Machine.
                                  enum:
                                  - Name
                                  - Machine
                                  type: string
                                name:
                                  description: |-
                                    Name is the name of a volume availability zone to use. It is required
                                    if From is "Name". The volume availability zone name may not contain
                                    spaces.
                                  minLength: 1
                                  pattern: ^[^ ]+$
                                  type: string
                              type: object
                              x-kubernetes-validations:
                              - message: name is required when from is 'Name' or default
                                rule: '!has(self.from) || self.from == ''Name'' ?
                                  has(self.name) : !has(self.name)'
                            type:
                              description: |-
                                Type is the Cinder volume type of the volume.
                                If omitted, the default Cinder volume type that is configured in the OpenStack cloud
                                will be used.
                              type: string
                          type: object
                      required:
                      - type
                      type: object
                  required:
                  - name
                  - sizeGiB
                  - storage
                  type: object
                type: array
                x-kubernetes-list-map-keys:
                - name
                x-kubernetes-list-type: map
              configDrive:
                description: Config Drive support
                type: boolean
              flavor:
                description: The flavor reference for the flavor for your server instance.
                minLength: 1
                type: string
              flavorID:
                description: |-
                  FlavorID allows flavors to be specified by ID.  This field takes precedence
                  over Flavor.
                minLength: 1
                type: string
              floatingIPPoolRef:
                description: |-
                  floatingIPPoolRef is a reference to a IPPool that will be assigned
                  to an IPAddressClaim. Once the IPAddressClaim is fulfilled, the FloatingIP
                  will be assigned to the OpenStackMachine.
                properties:
                  apiGroup:
                    description: |-
                      APIGroup is the group for the resource being referenced.
                      If APIGroup is not specified, the specified Kind must be in the core API group.
                      For any other third-party types, APIGroup is required.
                    type: string
                  kind:
                    description: Kind is the type of resource being referenced
                    type: string
                  name:
                    description: Name is the name of resource being referenced
                    type: string
                required:
                - kind
                - name
                type: object
                x-kubernetes-map-type: atomic
              identityRef:
                description: |-
                  IdentityRef is a reference to a secret holding OpenStack credentials
                  to be used when reconciling this machine. If not specified, the
                  credentials specified in the cluster will be used.
                properties:
                  cloudName:
                    description: CloudName specifies the name of the entry in the
                      clouds.yaml file to use.
                    type: string
                  name:
                    description: |-
                      Name is the name of a secret in the same namespace as the resource being provisioned.
                      The secret must contain a key named `clouds.yaml` which contains an OpenStack clouds.yaml file.
                      The secret may optionally contain a key named `cacert` containing a PEM-encoded CA certificate.
                    type: string
                  region:
                    description: |-
                      Region specifies an OpenStack region to use. If specified, it overrides
                      any value in clouds.yaml. If specified for an OpenStackMachine, its
                      value will be included in providerID.
                    type: string
                required:
                - cloudName
                - name
                type: object
                x-kubernetes-validations:
                - message: region is immutable
                  rule: (!has(self.region) && !has(oldSelf.region)) || self.region
                    == oldSelf.region
              image:
                description: |-
                  The image to use for your server instance.
                  If the rootVolume is specified, this will be used when creating the root volume.
                maxProperties: 1
                minProperties: 1
                properties:
                  filter:
                    description: |-
                      Filter describes a query for an image. If specified, the combination
                      of name and tags must return a single matching image or an error will
                      be raised.
                    minProperties: 1
                    properties:
                      name:
                        description: The name of the desired image. If specified,
                          the combination of name and tags must return a single matching
                          image or an error will be raised.
                        type: string
                      tags:
                        description: The tags associated with the desired image. If
                          specified, the combination of name and tags must return
                          a single matching image or an error will be raised.
                        items:
                          type: string
                        type: array
                        x-kubernetes-list-type: set
                    type: object
                  id:
                    description: ID is the uuid of the image. ID will not be validated
                      before use.
                    format: uuid
                    type: string
                  imageRef:
                    description: |-
                      ImageRef is a reference to an ORC Image in the same namespace as the
                      referring object.
                    properties:
                      name:
                        description: Name is the name of the referenced resource
                        type: string
                    required:
                    - name
                    type: object
                type: object
              ports:
                description: |-
                  Ports to be attached to the server instance. They are created if a port with the given name does not already exist.
                  If not specified a default port will be added for the default cluster network.
                items:
                  properties:
                    adminStateUp:
                      description: AdminStateUp specifies whether the port should
                        be created in the up (true) or down (false) state. The default
                        is up.
                      type: boolean
                    allowedAddressPairs:
                      description: |-
                        AllowedAddressPairs is a list of address pairs which Neutron will
                        allow the port to send traffic from in addition to the port's
                        addresses. If not specified, the MAC Address will be the MAC Address
                        of the port. Depending on the configuration of Neutron, it may be
                        supported to specify a CIDR instead of a specific IP address.
                      items:
                        properties:
                          ipAddress:
                            description: |-
                              IPAddress is the IP address of the allowed address pair. Depending on
                              the configuration of Neutron, it may be supported to specify a CIDR
                              instead of a specific IP address.
                            type: string
                          macAddress:
                            description: |-
                              MACAddress is the MAC address of the allowed address pair. If not
                              specified, the MAC address will be the MAC address of the port.
                            type: string
                        required:
                        - ipAddress
                        type: object
                      type: array
                    description:
                      description: Description is a human-readable description for
                        the port.
                      type: string
                    disablePortSecurity:
                      description: |-
                        DisablePortSecurity enables or disables the port security when set.
                        When not set, it takes the value of the corresponding field at the network level.
                      type: boolean
                    fixedIPs:
                      description: FixedIPs is a list of pairs of subnet and/or IP
                        address to assign to the port. If specified, these must be
                        subnets of the port's network.
                      items:
                        properties:
                          ipAddress:
                            description: |-
                              IPAddress is a specific IP address to assign to the port. If Subnet
                              is also specified, IPAddress must be a valid IP address in the
                              subnet. If Subnet is not specified, IPAddress must be a valid IP
                              address in any subnet of the port's network.
                            type: string
                          subnet:
                            description: |-
                              Subnet is an openstack subnet query that will return the id of a subnet to create
                              the fixed IP of a port in. This query must not return more than one subnet.
                            maxProperties: 1
                            minProperties: 1
                            properties:
                              filter:
                                description: Filter specifies a filter to select the
                                  subnet. It must match exactly one subnet.
                                minProperties: 1
                                properties:
                                  cidr:
                                    type: string
                                  description:
                                    type: string
                                  gatewayIP:
                                    type: string
                                  ipVersion:
                                    type: integer
                                  ipv6AddressMode:
                                    type: string
                                  ipv6RAMode:
                                    type: string
                                  name:
                                    type: string
                                  notTags:
                                    description: |-
                                      NotTags is a list of tags to filter by. If specified, resources which
                                      contain all of the given tags will be excluded from the result.
                                    items:
                                      description: |-
                                        NeutronTag represents a tag on a Neutron resource.
                                        It may not be empty and may not contain commas.
                                      minLength: 1
                                      pattern: ^[^,]+$
                                      type: string
                                    type: array
                                    x-kubernetes-list-type: set
                                  notTagsAny:
                                    description: |-
                                      NotTagsAny is a list of tags to filter by. If specified, resources
                                      which contain any of the given tags will be excluded from the result.
                                    items:
                                      description: |-
                                        NeutronTag represents a tag on a Neutron resource.
                                        It may not be empty and may not contain commas.
                                      minLength: 1
                                      pattern: ^[^,]+$
                                      type: string
                                    type: array
                                    x-kubernetes-list-type: set
                                  projectID:
                                    type: string
                                  tags:
                                    description: |-
                                      Tags is a list of tags to filter by. If specified, the resource must
                                      have all of the tags specified to be included in the result.
                                    items:
                                      description: |-
                                        NeutronTag represents a tag on a Neutron resource.
                                        It may not be empty and may not contain commas.
                                      minLength: 1
                                      pattern: ^[^,]+$
                                      type: string
                                    type: array
                                    x-kubernetes-list-type: set
                                  tagsAny:
                                    description: |-
                                      TagsAny is a list of tags to filter by. If specified, the resource
                                      must have at least one of the tags specified to be included in the
                                      result.
                                    items:
                                      description: |-
                                        NeutronTag represents a tag on a Neutron resource.
                                        It may not be empty and may not contain commas.
                                      minLength: 1
                                      pattern: ^[^,]+$
                                      type: string
                                    type: array
                                    x-kubernetes-list-type: set
                                type: object
                              id:
                                description: ID is the uuid of the subnet. It will
                                  not be validated.
                                format: uuid
                                type: string
                            type: object
                        type: object
                      type: array
                      x-kubernetes-list-type: atomic
                    hostID:
                      description: HostID specifies the ID of the host where the port
                        resides.
                      type: string
                    macAddress:
                      description: MACAddress specifies the MAC address of the port.
                        If not specified, the MAC address will be generated.
                      type: string
                    nameSuffix:
                      description: NameSuffix will be appended to the name of the
                        port if specified. If unspecified, instead the 0-based index
                        of the port in the list is used.
                      type: string
                    network:
                      description: |-
                        Network is a query for an openstack network that the port will be created or discovered on.
                        This will fail if the query returns more than one network.
                      maxProperties: 1
                      minProperties: 1
                      properties:
                        filter:
                          description: Filter specifies a filter to select an OpenStack
                            network. If provided, cannot be empty.
                          minProperties: 1
                          properties:
                            description:
                              type: string
                            name:
                              type: string
                            notTags:
                              description: |-
                                NotTags is a list of tags to filter by. If specified, resources which
                                contain all of the given tags will be excluded from the result.
                              items:
                                description: |-
                                  NeutronTag represents a tag on a Neutron resource.
                                  It may not be empty and may not contain commas.
                                minLength: 1
                                pattern: ^[^,]+$
                                type: string
                              type: array
                              x-kubernetes-list-type: set
                            notTagsAny:
                              description: |-
                                NotTagsAny is a list of tags to filter by. If specified, resources
                                which contain any of the given tags will be excluded from the result.
                              items:
                                description: |-
                                  NeutronTag represents a tag on a Neutron resource.
                                  It may not be empty and may not contain commas.
                                minLength: 1
                                pattern: ^[^,]+$
                                type: string
                              type: array
                              x-kubernetes-list-type: set
                            projectID:
                              type: string
                            tags:
                              description: |-
                                Tags is a list of tags to filter by. If specified, the resource must
                                have all of the tags specified to be included in the result.
                              items:
                                description: |-
                                  NeutronTag represents a tag on a Neutron resource.
                                  It may not be empty and may not contain commas.
                                minLength: 1
                                pattern: ^[^,]+$
                                type: string
                              type: array
                              x-kubernetes-list-type: set
                            tagsAny:
                              description: |-
                                TagsAny is a list of tags to filter by. If specified, the resource
                                must have at least one of the tags specified to be included in the
                                result.
                              items:
                                description: |-
                                  NeutronTag represents a tag on a Neutron resource.
                                  It may not be empty and may not contain commas.
                                minLength: 1
                                pattern: ^[^,]+$
                                type: string
                              type: array
                              x-kubernetes-list-type: set
                          type: object
                        id:
                          description: ID is the ID of the network to use. If ID is
                            provided, the other filters cannot be provided. Must be
                            in UUID format.
                          format: uuid
                          type: string
                      type: object
                    profile:
                      description: |-
                        Profile is a set of key-value pairs that are used for binding
                        details. We intentionally don't expose this as a map[string]string
                        because we only want to enable the users to set the values of the
                        keys that are known to work in OpenStack Networking API.  See
                        https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
                        To set profiles, your tenant needs permissions rule:create_port, and
                        rule:create_port:binding:profile
                      properties:
                        ovsHWOffload:
                          description: |-
                            OVSHWOffload enables or disables the OVS hardware offload feature.
                            This flag is not required on OpenStack clouds since Yoga as Nova will set it automatically when the port is attached.
                            See: https://bugs.launchpad.net/nova/+bug/2020813
                          type: boolean
                        trustedVF:
                          description: TrustedVF enables or disables the “trusted
                            mode” for the VF.
                          type: boolean
                      type: object
                    propagateUplinkStatus:
                      description: PropageteUplinkStatus enables or disables the propagate
                        uplink status on the port.
                      type: boolean
                    securityGroups:
                      description: SecurityGroups is a list of the names, uuids, filters
                        or any combination these of the security groups to assign
                        to the instance.
                      items:
                        description: SecurityGroupParam specifies an OpenStack security
                          group. It may be specified by ID or filter, but not both.
                        maxProperties: 1
                        minProperties: 1
                        properties:
                          filter:
                            description: Filter specifies a query to select an OpenStack
                              security group. If provided, cannot be empty.
                            minProperties: 1
                            properties:
                              description:
                                type: string
                              name:
                                type: string
                              notTags:
                                description: |-
                                  NotTags is a list of tags to filter by. If specified, resources which
                                  contain all of the given tags will be excluded from the result.
                                items:
                                  description: |-
                                    NeutronTag represents a tag on a Neutron resource.
                                    It may not be empty and may not contain commas.
                                  minLength: 1
                                  pattern: ^[^,]+$
                                  type: string
                                type: array
                                x-kubernetes-list-type: set
                              notTagsAny:
                                description: |-
                                  NotTagsAny is a list of tags to filter by. If specified, resources
                                  which contain any of the given tags will be excluded from the result.
                                items:
                                  description: |-
                                    NeutronTag represents a tag on a Neutron resource.
                                    It may not be empty and may not contain commas.
                                  minLength: 1
                                  pattern: ^[^,]+$
                                  type: string
                                type: array
                                x-kubernetes-list-type: set
                              projectID:
                                type: string
                              tags:
                                description: |-
                                  Tags is a list of tags to filter by. If specified, the resource must
                                  have all of the tags specified to be included in the result.
                                items:
                                  description: |-
                                    NeutronTag represents a tag on a Neutron resource.
                                    It may not be empty and may not contain commas.
                                  minLength: 1
                                  pattern: ^[^,]+$
                                  type: string
                                type: array
                                x-kubernetes-list-type: set
                              tagsAny:
                                description: |-
                                  TagsAny is a list of tags to filter by. If specified, the resource
                                  must have at least one of the tags specified to be included in the
                                  result.
                                items:
                                  description: |-
                                    NeutronTag represents a tag on a Neutron resource.
                                    It may not be empty and may not contain commas.
                                  minLength: 1
                                  pattern: ^[^,]+$
                                  type: string
                                type: array
                                x-kubernetes-list-type: set
                            type: object
                          id:
                            description: ID is the ID of the security group to use.
                              If ID is provided, the other filters cannot be provided.
                              Must be in UUID format.
                            format: uuid
                            type: string
                        type: object
                      type: array
                      x-kubernetes-list-type: atomic
                    tags:
                      description: |-
                        Tags applied to the port (and corresponding trunk, if a trunk is configured.)
                        These tags are applied in addition to the instance's tags, which will also be applied to the port.
                      items:
                        type: string
                      type: array
                      x-kubernetes-list-type: set
                    trunk:
                      description: |-
                        Trunk specifies whether trunking is enabled at the port level. If not
                        provided the value is inherited from the machine, or false for a
                        bastion host.
                      type: boolean
                    valueSpecs:
                      description: |-
                        Value specs are extra parameters to include in the API request with OpenStack.
                        This is an extension point for the API, so what they do and if they are supported,
                        depends on the specific OpenStack implementation.
                      items:
                        description: ValueSpec represents a single value_spec key-value
                          pair.
                        properties:
                          key:
                            description: Key is the key in the key-value pair.
                            type: string
                          name:
                            description: |-
                              Name is the name of the key-value pair.
                              This is just for identifying the pair and will not be sent to the OpenStack API.
                            type: string
                          value:
                            description: Value is the value in the key-value pair.
                            type: string
                        required:
                        - key
                        - name
                        - value
                        type: object
                      type: array
                      x-kubernetes-list-map-keys:
                      - name
                      x-kubernetes-list-type: map
                    vnicType:
                      description: |-
                        VNICType specifies the type of vNIC which this port should be
                        attached to. This is used to determine which mechanism driver(s) to
                        be used to bind the port. The valid values are normal, macvtap,
                        direct, baremetal, direct-physical, virtio-forwarder, smart-nic and
                        remote-managed, although these values will not be validated in this
                        API to ensure compatibility with future neutron changes or custom
                        implementations. What type of vNIC is actually available depends on
                        deployments. If not specified, the Neutron default value is used.
                      type: string
                  type: object
                type: array
              providerID:
                description: ProviderID is the unique identifier as specified by the
                  cloud provider.
                type: string
              rootVolume:
                description: The volume metadata to boot from
                properties:
                  availabilityZone:
                    description: |-
                      AvailabilityZone is the volume availability zone to create the volume
                      in. If not specified, the volume will be created without an explicit
                      availability zone.
                    properties:
                      from:
                        default: Name
                        description: |-
                          From specifies where we will obtain the availability zone for the
                          volume. The options are "Name" and "Machine". If "Name" is specified
                          then the Name field must also be specified. If "Machine" is specified
                          the volume will use the value of FailureDomain, if any, from the
                          associated Machine.
                        enum:
                        - Name
                        - Machine
                        type: string
                      name:
                        description: |-
                          Name is the name of a volume availability zone to use. It is required
                          if From is "Name". The volume availability zone name may not contain
                          spaces.
                        minLength: 1
                        pattern: ^[^ ]+$
                        type: string
                    type: object
                    x-kubernetes-validations:
                    - message: name is required when from is 'Name' or default
                      rule: '!has(self.from) || self.from == ''Name'' ? has(self.name)
                        : !has(self.name)'
                  sizeGiB:
                    description: SizeGiB is the size of the block device in gibibytes
                      (GiB).
                    minimum: 1
                    type: integer
                  type:
                    description: |-
                      Type is the Cinder volume type of the volume.
                      If omitted, the default Cinder volume type that is configured in the OpenStack cloud
                      will be used.
                    type: string
                required:
                - sizeGiB
                type: object
              schedulerHintAdditionalProperties:
                description: |-
                  SchedulerHintAdditionalProperties are arbitrary key/value pairs that provide additional hints
                  to the OpenStack scheduler. These hints can influence how instances are placed on the infrastructure,
                  such as specifying certain host aggregates or availability zones.
                items:
                  description: |-
                    SchedulerHintAdditionalProperty represents a single additional property for a scheduler hint.
                    It includes a Name to identify the property and a Value that can be of various types.
                  properties:
                    name:
                      description: |-
                        Name is the name of the scheduler hint property.
                        It is a unique identifier for the property.
                      minLength: 1
                      type: string
                    value:
                      description: |-
                        Value is the value of the scheduler hint property, which can be of various types
                        (e.g., bool, string, int). The type is indicated by the Value.Type field.
                      properties:
                        bool:
                          description: |-
                            Bool is the boolean value of the scheduler hint, used when Type is "Bool".
                            This field is required if type is 'Bool', and must not be set otherwise.
                          type: boolean
                        number:
                          description: |-
                            Number is the integer value of the scheduler hint, used when Type is "Number".
                            This field is required if type is 'Number', and must not be set otherwise.
                          type: integer
                        string:
                          description: |-
                            String is the string value of the scheduler hint, used when Type is "String".
                            This field is required if type is 'String', and must not be set otherwise.
                          maxLength: 255
                          minLength: 1
                          type: string
                        type:
                          description: |-
                            Type represents the type of the value.
                            Valid values are Bool, String, and Number.
                          enum:
                          - Bool
                          - String
                          - Number
                          type: string
                      required:
                      - type
                      type: object
                      x-kubernetes-validations:
                      - message: bool is required when type is Bool, and forbidden
                          otherwise
                        rule: 'has(self.type) && self.type == ''Bool'' ? has(self.bool)
                          : !has(self.bool)'
                      - message: number is required when type is Number, and forbidden
                          otherwise
                        rule: 'has(self.type) && self.type == ''Number'' ? has(self.number)
                          : !has(self.number)'
                      - message: string is required when type is String, and forbidden
                          otherwise
                        rule: 'has(self.type) && self.type == ''String'' ? has(self.string)
                          : !has(self.string)'
                  required:
                  - name
                  - value
                  type: object
                type: array
                x-kubernetes-list-map-keys:
                - name
                x-kubernetes-list-type: map
              securityGroups:
                description: The names of the security groups to assign to the instance
                items:
                  description: SecurityGroupParam specifies an OpenStack security
                    group. It may be specified by ID or filter, but not both.
                  maxProperties: 1
                  minProperties: 1
                  properties:
                    filter:
                      description: Filter specifies a query to select an OpenStack
                        security group. If provided, cannot be empty.
                      minProperties: 1
                      properties:
                        description:
                          type: string
                        name:
                          type: string
                        notTags:
                          description: |-
                            NotTags is a list of tags to filter by. If specified, resources which
                            contain all of the given tags will be excluded from the result.
                          items:
                            description: |-
                              NeutronTag represents a tag on a Neutron resource.
                              It may not be empty and may not contain commas.
                            minLength: 1
                            pattern: ^[^,]+$
                            type: string
                          type: array
                          x-kubernetes-list-type: set
                        notTagsAny:
                          description: |-
                            NotTagsAny is a list of tags to filter by. If specified, resources
                            which contain any of the given tags will be excluded from the result.
                          items:
                            description: |-
                              NeutronTag represents a tag on a Neutron resource.
                              It may not be empty and may not contain commas.
                            minLength: 1
                            pattern: ^[^,]+$
                            type: string
                          type: array
                          x-kubernetes-list-type: set
                        projectID:
                          type: string
                        tags:
                          description: |-
                            Tags is a list of tags to filter by. If specified, the resource must
                            have all of the tags specified to be included in the result.
                          items:
                            description: |-
                              NeutronTag represents a tag on a Neutron resource.
                              It may not be empty and may not contain commas.
                            minLength: 1
                            pattern: ^[^,]+$
                            type: string
                          type: array
                          x-kubernetes-list-type: set
                        tagsAny:
                          description: |-
                            TagsAny is a list of tags to filter by. If specified, the resource
                            must have at least one of the tags specified to be included in the
                            result.
                          items:
                            description: |-
                              NeutronTag represents a tag on a Neutron resource.
                              It may not be empty and may not contain commas.
                            minLength: 1
                            pattern: ^[^,]+$
                            type: string
                          type: array
                          x-kubernetes-list-type: set
                      type: object
                    id:
                      description: ID is the ID of the security group to use. If ID
                        is provided, the other filters cannot be provided. Must be
                        in UUID format.
                      format: uuid
                      type: string
                  type: object
                type: array
              serverGroup:
                description: The server group to assign the machine to.
                maxProperties: 1
                minProperties: 1
                properties:
                  filter:
                    description: Filter specifies a query to select an OpenStack server
                      group. If provided, it cannot be empty.
                    minProperties: 1
                    properties:
                      name:
                        description: Name is the name of a server group to look for.
                        type: string
                    type: object
                  id:
                    description: ID is the ID of the server group to use.
                    format: uuid
                    type: string
                type: object
              serverMetadata:
                description: Metadata mapping. Allows you to create a map of key value
                  pairs to add to the server instance.
                items:
                  properties:
                    key:
                      description: Key is the server metadata key
                      maxLength: 255
                      type: string
                    value:
                      description: Value is the server metadata value
                      maxLength: 255
                      type: string
                  required:
                  - key
                  - value
                  type: object
                type: array
                x-kubernetes-list-map-keys:
                - key
                x-kubernetes-list-type: map
              sshKeyName:
                description: The ssh key to inject in the instance
                type: string
              tags:
                description: |-
                  Tags which will be added to the machine and all dependent resources
                  which support them. These are in addition to Tags defined on the
                  cluster.
                  Requires Nova api 2.52 minimum!
                items:
                  type: string
                type: array
                x-kubernetes-list-type: set
              trunk:
                description: Whether the server instance is created on a trunk port
                  or not.
                type: boolean
            required:
            - image
            type: object
            x-kubernetes-validations:
            - message: at least one of flavor or flavorID must be set
              rule: (has(self.flavor) || has(self.flavorID))
          status:
            description: OpenStackMachineStatus defines the observed state of OpenStackMachine.
            properties:
              addresses:
                description: Addresses contains the OpenStack instance associated
                  addresses.
                items:
                  description: NodeAddress contains information for the node's address.
                  properties:
                    address:
                      description: The node address.
                      type: string
                    type:
                      description: Node address type, one of Hostname, ExternalIP
                        or InternalIP.
                      type: string
                  required:
                  - address
                  - type
                  type: object
                type: array
              conditions:
                description: Conditions provide observations of the operational state
                  of a Cluster API resource.
                items:
                  description: Condition defines an observation of a Cluster API resource
                    operational state.
                  properties:
                    lastTransitionTime:
                      description: |-
                        Last time the condition transitioned from one status to another.
                        This should be when the underlying condition changed. If that is not known, then using the time when
                        the API field changed is acceptable.
                      format: date-time
                      type: string
                    message:
                      description: |-
                        A human readable message indicating details about the transition.
                        This field may be empty.
                      type: string
                    reason:
                      description: |-
                        The reason for the condition's last transition in CamelCase.
                        The specific API may choose whether or not this field is considered a guaranteed API.
                        This field may be empty.
                      type: string
                    severity:
                      description: |-
                        severity provides an explicit classification of Reason code, so the users or machines can immediately
                        understand the current situation and act accordingly.
                        The Severity field MUST be set only when Status=False.
                      type: string
                    status:
                      description: status of the condition, one of True, False, Unknown.
                      type: string
                    type:
                      description: |-
                        type of condition in CamelCase or in foo.example.com/CamelCase.
                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
                        can be useful (see .node.status.conditions), the ability to deconflict is important.
                      type: string
                  required:
                  - lastTransitionTime
                  - status
                  - type
                  type: object
                type: array
              failureMessage:
                description: |-
                  FailureMessage will be set in the event that there is a terminal problem
                  reconciling the Machine and will contain a more verbose string suitable
                  for logging and human consumption.

                  This field should not be set for transitive errors that a controller
                  faces that are expected to be fixed automatically over
                  time (like service outages), but instead indicate that something is
                  fundamentally wrong with the Machine's spec or the configuration of
                  the controller, and that manual intervention is required. Examples
                  of terminal errors would be invalid combinations of settings in the
                  spec, values that are unsupported by the controller, or the
                  responsible controller itself being critically misconfigured.

                  Any transient errors that occur during the reconciliation of Machines
                  can be added as events to the Machine object and/or logged in the
                  controller's output.
                type: string
              failureReason:
                description: DeprecatedCAPIMachineStatusError defines errors states
                  for Machine objects.
                type: string
              instanceID:
                description: InstanceID is the OpenStack instance ID for this machine.
                type: string
              instanceState:
                description: |-
                  InstanceState is the state of the OpenStack instance for this machine.
                  This field is not set anymore by the OpenStackMachine controller.
                  Instead, it's set by the OpenStackServer controller.
                type: string
              ready:
                description: Ready is true when the provider resource is ready.
                type: boolean
              resolved:
                description: |-
                  Resolved contains parts of the machine spec with all external
                  references fully resolved.
                properties:
                  flavorID:
                    description: FlavorID is the ID of the flavor to use.
                    type: string
                  imageID:
                    description: ImageID is the ID of the image to use for the machine
                      and is calculated based on ImageFilter.
                    type: string
                  ports:
                    description: Ports is the fully resolved list of ports to create
                      for the machine.
                    items:
                      description: ResolvedPortSpec is a PortOpts with all contained
                        references fully resolved.
                      properties:
                        adminStateUp:
                          description: AdminStateUp specifies whether the port should
                            be created in the up (true) or down (false) state. The
                            default is up.
                          type: boolean
                        allowedAddressPairs:
                          description: |-
                            AllowedAddressPairs is a list of address pairs which Neutron will
                            allow the port to send traffic from in addition to the port's
                            addresses. If not specified, the MAC Address will be the MAC Address
                            of the port. Depending on the configuration of Neutron, it may be
                            supported to specify a CIDR instead of a specific IP address.
                          items:
                            properties:
                              ipAddress:
                                description: |-
                                  IPAddress is the IP address of the allowed address pair. Depending on
                                  the configuration of Neutron, it may be supported to specify a CIDR
                                  instead of a specific IP address.
                                type: string
                              macAddress:
                                description: |-
                                  MACAddress is the MAC address of the allowed address pair. If not
                                  specified, the MAC address will be the MAC address of the port.
                                type: string
                            required:
                            - ipAddress
                            type: object
                          type: array
                        description:
                          description: Description is a human-readable description
                            for the port.
                          type: string
                        disablePortSecurity:
                          description: |-
                            DisablePortSecurity enables or disables the port security when set.
                            When not set, it takes the value of the corresponding field at the network level.
                          type: boolean
                        fixedIPs:
                          description: FixedIPs is a list of pairs of subnet and/or
                            IP address to assign to the port. If specified, these
                            must be subnets of the port's network.
                          items:
                            description: ResolvedFixedIP is a FixedIP with the Subnet
                              resolved to an ID.
                            properties:
                              ipAddress:
                                description: |-
                                  IPAddress is a specific IP address to assign to the port. If SubnetID
                                  is also specified, IPAddress must be a valid IP address in the
                                  subnet. If Subnet is not specified, IPAddress must be a valid IP
                                  address in any subnet of the port's network.
                                type: string
                              subnet:
                                description: SubnetID is the id of a subnet to create
                                  the fixed IP of a port in.
                                type: string
                            type: object
                          type: array
                          x-kubernetes-list-type: atomic
                        hostID:
                          description: HostID specifies the ID of the host where the
                            port resides.
                          type: string
                        macAddress:
                          description: MACAddress specifies the MAC address of the
                            port. If not specified, the MAC address will be generated.
                          type: string
                        name:
                          description: Name is the name of the port.
                          type: string
                        networkID:
                          description: NetworkID is the ID of the network the port
                            will be created in.
                          type: string
                        profile:
                          description: |-
                            Profile is a set of key-value pairs that are used for binding
                            details. We intentionally don't expose this as a map[string]string
                            because we only want to enable the users to set the values of the
                            keys that are known to work in OpenStack Networking API.  See
                            https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
                            To set profiles, your tenant needs permissions rule:create_port, and
                            rule:create_port:binding:profile
                          properties:
                            ovsHWOffload:
                              description: |-
                                OVSHWOffload enables or disables the OVS hardware offload feature.
                                This flag is not required on OpenStack clouds since Yoga as Nova will set it automatically when the port is attached.
                                See: https://bugs.launchpad.net/nova/+bug/2020813
                              type: boolean
                            trustedVF:
                              description: TrustedVF enables or disables the “trusted
                                mode” for the VF.
                              type: boolean
                          type: object
                        propagateUplinkStatus:
                          description: PropageteUplinkStatus enables or disables the
                            propagate uplink status on the port.
                          type: boolean
                        securityGroups:
                          description: SecurityGroups is a list of security group
                            IDs to assign to the port.
                          items:
                            type: string
                          type: array
                          x-kubernetes-list-type: atomic
                        tags:
                          description: Tags applied to the port (and corresponding
                            trunk, if a trunk is configured.)
                          items:
                            type: string
                          type: array
                          x-kubernetes-list-type: set
                        trunk:
                          description: Trunk specifies whether trunking is enabled
                            at the port level.
                          type: boolean
                        valueSpecs:
                          description: |-
                            Value specs are extra parameters to include in the API request with OpenStack.
                            This is an extension point for the API, so what they do and if they are supported,
                            depends on the specific OpenStack implementation.
                          items:
                            description: ValueSpec represents a single value_spec
                              key-value pair.
                            properties:
                              key:
                                description: Key is the key in the key-value pair.
                                type: string
                              name:
                                description: |-
                                  Name is the name of the key-value pair.
                                  This is just for identifying the pair and will not be sent to the OpenStack API.
                                type: string
                              value:
                                description: Value is the value in the key-value pair.
                                type: string
                            required:
                            - key
                            - name
                            - value
                            type: object
                          type: array
                          x-kubernetes-list-map-keys:
                          - name
                          x-kubernetes-list-type: map
                        vnicType:
                          description: |-
                            VNICType specifies the type of vNIC which this port should be
                            attached to. This is used to determine which mechanism driver(s) to
                            be used to bind the port. The valid values are normal, macvtap,
                            direct, baremetal, direct-physical, virtio-forwarder, smart-nic and
                            remote-managed, although these values will not be validated in this
                            API to ensure compatibility with future neutron changes or custom
                            implementations. What type of vNIC is actually available depends on
                            deployments. If not specified, the Neutron default value is used.
                          type: string
                      required:
                      - description
                      - name
                      - networkID
                      type: object
                    type: array
                  serverGroupID:
                    description: ServerGroupID is the ID of the server group the machine
                      should be added to and is calculated based on ServerGroupFilter.
                    type: string
                type: object
              resources:
                description: Resources contains references to OpenStack resources
                  created for the machine.
                properties:
                  ports:
                    description: Ports is the status of the ports created for the
                      machine.
                    items:
                      properties:
                        id:
                          description: ID is the unique identifier of the port.
                          type: string
                      required:
                      - id
                      type: object
                    type: array
                type: object
            type: object
        type: object
    served: true
    storage: true
    subresources:
      status: {}
status:
  acceptedNames:
    kind: ""
    plural: ""
  conditions: null
  storedVersions: null
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    cert-manager.io/inject-ca-from: capo-system/capo-serving-cert
    controller-gen.kubebuilder.io/version: v0.16.5
  creationTimestamp: null
  labels:
    cluster.x-k8s.io/provider: infrastructure-openstack
    cluster.x-k8s.io/v1beta1: v1alpha7_v1beta1
    clusterctl.cluster.x-k8s.io: ""
  name: openstackmachinetemplates.infrastructure.cluster.x-k8s.io
spec:
  conversion:
    strategy: Webhook
    webhook:
      clientConfig:
        service:
          name: capo-webhook-service
          namespace: capo-system
          path: /convert
      conversionReviewVersions:
      - v1
      - v1beta1
  group: infrastructure.cluster.x-k8s.io
  names:
    categories:
    - cluster-api
    kind: OpenStackMachineTemplate
    listKind: OpenStackMachineTemplateList
    plural: openstackmachinetemplates
    shortNames:
    - osmt
    singular: openstackmachinetemplate
  scope: Namespaced
  versions:
  - deprecated: true
    deprecationWarning: The v1alpha7 version of OpenStackMachineTemplate has been
      deprecated and will be removed in a future release.
    name: v1alpha7
    schema:
      openAPIV3Schema:
        description: |-
          OpenStackMachineTemplate is the Schema for the openstackmachinetemplates API.

          Deprecated: v1alpha7.OpenStackMachineTemplate has been replaced by v1beta1.OpenStackMachineTemplate.
        properties:
          apiVersion:
            description: |-
              APIVersion defines the versioned schema of this representation of an object.
              Servers should convert recognized schemas to the latest internal value, and
              may reject unrecognized values.
              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
            type: string
          kind:
            description: |-
              Kind is a string value representing the REST resource this object represents.
              Servers may infer this from the endpoint the client submits requests to.
              Cannot be updated.
              In CamelCase.
              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
            type: string
          metadata:
            type: object
          spec:
            description: OpenStackMachineTemplateSpec defines the desired state of
              OpenStackMachineTemplate.
            properties:
              template:
                description: OpenStackMachineTemplateResource describes the data needed
                  to create a OpenStackMachine from a template.
                properties:
                  spec:
                    description: Spec is the specification of the desired behavior
                      of the machine.
                    properties:
                      additionalBlockDevices:
                        description: AdditionalBlockDevices is a list of specifications
                          for additional block devices to attach to the server instance
                        items:
                          description: AdditionalBlockDevice is a block device to
                            attach to the server.
                          properties:
                            name:
                              description: |-
                                Name of the block device in the context of a machine.
                                If the block device is a volume, the Cinder volume will be named
                                as a combination of the machine name and this name.
                                Also, this name will be used for tagging the block device.
                                Information about the block device tag can be obtained from the OpenStack
                                metadata API or the config drive.
                              type: string
                            sizeGiB:
                              description: SizeGiB is the size of the block device
                                in gibibytes (GiB).
                              type: integer
                            storage:
                              description: |-
                                Storage specifies the storage type of the block device and
                                additional storage options.
                              properties:
                                type:
                                  description: |-
                                    Type is the type of block device to create.
                                    This can be either "Volume" or "Local".
                                  type: string
                                volume:
                                  description: Volume contains additional storage
                                    options for a volume block device.
                                  properties:
                                    availabilityZone:
                                      description: |-
                                        AvailabilityZone is the volume availability zone to create the volume in.
                                        If omitted, the availability zone of the server will be used.
                                        The availability zone must NOT contain spaces otherwise it will lead to volume that belongs
                                        to this availability zone register failure, see kubernetes/cloud-provider-openstack#1379 for
                                        further information.
                                      type: string
                                    type:
                                      description: |-
                                        Type is the Cinder volume type of the volume.
                                        If omitted, the default Cinder volume type that is configured in the OpenStack cloud
                                        will be used.
                                      type: string
                                  type: object
                              required:
                              - type
                              type: object
                          required:
                          - name
                          - sizeGiB
                          - storage
                          type: object
                        type: array
                        x-kubernetes-list-map-keys:
                        - name
                        x-kubernetes-list-type: map
                      cloudName:
                        description: The name of the cloud to use from the clouds
                          secret
                        type: string
                      configDrive:
                        description: Config Drive support
                        type: boolean
                      flavor:
                        description: The flavor reference for the flavor for your
                          server instance.
                        minLength: 1
                        type: string
                      flavorID:
                        description: |-
                          FlavorID allows flavors to be specified by ID.  This field takes precedence
                          over Flavor.
                        minLength: 1
                        type: string
                      floatingIP:
                        description: |-
                          The floatingIP which will be associated to the machine, only used for master.
                          The floatingIP should have been created and haven't been associated.
                        type: string
                      identityRef:
                        description: |-
                          IdentityRef is a reference to a identity to be used when reconciling this cluster.
                          If not specified, the identity ref of the cluster will be used instead.
                        properties:
                          kind:
                            description: |-
                              Kind of the identity. Must be supported by the infrastructure
                              provider and may be either cluster or namespace-scoped.
                            minLength: 1
                            type: string
                          name:
                            description: |-
                              Name of the infrastructure identity to be used.
                              Must be either a cluster-scoped resource, or namespaced-scoped
                              resource the same namespace as the resource(s) being provisioned.
                            type: string
                        required:
                        - kind
                        - name
                        type: object
                      image:
                        description: |-
                          The name of the image to use for your server instance.
                          If the RootVolume is specified, this will be ignored and use rootVolume directly.
                        type: string
                      imageUUID:
                        description: |-
                          The uuid of the image to use for your server instance.
                          if it's empty, Image name will be used
                        type: string
                      instanceID:
                        description: InstanceID is the OpenStack instance ID for this
                          machine.
                        type: string
                      ports:
                        description: |-
                          Ports to be attached to the server instance. They are created if a port with the given name does not already exist.
                          If not specified a default port will be added for the default cluster network.
                        items:
                          properties:
                            adminStateUp:
                              type: boolean
                            allowedAddressPairs:
                              items:
                                properties:
                                  ipAddress:
                                    type: string
                                  macAddress:
                                    type: string
                                type: object
                              type: array
                            description:
                              type: string
                            disablePortSecurity:
                              description: |-
                                DisablePortSecurity enables or disables the port security when set.
                                When not set, it takes the value of the corresponding field at the network level.
                              type: boolean
                            fixedIPs:
                              description: Specify pairs of subnet and/or IP address.
                                These should be subnets of the network with the given
                                NetworkID.
                              items:
                                properties:
                                  ipAddress:
                                    type: string
                                  subnet:
                                    description: |-
                                      Subnet is an openstack subnet query that will return the id of a subnet to create
                                      the fixed IP of a port in. This query must not return more than one subnet.
                                    properties:
                                      cidr:
                                        type: string
                                      description:
                                        type: string
                                      gateway_ip:
                                        type: string
                                      id:
                                        type: string
                                      ipVersion:
                                        type: integer
                                      ipv6AddressMode:
                                        type: string
                                      ipv6RaMode:
                                        type: string
                                      name:
                                        type: string
                                      notTags:
                                        type: string
                                      notTagsAny:
                                        type: string
                                      projectId:
                                        type: string
                                      tags:
                                        type: string
                                      tagsAny:
                                        type: string
                                    type: object
                                required:
                                - subnet
                                type: object
                              type: array
                            hostId:
                              description: The ID of the host where the port is allocated
                              type: string
                            macAddress:
                              type: string
                            nameSuffix:
                              description: Used to make the name of the port unique.
                                If unspecified, instead the 0-based index of the port
                                in the list is used.
                              type: string
                            network:
                              description: |-
                                Network is a query for an openstack network that the port will be created or discovered on.
                                This will fail if the query returns more than one network.
                              properties:
                                description:
                                  type: string
                                id:
                                  type: string
                                name:
                                  type: string
                                notTags:
                                  type: string
                                notTagsAny:
                                  type: string
                                projectId:
                                  type: string
                                tags:
                                  type: string
                                tagsAny:
                                  type: string
                              type: object
                            profile:
                              description: |-
                                Profile is a set of key-value pairs that are used for binding details.
                                We intentionally don't expose this as a map[string]string because we only want to enable
                                the users to set the values of the keys that are known to work in OpenStack Networking API.
                                See https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
                              properties:
                                ovsHWOffload:
                                  description: OVSHWOffload enables or disables the
                                    OVS hardware offload feature.
                                  type: boolean
                                trustedVF:
                                  description: TrustedVF enables or disables the “trusted
                                    mode” for the VF.
                                  type: boolean
                              type: object
                            propagateUplinkStatus:
                              description: PropageteUplinkStatus enables or disables
                                the propagate uplink status on the port.
                              type: boolean
                            securityGroupFilters:
                              description: The names, uuids, filters or any combination
                                these of the security groups to assign to the instance
                              items:
                                properties:
                                  description:
                                    type: string
                                  id:
                                    type: string
                                  name:
                                    type: string
                                  notTags:
                                    type: string
                                  notTagsAny:
                                    type: string
                                  projectId:
                                    type: string
                                  tags:
                                    type: string
                                  tagsAny:
                                    type: string
                                type: object
                              type: array
                            tags:
                              description: |-
                                Tags applied to the port (and corresponding trunk, if a trunk is configured.)
                                These tags are applied in addition to the instance's tags, which will also be applied to the port.
                              items:
                                type: string
                              type: array
                              x-kubernetes-list-type: set
                            trunk:
                              description: Enables and disables trunk at port level.
                                If not provided, openStackMachine.Spec.Trunk is inherited.
                              type: boolean
                            valueSpecs:
                              description: |-
                                Value specs are extra parameters to include in the API request with OpenStack.
                                This is an extension point for the API, so what they do and if they are supported,
                                depends on the specific OpenStack implementation.
                              items:
                                description: ValueSpec represents a single value_spec
                                  key-value pair.
                                properties:
                                  key:
                                    description: Key is the key in the key-value pair.
                                    type: string
                                  name:
                                    description: |-
                                      Name is the name of the key-value pair.
                                      This is just for identifying the pair and will not be sent to the OpenStack API.
                                    type: string
                                  value:
                                    description: Value is the value in the key-value
                                      pair.
                                    type: string
                                required:
                                - key
                                - name
                                - value
                                type: object
                              type: array
                              x-kubernetes-list-map-keys:
                              - name
                              x-kubernetes-list-type: map
                            vnicType:
                              description: The virtual network interface card (vNIC)
                                type that is bound to the neutron port.
                              type: string
                          type: object
                        type: array
                      providerID:
                        description: ProviderID is the unique identifier as specified
                          by the cloud provider.
                        type: string
                      rootVolume:
                        description: The volume metadata to boot from
                        properties:
                          availabilityZone:
                            type: string
                          diskSize:
                            type: integer
                          volumeType:
                            type: string
                        type: object
                      securityGroups:
                        description: The names of the security groups to assign to
                          the instance
                        items:
                          properties:
                            description:
                              type: string
                            id:
                              type: string
                            name:
                              type: string
                            notTags:
                              type: string
                            notTagsAny:
                              type: string
                            projectId:
                              type: string
                            tags:
                              type: string
                            tagsAny:
                              type: string
                          type: object
                        type: array
                      serverGroupID:
                        description: The server group to assign the machine to
                        type: string
                      serverMetadata:
                        additionalProperties:
                          type: string
                        description: Metadata mapping. Allows you to create a map
                          of key value pairs to add to the server instance.
                        type: object
                      sshKeyName:
                        description: The ssh key to inject in the instance
                        type: string
                      tags:
                        description: |-
                          Machine tags
                          Requires Nova api 2.52 minimum!
                        items:
                          type: string
                        type: array
                        x-kubernetes-list-type: set
                      trunk:
                        description: Whether the server instance is created on a trunk
                          port or not.
                        type: boolean
                    type: object
                required:
                - spec
                type: object
            required:
            - template
            type: object
        type: object
    served: false
    storage: false
  - name: v1beta1
    schema:
      openAPIV3Schema:
        description: OpenStackMachineTemplate is the Schema for the openstackmachinetemplates
          API.
        properties:
          apiVersion:
            description: |-
              APIVersion defines the versioned schema of this representation of an object.
              Servers should convert recognized schemas to the latest internal value, and
              may reject unrecognized values.
              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
            type: string
          kind:
            description: |-
              Kind is a string value representing the REST resource this object represents.
              Servers may infer this from the endpoint the client submits requests to.
              Cannot be updated.
              In CamelCase.
              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
            type: string
          metadata:
            type: object
          spec:
            description: OpenStackMachineTemplateSpec defines the desired state of
              OpenStackMachineTemplate.
            properties:
              template:
                description: OpenStackMachineTemplateResource describes the data needed
                  to create a OpenStackMachine from a template.
                properties:
                  spec:
                    description: Spec is the specification of the desired behavior
                      of the machine.
                    properties:
                      additionalBlockDevices:
                        description: AdditionalBlockDevices is a list of specifications
                          for additional block devices to attach to the server instance
                        items:
                          description: AdditionalBlockDevice is a block device to
                            attach to the server.
                          properties:
                            name:
                              description: |-
                                Name of the block device in the context of a machine.
                                If the block device is a volume, the Cinder volume will be named
                                as a combination of the machine name and this name.
                                Also, this name will be used for tagging the block device.
                                Information about the block device tag can be obtained from the OpenStack
                                metadata API or the config drive.
                                Name cannot be 'root', which is reserved for the root volume.
                              type: string
                            sizeGiB:
                              description: SizeGiB is the size of the block device
                                in gibibytes (GiB).
                              minimum: 1
                              type: integer
                            storage:
                              description: |-
                                Storage specifies the storage type of the block device and
                                additional storage options.
                              properties:
                                type:
                                  description: |-
                                    Type is the type of block device to create.
                                    This can be either "Volume" or "Local".
                                  type: string
                                volume:
                                  description: Volume contains additional storage
                                    options for a volume block device.
                                  properties:
                                    availabilityZone:
                                      description: |-
                                        AvailabilityZone is the volume availability zone to create the volume
                                        in. If not specified, the volume will be created without an explicit
                                        availability zone.
                                      properties:
                                        from:
                                          default: Name
                                          description: |-
                                            From specifies where we will obtain the availability zone for the
                                            volume. The options are "Name" and "Machine". If "Name" is specified
                                            then the Name field must also be specified. If "Machine" is specified
                                            the volume will use the value of FailureDomain, if any, from the
                                            associated Machine.
                                          enum:
                                          - Name
                                          - Machine
                                          type: string
                                        name:
                                          description: |-
                                            Name is the name of a volume availability zone to use. It is required
                                            if From is "Name". The volume availability zone name may not contain
                                            spaces.
                                          minLength: 1
                                          pattern: ^[^ ]+$
                                          type: string
                                      type: object
                                      x-kubernetes-validations:
                                      - message: name is required when from is 'Name'
                                          or default
                                        rule: '!has(self.from) || self.from == ''Name''
                                          ? has(self.name) : !has(self.name)'
                                    type:
                                      description: |-
                                        Type is the Cinder volume type of the volume.
                                        If omitted, the default Cinder volume type that is configured in the OpenStack cloud
                                        will be used.
                                      type: string
                                  type: object
                              required:
                              - type
                              type: object
                          required:
                          - name
                          - sizeGiB
                          - storage
                          type: object
                        type: array
                        x-kubernetes-list-map-keys:
                        - name
                        x-kubernetes-list-type: map
                      configDrive:
                        description: Config Drive support
                        type: boolean
                      flavor:
                        description: The flavor reference for the flavor for your
                          server instance.
                        minLength: 1
                        type: string
                      flavorID:
                        description: |-
                          FlavorID allows flavors to be specified by ID.  This field takes precedence
                          over Flavor.
                        minLength: 1
                        type: string
                      floatingIPPoolRef:
                        description: |-
                          floatingIPPoolRef is a reference to a IPPool that will be assigned
                          to an IPAddressClaim. Once the IPAddressClaim is fulfilled, the FloatingIP
                          will be assigned to the OpenStackMachine.
                        properties:
                          apiGroup:
                            description: |-
                              APIGroup is the group for the resource being referenced.
                              If APIGroup is not specified, the specified Kind must be in the core API group.
                              For any other third-party types, APIGroup is required.
                            type: string
                          kind:
                            description: Kind is the type of resource being referenced
                            type: string
                          name:
                            description: Name is the name of resource being referenced
                            type: string
                        required:
                        - kind
                        - name
                        type: object
                        x-kubernetes-map-type: atomic
                      identityRef:
                        description: |-
                          IdentityRef is a reference to a secret holding OpenStack credentials
                          to be used when reconciling this machine. If not specified, the
                          credentials specified in the cluster will be used.
                        properties:
                          cloudName:
                            description: CloudName specifies the name of the entry
                              in the clouds.yaml file to use.
                            type: string
                          name:
                            description: |-
                              Name is the name of a secret in the same namespace as the resource being provisioned.
                              The secret must contain a key named `clouds.yaml` which contains an OpenStack clouds.yaml file.
                              The secret may optionally contain a key named `cacert` containing a PEM-encoded CA certificate.
                            type: string
                          region:
                            description: |-
                              Region specifies an OpenStack region to use. If specified, it overrides
                              any value in clouds.yaml. If specified for an OpenStackMachine, its
                              value will be included in providerID.
                            type: string
                        required:
                        - cloudName
                        - name
                        type: object
                        x-kubernetes-validations:
                        - message: region is immutable
                          rule: (!has(self.region) && !has(oldSelf.region)) || self.region
                            == oldSelf.region
                      image:
                        description: |-
                          The image to use for your server instance.
                          If the rootVolume is specified, this will be used when creating the root volume.
                        maxProperties: 1
                        minProperties: 1
                        properties:
                          filter:
                            description: |-
                              Filter describes a query for an image. If specified, the combination
                              of name and tags must return a single matching image or an error will
                              be raised.
                            minProperties: 1
                            properties:
                              name:
                                description: The name of the desired image. If specified,
                                  the combination of name and tags must return a single
                                  matching image or an error will be raised.
                                type: string
                              tags:
                                description: The tags associated with the desired
                                  image. If specified, the combination of name and
                                  tags must return a single matching image or an error
                                  will be raised.
                                items:
                                  type: string
                                type: array
                                x-kubernetes-list-type: set
                            type: object
                          id:
                            description: ID is the uuid of the image. ID will not
                              be validated before use.
                            format: uuid
                            type: string
                          imageRef:
                            description: |-
                              ImageRef is a reference to an ORC Image in the same namespace as the
                              referring object.
                            properties:
                              name:
                                description: Name is the name of the referenced resource
                                type: string
                            required:
                            - name
                            type: object
                        type: object
                      ports:
                        description: |-
                          Ports to be attached to the server instance. They are created if a port with the given name does not already exist.
                          If not specified a default port will be added for the default cluster network.
                        items:
                          properties:
                            adminStateUp:
                              description: AdminStateUp specifies whether the port
                                should be created in the up (true) or down (false)
                                state. The default is up.
                              type: boolean
                            allowedAddressPairs:
                              description: |-
                                AllowedAddressPairs is a list of address pairs which Neutron will
                                allow the port to send traffic from in addition to the port's
                                addresses. If not specified, the MAC Address will be the MAC Address
                                of the port. Depending on the configuration of Neutron, it may be
                                supported to specify a CIDR instead of a specific IP address.
                              items:
                                properties:
                                  ipAddress:
                                    description: |-
                                      IPAddress is the IP address of the allowed address pair. Depending on
                                      the configuration of Neutron, it may be supported to specify a CIDR
                                      instead of a specific IP address.
                                    type: string
                                  macAddress:
                                    description: |-
                                      MACAddress is the MAC address of the allowed address pair. If not
                                      specified, the MAC address will be the MAC address of the port.
                                    type: string
                                required:
                                - ipAddress
                                type: object
                              type: array
                            description:
                              description: Description is a human-readable description
                                for the port.
                              type: string
                            disablePortSecurity:
                              description: |-
                                DisablePortSecurity enables or disables the port security when set.
                                When not set, it takes the value of the corresponding field at the network level.
                              type: boolean
                            fixedIPs:
                              description: FixedIPs is a list of pairs of subnet and/or
                                IP address to assign to the port. If specified, these
                                must be subnets of the port's network.
                              items:
                                properties:
                                  ipAddress:
                                    description: |-
                                      IPAddress is a specific IP address to assign to the port. If Subnet
                                      is also specified, IPAddress must be a valid IP address in the
                                      subnet. If Subnet is not specified, IPAddress must be a valid IP
                                      address in any subnet of the port's network.
                                    type: string
                                  subnet:
                                    description: |-
                                      Subnet is an openstack subnet query that will return the id of a subnet to create
                                      the fixed IP of a port in. This query must not return more than one subnet.
                                    maxProperties: 1
                                    minProperties: 1
                                    properties:
                                      filter:
                                        description: Filter specifies a filter to
                                          select the subnet. It must match exactly
                                          one subnet.
                                        minProperties: 1
                                        properties:
                                          cidr:
                                            type: string
                                          description:
                                            type: string
                                          gatewayIP:
                                            type: string
                                          ipVersion:
                                            type: integer
                                          ipv6AddressMode:
                                            type: string
                                          ipv6RAMode:
                                            type: string
                                          name:
                                            type: string
                                          notTags:
                                            description: |-
                                              NotTags is a list of tags to filter by. If specified, resources which
                                              contain all of the given tags will be excluded from the result.
                                            items:
                                              description: |-
                                                NeutronTag represents a tag on a Neutron resource.
                                                It may not be empty and may not contain commas.
                                              minLength: 1
                                              pattern: ^[^,]+$
                                              type: string
                                            type: array
                                            x-kubernetes-list-type: set
                                          notTagsAny:
                                            description: |-
                                              NotTagsAny is a list of tags to filter by. If specified, resources
                                              which contain any of the given tags will be excluded from the result.
                                            items:
                                              description: |-
                                                NeutronTag represents a tag on a Neutron resource.
                                                It may not be empty and may not contain commas.
                                              minLength: 1
                                              pattern: ^[^,]+$
                                              type: string
                                            type: array
                                            x-kubernetes-list-type: set
                                          projectID:
                                            type: string
                                          tags:
                                            description: |-
                                              Tags is a list of tags to filter by. If specified, the resource must
                                              have all of the tags specified to be included in the result.
                                            items:
                                              description: |-
                                                NeutronTag represents a tag on a Neutron resource.
                                                It may not be empty and may not contain commas.
                                              minLength: 1
                                              pattern: ^[^,]+$
                                              type: string
                                            type: array
                                            x-kubernetes-list-type: set
                                          tagsAny:
                                            description: |-
                                              TagsAny is a list of tags to filter by. If specified, the resource
                                              must have at least one of the tags specified to be included in the
                                              result.
                                            items:
                                              description: |-
                                                NeutronTag represents a tag on a Neutron resource.
                                                It may not be empty and may not contain commas.
                                              minLength: 1
                                              pattern: ^[^,]+$
                                              type: string
                                            type: array
                                            x-kubernetes-list-type: set
                                        type: object
                                      id:
                                        description: ID is the uuid of the subnet.
                                          It will not be validated.
                                        format: uuid
                                        type: string
                                    type: object
                                type: object
                              type: array
                              x-kubernetes-list-type: atomic
                            hostID:
                              description: HostID specifies the ID of the host where
                                the port resides.
                              type: string
                            macAddress:
                              description: MACAddress specifies the MAC address of
                                the port. If not specified, the MAC address will be
                                generated.
                              type: string
                            nameSuffix:
                              description: NameSuffix will be appended to the name
                                of the port if specified. If unspecified, instead
                                the 0-based index of the port in the list is used.
                              type: string
                            network:
                              description: |-
                                Network is a query for an openstack network that the port will be created or discovered on.
                                This will fail if the query returns more than one network.
                              maxProperties: 1
                              minProperties: 1
                              properties:
                                filter:
                                  description: Filter specifies a filter to select
                                    an OpenStack network. If provided, cannot be empty.
                                  minProperties: 1
                                  properties:
                                    description:
                                      type: string
                                    name:
                                      type: string
                                    notTags:
                                      description: |-
                                        NotTags is a list of tags to filter by. If specified, resources which
                                        contain all of the given tags will be excluded from the result.
                                      items:
                                        description: |-
                                          NeutronTag represents a tag on a Neutron resource.
                                          It may not be empty and may not contain commas.
                                        minLength: 1
                                        pattern: ^[^,]+$
                                        type: string
                                      type: array
                                      x-kubernetes-list-type: set
                                    notTagsAny:
                                      description: |-
                                        NotTagsAny is a list of tags to filter by. If specified, resources
                                        which contain any of the given tags will be excluded from the result.
                                      items:
                                        description: |-
                                          NeutronTag represents a tag on a Neutron resource.
                                          It may not be empty and may not contain commas.
                                        minLength: 1
                                        pattern: ^[^,]+$
                                        type: string
                                      type: array
                                      x-kubernetes-list-type: set
                                    projectID:
                                      type: string
                                    tags:
                                      description: |-
                                        Tags is a list of tags to filter by. If specified, the resource must
                                        have all of the tags specified to be included in the result.
                                      items:
                                        description: |-
                                          NeutronTag represents a tag on a Neutron resource.
                                          It may not be empty and may not contain commas.
                                        minLength: 1
                                        pattern: ^[^,]+$
                                        type: string
                                      type: array
                                      x-kubernetes-list-type: set
                                    tagsAny:
                                      description: |-
                                        TagsAny is a list of tags to filter by. If specified, the resource
                                        must have at least one of the tags specified to be included in the
                                        result.
                                      items:
                                        description: |-
                                          NeutronTag represents a tag on a Neutron resource.
                                          It may not be empty and may not contain commas.
                                        minLength: 1
                                        pattern: ^[^,]+$
                                        type: string
                                      type: array
                                      x-kubernetes-list-type: set
                                  type: object
                                id:
                                  description: ID is the ID of the network to use.
                                    If ID is provided, the other filters cannot be
                                    provided. Must be in UUID format.
                                  format: uuid
                                  type: string
                              type: object
                            profile:
                              description: |-
                                Profile is a set of key-value pairs that are used for binding
                                details. We intentionally don't expose this as a map[string]string
                                because we only want to enable the users to set the values of the
                                keys that are known to work in OpenStack Networking API.  See
                                https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
                                To set profiles, your tenant needs permissions rule:create_port, and
                                rule:create_port:binding:profile
                              properties:
                                ovsHWOffload:
                                  description: |-
                                    OVSHWOffload enables or disables the OVS hardware offload feature.
                                    This flag is not required on OpenStack clouds since Yoga as Nova will set it automatically when the port is attached.
                                    See: https://bugs.launchpad.net/nova/+bug/2020813
                                  type: boolean
                                trustedVF:
                                  description: TrustedVF enables or disables the “trusted
                                    mode” for the VF.
                                  type: boolean
                              type: object
                            propagateUplinkStatus:
                              description: PropageteUplinkStatus enables or disables
                                the propagate uplink status on the port.
                              type: boolean
                            securityGroups:
                              description: SecurityGroups is a list of the names,
                                uuids, filters or any combination these of the security
                                groups to assign to the instance.
                              items:
                                description: SecurityGroupParam specifies an OpenStack
                                  security group. It may be specified by ID or filter,
                                  but not both.
                                maxProperties: 1
                                minProperties: 1
                                properties:
                                  filter:
                                    description: Filter specifies a query to select
                                      an OpenStack security group. If provided, cannot
                                      be empty.
                                    minProperties: 1
                                    properties:
                                      description:
                                        type: string
                                      name:
                                        type: string
                                      notTags:
                                        description: |-
                                          NotTags is a list of tags to filter by. If specified, resources which
                                          contain all of the given tags will be excluded from the result.
                                        items:
                                          description: |-
                                            NeutronTag represents a tag on a Neutron resource.
                                            It may not be empty and may not contain commas.
                                          minLength: 1
                                          pattern: ^[^,]+$
                                          type: string
                                        type: array
                                        x-kubernetes-list-type: set
                                      notTagsAny:
                                        description: |-
                                          NotTagsAny is a list of tags to filter by. If specified, resources
                                          which contain any of the given tags will be excluded from the result.
                                        items:
                                          description: |-
                                            NeutronTag represents a tag on a Neutron resource.
                                            It may not be empty and may not contain commas.
                                          minLength: 1
                                          pattern: ^[^,]+$
                                          type: string
                                        type: array
                                        x-kubernetes-list-type: set
                                      projectID:
                                        type: string
                                      tags:
                                        description: |-
                                          Tags is a list of tags to filter by. If specified, the resource must
                                          have all of the tags specified to be included in the result.
                                        items:
                                          description: |-
                                            NeutronTag represents a tag on a Neutron resource.
                                            It may not be empty and may not contain commas.
                                          minLength: 1
                                          pattern: ^[^,]+$
                                          type: string
                                        type: array
                                        x-kubernetes-list-type: set
                                      tagsAny:
                                        description: |-
                                          TagsAny is a list of tags to filter by. If specified, the resource
                                          must have at least one of the tags specified to be included in the
                                          result.
                                        items:
                                          description: |-
                                            NeutronTag represents a tag on a Neutron resource.
                                            It may not be empty and may not contain commas.
                                          minLength: 1
                                          pattern: ^[^,]+$
                                          type: string
                                        type: array
                                        x-kubernetes-list-type: set
                                    type: object
                                  id:
                                    description: ID is the ID of the security group
                                      to use. If ID is provided, the other filters
                                      cannot be provided. Must be in UUID format.
                                    format: uuid
                                    type: string
                                type: object
                              type: array
                              x-kubernetes-list-type: atomic
                            tags:
                              description: |-
                                Tags applied to the port (and corresponding trunk, if a trunk is configured.)
                                These tags are applied in addition to the instance's tags, which will also be applied to the port.
                              items:
                                type: string
                              type: array
                              x-kubernetes-list-type: set
                            trunk:
                              description: |-
                                Trunk specifies whether trunking is enabled at the port level. If not
                                provided the value is inherited from the machine, or false for a
                                bastion host.
                              type: boolean
                            valueSpecs:
                              description: |-
                                Value specs are extra parameters to include in the API request with OpenStack.
                                This is an extension point for the API, so what they do and if they are supported,
                                depends on the specific OpenStack implementation.
                              items:
                                description: ValueSpec represents a single value_spec
                                  key-value pair.
                                properties:
                                  key:
                                    description: Key is the key in the key-value pair.
                                    type: string
                                  name:
                                    description: |-
                                      Name is the name of the key-value pair.
                                      This is just for identifying the pair and will not be sent to the OpenStack API.
                                    type: string
                                  value:
                                    description: Value is the value in the key-value
                                      pair.
                                    type: string
                                required:
                                - key
                                - name
                                - value
                                type: object
                              type: array
                              x-kubernetes-list-map-keys:
                              - name
                              x-kubernetes-list-type: map
                            vnicType:
                              description: |-
                                VNICType specifies the type of vNIC which this port should be
                                attached to. This is used to determine which mechanism driver(s) to
                                be used to bind the port. The valid values are normal, macvtap,
                                direct, baremetal, direct-physical, virtio-forwarder, smart-nic and
                                remote-managed, although these values will not be validated in this
                                API to ensure compatibility with future neutron changes or custom
                                implementations. What type of vNIC is actually available depends on
                                deployments. If not specified, the Neutron default value is used.
                              type: string
                          type: object
                        type: array
                      providerID:
                        description: ProviderID is the unique identifier as specified
                          by the cloud provider.
                        type: string
                      rootVolume:
                        description: The volume metadata to boot from
                        properties:
                          availabilityZone:
                            description: |-
                              AvailabilityZone is the volume availability zone to create the volume
                              in. If not specified, the volume will be created without an explicit
                              availability zone.
                            properties:
                              from:
                                default: Name
                                description: |-
                                  From specifies where we will obtain the availability zone for the
                                  volume. The options are "Name" and "Machine". If "Name" is specified
                                  then the Name field must also be specified. If "Machine" is specified
                                  the volume will use the value of FailureDomain, if any, from the
                                  associated Machine.
                                enum:
                                - Name
                                - Machine
                                type: string
                              name:
                                description: |-
                                  Name is the name of a volume availability zone to use. It is required
                                  if From is "Name". The volume availability zone name may not contain
                                  spaces.
                                minLength: 1
                                pattern: ^[^ ]+$
                                type: string
                            type: object
                            x-kubernetes-validations:
                            - message: name is required when from is 'Name' or default
                              rule: '!has(self.from) || self.from == ''Name'' ? has(self.name)
                                : !has(self.name)'
                          sizeGiB:
                            description: SizeGiB is the size of the block device in
                              gibibytes (GiB).
                            minimum: 1
                            type: integer
                          type:
                            description: |-
                              Type is the Cinder volume type of the volume.
                              If omitted, the default Cinder volume type that is configured in the OpenStack cloud
                              will be used.
                            type: string
                        required:
                        - sizeGiB
                        type: object
                      schedulerHintAdditionalProperties:
                        description: |-
                          SchedulerHintAdditionalProperties are arbitrary key/value pairs that provide additional hints
                          to the OpenStack scheduler. These hints can influence how instances are placed on the infrastructure,
                          such as specifying certain host aggregates or availability zones.
                        items:
                          description: |-
                            SchedulerHintAdditionalProperty represents a single additional property for a scheduler hint.
                            It includes a Name to identify the property and a Value that can be of various types.
                          properties:
                            name:
                              description: |-
                                Name is the name of the scheduler hint property.
                                It is a unique identifier for the property.
                              minLength: 1
                              type: string
                            value:
                              description: |-
                                Value is the value of the scheduler hint property, which can be of various types
                                (e.g., bool, string, int). The type is indicated by the Value.Type field.
                              properties:
                                bool:
                                  description: |-
                                    Bool is the boolean value of the scheduler hint, used when Type is "Bool".
                                    This field is required if type is 'Bool', and must not be set otherwise.
                                  type: boolean
                                number:
                                  description: |-
                                    Number is the integer value of the scheduler hint, used when Type is "Number".
                                    This field is required if type is 'Number', and must not be set otherwise.
                                  type: integer
                                string:
                                  description: |-
                                    String is the string value of the scheduler hint, used when Type is "String".
                                    This field is required if type is 'String', and must not be set otherwise.
                                  maxLength: 255
                                  minLength: 1
                                  type: string
                                type:
                                  description: |-
                                    Type represents the type of the value.
                                    Valid values are Bool, String, and Number.
                                  enum:
                                  - Bool
                                  - String
                                  - Number
                                  type: string
                              required:
                              - type
                              type: object
                              x-kubernetes-validations:
                              - message: bool is required when type is Bool, and forbidden
                                  otherwise
                                rule: 'has(self.type) && self.type == ''Bool'' ? has(self.bool)
                                  : !has(self.bool)'
                              - message: number is required when type is Number, and
                                  forbidden otherwise
                                rule: 'has(self.type) && self.type == ''Number'' ?
                                  has(self.number) : !has(self.number)'
                              - message: string is required when type is String, and
                                  forbidden otherwise
                                rule: 'has(self.type) && self.type == ''String'' ?
                                  has(self.string) : !has(self.string)'
                          required:
                          - name
                          - value
                          type: object
                        type: array
                        x-kubernetes-list-map-keys:
                        - name
                        x-kubernetes-list-type: map
                      securityGroups:
                        description: The names of the security groups to assign to
                          the instance
                        items:
                          description: SecurityGroupParam specifies an OpenStack security
                            group. It may be specified by ID or filter, but not both.
                          maxProperties: 1
                          minProperties: 1
                          properties:
                            filter:
                              description: Filter specifies a query to select an OpenStack
                                security group. If provided, cannot be empty.
                              minProperties: 1
                              properties:
                                description:
                                  type: string
                                name:
                                  type: string
                                notTags:
                                  description: |-
                                    NotTags is a list of tags to filter by. If specified, resources which
                                    contain all of the given tags will be excluded from the result.
                                  items:
                                    description: |-
                                      NeutronTag represents a tag on a Neutron resource.
                                      It may not be empty and may not contain commas.
                                    minLength: 1
                                    pattern: ^[^,]+$
                                    type: string
                                  type: array
                                  x-kubernetes-list-type: set
                                notTagsAny:
                                  description: |-
                                    NotTagsAny is a list of tags to filter by. If specified, resources
                                    which contain any of the given tags will be excluded from the result.
                                  items:
                                    description: |-
                                      NeutronTag represents a tag on a Neutron resource.
                                      It may not be empty and may not contain commas.
                                    minLength: 1
                                    pattern: ^[^,]+$
                                    type: string
                                  type: array
                                  x-kubernetes-list-type: set
                                projectID:
                                  type: string
                                tags:
                                  description: |-
                                    Tags is a list of tags to filter by. If specified, the resource must
                                    have all of the tags specified to be included in the result.
                                  items:
                                    description: |-
                                      NeutronTag represents a tag on a Neutron resource.
                                      It may not be empty and may not contain commas.
                                    minLength: 1
                                    pattern: ^[^,]+$
                                    type: string
                                  type: array
                                  x-kubernetes-list-type: set
                                tagsAny:
                                  description: |-
                                    TagsAny is a list of tags to filter by. If specified, the resource
                                    must have at least one of the tags specified to be included in the
                                    result.
                                  items:
                                    description: |-
                                      NeutronTag represents a tag on a Neutron resource.
                                      It may not be empty and may not contain commas.
                                    minLength: 1
                                    pattern: ^[^,]+$
                                    type: string
                                  type: array
                                  x-kubernetes-list-type: set
                              type: object
                            id:
                              description: ID is the ID of the security group to use.
                                If ID is provided, the other filters cannot be provided.
                                Must be in UUID format.
                              format: uuid
                              type: string
                          type: object
                        type: array
                      serverGroup:
                        description: The server group to assign the machine to.
                        maxProperties: 1
                        minProperties: 1
                        properties:
                          filter:
                            description: Filter specifies a query to select an OpenStack
                              server group. If provided, it cannot be empty.
                            minProperties: 1
                            properties:
                              name:
                                description: Name is the name of a server group to
                                  look for.
                                type: string
                            type: object
                          id:
                            description: ID is the ID of the server group to use.
                            format: uuid
                            type: string
                        type: object
                      serverMetadata:
                        description: Metadata mapping. Allows you to create a map
                          of key value pairs to add to the server instance.
                        items:
                          properties:
                            key:
                              description: Key is the server metadata key
                              maxLength: 255
                              type: string
                            value:
                              description: Value is the server metadata value
                              maxLength: 255
                              type: string
                          required:
                          - key
                          - value
                          type: object
                        type: array
                        x-kubernetes-list-map-keys:
                        - key
                        x-kubernetes-list-type: map
                      sshKeyName:
                        description: The ssh key to inject in the instance
                        type: string
                      tags:
                        description: |-
                          Tags which will be added to the machine and all dependent resources
                          which support them. These are in addition to Tags defined on the
                          cluster.
                          Requires Nova api 2.52 minimum!
                        items:
                          type: string
                        type: array
                        x-kubernetes-list-type: set
                      trunk:
                        description: Whether the server instance is created on a trunk
                          port or not.
                        type: boolean
                    required:
                    - image
                    type: object
                    x-kubernetes-validations:
                    - message: at least one of flavor or flavorID must be set
                      rule: (has(self.flavor) || has(self.flavorID))
                required:
                - spec
                type: object
            required:
            - template
            type: object
        type: object
    served: true
    storage: true
status:
  acceptedNames:
    kind: ""
    plural: ""
  conditions: null
  storedVersions: null
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    cert-manager.io/inject-ca-from: capo-system/capo-serving-cert
    controller-gen.kubebuilder.io/version: v0.16.5
  creationTimestamp: null
  labels:
    cluster.x-k8s.io/provider: infrastructure-openstack
    cluster.x-k8s.io/v1beta1: v1alpha7_v1beta1
    clusterctl.cluster.x-k8s.io: ""
  name: openstackservers.infrastructure.cluster.x-k8s.io
spec:
  group: infrastructure.cluster.x-k8s.io
  names:
    categories:
    - cluster-api
    kind: OpenStackServer
    listKind: OpenStackServerList
    plural: openstackservers
    shortNames:
    - oss
    singular: openstackserver
  scope: Namespaced
  versions:
  - additionalPrinterColumns:
    - description: OpenStack instance state
      jsonPath: .status.instanceState
      name: InstanceState
      type: string
    - description: OpenStack instance ready status
      jsonPath: .status.ready
      name: Ready
      type: string
    - description: OpenStack instance ID
      jsonPath: .status.instanceID
      name: InstanceID
      type: string
    - description: Time duration since creation of OpenStack instance
      jsonPath: .metadata.creationTimestamp
      name: Age
      type: date
    name: v1alpha1
    schema:
      openAPIV3Schema:
        description: OpenStackServer is the Schema for the openstackservers API.
        properties:
          apiVersion:
            description: |-
              APIVersion defines the versioned schema of this representation of an object.
              Servers should convert recognized schemas to the latest internal value, and
              may reject unrecognized values.
              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
            type: string
          kind:
            description: |-
              Kind is a string value representing the REST resource this object represents.
              Servers may infer this from the endpoint the client submits requests to.
              Cannot be updated.
              In CamelCase.
              More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
            type: string
          metadata:
            type: object
          spec:
            description: OpenStackServerSpec defines the desired state of OpenStackServer.
            properties:
              additionalBlockDevices:
                description: AdditionalBlockDevices is a list of specifications for
                  additional block devices to attach to the server instance.
                items:
                  description: AdditionalBlockDevice is a block device to attach to
                    the server.
                  properties:
                    name:
                      description: |-
                        Name of the block device in the context of a machine.
                        If the block device is a volume, the Cinder volume will be named
                        as a combination of the machine name and this name.
                        Also, this name will be used for tagging the block device.
                        Information about the block device tag can be obtained from the OpenStack
                        metadata API or the config drive.
                        Name cannot be 'root', which is reserved for the root volume.
                      type: string
                    sizeGiB:
                      description: SizeGiB is the size of the block device in gibibytes
                        (GiB).
                      minimum: 1
                      type: integer
                    storage:
                      description: |-
                        Storage specifies the storage type of the block device and
                        additional storage options.
                      properties:
                        type:
                          description: |-
                            Type is the type of block device to create.
                            This can be either "Volume" or "Local".
                          type: string
                        volume:
                          description: Volume contains additional storage options
                            for a volume block device.
                          properties:
                            availabilityZone:
                              description: |-
                                AvailabilityZone is the volume availability zone to create the volume
                                in. If not specified, the volume will be created without an explicit
                                availability zone.
                              properties:
                                from:
                                  default: Name
                                  description: |-
                                    From specifies where we will obtain the availability zone for the
                                    volume. The options are "Name" and "Machine". If "Name" is specified
                                    then the Name field must also be specified. If "Machine" is specified
                                    the volume will use the value of FailureDomain, if any, from the
                                    associated Machine.
                                  enum:
                                  - Name
                                  - Machine
                                  type: string
                                name:
                                  description: |-
                                    Name is the name of a volume availability zone to use. It is required
                                    if From is "Name". The volume availability zone name may not contain
                                    spaces.
                                  minLength: 1
                                  pattern: ^[^ ]+$
                                  type: string
                              type: object
                              x-kubernetes-validations:
                              - message: name is required when from is 'Name' or default
                                rule: '!has(self.from) || self.from == ''Name'' ?
                                  has(self.name) : !has(self.name)'
                            type:
                              description: |-
                                Type is the Cinder volume type of the volume.
                                If omitted, the default Cinder volume type that is configured in the OpenStack cloud
                                will be used.
                              type: string
                          type: object
                      required:
                      - type
                      type: object
                  required:
                  - name
                  - sizeGiB
                  - storage
                  type: object
                type: array
                x-kubernetes-list-map-keys:
                - name
                x-kubernetes-list-type: map
              availabilityZone:
                description: AvailabilityZone is the availability zone in which to
                  create the server instance.
                type: string
              configDrive:
                description: ConfigDrive is a flag to enable config drive for the
                  server instance.
                type: boolean
              flavor:
                description: The flavor reference for the flavor for the server instance.
                minLength: 1
                type: string
              flavorID:
                description: |-
                  FlavorID allows flavors to be specified by ID.  This field takes precedence
                  over Flavor.
                minLength: 1
                type: string
              floatingIPPoolRef:
                description: FloatingIPPoolRef is a reference to a FloatingIPPool
                  to allocate a floating IP from.
                properties:
                  apiGroup:
                    description: |-
                      APIGroup is the group for the resource being referenced.
                      If APIGroup is not specified, the specified Kind must be in the core API group.
                      For any other third-party types, APIGroup is required.
                    type: string
                  kind:
                    description: Kind is the type of resource being referenced
                    type: string
                  name:
                    description: Name is the name of resource being referenced
                    type: string
                required:
                - kind
                - name
                type: object
                x-kubernetes-map-type: atomic
              identityRef:
                description: IdentityRef is a reference to a secret holding OpenStack
                  credentials.
                properties:
                  cloudName:
                    description: CloudName specifies the name of the entry in the
                      clouds.yaml file to use.
                    type: string
                  name:
                    description: |-
                      Name is the name of a secret in the same namespace as the resource being provisioned.
                      The secret must contain a key named `clouds.yaml` which contains an OpenStack clouds.yaml file.
                      The secret may optionally contain a key named `cacert` containing a PEM-encoded CA certificate.
                    type: string
                  region:
                    description: |-
                      Region specifies an OpenStack region to use. If specified, it overrides
                      any value in clouds.yaml. If specified for an OpenStackMachine, its
                      value will be included in providerID.
                    type: string
                required:
                - cloudName
                - name
                type: object
                x-kubernetes-validations:
                - message: region is immutable
                  rule: (!has(self.region) && !has(oldSelf.region)) || self.region
                    == oldSelf.region
              image:
                description: The image to use for the server instance.
                maxProperties: 1
                minProperties: 1
                properties:
                  filter:
                    description: |-
                      Filter describes a query for an image. If specified, the combination
                      of name and tags must return a single matching image or an error will
                      be raised.
                    minProperties: 1
                    properties:
                      name:
                        description: The name of the desired image. If specified,
                          the combination of name and tags must return a single matching
                          image or an error will be raised.
                        type: string
                      tags:
                        description: The tags associated with the desired image. If
                          specified, the combination of name and tags must return
                          a single matching image or an error will be raised.
                        items:
                          type: string
                        type: array
                        x-kubernetes-list-type: set
                    type: object
                  id:
                    description: ID is the uuid of the image. ID will not be validated
                      before use.
                    format: uuid
                    type: string
                  imageRef:
                    description: |-
                      ImageRef is a reference to an ORC Image in the same namespace as the
                      referring object.
                    properties:
                      name:
                        description: Name is the name of the referenced resource
                        type: string
                    required:
                    - name
                    type: object
                type: object
              ports:
                description: Ports to be attached to the server instance.
                items:
                  properties:
                    adminStateUp:
                      description: AdminStateUp specifies whether the port should
                        be created in the up (true) or down (false) state. The default
                        is up.
                      type: boolean
                    allowedAddressPairs:
                      description: |-
                        AllowedAddressPairs is a list of address pairs which Neutron will
                        allow the port to send traffic from in addition to the port's
                        addresses. If not specified, the MAC Address will be the MAC Address
                        of the port. Depending on the configuration of Neutron, it may be
                        supported to specify a CIDR instead of a specific IP address.
                      items:
                        properties:
                          ipAddress:
                            description: |-
                              IPAddress is the IP address of the allowed address pair. Depending on
                              the configuration of Neutron, it may be supported to specify a CIDR
                              instead of a specific IP address.
                            type: string
                          macAddress:
                            description: |-
                              MACAddress is the MAC address of the allowed address pair. If not
                              specified, the MAC address will be the MAC address of the port.
                            type: string
                        required:
                        - ipAddress
                        type: object
                      type: array
                    description:
                      description: Description is a human-readable description for
                        the port.
                      type: string
                    disablePortSecurity:
                      description: |-
                        DisablePortSecurity enables or disables the port security when set.
                        When not set, it takes the value of the corresponding field at the network level.
                      type: boolean
                    fixedIPs:
                      description: FixedIPs is a list of pairs of subnet and/or IP
                        address to assign to the port. If specified, these must be
                        subnets of the port's network.
                      items:
                        properties:
                          ipAddress:
                            description: |-
                              IPAddress is a specific IP address to assign to the port. If Subnet
                              is also specified, IPAddress must be a valid IP address in the
                              subnet. If Subnet is not specified, IPAddress must be a valid IP
                              address in any subnet of the port's network.
                            type: string
                          subnet:
                            description: |-
                              Subnet is an openstack subnet query that will return the id of a subnet to create
                              the fixed IP of a port in. This query must not return more than one subnet.
                            maxProperties: 1
                            minProperties: 1
                            properties:
                              filter:
                                description: Filter specifies a filter to select the
                                  subnet. It must match exactly one subnet.
                                minProperties: 1
                                properties:
                                  cidr:
                                    type: string
                                  description:
                                    type: string
                                  gatewayIP:
                                    type: string
                                  ipVersion:
                                    type: integer
                                  ipv6AddressMode:
                                    type: string
                                  ipv6RAMode:
                                    type: string
                                  name:
                                    type: string
                                  notTags:
                                    description: |-
                                      NotTags is a list of tags to filter by. If specified, resources which
                                      contain all of the given tags will be excluded from the result.
                                    items:
                                      description: |-
                                        NeutronTag represents a tag on a Neutron resource.
                                        It may not be empty and may not contain commas.
                                      minLength: 1
                                      pattern: ^[^,]+$
                                      type: string
                                    type: array
                                    x-kubernetes-list-type: set
                                  notTagsAny:
                                    description: |-
                                      NotTagsAny is a list of tags to filter by. If specified, resources
                                      which contain any of the given tags will be excluded from the result.
                                    items:
                                      description: |-
                                        NeutronTag represents a tag on a Neutron resource.
                                        It may not be empty and may not contain commas.
                                      minLength: 1
                                      pattern: ^[^,]+$
                                      type: string
                                    type: array
                                    x-kubernetes-list-type: set
                                  projectID:
                                    type: string
                                  tags:
                                    description: |-
                                      Tags is a list of tags to filter by. If specified, the resource must
                                      have all of the tags specified to be included in the result.
                                    items:
                                      description: |-
                                        NeutronTag represents a tag on a Neutron resource.
                                        It may not be empty and may not contain commas.
                                      minLength: 1
                                      pattern: ^[^,]+$
                                      type: string
                                    type: array
                                    x-kubernetes-list-type: set
                                  tagsAny:
                                    description: |-
                                      TagsAny is a list of tags to filter by. If specified, the resource
                                      must have at least one of the tags specified to be included in the
                                      result.
                                    items:
                                      description: |-
                                        NeutronTag represents a tag on a Neutron resource.
                                        It may not be empty and may not contain commas.
                                      minLength: 1
                                      pattern: ^[^,]+$
                                      type: string
                                    type: array
                                    x-kubernetes-list-type: set
                                type: object
                              id:
                                description: ID is the uuid of the subnet. It will
                                  not be validated.
                                format: uuid
                                type: string
                            type: object
                        type: object
                      type: array
                      x-kubernetes-list-type: atomic
                    hostID:
                      description: HostID specifies the ID of the host where the port
                        resides.
                      type: string
                    macAddress:
                      description: MACAddress specifies the MAC address of the port.
                        If not specified, the MAC address will be generated.
                      type: string
                    nameSuffix:
                      description: NameSuffix will be appended to the name of the
                        port if specified. If unspecified, instead the 0-based index
                        of the port in the list is used.
                      type: string
                    network:
                      description: |-
                        Network is a query for an openstack network that the port will be created or discovered on.
                        This will fail if the query returns more than one network.
                      maxProperties: 1
                      minProperties: 1
                      properties:
                        filter:
                          description: Filter specifies a filter to select an OpenStack
                            network. If provided, cannot be empty.
                          minProperties: 1
                          properties:
                            description:
                              type: string
                            name:
                              type: string
                            notTags:
                              description: |-
                                NotTags is a list of tags to filter by. If specified, resources which
                                contain all of the given tags will be excluded from the result.
                              items:
                                description: |-
                                  NeutronTag represents a tag on a Neutron resource.
                                  It may not be empty and may not contain commas.
                                minLength: 1
                                pattern: ^[^,]+$
                                type: string
                              type: array
                              x-kubernetes-list-type: set
                            notTagsAny:
                              description: |-
                                NotTagsAny is a list of tags to filter by. If specified, resources
                                which contain any of the given tags will be excluded from the result.
                              items:
                                description: |-
                                  NeutronTag represents a tag on a Neutron resource.
                                  It may not be empty and may not contain commas.
                                minLength: 1
                                pattern: ^[^,]+$
                                type: string
                              type: array
                              x-kubernetes-list-type: set
                            projectID:
                              type: string
                            tags:
                              description: |-
                                Tags is a list of tags to filter by. If specified, the resource must
                                have all of the tags specified to be included in the result.
                              items:
                                description: |-
                                  NeutronTag represents a tag on a Neutron resource.
                                  It may not be empty and may not contain commas.
                                minLength: 1
                                pattern: ^[^,]+$
                                type: string
                              type: array
                              x-kubernetes-list-type: set
                            tagsAny:
                              description: |-
                                TagsAny is a list of tags to filter by. If specified, the resource
                                must have at least one of the tags specified to be included in the
                                result.
                              items:
                                description: |-
                                  NeutronTag represents a tag on a Neutron resource.
                                  It may not be empty and may not contain commas.
                                minLength: 1
                                pattern: ^[^,]+$
                                type: string
                              type: array
                              x-kubernetes-list-type: set
                          type: object
                        id:
                          description: ID is the ID of the network to use. If ID is
                            provided, the other filters cannot be provided. Must be
                            in UUID format.
                          format: uuid
                          type: string
                      type: object
                    profile:
                      description: |-
                        Profile is a set of key-value pairs that are used for binding
                        details. We intentionally don't expose this as a map[string]string
                        because we only want to enable the users to set the values of the
                        keys that are known to work in OpenStack Networking API.  See
                        https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
                        To set profiles, your tenant needs permissions rule:create_port, and
                        rule:create_port:binding:profile
                      properties:
                        ovsHWOffload:
                          description: |-
                            OVSHWOffload enables or disables the OVS hardware offload feature.
                            This flag is not required on OpenStack clouds since Yoga as Nova will set it automatically when the port is attached.
                            See: https://bugs.launchpad.net/nova/+bug/2020813
                          type: boolean
                        trustedVF:
                          description: TrustedVF enables or disables the “trusted
                            mode” for the VF.
                          type: boolean
                      type: object
                    propagateUplinkStatus:
                      description: PropageteUplinkStatus enables or disables the propagate
                        uplink status on the port.
                      type: boolean
                    securityGroups:
                      description: SecurityGroups is a list of the names, uuids, filters
                        or any combination these of the security groups to assign
                        to the instance.
                      items:
                        description: SecurityGroupParam specifies an OpenStack security
                          group. It may be specified by ID or filter, but not both.
                        maxProperties: 1
                        minProperties: 1
                        properties:
                          filter:
                            description: Filter specifies a query to select an OpenStack
                              security group. If provided, cannot be empty.
                            minProperties: 1
                            properties:
                              description:
                                type: string
                              name:
                                type: string
                              notTags:
                                description: |-
                                  NotTags is a list of tags to filter by. If specified, resources which
                                  contain all of the given tags will be excluded from the result.
                                items:
                                  description: |-
                                    NeutronTag represents a tag on a Neutron resource.
                                    It may not be empty and may not contain commas.
                                  minLength: 1
                                  pattern: ^[^,]+$
                                  type: string
                                type: array
                                x-kubernetes-list-type: set
                              notTagsAny:
                                description: |-
                                  NotTagsAny is a list of tags to filter by. If specified, resources
                                  which contain any of the given tags will be excluded from the result.
                                items:
                                  description: |-
                                    NeutronTag represents a tag on a Neutron resource.
                                    It may not be empty and may not contain commas.
                                  minLength: 1
                                  pattern: ^[^,]+$
                                  type: string
                                type: array
                                x-kubernetes-list-type: set
                              projectID:
                                type: string
                              tags:
                                description: |-
                                  Tags is a list of tags to filter by. If specified, the resource must
                                  have all of the tags specified to be included in the result.
                                items:
                                  description: |-
                                    NeutronTag represents a tag on a Neutron resource.
                                    It may not be empty and may not contain commas.
                                  minLength: 1
                                  pattern: ^[^,]+$
                                  type: string
                                type: array
                                x-kubernetes-list-type: set
                              tagsAny:
                                description: |-
                                  TagsAny is a list of tags to filter by. If specified, the resource
                                  must have at least one of the tags specified to be included in the
                                  result.
                                items:
                                  description: |-
                                    NeutronTag represents a tag on a Neutron resource.
                                    It may not be empty and may not contain commas.
                                  minLength: 1
                                  pattern: ^[^,]+$
                                  type: string
                                type: array
                                x-kubernetes-list-type: set
                            type: object
                          id:
                            description: ID is the ID of the security group to use.
                              If ID is provided, the other filters cannot be provided.
                              Must be in UUID format.
                            format: uuid
                            type: string
                        type: object
                      type: array
                      x-kubernetes-list-type: atomic
                    tags:
                      description: |-
                        Tags applied to the port (and corresponding trunk, if a trunk is configured.)
                        These tags are applied in addition to the instance's tags, which will also be applied to the port.
                      items:
                        type: string
                      type: array
                      x-kubernetes-list-type: set
                    trunk:
                      description: |-
                        Trunk specifies whether trunking is enabled at the port level. If not
                        provided the value is inherited from the machine, or false for a
                        bastion host.
                      type: boolean
                    valueSpecs:
                      description: |-
                        Value specs are extra parameters to include in the API request with OpenStack.
                        This is an extension point for the API, so what they do and if they are supported,
                        depends on the specific OpenStack implementation.
                      items:
                        description: ValueSpec represents a single value_spec key-value
                          pair.
                        properties:
                          key:
                            description: Key is the key in the key-value pair.
                            type: string
                          name:
                            description: |-
                              Name is the name of the key-value pair.
                              This is just for identifying the pair and will not be sent to the OpenStack API.
                            type: string
                          value:
                            description: Value is the value in the key-value pair.
                            type: string
                        required:
                        - key
                        - name
                        - value
                        type: object
                      type: array
                      x-kubernetes-list-map-keys:
                      - name
                      x-kubernetes-list-type: map
                    vnicType:
                      description: |-
                        VNICType specifies the type of vNIC which this port should be
                        attached to. This is used to determine which mechanism driver(s) to
                        be used to bind the port. The valid values are normal, macvtap,
                        direct, baremetal, direct-physical, virtio-forwarder, smart-nic and
                        remote-managed, although these values will not be validated in this
                        API to ensure compatibility with future neutron changes or custom
                        implementations. What type of vNIC is actually available depends on
                        deployments. If not specified, the Neutron default value is used.
                      type: string
                  type: object
                type: array
              rootVolume:
                description: RootVolume is the specification for the root volume of
                  the server instance.
                properties:
                  availabilityZone:
                    description: |-
                      AvailabilityZone is the volume availability zone to create the volume
                      in. If not specified, the volume will be created without an explicit
                      availability zone.
                    properties:
                      from:
                        default: Name
                        description: |-
                          From specifies where we will obtain the availability zone for the
                          volume. The options are "Name" and "Machine". If "Name" is specified
                          then the Name field must also be specified. If "Machine" is specified
                          the volume will use the value of FailureDomain, if any, from the
                          associated Machine.
                        enum:
                        - Name
                        - Machine
                        type: string
                      name:
                        description: |-
                          Name is the name of a volume availability zone to use. It is required
                          if From is "Name". The volume availability zone name may not contain
                          spaces.
                        minLength: 1
                        pattern: ^[^ ]+$
                        type: string
                    type: object
                    x-kubernetes-validations:
                    - message: name is required when from is 'Name' or default
                      rule: '!has(self.from) || self.from == ''Name'' ? has(self.name)
                        : !has(self.name)'
                  sizeGiB:
                    description: SizeGiB is the size of the block device in gibibytes
                      (GiB).
                    minimum: 1
                    type: integer
                  type:
                    description: |-
                      Type is the Cinder volume type of the volume.
                      If omitted, the default Cinder volume type that is configured in the OpenStack cloud
                      will be used.
                    type: string
                required:
                - sizeGiB
                type: object
              schedulerHintAdditionalProperties:
                description: |-
                  SchedulerHintAdditionalProperties are arbitrary key/value pairs that provide additional hints
                  to the OpenStack scheduler. These hints can influence how instances are placed on the infrastructure,
                  such as specifying certain host aggregates or availability zones.
                items:
                  description: |-
                    SchedulerHintAdditionalProperty represents a single additional property for a scheduler hint.
                    It includes a Name to identify the property and a Value that can be of various types.
                  properties:
                    name:
                      description: |-
                        Name is the name of the scheduler hint property.
                        It is a unique identifier for the property.
                      minLength: 1
                      type: string
                    value:
                      description: |-
                        Value is the value of the scheduler hint property, which can be of various types
                        (e.g., bool, string, int). The type is indicated by the Value.Type field.
                      properties:
                        bool:
                          description: |-
                            Bool is the boolean value of the scheduler hint, used when Type is "Bool".
                            This field is required if type is 'Bool', and must not be set otherwise.
                          type: boolean
                        number:
                          description: |-
                            Number is the integer value of the scheduler hint, used when Type is "Number".
                            This field is required if type is 'Number', and must not be set otherwise.
                          type: integer
                        string:
                          description: |-
                            String is the string value of the scheduler hint, used when Type is "String".
                            This field is required if type is 'String', and must not be set otherwise.
                          maxLength: 255
                          minLength: 1
                          type: string
                        type:
                          description: |-
                            Type represents the type of the value.
                            Valid values are Bool, String, and Number.
                          enum:
                          - Bool
                          - String
                          - Number
                          type: string
                      required:
                      - type
                      type: object
                      x-kubernetes-validations:
                      - message: bool is required when type is Bool, and forbidden
                          otherwise
                        rule: 'has(self.type) && self.type == ''Bool'' ? has(self.bool)
                          : !has(self.bool)'
                      - message: number is required when type is Number, and forbidden
                          otherwise
                        rule: 'has(self.type) && self.type == ''Number'' ? has(self.number)
                          : !has(self.number)'
                      - message: string is required when type is String, and forbidden
                          otherwise
                        rule: 'has(self.type) && self.type == ''String'' ? has(self.string)
                          : !has(self.string)'
                  required:
                  - name
                  - value
                  type: object
                type: array
                x-kubernetes-list-map-keys:
                - name
                x-kubernetes-list-type: map
              securityGroups:
                description: SecurityGroups is a list of security groups names to
                  assign to the instance.
                items:
                  description: SecurityGroupParam specifies an OpenStack security
                    group. It may be specified by ID or filter, but not both.
                  maxProperties: 1
                  minProperties: 1
                  properties:
                    filter:
                      description: Filter specifies a query to select an OpenStack
                        security group. If provided, cannot be empty.
                      minProperties: 1
                      properties:
                        description:
                          type: string
                        name:
                          type: string
                        notTags:
                          description: |-
                            NotTags is a list of tags to filter by. If specified, resources which
                            contain all of the given tags will be excluded from the result.
                          items:
                            description: |-
                              NeutronTag represents a tag on a Neutron resource.
                              It may not be empty and may not contain commas.
                            minLength: 1
                            pattern: ^[^,]+$
                            type: string
                          type: array
                          x-kubernetes-list-type: set
                        notTagsAny:
                          description: |-
                            NotTagsAny is a list of tags to filter by. If specified, resources
                            which contain any of the given tags will be excluded from the result.
                          items:
                            description: |-
                              NeutronTag represents a tag on a Neutron resource.
                              It may not be empty and may not contain commas.
                            minLength: 1
                            pattern: ^[^,]+$
                            type: string
                          type: array
                          x-kubernetes-list-type: set
                        projectID:
                          type: string
                        tags:
                          description: |-
                            Tags is a list of tags to filter by. If specified, the resource must
                            have all of the tags specified to be included in the result.
                          items:
                            description: |-
                              NeutronTag represents a tag on a Neutron resource.
                              It may not be empty and may not contain commas.
                            minLength: 1
                            pattern: ^[^,]+$
                            type: string
                          type: array
                          x-kubernetes-list-type: set
                        tagsAny:
                          description: |-
                            TagsAny is a list of tags to filter by. If specified, the resource
                            must have at least one of the tags specified to be included in the
                            result.
                          items:
                            description: |-
                              NeutronTag represents a tag on a Neutron resource.
                              It may not be empty and may not contain commas.
                            minLength: 1
                            pattern: ^[^,]+$
                            type: string
                          type: array
                          x-kubernetes-list-type: set
                      type: object
                    id:
                      description: ID is the ID of the security group to use. If ID
                        is provided, the other filters cannot be provided. Must be
                        in UUID format.
                      format: uuid
                      type: string
                  type: object
                type: array
              serverGroup:
                description: ServerGroup is the server group to which the server instance
                  belongs.
                maxProperties: 1
                minProperties: 1
                properties:
                  filter:
                    description: Filter specifies a query to select an OpenStack server
                      group. If provided, it cannot be empty.
                    minProperties: 1
                    properties:
                      name:
                        description: Name is the name of a server group to look for.
                        type: string
                    type: object
                  id:
                    description: ID is the ID of the server group to use.
                    format: uuid
                    type: string
                type: object
              serverMetadata:
                description: ServerMetadata is a map of key value pairs to add to
                  the server instance.
                items:
                  properties:
                    key:
                      description: Key is the server metadata key
                      maxLength: 255
                      type: string
                    value:
                      description: Value is the server metadata value
                      maxLength: 255
                      type: string
                  required:
                  - key
                  - value
                  type: object
                type: array
                x-kubernetes-list-map-keys:
                - key
                x-kubernetes-list-type: map
              sshKeyName:
                description: SSHKeyName is the name of the SSH key to inject in the
                  instance.
                type: string
              tags:
                description: |-
                  Tags which will be added to the machine and all dependent resources
                  which support them. These are in addition to Tags defined on the
                  cluster.
                  Requires Nova api 2.52 minimum!
                items:
                  type: string
                type: array
                x-kubernetes-list-type: set
              trunk:
                description: Trunk is a flag to indicate if the server instance is
                  created on a trunk port or not.
                type: boolean
              userDataRef:
                description: |-
                  UserDataRef is a reference to a secret containing the user data to
                  be injected into the server instance.
                properties:
                  name:
                    default: ""
                    description: |-
                      Name of the referent.
                      This field is effectively required, but due to backwards compatibility is
                      allowed to be empty. Instances of this type with an empty value here are
                      almost certainly wrong.
                      More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                    type: string
                type: object
                x-kubernetes-map-type: atomic
            required:
            - identityRef
            - image
            - ports
            - sshKeyName
            type: object
            x-kubernetes-validations:
            - message: at least one of flavor or flavorID must be set
              rule: (has(self.flavor) || has(self.flavorID))
          status:
            description: OpenStackServerStatus defines the observed state of OpenStackServer.
            properties:
              addresses:
                description: Addresses is the list of addresses of the server instance.
                items:
                  description: NodeAddress contains information for the node's address.
                  properties:
                    address:
                      description: The node address.
                      type: string
                    type:
                      description: Node address type, one of Hostname, ExternalIP
                        or InternalIP.
                      type: string
                  required:
                  - address
                  - type
                  type: object
                type: array
              conditions:
                description: Conditions defines current service state of the OpenStackServer.
                items:
                  description: Condition defines an observation of a Cluster API resource
                    operational state.
                  properties:
                    lastTransitionTime:
                      description: |-
                        Last time the condition transitioned from one status to another.
                        This should be when the underlying condition changed. If that is not known, then using the time when
                        the API field changed is acceptable.
                      format: date-time
                      type: string
                    message:
                      description: |-
                        A human readable message indicating details about the transition.
                        This field may be empty.
                      type: string
                    reason:
                      description: |-
                        The reason for the condition's last transition in CamelCase.
                        The specific API may choose whether or not this field is considered a guaranteed API.
                        This field may be empty.
                      type: string
                    severity:
                      description: |-
                        severity provides an explicit classification of Reason code, so the users or machines can immediately
                        understand the current situation and act accordingly.
                        The Severity field MUST be set only when Status=False.
                      type: string
                    status:
                      description: status of the condition, one of True, False, Unknown.
                      type: string
                    type:
                      description: |-
                        type of condition in CamelCase or in foo.example.com/CamelCase.
                        Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
                        can be useful (see .node.status.conditions), the ability to deconflict is important.
                      type: string
                  required:
                  - lastTransitionTime
                  - status
                  - type
                  type: object
                type: array
              instanceID:
                description: InstanceID is the ID of the server instance.
                type: string
              instanceState:
                description: InstanceState is the state of the server instance.
                type: string
              ready:
                default: false
                description: Ready is true when the OpenStack server is ready.
                type: boolean
              resolved:
                description: |-
                  Resolved contains parts of the machine spec with all external
                  references fully resolved.
                properties:
                  flavorID:
                    description: FlavorID is the ID of the flavor to use.
                    type: string
                  imageID:
                    description: ImageID is the ID of the image to use for the server
                      and is calculated based on ImageFilter.
                    type: string
                  ports:
                    description: Ports is the fully resolved list of ports to create
                      for the server.
                    items:
                      description: ResolvedPortSpec is a PortOpts with all contained
                        references fully resolved.
                      properties:
                        adminStateUp:
                          description: AdminStateUp specifies whether the port should
                            be created in the up (true) or down (false) state. The
                            default is up.
                          type: boolean
                        allowedAddressPairs:
                          description: |-
                            AllowedAddressPairs is a list of address pairs which Neutron will
                            allow the port to send traffic from in addition to the port's
                            addresses. If not specified, the MAC Address will be the MAC Address
                            of the port. Depending on the configuration of Neutron, it may be
                            supported to specify a CIDR instead of a specific IP address.
                          items:
                            properties:
                              ipAddress:
                                description: |-
                                  IPAddress is the IP address of the allowed address pair. Depending on
                                  the configuration of Neutron, it may be supported to specify a CIDR
                                  instead of a specific IP address.
                                type: string
                              macAddress:
                                description: |-
                                  MACAddress is the MAC address of the allowed address pair. If not
                                  specified, the MAC address will be the MAC address of the port.
                                type: string
                            required:
                            - ipAddress
                            type: object
                          type: array
                        description:
                          description: Description is a human-readable description
                            for the port.
                          type: string
                        disablePortSecurity:
                          description: |-
                            DisablePortSecurity enables or disables the port security when set.
                            When not set, it takes the value of the corresponding field at the network level.
                          type: boolean
                        fixedIPs:
                          description: FixedIPs is a list of pairs of subnet and/or
                            IP address to assign to the port. If specified, these
                            must be subnets of the port's network.
                          items:
                            description: ResolvedFixedIP is a FixedIP with the Subnet
                              resolved to an ID.
                            properties:
                              ipAddress:
                                description: |-
                                  IPAddress is a specific IP address to assign to the port. If SubnetID
                                  is also specified, IPAddress must be a valid IP address in the
                                  subnet. If Subnet is not specified, IPAddress must be a valid IP
                                  address in any subnet of the port's network.
                                type: string
                              subnet:
                                description: SubnetID is the id of a subnet to create
                                  the fixed IP of a port in.
                                type: string
                            type: object
                          type: array
                          x-kubernetes-list-type: atomic
                        hostID:
                          description: HostID specifies the ID of the host where the
                            port resides.
                          type: string
                        macAddress:
                          description: MACAddress specifies the MAC address of the
                            port. If not specified, the MAC address will be generated.
                          type: string
                        name:
                          description: Name is the name of the port.
                          type: string
                        networkID:
                          description: NetworkID is the ID of the network the port
                            will be created in.
                          type: string
                        profile:
                          description: |-
                            Profile is a set of key-value pairs that are used for binding
                            details. We intentionally don't expose this as a map[string]string
                            because we only want to enable the users to set the values of the
                            keys that are known to work in OpenStack Networking API.  See
                            https://docs.openstack.org/api-ref/network/v2/index.html?expanded=create-port-detail#create-port
                            To set profiles, your tenant needs permissions rule:create_port, and
                            rule:create_port:binding:profile
                          properties:
                            ovsHWOffload:
                              description: |-
                                OVSHWOffload enables or disables the OVS hardware offload feature.
                                This flag is not required on OpenStack clouds since Yoga as Nova will set it automatically when the port is attached.
                                See: https://bugs.launchpad.net/nova/+bug/2020813
                              type: boolean
                            trustedVF:
                              description: TrustedVF enables or disables the “trusted
                                mode” for the VF.
                              type: boolean
                          type: object
                        propagateUplinkStatus:
                          description: PropageteUplinkStatus enables or disables the
                            propagate uplink status on the port.
                          type: boolean
                        securityGroups:
                          description: SecurityGroups is a list of security group
                            IDs to assign to the port.
                          items:
                            type: string
                          type: array
                          x-kubernetes-list-type: atomic
                        tags:
                          description: Tags applied to the port (and corresponding
                            trunk, if a trunk is configured.)
                          items:
                            type: string
                          type: array
                          x-kubernetes-list-type: set
                        trunk:
                          description: Trunk specifies whether trunking is enabled
                            at the port level.
                          type: boolean
                        valueSpecs:
                          description: |-
                            Value specs are extra parameters to include in the API request with OpenStack.
                            This is an extension point for the API, so what they do and if they are supported,
                            depends on the specific OpenStack implementation.
                          items:
                            description: ValueSpec represents a single value_spec
                              key-value pair.
                            properties:
                              key:
                                description: Key is the key in the key-value pair.
                                type: string
                              name:
                                description: |-
                                  Name is the name of the key-value pair.
                                  This is just for identifying the pair and will not be sent to the OpenStack API.
                                type: string
                              value:
                                description: Value is the value in the key-value pair.
                                type: string
                            required:
                            - key
                            - name
                            - value
                            type: object
                          type: array
                          x-kubernetes-list-map-keys:
                          - name
                          x-kubernetes-list-type: map
                        vnicType:
                          description: |-
                            VNICType specifies the type of vNIC which this port should be
                            attached to. This is used to determine which mechanism driver(s) to
                            be used to bind the port. The valid values are normal, macvtap,
                            direct, baremetal, direct-physical, virtio-forwarder, smart-nic and
                            remote-managed, although these values will not be validated in this
                            API to ensure compatibility with future neutron changes or custom
                            implementations. What type of vNIC is actually available depends on
                            deployments. If not specified, the Neutron default value is used.
                          type: string
                      required:
                      - description
                      - name
                      - networkID
                      type: object
                    type: array
                  serverGroupID:
                    description: ServerGroupID is the ID of the server group the server
                      should be added to and is calculated based on ServerGroupFilter.
                    type: string
                type: object
              resources:
                description: Resources contains references to OpenStack resources
                  created for the machine.
                properties:
                  ports:
                    description: Ports is the status of the ports created for the
                      server.
                    items:
                      properties:
                        id:
                          description: ID is the unique identifier of the port.
                          type: string
                      required:
                      - id
                      type: object
                    type: array
                type: object
            required:
            - ready
            type: object
        type: object
    served: true
    storage: true
    subresources:
      status: {}
status:
  acceptedNames:
    kind: ""
    plural: ""
  conditions: null
  storedVersions: null
---
apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    cluster.x-k8s.io/provider: infrastructure-openstack
    clusterctl.cluster.x-k8s.io: ""
  name: capo-manager
  namespace: capo-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  labels:
    cluster.x-k8s.io/provider: infrastructure-openstack
    clusterctl.cluster.x-k8s.io: ""
  name: capo-leader-election-role
  namespace: capo-system
rules:
- apiGroups:
  - ""
  resources:
  - configmaps
  verbs:
  - get
  - list
  - watch
  - create
  - update
  - patch
  - delete
- apiGroups:
  - ""
  resources:
  - configmaps/status
  verbs:
  - get
  - update
  - patch
- apiGroups:
  - ""
  resources:
  - events
  verbs:
  - create
- apiGroups:
  - coordination.k8s.io
  resources:
  - leases
  verbs:
  - get
  - list
  - watch
  - create
  - update
  - patch
  - delete
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  labels:
    cluster.x-k8s.io/provider: infrastructure-openstack
    clusterctl.cluster.x-k8s.io: ""
  name: capo-manager-role
rules:
- apiGroups:
  - ""
  resources:
  - events
  verbs:
  - create
  - get
  - list
  - patch
  - update
  - watch
- apiGroups:
  - ""
  resources:
  - secrets
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - authentication.k8s.io
  resources:
  - tokenreviews
  verbs:
  - create
- apiGroups:
  - authorization.k8s.io
  resources:
  - subjectaccessreviews
  verbs:
  - create
- apiGroups:
  - cluster.x-k8s.io
  resources:
  - clusters
  - clusters/status
  - machines
  - machines/status
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - infrastructure.cluster.x-k8s.io
  resources:
  - openstackclusters
  - openstackfloatingippools
  - openstackmachines
  - openstackservers
  verbs:
  - create
  - delete
  - get
  - list
  - patch
  - update
  - watch
- apiGroups:
  - infrastructure.cluster.x-k8s.io
  resources:
  - openstackclusters/status
  - openstackfloatingippools/status
  - openstackmachines/status
  - openstackservers/status
  verbs:
  - get
  - patch
  - update
- apiGroups:
  - ipam.cluster.x-k8s.io
  resources:
  - ipaddressclaims
  - ipaddressclaims/status
  verbs:
  - create
  - delete
  - get
  - list
  - patch
  - update
  - watch
- apiGroups:
  - ipam.cluster.x-k8s.io
  resources:
  - ipaddresses
  - ipaddresses/status
  verbs:
  - create
  - delete
  - get
  - list
  - update
  - watch
- apiGroups:
  - openstack.k-orc.cloud
  resources:
  - images
  verbs:
  - get
  - list
  - watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  creationTimestamp: null
  labels:
    cluster.x-k8s.io/provider: infrastructure-openstack
    clusterctl.cluster.x-k8s.io: ""
  name: capo-leader-election-rolebinding
  namespace: capo-system
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: capo-leader-election-role
subjects:
- kind: ServiceAccount
  name: capo-manager
  namespace: capo-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  creationTimestamp: null
  labels:
    cluster.x-k8s.io/provider: infrastructure-openstack
    clusterctl.cluster.x-k8s.io: ""
  name: capo-manager-rolebinding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: capo-manager-role
subjects:
- kind: ServiceAccount
  name: capo-manager
  namespace: capo-system
---
apiVersion: v1
kind: Service
metadata:
  labels:
    cluster.x-k8s.io/provider: infrastructure-openstack
    clusterctl.cluster.x-k8s.io: ""
  name: capo-webhook-service
  namespace: capo-system
spec:
  ports:
  - port: 443
    targetPort: webhook-server
  selector:
    cluster.x-k8s.io/provider: infrastructure-openstack
---
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    cluster.x-k8s.io/provider: infrastructure-openstack
    clusterctl.cluster.x-k8s.io: ""
    control-plane: capo-controller-manager
  name: capo-controller-manager
  namespace: capo-system
spec:
  replicas: 1
  selector:
    matchLabels:
      cluster.x-k8s.io/provider: infrastructure-openstack
      control-plane: capo-controller-manager
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        cluster.x-k8s.io/provider: infrastructure-openstack
        control-plane: capo-controller-manager
    spec:
      containers:
      - args:
        - --leader-elect
        - --v=2
        - --diagnostics-address=127.0.0.1:8080
        - --insecure-diagnostics=true
        command:
        - /manager
        image: registry.k8s.io/capi-openstack/capi-openstack-controller:v0.12.1
        imagePullPolicy: IfNotPresent
        livenessProbe:
          httpGet:
            path: /healthz
            port: healthz
        name: manager
        ports:
        - containerPort: 9443
          name: webhook-server
          protocol: TCP
        - containerPort: 9440
          name: healthz
          protocol: TCP
        readinessProbe:
          httpGet:
            path: /readyz
            port: healthz
        resources: {}
        securityContext:
          allowPrivilegeEscalation: false
          capabilities:
            drop:
            - ALL
          privileged: false
          runAsGroup: 65532
          runAsUser: 65532
        terminationMessagePolicy: FallbackToLogsOnError
        volumeMounts:
        - mountPath: /tmp/k8s-webhook-server/serving-certs
          name: cert
          readOnly: true
      securityContext:
        runAsNonRoot: true
        seccompProfile:
          type: RuntimeDefault
      serviceAccountName: capo-manager
      terminationGracePeriodSeconds: 10
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/master
      - effect: NoSchedule
        key: node-role.kubernetes.io/control-plane
      volumes:
      - name: cert
        secret:
          defaultMode: 420
          secretName: capo-webhook-service-cert
status: {}
---
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
  annotations:
    cert-manager.io/inject-ca-from: capo-system/capo-serving-cert
  creationTimestamp: null
  labels:
    cluster.x-k8s.io/provider: infrastructure-openstack
    clusterctl.cluster.x-k8s.io: ""
  name: capo-validating-webhook-configuration
webhooks:
- admissionReviewVersions:
  - v1beta1
  clientConfig:
    service:
      name: capo-webhook-service
      namespace: capo-system
      path: /validate-infrastructure-cluster-x-k8s-io-v1beta1-openstackcluster
  failurePolicy: Fail
  matchPolicy: Equivalent
  name: validation.openstackcluster.infrastructure.cluster.x-k8s.io
  rules:
  - apiGroups:
    - infrastructure.cluster.x-k8s.io
    apiVersions:
    - v1beta1
    operations:
    - CREATE
    - UPDATE
    resources:
    - openstackclusters
  sideEffects: None
- admissionReviewVersions:
  - v1beta1
  clientConfig:
    service:
      name: capo-webhook-service
      namespace: capo-system
      path: /validate-infrastructure-cluster-x-k8s-io-v1beta1-openstackclustertemplate
  failurePolicy: Fail
  matchPolicy: Equivalent
  name: validation.openstackclustertemplate.infrastructure.cluster.x-k8s.io
  rules:
  - apiGroups:
    - infrastructure.cluster.x-k8s.io
    apiVersions:
    - v1beta1
    operations:
    - CREATE
    - UPDATE
    resources:
    - openstackclustertemplates
  sideEffects: None
- admissionReviewVersions:
  - v1beta1
  clientConfig:
    service:
      name: capo-webhook-service
      namespace: capo-system
      path: /validate-infrastructure-cluster-x-k8s-io-v1beta1-openstackmachine
  failurePolicy: Fail
  matchPolicy: Equivalent
  name: validation.openstackmachine.infrastructure.cluster.x-k8s.io
  rules:
  - apiGroups:
    - infrastructure.cluster.x-k8s.io
    apiVersions:
    - v1beta1
    operations:
    - CREATE
    - UPDATE
    resources:
    - openstackmachines
  sideEffects: None
- admissionReviewVersions:
  - v1beta1
  clientConfig:
    service:
      name: capo-webhook-service
      namespace: capo-system
      path: /validate-infrastructure-cluster-x-k8s-io-v1beta1-openstackmachinetemplate
  failurePolicy: Fail
  matchPolicy: Equivalent
  name: validation.openstackmachinetemplate.infrastructure.cluster.x-k8s.io
  rules:
  - apiGroups:
    - infrastructure.cluster.x-k8s.io
    apiVersions:
    - v1beta1
    operations:
    - CREATE
    - UPDATE
    resources:
    - openstackmachinetemplates
  sideEffects: None
- admissionReviewVersions:
  - v1beta1
  clientConfig:
    service:
      name: capo-webhook-service
      namespace: capo-system
      path: /validate-infrastructure-cluster-x-k8s-io-v1alpha1-openstackserver
  failurePolicy: Fail
  matchPolicy: Equivalent
  name: validation.openstackserver.infrastructure.cluster.x-k8s.io
  rules:
  - apiGroups:
    - infrastructure.cluster.x-k8s.io
    apiVersions:
    - v1alpha1
    operations:
    - CREATE
    - UPDATE
    resources:
    - openstackservers
  sideEffects: None
