apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    api-approved.openshift.io: https://github.com/openshift/api/pull/519
    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: configs.imageregistry.operator.openshift.io
spec:
  group: imageregistry.operator.openshift.io
  names:
    kind: Config
    listKind: ConfigList
    plural: configs
    singular: config
  scope: Cluster
  versions:
    - name: v1
      schema:
        openAPIV3Schema:
          description: "Config is the configuration object for a registry instance managed by the registry operator \n Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer)."
          type: object
          required:
            - metadata
            - 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: ImageRegistrySpec defines the specs for the running registry.
              type: object
              required:
                - managementState
                - replicas
              properties:
                affinity:
                  description: affinity is a group of node affinity scheduling rules for the image registry pod(s).
                  type: object
                  properties:
                    nodeAffinity:
                      description: Describes node affinity scheduling rules for the pod.
                      type: object
                      properties:
                        preferredDuringSchedulingIgnoredDuringExecution:
                          description: The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.
                          type: array
                          items:
                            description: An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).
                            type: object
                            required:
                              - preference
                              - weight
                            properties:
                              preference:
                                description: A node selector term, associated with the corresponding weight.
                                type: object
                                properties:
                                  matchExpressions:
                                    description: A list of node selector requirements by node's labels.
                                    type: array
                                    items:
                                      description: A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.
                                      type: object
                                      required:
                                        - key
                                        - operator
                                      properties:
                                        key:
                                          description: The label key that the selector applies to.
                                          type: string
                                        operator:
                                          description: Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
                                          type: string
                                        values:
                                          description: An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.
                                          type: array
                                          items:
                                            type: string
                                  matchFields:
                                    description: A list of node selector requirements by node's fields.
                                    type: array
                                    items:
                                      description: A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.
                                      type: object
                                      required:
                                        - key
                                        - operator
                                      properties:
                                        key:
                                          description: The label key that the selector applies to.
                                          type: string
                                        operator:
                                          description: Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
                                          type: string
                                        values:
                                          description: An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.
                                          type: array
                                          items:
                                            type: string
                              weight:
                                description: Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.
                                type: integer
                                format: int32
                        requiredDuringSchedulingIgnoredDuringExecution:
                          description: If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.
                          type: object
                          required:
                            - nodeSelectorTerms
                          properties:
                            nodeSelectorTerms:
                              description: Required. A list of node selector terms. The terms are ORed.
                              type: array
                              items:
                                description: A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.
                                type: object
                                properties:
                                  matchExpressions:
                                    description: A list of node selector requirements by node's labels.
                                    type: array
                                    items:
                                      description: A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.
                                      type: object
                                      required:
                                        - key
                                        - operator
                                      properties:
                                        key:
                                          description: The label key that the selector applies to.
                                          type: string
                                        operator:
                                          description: Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
                                          type: string
                                        values:
                                          description: An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.
                                          type: array
                                          items:
                                            type: string
                                  matchFields:
                                    description: A list of node selector requirements by node's fields.
                                    type: array
                                    items:
                                      description: A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.
                                      type: object
                                      required:
                                        - key
                                        - operator
                                      properties:
                                        key:
                                          description: The label key that the selector applies to.
                                          type: string
                                        operator:
                                          description: Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
                                          type: string
                                        values:
                                          description: An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.
                                          type: array
                                          items:
                                            type: string
                    podAffinity:
                      description: Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).
                      type: object
                      properties:
                        preferredDuringSchedulingIgnoredDuringExecution:
                          description: The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.
                          type: array
                          items:
                            description: The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)
                            type: object
                            required:
                              - podAffinityTerm
                              - weight
                            properties:
                              podAffinityTerm:
                                description: Required. A pod affinity term, associated with the corresponding weight.
                                type: object
                                required:
                                  - topologyKey
                                properties:
                                  labelSelector:
                                    description: A label query over a set of resources, in this case pods.
                                    type: object
                                    properties:
                                      matchExpressions:
                                        description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
                                        type: array
                                        items:
                                          description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.
                                          type: object
                                          required:
                                            - key
                                            - operator
                                          properties:
                                            key:
                                              description: key is the label key that the selector applies to.
                                              type: string
                                            operator:
                                              description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.
                                              type: string
                                            values:
                                              description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.
                                              type: array
                                              items:
                                                type: string
                                      matchLabels:
                                        description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed.
                                        type: object
                                        additionalProperties:
                                          type: string
                                  namespaceSelector:
                                    description: A label query over the set of namespaces that the term applies to. The term is applied to the union of the namespaces selected by this field and the ones listed in the namespaces field. null selector and null or empty namespaces list means "this pod's namespace". An empty selector ({}) matches all namespaces. This field is alpha-level and is only honored when PodAffinityNamespaceSelector feature is enabled.
                                    type: object
                                    properties:
                                      matchExpressions:
                                        description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
                                        type: array
                                        items:
                                          description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.
                                          type: object
                                          required:
                                            - key
                                            - operator
                                          properties:
                                            key:
                                              description: key is the label key that the selector applies to.
                                              type: string
                                            operator:
                                              description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.
                                              type: string
                                            values:
                                              description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.
                                              type: array
                                              items:
                                                type: string
                                      matchLabels:
                                        description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed.
                                        type: object
                                        additionalProperties:
                                          type: string
                                  namespaces:
                                    description: namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means "this pod's namespace"
                                    type: array
                                    items:
                                      type: string
                                  topologyKey:
                                    description: This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.
                                    type: string
                              weight:
                                description: weight associated with matching the corresponding podAffinityTerm, in the range 1-100.
                                type: integer
                                format: int32
                        requiredDuringSchedulingIgnoredDuringExecution:
                          description: If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.
                          type: array
                          items:
                            description: Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key <topologyKey> matches that of any node on which a pod of the set of pods is running
                            type: object
                            required:
                              - topologyKey
                            properties:
                              labelSelector:
                                description: A label query over a set of resources, in this case pods.
                                type: object
                                properties:
                                  matchExpressions:
                                    description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
                                    type: array
                                    items:
                                      description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.
                                      type: object
                                      required:
                                        - key
                                        - operator
                                      properties:
                                        key:
                                          description: key is the label key that the selector applies to.
                                          type: string
                                        operator:
                                          description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.
                                          type: string
                                        values:
                                          description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.
                                          type: array
                                          items:
                                            type: string
                                  matchLabels:
                                    description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed.
                                    type: object
                                    additionalProperties:
                                      type: string
                              namespaceSelector:
                                description: A label query over the set of namespaces that the term applies to. The term is applied to the union of the namespaces selected by this field and the ones listed in the namespaces field. null selector and null or empty namespaces list means "this pod's namespace". An empty selector ({}) matches all namespaces. This field is alpha-level and is only honored when PodAffinityNamespaceSelector feature is enabled.
                                type: object
                                properties:
                                  matchExpressions:
                                    description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
                                    type: array
                                    items:
                                      description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.
                                      type: object
                                      required:
                                        - key
                                        - operator
                                      properties:
                                        key:
                                          description: key is the label key that the selector applies to.
                                          type: string
                                        operator:
                                          description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.
                                          type: string
                                        values:
                                          description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.
                                          type: array
                                          items:
                                            type: string
                                  matchLabels:
                                    description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed.
                                    type: object
                                    additionalProperties:
                                      type: string
                              namespaces:
                                description: namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means "this pod's namespace"
                                type: array
                                items:
                                  type: string
                              topologyKey:
                                description: This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.
                                type: string
                    podAntiAffinity:
                      description: Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).
                      type: object
                      properties:
                        preferredDuringSchedulingIgnoredDuringExecution:
                          description: The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.
                          type: array
                          items:
                            description: The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)
                            type: object
                            required:
                              - podAffinityTerm
                              - weight
                            properties:
                              podAffinityTerm:
                                description: Required. A pod affinity term, associated with the corresponding weight.
                                type: object
                                required:
                                  - topologyKey
                                properties:
                                  labelSelector:
                                    description: A label query over a set of resources, in this case pods.
                                    type: object
                                    properties:
                                      matchExpressions:
                                        description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
                                        type: array
                                        items:
                                          description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.
                                          type: object
                                          required:
                                            - key
                                            - operator
                                          properties:
                                            key:
                                              description: key is the label key that the selector applies to.
                                              type: string
                                            operator:
                                              description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.
                                              type: string
                                            values:
                                              description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.
                                              type: array
                                              items:
                                                type: string
                                      matchLabels:
                                        description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed.
                                        type: object
                                        additionalProperties:
                                          type: string
                                  namespaceSelector:
                                    description: A label query over the set of namespaces that the term applies to. The term is applied to the union of the namespaces selected by this field and the ones listed in the namespaces field. null selector and null or empty namespaces list means "this pod's namespace". An empty selector ({}) matches all namespaces. This field is alpha-level and is only honored when PodAffinityNamespaceSelector feature is enabled.
                                    type: object
                                    properties:
                                      matchExpressions:
                                        description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
                                        type: array
                                        items:
                                          description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.
                                          type: object
                                          required:
                                            - key
                                            - operator
                                          properties:
                                            key:
                                              description: key is the label key that the selector applies to.
                                              type: string
                                            operator:
                                              description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.
                                              type: string
                                            values:
                                              description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.
                                              type: array
                                              items:
                                                type: string
                                      matchLabels:
                                        description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed.
                                        type: object
                                        additionalProperties:
                                          type: string
                                  namespaces:
                                    description: namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means "this pod's namespace"
                                    type: array
                                    items:
                                      type: string
                                  topologyKey:
                                    description: This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.
                                    type: string
                              weight:
                                description: weight associated with matching the corresponding podAffinityTerm, in the range 1-100.
                                type: integer
                                format: int32
                        requiredDuringSchedulingIgnoredDuringExecution:
                          description: If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.
                          type: array
                          items:
                            description: Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key <topologyKey> matches that of any node on which a pod of the set of pods is running
                            type: object
                            required:
                              - topologyKey
                            properties:
                              labelSelector:
                                description: A label query over a set of resources, in this case pods.
                                type: object
                                properties:
                                  matchExpressions:
                                    description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
                                    type: array
                                    items:
                                      description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.
                                      type: object
                                      required:
                                        - key
                                        - operator
                                      properties:
                                        key:
                                          description: key is the label key that the selector applies to.
                                          type: string
                                        operator:
                                          description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.
                                          type: string
                                        values:
                                          description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.
                                          type: array
                                          items:
                                            type: string
                                  matchLabels:
                                    description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed.
                                    type: object
                                    additionalProperties:
                                      type: string
                              namespaceSelector:
                                description: A label query over the set of namespaces that the term applies to. The term is applied to the union of the namespaces selected by this field and the ones listed in the namespaces field. null selector and null or empty namespaces list means "this pod's namespace". An empty selector ({}) matches all namespaces. This field is alpha-level and is only honored when PodAffinityNamespaceSelector feature is enabled.
                                type: object
                                properties:
                                  matchExpressions:
                                    description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
                                    type: array
                                    items:
                                      description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.
                                      type: object
                                      required:
                                        - key
                                        - operator
                                      properties:
                                        key:
                                          description: key is the label key that the selector applies to.
                                          type: string
                                        operator:
                                          description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.
                                          type: string
                                        values:
                                          description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.
                                          type: array
                                          items:
                                            type: string
                                  matchLabels:
                                    description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed.
                                    type: object
                                    additionalProperties:
                                      type: string
                              namespaces:
                                description: namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means "this pod's namespace"
                                type: array
                                items:
                                  type: string
                              topologyKey:
                                description: This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.
                                type: string
                defaultRoute:
                  description: defaultRoute indicates whether an external facing route for the registry should be created using the default generated hostname.
                  type: boolean
                disableRedirect:
                  description: disableRedirect controls whether to route all data through the Registry, rather than redirecting to the backend.
                  type: boolean
                httpSecret:
                  description: httpSecret is the value needed by the registry to secure uploads, generated by default.
                  type: string
                logLevel:
                  description: "logLevel is an intent based logging for an overall component.  It does not give fine grained control, but it is a simple way to manage coarse grained logging choices that operators have to interpret for their operands. \n Valid values are: \"Normal\", \"Debug\", \"Trace\", \"TraceAll\". Defaults to \"Normal\"."
                  type: string
                  default: Normal
                  enum:
                    - ""
                    - Normal
                    - Debug
                    - Trace
                    - TraceAll
                logging:
                  description: logging is deprecated, use logLevel instead.
                  type: integer
                  format: int64
                managementState:
                  description: managementState indicates whether and how the operator should manage the component
                  type: string
                  pattern: ^(Managed|Unmanaged|Force|Removed)$
                nodeSelector:
                  description: nodeSelector defines the node selection constraints for the registry pod.
                  type: object
                  additionalProperties:
                    type: string
                observedConfig:
                  description: observedConfig holds a sparse config that controller has observed from the cluster state.  It exists in spec because it is an input to the level for the operator
                  type: object
                  nullable: true
                  x-kubernetes-preserve-unknown-fields: true
                operatorLogLevel:
                  description: "operatorLogLevel is an intent based logging for the operator itself.  It does not give fine grained control, but it is a simple way to manage coarse grained logging choices that operators have to interpret for themselves. \n Valid values are: \"Normal\", \"Debug\", \"Trace\", \"TraceAll\". Defaults to \"Normal\"."
                  type: string
                  default: Normal
                  enum:
                    - ""
                    - Normal
                    - Debug
                    - Trace
                    - TraceAll
                proxy:
                  description: proxy defines the proxy to be used when calling master api, upstream registries, etc.
                  type: object
                  properties:
                    http:
                      description: http defines the proxy to be used by the image registry when accessing HTTP endpoints.
                      type: string
                    https:
                      description: https defines the proxy to be used by the image registry when accessing HTTPS endpoints.
                      type: string
                    noProxy:
                      description: noProxy defines a comma-separated list of host names that shouldn't go through any proxy.
                      type: string
                readOnly:
                  description: readOnly indicates whether the registry instance should reject attempts to push new images or delete existing ones.
                  type: boolean
                replicas:
                  description: replicas determines the number of registry instances to run.
                  type: integer
                  format: int32
                requests:
                  description: requests controls how many parallel requests a given registry instance will handle before queuing additional requests.
                  type: object
                  properties:
                    read:
                      description: read defines limits for image registry's reads.
                      type: object
                      properties:
                        maxInQueue:
                          description: maxInQueue sets the maximum queued api requests to the registry.
                          type: integer
                        maxRunning:
                          description: maxRunning sets the maximum in flight api requests to the registry.
                          type: integer
                        maxWaitInQueue:
                          description: maxWaitInQueue sets the maximum time a request can wait in the queue before being rejected.
                          type: string
                          format: duration
                    write:
                      description: write defines limits for image registry's writes.
                      type: object
                      properties:
                        maxInQueue:
                          description: maxInQueue sets the maximum queued api requests to the registry.
                          type: integer
                        maxRunning:
                          description: maxRunning sets the maximum in flight api requests to the registry.
                          type: integer
                        maxWaitInQueue:
                          description: maxWaitInQueue sets the maximum time a request can wait in the queue before being rejected.
                          type: string
                          format: duration
                resources:
                  description: resources defines the resource requests+limits for the registry pod.
                  type: object
                  properties:
                    limits:
                      description: 'Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/'
                      type: object
                      additionalProperties:
                        pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                        anyOf:
                          - type: integer
                          - type: string
                        x-kubernetes-int-or-string: true
                    requests:
                      description: 'Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/'
                      type: object
                      additionalProperties:
                        pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                        anyOf:
                          - type: integer
                          - type: string
                        x-kubernetes-int-or-string: true
                rolloutStrategy:
                  description: rolloutStrategy defines rollout strategy for the image registry deployment.
                  type: string
                  pattern: ^(RollingUpdate|Recreate)$
                routes:
                  description: routes defines additional external facing routes which should be created for the registry.
                  type: array
                  items:
                    description: ImageRegistryConfigRoute holds information on external route access to image registry.
                    type: object
                    required:
                      - name
                    properties:
                      hostname:
                        description: hostname for the route.
                        type: string
                      name:
                        description: name of the route to be created.
                        type: string
                      secretName:
                        description: secretName points to secret containing the certificates to be used by the route.
                        type: string
                storage:
                  description: storage details for configuring registry storage, e.g. S3 bucket coordinates.
                  type: object
                  properties:
                    azure:
                      description: azure represents configuration that uses Azure Blob Storage.
                      type: object
                      properties:
                        accountName:
                          description: accountName defines the account to be used by the registry.
                          type: string
                        cloudName:
                          description: cloudName is the name of the Azure cloud environment to be used by the registry. If empty, the operator will set it based on the infrastructure object.
                          type: string
                        container:
                          description: container defines Azure's container to be used by registry.
                          type: string
                          maxLength: 63
                          minLength: 3
                          pattern: ^[0-9a-z]+(-[0-9a-z]+)*$
                    emptyDir:
                      description: 'emptyDir represents ephemeral storage on the pod''s host node. WARNING: this storage cannot be used with more than 1 replica and is not suitable for production use. When the pod is removed from a node for any reason, the data in the emptyDir is deleted forever.'
                      type: object
                    gcs:
                      description: gcs represents configuration that uses Google Cloud Storage.
                      type: object
                      properties:
                        bucket:
                          description: bucket is the bucket name in which you want to store the registry's data. Optional, will be generated if not provided.
                          type: string
                        keyID:
                          description: keyID is the KMS key ID to use for encryption. Optional, buckets are encrypted by default on GCP. This allows for the use of a custom encryption key.
                          type: string
                        projectID:
                          description: projectID is the Project ID of the GCP project that this bucket should be associated with.
                          type: string
                        region:
                          description: region is the GCS location in which your bucket exists. Optional, will be set based on the installed GCS Region.
                          type: string
                    ibmcos:
                      description: ibmcos represents configuration that uses IBM Cloud Object Storage.
                      type: object
                      properties:
                        bucket:
                          description: bucket is the bucket name in which you want to store the registry's data. Optional, will be generated if not provided.
                          type: string
                        location:
                          description: location is the IBM Cloud location in which your bucket exists. Optional, will be set based on the installed IBM Cloud location.
                          type: string
                        resourceGroupName:
                          description: resourceGroupName is the name of the IBM Cloud resource group that this bucket and its service instance is associated with. Optional, will be set based on the installed IBM Cloud resource group.
                          type: string
                        resourceKeyCRN:
                          description: resourceKeyCRN is the CRN of the IBM Cloud resource key that is created for the service instance. Commonly referred as a service credential and must contain HMAC type credentials. Optional, will be computed if not provided.
                          type: string
                          pattern: ^crn:.+:.+:.+:cloud-object-storage:.+:.+:.+:resource-key:.+$
                        serviceInstanceCRN:
                          description: serviceInstanceCRN is the CRN of the IBM Cloud Object Storage service instance that this bucket is associated with. Optional, will be computed if not provided.
                          type: string
                          pattern: ^crn:.+:.+:.+:cloud-object-storage:.+:.+:.+::$
                    managementState:
                      description: managementState indicates if the operator manages the underlying storage unit. If Managed the operator will remove the storage when this operator gets Removed.
                      type: string
                      pattern: ^(Managed|Unmanaged)$
                    pvc:
                      description: pvc represents configuration that uses a PersistentVolumeClaim.
                      type: object
                      properties:
                        claim:
                          description: claim defines the Persisent Volume Claim's name to be used.
                          type: string
                    s3:
                      description: s3 represents configuration that uses Amazon Simple Storage Service.
                      type: object
                      properties:
                        bucket:
                          description: bucket is the bucket name in which you want to store the registry's data. Optional, will be generated if not provided.
                          type: string
                        cloudFront:
                          description: cloudFront configures Amazon Cloudfront as the storage middleware in a registry.
                          type: object
                          required:
                            - baseURL
                            - keypairID
                            - privateKey
                          properties:
                            baseURL:
                              description: baseURL contains the SCHEME://HOST[/PATH] at which Cloudfront is served.
                              type: string
                            duration:
                              description: duration is the duration of the Cloudfront session.
                              type: string
                              format: duration
                            keypairID:
                              description: keypairID is key pair ID provided by AWS.
                              type: string
                            privateKey:
                              description: privateKey points to secret containing the private key, provided by AWS.
                              type: object
                              required:
                                - key
                              properties:
                                key:
                                  description: The key of the secret to select from.  Must be a valid secret key.
                                  type: string
                                name:
                                  description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?'
                                  type: string
                                optional:
                                  description: Specify whether the Secret or its key must be defined
                                  type: boolean
                        encrypt:
                          description: encrypt specifies whether the registry stores the image in encrypted format or not. Optional, defaults to false.
                          type: boolean
                        keyID:
                          description: keyID is the KMS key ID to use for encryption. Optional, Encrypt must be true, or this parameter is ignored.
                          type: string
                        region:
                          description: region is the AWS region in which your bucket exists. Optional, will be set based on the installed AWS Region.
                          type: string
                        regionEndpoint:
                          description: regionEndpoint is the endpoint for S3 compatible storage services. Optional, defaults based on the Region that is provided.
                          type: string
                        virtualHostedStyle:
                          description: virtualHostedStyle enables using S3 virtual hosted style bucket paths with a custom RegionEndpoint Optional, defaults to false.
                          type: boolean
                    swift:
                      description: swift represents configuration that uses OpenStack Object Storage.
                      type: object
                      properties:
                        authURL:
                          description: authURL defines the URL for obtaining an authentication token.
                          type: string
                        authVersion:
                          description: authVersion specifies the OpenStack Auth's version.
                          type: string
                        container:
                          description: container defines the name of Swift container where to store the registry's data.
                          type: string
                        domain:
                          description: domain specifies Openstack's domain name for Identity v3 API.
                          type: string
                        domainID:
                          description: domainID specifies Openstack's domain id for Identity v3 API.
                          type: string
                        regionName:
                          description: regionName defines Openstack's region in which container exists.
                          type: string
                        tenant:
                          description: tenant defines Openstack tenant name to be used by registry.
                          type: string
                        tenantID:
                          description: tenant defines Openstack tenant id to be used by registry.
                          type: string
                tolerations:
                  description: tolerations defines the tolerations for the registry pod.
                  type: array
                  items:
                    description: The pod this Toleration is attached to tolerates any taint that matches the triple <key,value,effect> using the matching operator <operator>.
                    type: object
                    properties:
                      effect:
                        description: Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.
                        type: string
                      key:
                        description: Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.
                        type: string
                      operator:
                        description: Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.
                        type: string
                      tolerationSeconds:
                        description: TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.
                        type: integer
                        format: int64
                      value:
                        description: Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.
                        type: string
                unsupportedConfigOverrides:
                  description: 'unsupportedConfigOverrides holds a sparse config that will override any previously set options.  It only needs to be the fields to override it will end up overlaying in the following order: 1. hardcoded defaults 2. observedConfig 3. unsupportedConfigOverrides'
                  type: object
                  nullable: true
                  x-kubernetes-preserve-unknown-fields: true
            status:
              description: ImageRegistryStatus reports image registry operational status.
              type: object
              required:
                - storage
                - storageManaged
              properties:
                conditions:
                  description: conditions is a list of conditions and their status
                  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
                generations:
                  description: generations are used to determine when an item needs to be reconciled or has changed in a way that needs a reaction.
                  type: array
                  items:
                    description: GenerationStatus keeps track of the generation for a given resource so that decisions about forced updates can be made.
                    type: object
                    properties:
                      group:
                        description: group is the group of the thing you're tracking
                        type: string
                      hash:
                        description: hash is an optional field set for resources without generation that are content sensitive like secrets and configmaps
                        type: string
                      lastGeneration:
                        description: lastGeneration is the last generation of the workload controller involved
                        type: integer
                        format: int64
                      name:
                        description: name is the name of the thing you're tracking
                        type: string
                      namespace:
                        description: namespace is where the thing you're tracking is
                        type: string
                      resource:
                        description: resource is the resource type of the thing you're tracking
                        type: string
                observedGeneration:
                  description: observedGeneration is the last generation change you've dealt with
                  type: integer
                  format: int64
                readyReplicas:
                  description: readyReplicas indicates how many replicas are ready and at the desired state
                  type: integer
                  format: int32
                storage:
                  description: storage indicates the current applied storage configuration of the registry.
                  type: object
                  properties:
                    azure:
                      description: azure represents configuration that uses Azure Blob Storage.
                      type: object
                      properties:
                        accountName:
                          description: accountName defines the account to be used by the registry.
                          type: string
                        cloudName:
                          description: cloudName is the name of the Azure cloud environment to be used by the registry. If empty, the operator will set it based on the infrastructure object.
                          type: string
                        container:
                          description: container defines Azure's container to be used by registry.
                          type: string
                          maxLength: 63
                          minLength: 3
                          pattern: ^[0-9a-z]+(-[0-9a-z]+)*$
                    emptyDir:
                      description: 'emptyDir represents ephemeral storage on the pod''s host node. WARNING: this storage cannot be used with more than 1 replica and is not suitable for production use. When the pod is removed from a node for any reason, the data in the emptyDir is deleted forever.'
                      type: object
                    gcs:
                      description: gcs represents configuration that uses Google Cloud Storage.
                      type: object
                      properties:
                        bucket:
                          description: bucket is the bucket name in which you want to store the registry's data. Optional, will be generated if not provided.
                          type: string
                        keyID:
                          description: keyID is the KMS key ID to use for encryption. Optional, buckets are encrypted by default on GCP. This allows for the use of a custom encryption key.
                          type: string
                        projectID:
                          description: projectID is the Project ID of the GCP project that this bucket should be associated with.
                          type: string
                        region:
                          description: region is the GCS location in which your bucket exists. Optional, will be set based on the installed GCS Region.
                          type: string
                    ibmcos:
                      description: ibmcos represents configuration that uses IBM Cloud Object Storage.
                      type: object
                      properties:
                        bucket:
                          description: bucket is the bucket name in which you want to store the registry's data. Optional, will be generated if not provided.
                          type: string
                        location:
                          description: location is the IBM Cloud location in which your bucket exists. Optional, will be set based on the installed IBM Cloud location.
                          type: string
                        resourceGroupName:
                          description: resourceGroupName is the name of the IBM Cloud resource group that this bucket and its service instance is associated with. Optional, will be set based on the installed IBM Cloud resource group.
                          type: string
                        resourceKeyCRN:
                          description: resourceKeyCRN is the CRN of the IBM Cloud resource key that is created for the service instance. Commonly referred as a service credential and must contain HMAC type credentials. Optional, will be computed if not provided.
                          type: string
                          pattern: ^crn:.+:.+:.+:cloud-object-storage:.+:.+:.+:resource-key:.+$
                        serviceInstanceCRN:
                          description: serviceInstanceCRN is the CRN of the IBM Cloud Object Storage service instance that this bucket is associated with. Optional, will be computed if not provided.
                          type: string
                          pattern: ^crn:.+:.+:.+:cloud-object-storage:.+:.+:.+::$
                    managementState:
                      description: managementState indicates if the operator manages the underlying storage unit. If Managed the operator will remove the storage when this operator gets Removed.
                      type: string
                      pattern: ^(Managed|Unmanaged)$
                    pvc:
                      description: pvc represents configuration that uses a PersistentVolumeClaim.
                      type: object
                      properties:
                        claim:
                          description: claim defines the Persisent Volume Claim's name to be used.
                          type: string
                    s3:
                      description: s3 represents configuration that uses Amazon Simple Storage Service.
                      type: object
                      properties:
                        bucket:
                          description: bucket is the bucket name in which you want to store the registry's data. Optional, will be generated if not provided.
                          type: string
                        cloudFront:
                          description: cloudFront configures Amazon Cloudfront as the storage middleware in a registry.
                          type: object
                          required:
                            - baseURL
                            - keypairID
                            - privateKey
                          properties:
                            baseURL:
                              description: baseURL contains the SCHEME://HOST[/PATH] at which Cloudfront is served.
                              type: string
                            duration:
                              description: duration is the duration of the Cloudfront session.
                              type: string
                              format: duration
                            keypairID:
                              description: keypairID is key pair ID provided by AWS.
                              type: string
                            privateKey:
                              description: privateKey points to secret containing the private key, provided by AWS.
                              type: object
                              required:
                                - key
                              properties:
                                key:
                                  description: The key of the secret to select from.  Must be a valid secret key.
                                  type: string
                                name:
                                  description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?'
                                  type: string
                                optional:
                                  description: Specify whether the Secret or its key must be defined
                                  type: boolean
                        encrypt:
                          description: encrypt specifies whether the registry stores the image in encrypted format or not. Optional, defaults to false.
                          type: boolean
                        keyID:
                          description: keyID is the KMS key ID to use for encryption. Optional, Encrypt must be true, or this parameter is ignored.
                          type: string
                        region:
                          description: region is the AWS region in which your bucket exists. Optional, will be set based on the installed AWS Region.
                          type: string
                        regionEndpoint:
                          description: regionEndpoint is the endpoint for S3 compatible storage services. Optional, defaults based on the Region that is provided.
                          type: string
                        virtualHostedStyle:
                          description: virtualHostedStyle enables using S3 virtual hosted style bucket paths with a custom RegionEndpoint Optional, defaults to false.
                          type: boolean
                    swift:
                      description: swift represents configuration that uses OpenStack Object Storage.
                      type: object
                      properties:
                        authURL:
                          description: authURL defines the URL for obtaining an authentication token.
                          type: string
                        authVersion:
                          description: authVersion specifies the OpenStack Auth's version.
                          type: string
                        container:
                          description: container defines the name of Swift container where to store the registry's data.
                          type: string
                        domain:
                          description: domain specifies Openstack's domain name for Identity v3 API.
                          type: string
                        domainID:
                          description: domainID specifies Openstack's domain id for Identity v3 API.
                          type: string
                        regionName:
                          description: regionName defines Openstack's region in which container exists.
                          type: string
                        tenant:
                          description: tenant defines Openstack tenant name to be used by registry.
                          type: string
                        tenantID:
                          description: tenant defines Openstack tenant id to be used by registry.
                          type: string
                storageManaged:
                  description: storageManaged is deprecated, please refer to Storage.managementState
                  type: boolean
                version:
                  description: version is the level this availability applies to
                  type: string
      served: true
      storage: true
      subresources:
        status: {}
