apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: dnses.operator.openshift.io
  annotations:
    include.release.openshift.io/self-managed-high-availability: "true"
spec:
  group: operator.openshift.io
  names:
    kind: DNS
    listKind: DNSList
    plural: dnses
    singular: dns
  scope: Cluster
  versions:
  - name: v1
    served: true
    storage: true
    subresources:
      status: {}
    schema:
      openAPIV3Schema:
        description: "DNS manages the CoreDNS component to provide a name resolution
          service for pods and services in the cluster. \n This supports the DNS-based
          service discovery specification: https://github.com/kubernetes/dns/blob/master/docs/specification.md
          \n More details: https://kubernetes.io/docs/tasks/administer-cluster/coredns"
        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: spec is the specification of the desired behavior of the
              DNS.
            type: object
            properties:
              servers:
                description: "servers is a list of DNS resolvers that provide name
                  query delegation for one or more subdomains outside the scope of
                  the cluster domain. If servers consists of more than one Server,
                  longest suffix match will be used to determine the Server. \n For
                  example, if there are two Servers, one for \"foo.com\" and another
                  for \"a.foo.com\", and the name query is for \"www.a.foo.com\",
                  it will be routed to the Server with Zone \"a.foo.com\". \n If this
                  field is nil, no servers are created."
                type: array
                items:
                  description: Server defines the schema for a server that runs per
                    instance of CoreDNS.
                  type: object
                  properties:
                    forwardPlugin:
                      description: forwardPlugin defines a schema for configuring
                        CoreDNS to proxy DNS messages to upstream resolvers.
                      type: object
                      properties:
                        upstreams:
                          description: "upstreams is a list of resolvers to forward
                            name queries for subdomains of Zones. Upstreams are randomized
                            when more than 1 upstream is specified. Each instance
                            of CoreDNS performs health checking of Upstreams. When
                            a healthy upstream returns an error during the exchange,
                            another resolver is tried from Upstreams. Each upstream
                            is represented by an IP address or IP:port if the upstream
                            listens on a port other than 53. \n A maximum of 15 upstreams
                            is allowed per ForwardPlugin."
                          type: array
                          maxItems: 15
                          items:
                            type: string
                    name:
                      description: name is required and specifies a unique name for
                        the server. Name must comply with the Service Name Syntax
                        of rfc6335.
                      type: string
                    zones:
                      description: zones is required and specifies the subdomains
                        that Server is authoritative for. Zones must conform to the
                        rfc1123 definition of a subdomain. Specifying the cluster
                        domain (i.e., "cluster.local") is invalid.
                      type: array
                      items:
                        type: string
          status:
            description: status is the most recently observed status of the DNS.
            type: object
            required:
            - clusterDomain
            - clusterIP
            properties:
              clusterDomain:
                description: "clusterDomain is the local cluster DNS domain suffix
                  for DNS services. This will be a subdomain as defined in RFC 1034,
                  section 3.5: https://tools.ietf.org/html/rfc1034#section-3.5 Example:
                  \"cluster.local\" \n More info: https://kubernetes.io/docs/concepts/services-networking/dns-pod-service"
                type: string
              clusterIP:
                description: "clusterIP is the service IP through which this DNS is
                  made available. \n In the case of the default DNS, this will be
                  a well known IP that is used as the default nameserver for pods
                  that are using the default ClusterFirst DNS policy. \n In general,
                  this IP can be specified in a pod's spec.dnsConfig.nameservers list
                  or used explicitly when performing name resolution from within the
                  cluster. Example: dig foo.com @<service IP> \n More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies"
                type: string
              conditions:
                description: "conditions provide information about the state of the
                  DNS on the cluster. \n These are the supported DNS conditions: \n
                  \  * Available   - True if the following conditions are met:     *
                  DNS controller daemonset is available.   - False if any of those
                  conditions are unsatisfied."
                type: array
                items:
                  description: OperatorCondition is just the standard condition fields.
                  type: object
                  properties:
                    lastTransitionTime:
                      type: string
                      format: date-time
                    message:
                      type: string
                    reason:
                      type: string
                    status:
                      type: string
                    type:
                      type: string
