apiVersion: apiextensions.k8s.io/v1
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
  # either Namespaced or Cluster
  scope: Cluster
  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
  # 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
    subresources:
      status: {}
    schema:
      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
              dns:
                description: dns holds the cluster dns details
                type: object
                nullable: true
                required:
                - spec
                properties:
                  spec:
                    description: spec holds user settable values for configuration
                    type: object
                    properties:
                      baseDomain:
                        description: baseDomain is the base domain of the cluster. All
                          managed DNS records will be sub-domains of this base.
                        type: string
                      publicZone:
                        description: publicZone is the location where all the DNS records
                          that are publicly accessible to the internet exist.
                        type: object
                        properties:
                          id:
                            description: id is the identifier that can be used to find
                              the DNS hosted zone.
                            type: string
                          tags:
                            additionalProperties:
                              type: string
                            description: tags can be used to query the DNS hosted zone.
                            type: object
                      privateZone:
                        description: privateZone is the location where all the DNS records
                          that are only available internally to the cluster exist.
                        type: object
                        properties:
                          id:
                            description: id is the identifier that can be used to find
                              the DNS hosted zone.
                            type: string
                          tags:
                            additionalProperties:
                              type: string
                            description: tags can be used to query the DNS hosted zone.
                            type: object
                  status:
                    description: status holds observed values from the cluster. They
                      may not be overridden.
                    type: object
              etcdDiscoveryDomain:
                description: etcdDiscoveryDomain is deprecated, use infra.status.etcdDiscoveryDomain
                  instead
                type: string
              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
                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
                      controlPlaneTopology:
                        description: controlPlaneTopology expresses the expectations
                          for operands that normally run on control nodes. The default
                          is HighlyAvailable, which represents the behavior operators
                          have in a normal cluster. The SingleReplica mode will be used
                          in single-node deployments and the operators should not configure
                          the operand for highly-available operation.
                        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
                          kubevirt:
                            description: OpenShift contains settings specific to the
                              kubevirt 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
                          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", "KubeVirt"
                              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
              ipFamilies:
                description: ipFamilies indicates the IP families in use by the cluster
                  network
                type: string
              kubeAPIServerServingCAData:
                description: kubeAPIServerServingCAData managed Kubelet to API Server
                  Cert... Rotated automatically
                type: string
                format: byte
              networkType:
                description: networkType holds the type of network the cluster is using
                type: string
              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: platform is deprecated. Use infra.status.platformStatus.type
                  instead
                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
