# Copyright Contributors to the Open Cluster Management project

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: infrastructures.config.openshift.io
spec:
  conversion:
    strategy: None
  group: config.openshift.io
  names:
    kind: Infrastructure
    listKind: InfrastructureList
    plural: infrastructures
    singular: infrastructure
  scope: Cluster
  versions:
  - name: v1
    schema:
      openAPIV3Schema:
        description: Infrastructure holds cluster-wide information about Infrastructure.  The
          canonical name is `cluster`
        properties:
          apiVersion:
            description: 'APIVersion defines the versioned schema of this representation
              of an object. Servers should convert recognized schemas to the latest
              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
            type: string
          kind:
            description: 'Kind is a string value representing the REST resource this
              object represents. Servers may infer this from the endpoint the client
              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
            type: string
          metadata:
            type: object
          spec:
            description: spec holds user settable values for configuration
            properties:
              cloudConfig:
                description: cloudConfig is a reference to a ConfigMap containing
                  the cloud provider configuration file. This configuration file is
                  used to configure the Kubernetes cloud provider integration when
                  using the built-in cloud provider integration or the external cloud
                  controller manager. The namespace for this config map is openshift-config.
                properties:
                  key:
                    description: Key allows pointing to a specific key/value inside
                      of the configmap.  This is useful for logical file references.
                    type: string
                  name:
                    type: string
                type: object
            type: object
          status:
            description: status holds observed values from the cluster. They may not
              be overridden.
            properties:
              apiServerInternalURI:
                description: apiServerInternalURL is a valid URI with scheme(http/https),
                  address and port.  apiServerInternalURL can be used by components
                  like kubelets, to contact the Kubernetes API server using the infrastructure
                  provider rather than Kubernetes networking.
                type: string
              apiServerURL:
                description: apiServerURL is a valid URI with scheme(http/https),
                  address and port.  apiServerURL can be used by components like the
                  web console to tell users where to find the Kubernetes API.
                type: string
              etcdDiscoveryDomain:
                description: 'etcdDiscoveryDomain is the domain used to fetch the
                  SRV records for discovering etcd servers and clients. For more info:
                  https://github.com/etcd-io/etcd/blob/329be66e8b3f9e2e6af83c123ff89297e49ebd15/Documentation/op-guide/clustering.md#dns-discovery'
                type: string
              infrastructureName:
                description: infrastructureName uniquely identifies a cluster with
                  a human friendly name. Once set it should not be changed. Must be
                  of max length 27 and must have only alphanumeric or hyphen characters.
                type: string
              platform:
                description: "platform is the underlying infrastructure provider for
                  the cluster. \n Deprecated: Use platformStatus.type instead."
                type: string
              platformStatus:
                description: platformStatus holds status information specific to the
                  underlying infrastructure provider.
                properties:
                  aws:
                    description: AWS contains settings specific to the Amazon Web
                      Services infrastructure provider.
                    properties:
                      region:
                        description: region holds the default AWS region for new AWS
                          resources created by the cluster.
                        type: string
                    type: object
                  azure:
                    description: Azure contains settings specific to the Azure infrastructure
                      provider.
                    properties:
                      networkResourceGroupName:
                        description: networkResourceGroupName is the Resource Group
                          for network resources like the Virtual Network and Subnets
                          used by the cluster. If empty, the value is same as ResourceGroupName.
                        type: string
                      resourceGroupName:
                        description: resourceGroupName is the Resource Group for new
                          Azure resources created for the cluster.
                        type: string
                    type: object
                  baremetal:
                    description: BareMetal contains settings specific to the BareMetal
                      platform.
                    properties:
                      apiServerInternalIP:
                        description: apiServerInternalIP is an IP address to contact
                          the Kubernetes API server that can be used by components
                          inside the cluster, like kubelets using the infrastructure
                          rather than Kubernetes networking. It is the IP that the
                          Infrastructure.status.apiServerInternalURI points to. It
                          is the IP for a self-hosted load balancer in front of the
                          API servers.
                        type: string
                      ingressIP:
                        description: ingressIP is an external IP which routes to the
                          default ingress controller. The IP is a suitable target
                          of a wildcard DNS record used to resolve default route host
                          names.
                        type: string
                      nodeDNSIP:
                        description: nodeDNSIP is the IP address for the internal
                          DNS used by the nodes. Unlike the one managed by the DNS
                          operator, `NodeDNSIP` provides name resolution for the nodes
                          themselves. There is no DNS-as-a-service for BareMetal deployments.
                          In order to minimize necessary changes to the datacenter
                          DNS, a DNS service is hosted as a static pod to serve those
                          hostnames to the nodes in the cluster.
                        type: string
                    type: object
                  gcp:
                    description: GCP contains settings specific to the Google Cloud
                      Platform infrastructure provider.
                    properties:
                      projectID:
                        description: resourceGroupName is the Project ID for new GCP
                          resources created for the cluster.
                        type: string
                      region:
                        description: region holds the region for new GCP resources
                          created for the cluster.
                        type: string
                    type: object
                  openstack:
                    description: OpenStack contains settings specific to the OpenStack
                      infrastructure provider.
                    properties:
                      apiServerInternalIP:
                        description: apiServerInternalIP is an IP address to contact
                          the Kubernetes API server that can be used by components
                          inside the cluster, like kubelets using the infrastructure
                          rather than Kubernetes networking. It is the IP that the
                          Infrastructure.status.apiServerInternalURI points to. It
                          is the IP for a self-hosted load balancer in front of the
                          API servers.
                        type: string
                      cloudName:
                        description: cloudName is the name of the desired OpenStack
                          cloud in the client configuration file (`clouds.yaml`).
                        type: string
                      ingressIP:
                        description: ingressIP is an external IP which routes to the
                          default ingress controller. The IP is a suitable target
                          of a wildcard DNS record used to resolve default route host
                          names.
                        type: string
                      nodeDNSIP:
                        description: nodeDNSIP is the IP address for the internal
                          DNS used by the nodes. Unlike the one managed by the DNS
                          operator, `NodeDNSIP` provides name resolution for the nodes
                          themselves. There is no DNS-as-a-service for OpenStack deployments.
                          In order to minimize necessary changes to the datacenter
                          DNS, a DNS service is hosted as a static pod to serve those
                          hostnames to the nodes in the cluster.
                        type: string
                    type: object
                  ovirt:
                    description: Ovirt contains settings specific to the oVirt infrastructure
                      provider.
                    properties:
                      apiServerInternalIP:
                        description: apiServerInternalIP is an IP address to contact
                          the Kubernetes API server that can be used by components
                          inside the cluster, like kubelets using the infrastructure
                          rather than Kubernetes networking. It is the IP that the
                          Infrastructure.status.apiServerInternalURI points to. It
                          is the IP for a self-hosted load balancer in front of the
                          API servers.
                        type: string
                      ingressIP:
                        description: ingressIP is an external IP which routes to the
                          default ingress controller. The IP is a suitable target
                          of a wildcard DNS record used to resolve default route host
                          names.
                        type: string
                      nodeDNSIP:
                        description: nodeDNSIP is the IP address for the internal
                          DNS used by the nodes. Unlike the one managed by the DNS
                          operator, `NodeDNSIP` provides name resolution for the nodes
                          themselves. There is no DNS-as-a-service for oVirt deployments.
                          In order to minimize necessary changes to the datacenter
                          DNS, a DNS service is hosted as a static pod to serve those
                          hostnames to the nodes in the cluster.
                        type: string
                    type: object
                  type:
                    description: type is the underlying infrastructure provider for
                      the cluster. This value controls whether infrastructure automation
                      such as service load balancers, dynamic volume provisioning,
                      machine creation and deletion, and other integrations are enabled.
                      If None, no infrastructure automation is enabled. Allowed values
                      are "AWS", "Azure", "BareMetal", "GCP", "Libvirt", "OpenStack",
                      "VSphere", "oVirt", and "None". Individual components may not
                      support all platforms, and must handle unrecognized platforms
                      as None if they do not support that platform.
                    type: string
                type: object
            type: object
        required:
        - spec
        type: object
    served: true
    storage: true