# Copyright 2020 The Kubernetes Authors.
# SPDX-License-Identifier: Apache-2.0

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    api-approved.kubernetes.io: https://github.com/kubernetes-sigs/application/pull/2
    controller-gen.kubebuilder.io/version: v0.4.0
  creationTimestamp: null
  name: applications.app.k8s.io
spec:
  group: app.k8s.io
  names:
    categories:
    - all
    kind: Application
    listKind: ApplicationList
    plural: applications
    shortNames:
    - app
    singular: application
  scope: Namespaced
  versions:
  - name: v1beta1
    schema:
      openAPIV3Schema:
        description: Application is the Schema for the applications API
        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: ApplicationSpec defines the specification for an Application.
            properties:
              addOwnerRef:
                description: AddOwnerRef objects - flag to indicate if we need to
                  add OwnerRefs to matching objects Matching is done by using Selector
                  to query all ComponentGroupKinds
                type: boolean
              assemblyPhase:
                description: AssemblyPhase represents the current phase of the application's
                  assembly. An empty value is equivalent to "Succeeded".
                type: string
              componentKinds:
                description: ComponentGroupKinds is a list of Kinds for Application's
                  components (e.g. Deployments, Pods, Services, CRDs). It can be used
                  in conjunction with the Application's Selector to list or watch
                  the Applications components.
                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
              descriptor:
                description: Descriptor regroups information and metadata about an
                  application.
                properties:
                  description:
                    description: Description is a brief string description of the
                      Application.
                    type: string
                  icons:
                    description: Icons is an optional list of icons for an application.
                      Icon information includes the source, size, and mime type.
                    items:
                      description: ImageSpec contains information about an image used
                        as an icon.
                      properties:
                        size:
                          description: (optional) The size of the image in pixels
                            (e.g., 25x25).
                          type: string
                        src:
                          description: The source for image represented as either
                            an absolute URL to the image or a Data URL containing
                            the image. Data URLs are defined in RFC 2397.
                          type: string
                        type:
                          description: (optional) The mine type of the image (e.g.,
                            "image/png").
                          type: string
                      required:
                      - src
                      type: object
                    type: array
                  keywords:
                    description: Keywords is an optional list of key words associated
                      with the application (e.g. MySQL, RDBMS, database).
                    items:
                      type: string
                    type: array
                  links:
                    description: Links are a list of descriptive URLs intended to
                      be used to surface additional documentation, dashboards, etc.
                    items:
                      description: Link contains information about an URL to surface
                        documentation, dashboards, etc.
                      properties:
                        description:
                          description: Description is human readable content explaining
                            the purpose of the link.
                          type: string
                        url:
                          description: Url typically points at a website address.
                          type: string
                      type: object
                    type: array
                  maintainers:
                    description: Maintainers is an optional list of maintainers of
                      the application. The maintainers in this list maintain the the
                      source code, images, and package for the application.
                    items:
                      description: ContactData contains information about an individual
                        or organization.
                      properties:
                        email:
                          description: Email is the email address.
                          type: string
                        name:
                          description: Name is the descriptive name.
                          type: string
                        url:
                          description: Url could typically be a website address.
                          type: string
                      type: object
                    type: array
                  notes:
                    description: Notes contain a human readable snippets intended
                      as a quick start for the users of the Application. CommonMark
                      markdown syntax may be used for rich text representation.
                    type: string
                  owners:
                    description: Owners is an optional list of the owners of the installed
                      application. The owners of the application should be contacted
                      in the event of a planned or unplanned disruption affecting
                      the application.
                    items:
                      description: ContactData contains information about an individual
                        or organization.
                      properties:
                        email:
                          description: Email is the email address.
                          type: string
                        name:
                          description: Name is the descriptive name.
                          type: string
                        url:
                          description: Url could typically be a website address.
                          type: string
                      type: object
                    type: array
                  type:
                    description: Type is the type of the application (e.g. WordPress,
                      MySQL, Cassandra).
                    type: string
                  version:
                    description: Version is an optional version indicator for the
                      Application.
                    type: string
                type: object
              info:
                description: Info contains human readable key,value pairs for the
                  Application.
                items:
                  description: InfoItem is a human readable key,value pair containing
                    important information about how to access the Application.
                  properties:
                    name:
                      description: Name is a human readable title for this piece of
                        information.
                      type: string
                    type:
                      description: Type of the value for this InfoItem.
                      type: string
                    value:
                      description: Value is human readable content.
                      type: string
                    valueFrom:
                      description: ValueFrom defines a reference to derive the value
                        from another source.
                      properties:
                        configMapKeyRef:
                          description: Selects a key of a ConfigMap.
                          properties:
                            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
                            key:
                              description: The key to select.
                              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
                            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
                        ingressRef:
                          description: Select an Ingress.
                          properties:
                            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
                            host:
                              description: The optional host to select.
                              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
                            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
                            path:
                              description: The optional HTTP path.
                              type: string
                            protocol:
                              description: Protocol for the ingress
                              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
                        secretKeyRef:
                          description: Selects a key of a Secret.
                          properties:
                            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
                            key:
                              description: The key to select.
                              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
                            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
                        serviceRef:
                          description: Select a Service.
                          properties:
                            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
                            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
                            path:
                              description: The optional HTTP path.
                              type: string
                            port:
                              description: The optional port to select.
                              format: int32
                              type: integer
                            protocol:
                              description: Protocol for the service
                              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:
                          description: Type of source.
                          type: string
                      type: object
                  type: object
                type: array
              selector:
                description: 'Selector is a label query over kinds that created by
                  the application. It must match the component objects'' labels. More
                  info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors'
                properties:
                  matchExpressions:
                    description: matchExpressions is a list of label selector requirements.
                      The requirements are ANDed.
                    items:
                      description: A label selector requirement is a selector that
                        contains values, a key, and an operator that relates the key
                        and values.
                      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.
                          items:
                            type: string
                          type: array
                      required:
                      - key
                      - operator
                      type: object
                    type: array
                  matchLabels:
                    additionalProperties:
                      type: string
                    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
                type: object
            type: object
          status:
            description: ApplicationStatus defines controller's the observed state
              of Application
            properties:
              components:
                description: Object status array for all matching objects
                items:
                  description: ObjectStatus is a generic status holder for objects
                  properties:
                    group:
                      description: Object group
                      type: string
                    kind:
                      description: Kind of object
                      type: string
                    link:
                      description: Link to object
                      type: string
                    name:
                      description: Name of object
                      type: string
                    status:
                      description: 'Status. Values: InProgress, Ready, Unknown'
                      type: string
                  type: object
                type: array
              componentsReady:
                description: 'ComponentsReady: status of the components in the format
                  ready/total'
                type: string
              conditions:
                description: Conditions represents the latest state of the object
                items:
                  description: Condition describes the state of an object at a certain
                    point.
                  properties:
                    lastTransitionTime:
                      description: Last time the condition transitioned from one status
                        to another.
                      format: date-time
                      type: string
                    lastUpdateTime:
                      description: Last time the condition was probed
                      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 condition.
                      type: string
                  required:
                  - status
                  - type
                  type: object
                type: array
              observedGeneration:
                description: ObservedGeneration is the most recent generation observed.
                  It corresponds to the Object's generation, which is updated on mutation
                  by the API Server.
                format: int64
                type: integer
            type: object
        type: object
    served: true
    storage: true
    subresources:
      status: {}
    additionalPrinterColumns:
    - description: The type of the application
      jsonPath: .spec.descriptor.type
      name: Type
      type: string
    - description: The creation date
      jsonPath: .spec.descriptor.version
      name: Version
      type: string
    - description: The application object owns the matched resources
      jsonPath: .spec.addOwnerRef
      name: Owner
      type: boolean
    - description: Numbers of components ready
      jsonPath: .status.componentsReady
      name: Ready
      type: string
    - description: The creation date
      jsonPath: .metadata.creationTimestamp
      name: Age
      type: date
  - name: v1alpha1
    schema:
      openAPIV3Schema:
        description: Application is the Schema for the applications API
        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: ApplicationSpec defines the specification for an Application.
            properties:
              componentKinds:
                description: ComponentGroupKinds is a list of Kinds for Application's
                  components (e.g. Deployments, Pods, Services, CRDs). It can be used
                  in conjunction with the Application's Selector to list or watch the
                  Applications components.
                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
                  type: object
                type: array
              description:
                type: string
              info:
                description: Info contains human readable key,value pairs for the Application.
                items:
                  description: InfoItem is a human readable key,value pair containing
                    important information about how to access the Application.
                  properties:
                    name:
                      description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
                      type: string
                    value:
                      type: string
                  type: object
                type: array
              keywords:
                items:
                  type: string
                type: array
              links:
                items:
                  properties:
                    description:
                      type: string
                    url:
                      type: string
                  type: object
                type: array
              maintainers:
                items:
                  properties:
                    email:
                      type: string
                    name:
                      type: string
                    url:
                      type: string
                  type: object
                type: array
              notes:
                type: string
              owners:
                items:
                  type: string
                type: array
              selector:
                properties:
                  matchExpressions:
                    items:
                      properties:
                        key:
                          type: string
                        operator:
                          type: string
                        values:
                          items:
                            type: string
                          type: array
                      type: object
                    type: array
                  matchLabels:
                    type: object
                type: object
              type:
                type: string
              version:
                type: string
              assemblyPhase:
                type: string
            type: object
          status:
            properties:
              observedGeneration:
                type: integer
            type: object
        type: object
    served: false
    storage: false
status:
  acceptedNames:
    kind: ""
    plural: ""
  conditions: []
  storedVersions: []
