apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: ingresscontrollers.operator.openshift.io
spec:
  group: operator.openshift.io
  names:
    kind: IngressController
    listKind: IngressControllerList
    plural: ingresscontrollers
    singular: ingresscontroller
  scope: Namespaced
  version: v1
  subresources:
    status: {}
    scale:
      specReplicasPath: .spec.replicas
      statusReplicasPath: .status.availableReplicas
      labelSelectorPath: .status.labelSelector
  validation:
    openAPIV3Schema:
      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/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/api-conventions.md#types-kinds'
          type: string
        metadata:
          type: object
        spec:
          description: spec is the specification of the desired behavior of the IngressController.
          properties:
            defaultCertificate:
              description: 'defaultCertificate is a reference to a secret containing
                the default certificate served by the ingress controller. When Routes
                don''t specify their own certificate, defaultCertificate is used.  The
                secret must contain the following keys and data:    tls.crt: certificate
                file contents   tls.key: key file contents  If unset, a wildcard certificate
                is automatically generated and used. The certificate is valid for
                the ingress controller domain (and subdomains) and the generated certificate''s
                CA will be automatically integrated with the cluster''s trust store.  The
                in-use certificate (whether generated or user-specified) will be automatically
                integrated with OpenShift''s built-in OAuth server.'
              type: object
            domain:
              description: 'domain is a DNS name serviced by the ingress controller
                and is used to configure multiple features:  * For the LoadBalancerService
                endpoint publishing strategy, domain is   used to configure DNS records.
                See endpointPublishingStrategy.  * When using a generated default
                certificate, the certificate will be valid   for domain and its subdomains.
                See defaultCertificate.  * The value is published to individual Route
                statuses so that end-users   know where to target external DNS records.  domain
                must be unique among all IngressControllers, and cannot be updated.  If
                empty, defaults to ingress.config.openshift.io/cluster .spec.domain.'
              type: string
            endpointPublishingStrategy:
              description: 'endpointPublishingStrategy is used to publish the ingress
                controller endpoints to other networks, enable load balancer integrations,
                etc.  If unset, the default is based on infrastructure.config.openshift.io/cluster
                .status.platform:    AWS:      LoadBalancerService   Libvirt:  HostNetwork  Any
                other platform types (including None) default to HostNetwork.  endpointPublishingStrategy
                cannot be updated.'
              properties:
                type:
                  description: 'type is the publishing strategy to use. Valid values
                    are:  * LoadBalancerService  Publishes the ingress controller
                    using a Kubernetes LoadBalancer Service.  In this configuration,
                    the ingress controller deployment uses container networking. A
                    LoadBalancer Service is created to publish the deployment.  See:
                    https://kubernetes.io/docs/concepts/services-networking/#loadbalancer  If
                    domain is set, a wildcard DNS record will be managed to point
                    at the LoadBalancer Service''s external name. DNS records are
                    managed only in DNS zones defined by dns.config.openshift.io/cluster
                    .spec.publicZone and .spec.privateZone.  Wildcard DNS management
                    is currently supported only on the AWS platform.  * HostNetwork  Publishes
                    the ingress controller on node ports where the ingress controller
                    is deployed.  In this configuration, the ingress controller deployment
                    uses host networking, bound to node ports 80 and 443. The user
                    is responsible for configuring an external load balancer to publish
                    the ingress controller via the node ports.  * Private  Does not
                    publish the ingress controller.  In this configuration, the ingress
                    controller deployment uses container networking, and is not explicitly
                    published. The user must manually publish the ingress controller.'
                  type: string
              type: object
            namespaceSelector:
              description: namespaceSelector is used to filter the set of namespaces
                serviced by the ingress controller. This is useful for implementing
                shards.  If unset, the default is no filtering.
              type: object
            nodePlacement:
              description: nodePlacement enables explicit control over the scheduling
                of the ingress controller.  If unset, defaults are used. See NodePlacement
                for more details.
              properties:
                nodeSelector:
                  description: 'nodeSelector is the node selector applied to ingress
                    controller deployments.  If unset, the default is:    beta.kubernetes.io/os:
                    linux   node-role.kubernetes.io/worker: ''''  If set, the specified
                    selector is used and replaces the default.'
                  type: object
                tolerations:
                  description: tolerations is a list of tolerations applied to ingress
                    controller deployments.  The default is an empty list.  See https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
                  items:
                    type: object
                  type: array
              type: object
            replicas:
              description: replicas is the desired number of ingress controller replicas.
                If unset, defaults to 2.
              format: int32
              type: integer
            routeSelector:
              description: routeSelector is used to filter the set of Routes serviced
                by the ingress controller. This is useful for implementing shards.  If
                unset, the default is no filtering.
              type: object
          type: object
        status:
          description: status is the most recently observed status of the IngressController.
          properties:
            availableReplicas:
              description: availableReplicas is number of observed available replicas
                according to the ingress controller deployment.
              format: int32
              type: integer
            conditions:
              description: 'conditions is a list of conditions and their status.  Available
                means the ingress controller deployment is available and servicing
                route and ingress resources (i.e, .status.availableReplicas equals
                .spec.replicas)  There are additional conditions which indicate the
                status of other ingress controller features and capabilities.    *
                LoadBalancerManaged   - True if the following conditions are met:     *
                The endpoint publishing strategy requires a service load balancer.   -
                False if any of those conditions are unsatisfied.    * LoadBalancerReady   -
                True if the following conditions are met:     * A load balancer is
                managed.     * The load balancer is ready.   - False if any of those
                conditions are unsatisfied.    * DNSManaged   - True if the following
                conditions are met:     * The endpoint publishing strategy and platform
                support DNS.     * The ingress controller domain is set.     * dns.config.openshift.io/cluster
                configures DNS zones.   - False if any of those conditions are unsatisfied.    *
                DNSReady   - True if the following conditions are met:     * DNS is
                managed.     * DNS records have been successfully created.   - False
                if any of those conditions are unsatisfied.'
              items:
                properties:
                  lastTransitionTime:
                    format: date-time
                    type: string
                  message:
                    type: string
                  reason:
                    type: string
                  status:
                    type: string
                  type:
                    type: string
                type: object
              type: array
            domain:
              description: domain is the actual domain in use.
              type: string
            endpointPublishingStrategy:
              description: endpointPublishingStrategy is the actual strategy in use.
              properties:
                type:
                  description: 'type is the publishing strategy to use. Valid values
                    are:  * LoadBalancerService  Publishes the ingress controller
                    using a Kubernetes LoadBalancer Service.  In this configuration,
                    the ingress controller deployment uses container networking. A
                    LoadBalancer Service is created to publish the deployment.  See:
                    https://kubernetes.io/docs/concepts/services-networking/#loadbalancer  If
                    domain is set, a wildcard DNS record will be managed to point
                    at the LoadBalancer Service''s external name. DNS records are
                    managed only in DNS zones defined by dns.config.openshift.io/cluster
                    .spec.publicZone and .spec.privateZone.  Wildcard DNS management
                    is currently supported only on the AWS platform.  * HostNetwork  Publishes
                    the ingress controller on node ports where the ingress controller
                    is deployed.  In this configuration, the ingress controller deployment
                    uses host networking, bound to node ports 80 and 443. The user
                    is responsible for configuring an external load balancer to publish
                    the ingress controller via the node ports.  * Private  Does not
                    publish the ingress controller.  In this configuration, the ingress
                    controller deployment uses container networking, and is not explicitly
                    published. The user must manually publish the ingress controller.'
                  type: string
              type: object
            selector:
              description: selector is a label selector, in string format, for ingress
                controller pods corresponding to the IngressController. The number
                of matching pods should equal the value of availableReplicas.
              type: string
          type: object
