apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  # name must match the spec fields below, and be in the form: <plural>.<group>
  name: controllerconfigs.machineconfiguration.openshift.io
  labels:
    "openshift.io/operator-managed": ""
spec:
  # group name to use for REST API: /apis/<group>/<version>
  group: machineconfiguration.openshift.io
  # list of versions supported by this CustomResourceDefinition
  versions:
  - name: v1
    # Each version can be enabled/disabled by Served flag.
    served: true
    # One and only one version must be marked as the storage version.
    storage: true
  # either Namespaced or Cluster
  scope: Cluster
  preserveUnknownFields: false
  subresources:
    status: {}
  names:
    # plural name to be used in the URL: /apis/<group>/<version>/<plural>
    plural: controllerconfigs
    # singular name to be used as an alias on the CLI and for display
    singular: controllerconfig
    # kind is normally the PascalCased singular type. Your resource manifests use this.
    kind: ControllerConfig
  "validation":
    "openAPIV3Schema":
      description: ControllerConfig describes configuration for MachineConfigController.
        This is currently only used to drive the MachineConfig objects generated by
        the TemplateController.
      type: object
      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: ControllerConfigSpec is the spec for ControllerConfig resource.
          type: object
          properties:
            additionalTrustBundle:
              description: additionalTrustBundle is a certificate bundle that will
                be added to the nodes trusted certificate store.
              type: string
              format: byte
              nullable: true
            cloudProviderCAData:
              description: cloudProvider specifies the cloud provider CA data
              type: string
              format: byte
              nullable: true
            cloudProviderConfig:
              description: cloudProviderConfig is the configuration for the given
                cloud provider
              type: string
            clusterDNSIP:
              description: clusterDNSIP is the cluster DNS IP address
              type: string
            etcdCAData:
              description: etcdCAData specifies the etcd CA data
              type: string
              format: byte
            etcdDiscoveryDomain:
              description: etcdDiscoveryDomain specifies the etcd discovery domain
              type: string
            etcdMetricCAData:
              description: etcdMetricData specifies the etcd metric CA data
              type: string
              format: byte
            images:
              description: images is map of images that are used by the controller
                to render templates under ./templates/
              type: object
              additionalProperties:
                type: string
            infra:
              description: infra holds the infrastructure details TODO this makes
                platform redundant as everything is contained inside Infra.Status
              type: object
              required:
              - spec
              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
                  type: object
                  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.
                      type: object
                      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
                status:
                  description: status holds observed values from the cluster. They
                    may not be overridden.
                  type: object
                  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.
                      type: object
                      properties:
                        aws:
                          description: AWS contains settings specific to the Amazon
                            Web Services infrastructure provider.
                          type: object
                          properties:
                            region:
                              description: region holds the default AWS region for
                                new AWS resources created by the cluster.
                              type: string
                        azure:
                          description: Azure contains settings specific to the Azure
                            infrastructure provider.
                          type: object
                          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
                        baremetal:
                          description: BareMetal contains settings specific to the
                            BareMetal platform.
                          type: object
                          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
                        gcp:
                          description: GCP contains settings specific to the Google
                            Cloud Platform infrastructure provider.
                          type: object
                          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
                        openstack:
                          description: OpenStack contains settings specific to the
                            OpenStack infrastructure provider.
                          type: object
                          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
                        ovirt:
                          description: Ovirt contains settings specific to the oVirt
                            infrastructure provider.
                          type: object
                          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:
                          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
                        vsphere:
                          description: VSphere contains settings specific to the VSphere
                            infrastructure provider.
                          type: object
                          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 vSphere 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
              nullable: true
            kubeAPIServerServingCAData:
              description: kubeAPIServerServingCAData managed Kubelet to API Server
                Cert... Rotated automatically
              type: string
              format: byte
            kubeletIPv6:
              description: kubeletIPv6 is true to force a single-stack IPv6 kubelet
                config
              type: boolean
            osImageURL:
              description: osImageURL is the location of the container image that
                contains the OS update payload. Its value is taken from the data.osImageURL
                field on the machine-config-osimageurl ConfigMap.
              type: string
            platform:
              description: The openshift platform, e.g. "libvirt", "openstack", "gcp",
                "baremetal", "aws", or "none"
              type: string
            proxy:
              description: proxy holds the current proxy configuration for the nodes
              type: object
              properties:
                httpProxy:
                  description: httpProxy is the URL of the proxy for HTTP requests.
                  type: string
                httpsProxy:
                  description: httpsProxy is the URL of the proxy for HTTPS requests.
                  type: string
                noProxy:
                  description: noProxy is a comma-separated list of hostnames and/or
                    CIDRs for which the proxy should not be used.
                  type: string
              nullable: true
            pullSecret:
              description: pullSecret is the default pull secret that needs to be
                installed on all machines.
              type: object
              properties:
                apiVersion:
                  description: API version of the referent.
                  type: string
                fieldPath:
                  description: 'If referring to a piece of an object instead of an
                    entire object, this string should contain a valid JSON/Go field
                    access statement, such as desiredState.manifest.containers[2].
                    For example, if the object reference is to a container within
                    a pod, this would take on a value like: "spec.containers{name}"
                    (where "name" refers to the name of the container that triggered
                    the event) or if no container name is specified "spec.containers[2]"
                    (container with index 2 in this pod). This syntax is chosen only
                    to have some well-defined way of referencing a part of an object.
                    TODO: this design is not final and this field is subject to change
                    in the future.'
                  type: string
                kind:
                  description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                  type: string
                name:
                  description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
                  type: string
                namespace:
                  description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
                  type: string
                resourceVersion:
                  description: 'Specific resourceVersion to which this reference is
                    made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
                  type: string
                uid:
                  description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
                  type: string
            rootCAData:
              description: rootCAData specifies the root CA data
              type: string
              format: byte
        status:
          description: ControllerConfigStatus is the status for ControllerConfig
          type: object
          properties:
            conditions:
              description: conditions represents the latest available observations
                of current state.
              type: array
              items:
                description: ControllerConfigStatusCondition contains condition information
                  for ControllerConfigStatus
                type: object
                properties:
                  lastTransitionTime:
                    description: lastTransitionTime is the time of the last update
                      to the current status object.
                    type: string
                    format: date-time
                    nullable: true
                  message:
                    description: message provides additional information about the
                      current condition. This is only to be consumed by humans.
                    type: string
                  reason:
                    description: reason is the reason for the condition's last transition.  Reasons
                      are PascalCase
                    type: string
                  status:
                    description: status of the condition, one of True, False, Unknown.
                    type: string
                  type:
                    description: type specifies the state of the operator's reconciliation
                      functionality.
                    type: string
            observedGeneration:
              description: observedGeneration represents the generation observed by
                the controller.
              type: integer
              format: int64
