apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: managedresources.resources.gardener.cloud
  labels:
    gardener.cloud/deletion-protected: "true"
spec:
  group: resources.gardener.cloud
  names:
    kind: ManagedResource
    listKind: ManagedResourceList
    plural: managedresources
    shortNames:
      - mr
    singular: managedresource
  scope: Namespaced
  versions:
    - additionalPrinterColumns:
        - description: The class identifies which resource manager is responsible for
            this ManagedResource.
          jsonPath: .spec.class
          name: Class
          type: string
        - description: Indicates whether all resources have been applied.
          jsonPath: .status.conditions[?(@.type=="ResourcesApplied")].status
          name: Applied
          type: string
        - description: Indicates whether all resources are healthy.
          jsonPath: .status.conditions[?(@.type=="ResourcesHealthy")].status
          name: Healthy
          type: string
        - description: creation timestamp
          jsonPath: .metadata.creationTimestamp
          name: Age
          type: date
      name: v1alpha1
      schema:
        openAPIV3Schema:
          description: ManagedResource describes a list of managed resources.
          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 contains the specification of this managed resource.
              properties:
                class:
                  description: Class holds the resource class used to control the responsibility
                    for multiple resource manager instances
                  type: string
                deletePersistentVolumeClaims:
                  description: DeletePersistentVolumeClaims specifies if PersistentVolumeClaims
                    created by StatefulSets, which are managed by this resource, should
                    also be deleted when the corresponding StatefulSet is deleted (defaults
                    to false).
                  type: boolean
                equivalences:
                  description: Equivalences specifies possible group/kind equivalences
                    for objects.
                  items:
                    items:
                      description: GroupKind specifies a Group and a Kind, but does
                        not force a version.  This is useful for identifying concepts
                        during lookup stages without having partially valid types
                      properties:
                        group:
                          type: string
                        kind:
                          type: string
                      required:
                        - group
                        - kind
                      type: object
                    type: array
                  type: array
                forceOverwriteAnnotations:
                  description: ForceOverwriteAnnotations specifies that all existing
                    annotations should be overwritten. Defaults to false.
                  type: boolean
                forceOverwriteLabels:
                  description: ForceOverwriteLabels specifies that all existing labels
                    should be overwritten. Defaults to false.
                  type: boolean
                injectLabels:
                  additionalProperties:
                    type: string
                  description: InjectLabels injects the provided labels into every resource
                    that is part of the referenced secrets.
                  type: object
                keepObjects:
                  description: KeepObjects specifies whether the objects should be kept
                    although the managed resource has already been deleted. Defaults
                    to false.
                  type: boolean
                secretRefs:
                  description: SecretRefs is a list of secret references.
                  items:
                    description: LocalObjectReference contains enough information to
                      let you locate the referenced object inside the same namespace.
                    properties:
                      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
                    type: object
                  type: array
              required:
                - secretRefs
              type: object
            status:
              description: Status contains the status of this managed resource.
              properties:
                conditions:
                  items:
                    description: Condition holds the information about the state of
                      a resource.
                    properties:
                      codes:
                        description: Well-defined error codes in case the condition
                          reports a problem.
                        items:
                          description: ErrorCode is a string alias.
                          type: string
                        type: array
                      lastTransitionTime:
                        description: Last time the condition transitioned from one status
                          to another.
                        format: date-time
                        type: string
                      lastUpdateTime:
                        description: Last time the condition was updated.
                        format: date-time
                        type: string
                      message:
                        description: A human readable message indicating details about
                          the transition.
                        type: string
                      reason:
                        description: The reason for the condition's last transition.
                        type: string
                      status:
                        description: Status of the condition, one of True, False, Unknown.
                        type: string
                      type:
                        description: Type of the condition.
                        type: string
                    required:
                      - lastTransitionTime
                      - lastUpdateTime
                      - message
                      - reason
                      - status
                      - type
                    type: object
                  type: array
                observedGeneration:
                  description: ObservedGeneration is the most recent generation observed
                    for this resource.
                  format: int64
                  type: integer
                resources:
                  description: Resources is a list of objects that have been created.
                  items:
                    description: ObjectReference is a reference to another object.
                    properties:
                      annotations:
                        additionalProperties:
                          type: string
                        description: Annotations is a map of annotations that were used
                          during last update of the resource.
                        type: object
                      apiVersion:
                        description: API version of the referent.
                        type: string
                      fieldPath:
                        description: 'If referring to a piece of an object instead of
                        an entire object, this string should contain a valid JSON/Go
                        field access statement, such as desiredState.manifest.containers[2].
                        For example, if the object reference is to a container within
                        a pod, this would take on a value like: "spec.containers{name}"
                        (where "name" refers to the name of the container that triggered
                        the event) or if no container name is specified "spec.containers[2]"
                        (container with index 2 in this pod). This syntax is chosen
                        only to have some well-defined way of referencing a part of
                        an object. TODO: this design is not final and this field is
                        subject to change in the future.'
                        type: string
                      kind:
                        description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                        type: string
                      labels:
                        additionalProperties:
                          type: string
                        description: Labels is a map of labels that were used during
                          last update of the resource.
                        type: object
                      name:
                        description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
                        type: string
                      namespace:
                        description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
                        type: string
                      resourceVersion:
                        description: 'Specific resourceVersion to which this reference
                        is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
                        type: string
                      uid:
                        description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
                        type: string
                    type: object
                  type: array
              type: object
          type: object
      served: true
      storage: true
      subresources:
        status: {}
