apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    api-approved.openshift.io: https://github.com/openshift/api/pull/470
    include.release.openshift.io/ibm-cloud-managed: "true"
    include.release.openshift.io/self-managed-high-availability: "true"
    include.release.openshift.io/single-node-developer: "true"
  name: ingresses.config.openshift.io
spec:
  group: config.openshift.io
  names:
    kind: Ingress
    listKind: IngressList
    plural: ingresses
    singular: ingress
  scope: Cluster
  versions:
  - name: v1
    schema:
      openAPIV3Schema:
        description: Ingress holds cluster-wide information about ingress, including
          the default ingress domain used for routes. The canonical name is `cluster`.
        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:
              appsDomain:
                description: appsDomain is an optional domain to use instead of the
                  one specified in the domain field when a Route is created without
                  specifying an explicit host. If appsDomain is nonempty, this value
                  is used to generate default host values for Route. Unlike domain,
                  appsDomain may be modified after installation. This assumes a new
                  ingresscontroller has been setup with a wildcard certificate.
                type: string
              componentRoutes:
                description: "componentRoutes is an optional list of routes that are
                  managed by OpenShift components that a cluster-admin is able to
                  configure the hostname and serving certificate for. The namespace
                  and name of each route in this list should match an existing entry
                  in the status.componentRoutes list. \n To determine the set of configurable
                  Routes, look at namespace and name of entries in the .status.componentRoutes
                  list, where participating operators write the status of configurable
                  routes."
                type: array
                items:
                  description: ComponentRouteSpec allows for configuration of a route's
                    hostname and serving certificate.
                  type: object
                  required:
                  - hostname
                  - name
                  - namespace
                  properties:
                    hostname:
                      description: hostname is the hostname that should be used by
                        the route.
                      type: string
                      format: hostname
                    name:
                      description: "name is the logical name of the route to customize.
                        \n The namespace and name of this componentRoute must match
                        a corresponding entry in the list of status.componentRoutes
                        if the route is to be customized."
                      type: string
                      maxLength: 256
                      minLength: 1
                    namespace:
                      description: "namespace is the namespace of the route to customize.
                        \n The namespace and name of this componentRoute must match
                        a corresponding entry in the list of status.componentRoutes
                        if the route is to be customized."
                      type: string
                      maxLength: 63
                      minLength: 1
                      pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
                    servingCertKeyPairSecret:
                      description: servingCertKeyPairSecret is a reference to a secret
                        of type `kubernetes.io/tls` in the openshift-config namespace.
                        The serving cert/key pair must match and will be used by the
                        operator to fulfill the intent of serving with this name.
                        If the custom hostname uses the default routing suffix of
                        the cluster, the Secret specification for a serving certificate
                        will not be needed.
                      type: object
                      required:
                      - name
                      properties:
                        name:
                          description: name is the metadata.name of the referenced
                            secret
                          type: string
              domain:
                description: "domain is used to generate a default host name for a
                  route when the route's host name is empty. The generated host name
                  will follow this pattern: \"<route-name>.<route-namespace>.<domain>\".
                  \n It is also used as the default wildcard domain suffix for ingress.
                  The default ingresscontroller domain will follow this pattern: \"*.<domain>\".
                  \n Once set, changing domain is not currently supported."
                type: string
          status:
            description: status holds observed values from the cluster. They may not
              be overridden.
            type: object
            properties:
              componentRoutes:
                description: componentRoutes is where participating operators place
                  the current route status for routes whose hostnames and serving
                  certificates can be customized by the cluster-admin.
                type: array
                items:
                  description: ComponentRouteStatus contains information allowing
                    configuration of a route's hostname and serving certificate.
                  type: object
                  required:
                  - defaultHostname
                  - name
                  - namespace
                  - relatedObjects
                  properties:
                    conditions:
                      description: "conditions are used to communicate the state of
                        the componentRoutes entry. \n Supported conditions include
                        Available, Degraded and Progressing. \n If available is true,
                        the content served by the route can be accessed by users.
                        This includes cases where a default may continue to serve
                        content while the customized route specified by the cluster-admin
                        is being configured. \n If Degraded is true, that means something
                        has gone wrong trying to handle the componentRoutes entry.
                        The currentHostnames field may or may not be in effect. \n
                        If Progressing is true, that means the component is taking
                        some action related to the componentRoutes entry."
                      type: array
                      items:
                        description: "Condition contains details for one aspect of
                          the current state of this API Resource. --- This struct
                          is intended for direct use as an array at the field path
                          .status.conditions.  For example, type FooStatus struct{
                          \    // Represents the observations of a foo's current state.
                          \    // Known .status.conditions.type are: \"Available\",
                          \"Progressing\", and \"Degraded\"     // +patchMergeKey=type
                          \    // +patchStrategy=merge     // +listType=map     //
                          +listMapKey=type     Conditions []metav1.Condition `json:\"conditions,omitempty\"
                          patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`
                          \n     // other fields }"
                        type: object
                        required:
                        - lastTransitionTime
                        - message
                        - reason
                        - status
                        - type
                        properties:
                          lastTransitionTime:
                            description: lastTransitionTime is the last time the condition
                              transitioned from one status to another. This should
                              be when the underlying condition changed.  If that is
                              not known, then using the time when the API field changed
                              is acceptable.
                            type: string
                            format: date-time
                          message:
                            description: message is a human readable message indicating
                              details about the transition. This may be an empty string.
                            type: string
                            maxLength: 32768
                          observedGeneration:
                            description: observedGeneration represents the .metadata.generation
                              that the condition was set based upon. For instance,
                              if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration
                              is 9, the condition is out of date with respect to the
                              current state of the instance.
                            type: integer
                            format: int64
                            minimum: 0
                          reason:
                            description: reason contains a programmatic identifier
                              indicating the reason for the condition's last transition.
                              Producers of specific condition types may define expected
                              values and meanings for this field, and whether the
                              values are considered a guaranteed API. The value should
                              be a CamelCase string. This field may not be empty.
                            type: string
                            maxLength: 1024
                            minLength: 1
                            pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
                          status:
                            description: status of the condition, one of True, False,
                              Unknown.
                            type: string
                            enum:
                            - "True"
                            - "False"
                            - Unknown
                          type:
                            description: type of condition in CamelCase or in foo.example.com/CamelCase.
                              --- Many .condition.type values are consistent across
                              resources like Available, but because arbitrary conditions
                              can be useful (see .node.status.conditions), the ability
                              to deconflict is important. The regex it matches is
                              (dns1123SubdomainFmt/)?(qualifiedNameFmt)
                            type: string
                            maxLength: 316
                            pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
                    consumingUsers:
                      description: consumingUsers is a slice of ServiceAccounts that
                        need to have read permission on the servingCertKeyPairSecret
                        secret.
                      type: array
                      maxItems: 5
                      items:
                        description: ConsumingUser is an alias for string which we
                          add validation to. Currently only service accounts are supported.
                        type: string
                        maxLength: 512
                        minLength: 1
                        pattern: ^system:serviceaccount:[a-z0-9]([-a-z0-9]*[a-z0-9])?:[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
                    currentHostnames:
                      description: currentHostnames is the list of current names used
                        by the route. Typically, this list should consist of a single
                        hostname, but if multiple hostnames are supported by the route
                        the operator may write multiple entries to this list.
                      type: array
                      minItems: 1
                      items:
                        description: Hostname is an alias for hostname string validation.
                        type: string
                        format: hostname
                    defaultHostname:
                      description: defaultHostname is the hostname of this route prior
                        to customization.
                      type: string
                      format: hostname
                    name:
                      description: "name is the logical name of the route to customize.
                        It does not have to be the actual name of a route resource
                        but it cannot be renamed. \n The namespace and name of this
                        componentRoute must match a corresponding entry in the list
                        of spec.componentRoutes if the route is to be customized."
                      type: string
                      maxLength: 256
                      minLength: 1
                    namespace:
                      description: "namespace is the namespace of the route to customize.
                        It must be a real namespace. Using an actual namespace ensures
                        that no two components will conflict and the same component
                        can be installed multiple times. \n The namespace and name
                        of this componentRoute must match a corresponding entry in
                        the list of spec.componentRoutes if the route is to be customized."
                      type: string
                      maxLength: 63
                      minLength: 1
                      pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
                    relatedObjects:
                      description: relatedObjects is a list of resources which are
                        useful when debugging or inspecting how spec.componentRoutes
                        is applied.
                      type: array
                      minItems: 1
                      items:
                        description: ObjectReference contains enough information to
                          let you inspect or modify the referred object.
                        type: object
                        required:
                        - group
                        - name
                        - resource
                        properties:
                          group:
                            description: group of the referent.
                            type: string
                          name:
                            description: name of the referent.
                            type: string
                          namespace:
                            description: namespace of the referent.
                            type: string
                          resource:
                            description: resource of the referent.
                            type: string
    served: true
    storage: true
    subresources:
      status: {}
