
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.6.2
  name: applications.core.oam.dev
spec:
  group: core.oam.dev
  names:
    categories:
    - oam
    kind: Application
    listKind: ApplicationList
    plural: applications
    shortNames:
    - app
    - velaapp
    singular: application
  scope: Namespaced
  versions:
  - additionalPrinterColumns:
    - jsonPath: .spec.components[*].name
      name: COMPONENT
      type: string
    - jsonPath: .spec.components[*].type
      name: TYPE
      type: string
    - jsonPath: .status.status
      name: PHASE
      type: string
    - jsonPath: .status.services[*].healthy
      name: HEALTHY
      type: boolean
    - jsonPath: .status.services[*].message
      name: STATUS
      type: string
    - jsonPath: .metadata.creationTimestamp
      name: AGE
      type: date
    name: v1alpha2
    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 is the spec of Application
            properties:
              components:
                items:
                  description: ApplicationComponent describe the component of application
                  properties:
                    name:
                      type: string
                    scopes:
                      additionalProperties:
                        type: string
                      description: scopes in ApplicationComponent defines the component-level
                        scopes the format is <scope-type:scope-instance-name> pairs,
                        the key represents type of `ScopeDefinition` while the value
                        represent the name of scope instance.
                      type: object
                      
                    settings:
                      type: object
                      
                    traits:
                      description: Traits define the trait of one component, the type
                        must be array to keep the order.
                      items:
                        description: ApplicationTrait defines the trait of application
                        properties:
                          name:
                            type: string
                          properties:
                            type: object
                            
                        required:
                        - name
                        type: object
                      type: array
                    type:
                      type: string
                  required:
                  - name
                  - type
                  type: object
                type: array
              rolloutPlan:
                description: RolloutPlan is the details on how to rollout the resources
                  The controller simply replace the old resources with the new one
                  if there is no rollout plan involved
                properties:
                  batchPartition:
                    description: All pods in the batches up to the batchPartition
                      (included) will have the target resource specification while
                      the rest still have the source resource This is designed for
                      the operators to manually rollout Default is the the number
                      of batches which will rollout all the batches
                    format: int32
                    type: integer
                  canaryMetric:
                    description: CanaryMetric provides a way for the rollout process
                      to automatically check certain metrics before complete the process
                    items:
                      description: CanaryMetric holds the reference to metrics used
                        for canary analysis
                      properties:
                        interval:
                          description: Interval represents the windows size
                          type: string
                        metricsRange:
                          description: Range value accepted for this metric
                          properties:
                            max:
                              anyOf:
                              - type: integer
                              - type: string
                              description: Maximum value
                              x-kubernetes-int-or-string: true
                            min:
                              anyOf:
                              - type: integer
                              - type: string
                              description: Minimum value
                              x-kubernetes-int-or-string: true
                          type: object
                        name:
                          description: Name of the metric
                          type: string
                        templateRef:
                          description: TemplateRef references a metric template object
                          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
                            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
                      required:
                      - name
                      type: object
                    type: array
                  numBatches:
                    description: The number of batches, default = 1
                    format: int32
                    type: integer
                  paused:
                    description: Paused the rollout, default is false
                    type: boolean
                  rolloutBatches:
                    description: The exact distribution among batches. its size has
                      to be exactly the same as the NumBatches (if set) The total
                      number cannot exceed the targetSize or the size of the source
                      resource We will IGNORE the last batch's replica field if it's
                      a percentage since round errors can lead to inaccurate sum We
                      highly recommend to leave the last batch's replica field empty
                    items:
                      description: RolloutBatch is used to describe how the each batch
                        rollout should be
                      properties:
                        batchRolloutWebhooks:
                          description: RolloutWebhooks provides a way for the batch
                            rollout to interact with an external process
                          items:
                            description: RolloutWebhook holds the reference to external
                              checks used for canary analysis
                            properties:
                              expectedStatus:
                                description: ExpectedStatus contains all the expected
                                  http status code that we will accept as success
                                items:
                                  type: integer
                                type: array
                              metadata:
                                additionalProperties:
                                  type: string
                                description: Metadata (key-value pairs) for this webhook
                                type: object
                              method:
                                description: Method the HTTP call method, default
                                  is POST
                                type: string
                              name:
                                description: Name of this webhook
                                type: string
                              type:
                                description: Type of this webhook
                                type: string
                              url:
                                description: URL address of this webhook
                                type: string
                            required:
                            - name
                            - type
                            - url
                            type: object
                          type: array
                        canaryMetric:
                          description: CanaryMetric provides a way for the batch rollout
                            process to automatically check certain metrics before
                            moving to the next batch
                          items:
                            description: CanaryMetric holds the reference to metrics
                              used for canary analysis
                            properties:
                              interval:
                                description: Interval represents the windows size
                                type: string
                              metricsRange:
                                description: Range value accepted for this metric
                                properties:
                                  max:
                                    anyOf:
                                    - type: integer
                                    - type: string
                                    description: Maximum value
                                    x-kubernetes-int-or-string: true
                                  min:
                                    anyOf:
                                    - type: integer
                                    - type: string
                                    description: Minimum value
                                    x-kubernetes-int-or-string: true
                                type: object
                              name:
                                description: Name of the metric
                                type: string
                              templateRef:
                                description: TemplateRef references a metric template
                                  object
                                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
                                  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
                            required:
                            - name
                            type: object
                          type: array
                        instanceInterval:
                          description: The wait time, in seconds, between instances
                            upgrades, default = 0
                          format: int32
                          type: integer
                        maxUnavailable:
                          anyOf:
                          - type: integer
                          - type: string
                          description: MaxUnavailable is the max allowed number of
                            pods that is unavailable during the upgrade. We will mark
                            the batch as ready as long as there are less or equal
                            number of pods unavailable than this number. default =
                            0
                          x-kubernetes-int-or-string: true
                        podList:
                          description: The list of Pods to get upgraded it is mutually
                            exclusive with the Replicas field
                          items:
                            type: string
                          type: array
                        replicas:
                          anyOf:
                          - type: integer
                          - type: string
                          description: 'Replicas is the number of pods to upgrade
                            in this batch it can be an absolute number (ex: 5) or
                            a percentage of total pods we will ignore the percentage
                            of the last batch to just fill the gap it is mutually
                            exclusive with the PodList field'
                          x-kubernetes-int-or-string: true
                      type: object
                    type: array
                  rolloutStrategy:
                    description: RolloutStrategy defines strategies for the rollout
                      plan The default is IncreaseFirstRolloutStrategyType
                    type: string
                  rolloutWebhooks:
                    description: RolloutWebhooks provide a way for the rollout to
                      interact with an external process
                    items:
                      description: RolloutWebhook holds the reference to external
                        checks used for canary analysis
                      properties:
                        expectedStatus:
                          description: ExpectedStatus contains all the expected http
                            status code that we will accept as success
                          items:
                            type: integer
                          type: array
                        metadata:
                          additionalProperties:
                            type: string
                          description: Metadata (key-value pairs) for this webhook
                          type: object
                        method:
                          description: Method the HTTP call method, default is POST
                          type: string
                        name:
                          description: Name of this webhook
                          type: string
                        type:
                          description: Type of this webhook
                          type: string
                        url:
                          description: URL address of this webhook
                          type: string
                      required:
                      - name
                      - type
                      - url
                      type: object
                    type: array
                  targetSize:
                    description: The size of the target resource. The default is the
                      same as the size of the source resource.
                    format: int32
                    type: integer
                type: object
            required:
            - components
            type: object
          status:
            description: AppStatus defines the observed state of Application
            properties:
              appliedResources:
                description: AppliedResources record the resources that the  workflow
                  step apply.
                items:
                  description: ClusterObjectReference defines the object reference
                    with cluster.
                  properties:
                    apiVersion:
                      description: API version of the referent.
                      type: string
                    cluster:
                      type: string
                    creator:
                      description: ResourceCreatorRole defines the resource creator.
                      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
                    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
              components:
                description: Components record the related Components created by Application
                  Controller
                items:
                  description: 'ObjectReference contains enough information to let
                    you inspect or modify the referred object. --- New uses of this
                    type are discouraged because of difficulty describing its usage
                    when embedded in APIs.  1. Ignored fields.  It includes many fields
                    which are not generally honored.  For instance, ResourceVersion
                    and FieldPath are both very rarely valid in actual usage.  2.
                    Invalid usage help.  It is impossible to add specific help for
                    individual usage.  In most embedded usages, there are particular     restrictions
                    like, "must refer only to types A and B" or "UID not honored"
                    or "name must be restricted".     Those cannot be well described
                    when embedded.  3. Inconsistent validation.  Because the usages
                    are different, the validation rules are different by usage, which
                    makes it hard for users to predict what will happen.  4. The fields
                    are both imprecise and overly precise.  Kind is not a precise
                    mapping to a URL. This can produce ambiguity     during interpretation
                    and require a REST mapping.  In most cases, the dependency is
                    on the group,resource tuple     and the version of the actual
                    struct is irrelevant.  5. We cannot easily change it.  Because
                    this type is embedded in many locations, updates to this type     will
                    affect numerous schemas.  Don''t make new APIs embed an underspecified
                    API type they do not control. Instead of using this type, create
                    a locally provided and used type that is well-focused on your
                    reference. For example, ServiceReferences for admission registration:
                    https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533
                    .'
                  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
                    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
              conditions:
                description: Conditions of the resource.
                items:
                  description: A Condition that may apply to a resource.
                  properties:
                    lastTransitionTime:
                      description: LastTransitionTime is the last time this condition
                        transitioned from one status to another.
                      format: date-time
                      type: string
                    message:
                      description: A Message containing details about this condition's
                        last transition from one status to another, if any.
                      type: string
                    reason:
                      description: A Reason for this condition's last transition from
                        one status to another.
                      type: string
                    status:
                      description: Status of this condition; is it currently True,
                        False, or Unknown?
                      type: string
                    type:
                      description: Type of this condition. At most one of each condition
                        type may apply to a resource at any point in time.
                      type: string
                  required:
                  - lastTransitionTime
                  - reason
                  - status
                  - type
                  type: object
                type: array
              latestRevision:
                description: LatestRevision of the application configuration it generates
                properties:
                  name:
                    type: string
                  revision:
                    format: int64
                    type: integer
                  revisionHash:
                    description: RevisionHash record the hash value of the spec of
                      ApplicationRevision object.
                    type: string
                required:
                - name
                - revision
                type: object
              observedGeneration:
                description: The generation observed by the application controller.
                format: int64
                type: integer
              policy:
                description: PolicyStatus records the status of policy
                items:
                  description: PolicyStatus records the status of policy
                  properties:
                    name:
                      type: string
                    status:
                      type: object
                      
                    type:
                      type: string
                  required:
                  - name
                  - type
                  type: object
                type: array
              services:
                description: Services record the status of the application services
                items:
                  description: ApplicationComponentStatus record the health status
                    of App component
                  properties:
                    cluster:
                      type: string
                    env:
                      type: string
                    healthy:
                      type: boolean
                    message:
                      type: string
                    name:
                      type: string
                    namespace:
                      type: string
                    scopes:
                      items:
                        description: 'ObjectReference contains enough information
                          to let you inspect or modify the referred object. --- New
                          uses of this type are discouraged because of difficulty
                          describing its usage when embedded in APIs.  1. Ignored
                          fields.  It includes many fields which are not generally
                          honored.  For instance, ResourceVersion and FieldPath are
                          both very rarely valid in actual usage.  2. Invalid usage
                          help.  It is impossible to add specific help for individual
                          usage.  In most embedded usages, there are particular     restrictions
                          like, "must refer only to types A and B" or "UID not honored"
                          or "name must be restricted".     Those cannot be well described
                          when embedded.  3. Inconsistent validation.  Because the
                          usages are different, the validation rules are different
                          by usage, which makes it hard for users to predict what
                          will happen.  4. The fields are both imprecise and overly
                          precise.  Kind is not a precise mapping to a URL. This can
                          produce ambiguity     during interpretation and require
                          a REST mapping.  In most cases, the dependency is on the
                          group,resource tuple     and the version of the actual struct
                          is irrelevant.  5. We cannot easily change it.  Because
                          this type is embedded in many locations, updates to this
                          type     will affect numerous schemas.  Don''t make new
                          APIs embed an underspecified API type they do not control.
                          Instead of using this type, create a locally provided and
                          used type that is well-focused on your reference. For example,
                          ServiceReferences for admission registration: https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533
                          .'
                        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
                          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
                    traits:
                      items:
                        description: ApplicationTraitStatus records the trait health
                          status
                        properties:
                          healthy:
                            type: boolean
                          message:
                            type: string
                          type:
                            type: string
                        required:
                        - healthy
                        - type
                        type: object
                      type: array
                    workloadDefinition:
                      description: WorkloadDefinition is the definition of a WorkloadDefinition,
                        such as deployments/apps.v1
                      properties:
                        apiVersion:
                          type: string
                        kind:
                          type: string
                      required:
                      - apiVersion
                      - kind
                      type: object
                  required:
                  - healthy
                  - name
                  type: object
                type: array
              status:
                description: ApplicationPhase is a label for the condition of an application
                  at the current time
                type: string
              workflow:
                description: Workflow record the status of workflow
                properties:
                  appRevision:
                    type: string
                  contextBackend:
                    description: 'ObjectReference contains enough information to let
                      you inspect or modify the referred object. --- New uses of this
                      type are discouraged because of difficulty describing its usage
                      when embedded in APIs.  1. Ignored fields.  It includes many
                      fields which are not generally honored.  For instance, ResourceVersion
                      and FieldPath are both very rarely valid in actual usage.  2.
                      Invalid usage help.  It is impossible to add specific help for
                      individual usage.  In most embedded usages, there are particular     restrictions
                      like, "must refer only to types A and B" or "UID not honored"
                      or "name must be restricted".     Those cannot be well described
                      when embedded.  3. Inconsistent validation.  Because the usages
                      are different, the validation rules are different by usage,
                      which makes it hard for users to predict what will happen.  4.
                      The fields are both imprecise and overly precise.  Kind is not
                      a precise mapping to a URL. This can produce ambiguity     during
                      interpretation and require a REST mapping.  In most cases, the
                      dependency is on the group,resource tuple     and the version
                      of the actual struct is irrelevant.  5. We cannot easily change
                      it.  Because this type is embedded in many locations, updates
                      to this type     will affect numerous schemas.  Don''t make
                      new APIs embed an underspecified API type they do not control.
                      Instead of using this type, create a locally provided and used
                      type that is well-focused on your reference. For example, ServiceReferences
                      for admission registration: https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533
                      .'
                    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
                      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
                  finished:
                    type: boolean
                  message:
                    type: string
                  mode:
                    description: WorkflowMode describes the mode of workflow
                    type: string
                  startTime:
                    format: date-time
                    type: string
                  steps:
                    items:
                      description: WorkflowStepStatus record the status of a workflow
                        step, include step status and subStep status
                      properties:
                        firstExecuteTime:
                          description: FirstExecuteTime is the first time this step
                            execution.
                          format: date-time
                          type: string
                        id:
                          type: string
                        lastExecuteTime:
                          description: LastExecuteTime is the last time this step
                            execution.
                          format: date-time
                          type: string
                        message:
                          description: A human readable message indicating details
                            about why the workflowStep is in this state.
                          type: string
                        name:
                          type: string
                        phase:
                          description: WorkflowStepPhase describes the phase of a
                            workflow step.
                          type: string
                        reason:
                          description: A brief CamelCase message indicating details
                            about why the workflowStep is in this state.
                          type: string
                        subSteps:
                          items:
                            description: WorkflowSubStepStatus record the status of
                              a workflow subStep
                            properties:
                              firstExecuteTime:
                                description: FirstExecuteTime is the first time this
                                  step execution.
                                format: date-time
                                type: string
                              id:
                                type: string
                              lastExecuteTime:
                                description: LastExecuteTime is the last time this
                                  step execution.
                                format: date-time
                                type: string
                              message:
                                description: A human readable message indicating details
                                  about why the workflowStep is in this state.
                                type: string
                              name:
                                type: string
                              phase:
                                description: WorkflowStepPhase describes the phase
                                  of a workflow step.
                                type: string
                              reason:
                                description: A brief CamelCase message indicating
                                  details about why the workflowStep is in this state.
                                type: string
                              type:
                                type: string
                            required:
                            - id
                            type: object
                          type: array
                        type:
                          type: string
                      required:
                      - id
                      type: object
                    type: array
                  suspend:
                    type: boolean
                  suspendState:
                    type: string
                  terminated:
                    type: boolean
                required:
                - finished
                - mode
                - suspend
                - terminated
                type: object
            type: object
        type: object
    served: true
    storage: false
    subresources:
      status: {}
  - additionalPrinterColumns:
    - jsonPath: .spec.components[*].name
      name: COMPONENT
      type: string
    - jsonPath: .spec.components[*].type
      name: TYPE
      type: string
    - jsonPath: .status.status
      name: PHASE
      type: string
    - jsonPath: .status.services[*].healthy
      name: HEALTHY
      type: boolean
    - jsonPath: .status.services[*].message
      name: STATUS
      type: string
    - jsonPath: .metadata.creationTimestamp
      name: AGE
      type: date
    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 is the spec of Application
            properties:
              components:
                items:
                  description: ApplicationComponent describe the component of application
                  properties:
                    dependsOn:
                      items:
                        type: string
                      type: array
                    externalRevision:
                      description: ExternalRevision specified the component revisionName
                      type: string
                    inputs:
                      description: StepInputs defines variable input of WorkflowStep
                      items:
                        properties:
                          from:
                            type: string
                          parameterKey:
                            type: string
                        required:
                        - from
                        - parameterKey
                        type: object
                      type: array
                    name:
                      type: string
                    outputs:
                      description: StepOutputs defines output variable of WorkflowStep
                      items:
                        properties:
                          name:
                            type: string
                          valueFrom:
                            type: string
                        required:
                        - name
                        - valueFrom
                        type: object
                      type: array
                    properties:
                      type: object
                      
                    scopes:
                      additionalProperties:
                        type: string
                      description: scopes in ApplicationComponent defines the component-level
                        scopes the format is <scope-type:scope-instance-name> pairs,
                        the key represents type of `ScopeDefinition` while the value
                        represent the name of scope instance.
                      type: object
                      
                    traits:
                      description: Traits define the trait of one component, the type
                        must be array to keep the order.
                      items:
                        description: ApplicationTrait defines the trait of application
                        properties:
                          properties:
                            type: object
                            
                          type:
                            type: string
                        required:
                        - type
                        type: object
                      type: array
                    type:
                      type: string
                  required:
                  - name
                  - type
                  type: object
                type: array
              policies:
                description: Policies defines the global policies for all components
                  in the app, e.g. security, metrics, gitops, multi-cluster placement
                  rules, etc. Policies are applied after components are rendered and
                  before workflow steps are executed.
                items:
                  description: AppPolicy defines a global policy for all components
                    in the app.
                  properties:
                    name:
                      description: Name is the unique name of the policy.
                      type: string
                    properties:
                      type: object
                      
                    type:
                      type: string
                  required:
                  - name
                  - type
                  type: object
                type: array
              workflow:
                description: 'Workflow defines how to customize the control logic.
                  If workflow is specified, Vela won''t apply any resource, but provide
                  rendered output in AppRevision. Workflow steps are executed in array
                  order, and each step: - will have a context in annotation. - should
                  mark "finish" phase in status.conditions.'
                properties:
                  ref:
                    type: string
                  steps:
                    items:
                      description: WorkflowStep defines how to execute a workflow
                        step.
                      properties:
                        dependsOn:
                          items:
                            type: string
                          type: array
                        if:
                          type: string
                        inputs:
                          description: StepInputs defines variable input of WorkflowStep
                          items:
                            properties:
                              from:
                                type: string
                              parameterKey:
                                type: string
                            required:
                            - from
                            - parameterKey
                            type: object
                          type: array
                        name:
                          description: Name is the unique name of the workflow step.
                          type: string
                        outputs:
                          description: StepOutputs defines output variable of WorkflowStep
                          items:
                            properties:
                              name:
                                type: string
                              valueFrom:
                                type: string
                            required:
                            - name
                            - valueFrom
                            type: object
                          type: array
                        properties:
                          type: object
                          
                        subSteps:
                          items:
                            description: WorkflowSubStep defines how to execute a
                              workflow subStep.
                            properties:
                              dependsOn:
                                items:
                                  type: string
                                type: array
                              if:
                                type: string
                              inputs:
                                description: StepInputs defines variable input of
                                  WorkflowStep
                                items:
                                  properties:
                                    from:
                                      type: string
                                    parameterKey:
                                      type: string
                                  required:
                                  - from
                                  - parameterKey
                                  type: object
                                type: array
                              name:
                                description: Name is the unique name of the workflow
                                  step.
                                type: string
                              outputs:
                                description: StepOutputs defines output variable of
                                  WorkflowStep
                                items:
                                  properties:
                                    name:
                                      type: string
                                    valueFrom:
                                      type: string
                                  required:
                                  - name
                                  - valueFrom
                                  type: object
                                type: array
                              properties:
                                type: object
                                
                              type:
                                type: string
                            required:
                            - name
                            - type
                            type: object
                          type: array
                        type:
                          type: string
                      required:
                      - name
                      - type
                      type: object
                    type: array
                type: object
            required:
            - components
            type: object
          status:
            description: AppStatus defines the observed state of Application
            properties:
              appliedResources:
                description: AppliedResources record the resources that the  workflow
                  step apply.
                items:
                  description: ClusterObjectReference defines the object reference
                    with cluster.
                  properties:
                    apiVersion:
                      description: API version of the referent.
                      type: string
                    cluster:
                      type: string
                    creator:
                      description: ResourceCreatorRole defines the resource creator.
                      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
                    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
              components:
                description: Components record the related Components created by Application
                  Controller
                items:
                  description: 'ObjectReference contains enough information to let
                    you inspect or modify the referred object. --- New uses of this
                    type are discouraged because of difficulty describing its usage
                    when embedded in APIs.  1. Ignored fields.  It includes many fields
                    which are not generally honored.  For instance, ResourceVersion
                    and FieldPath are both very rarely valid in actual usage.  2.
                    Invalid usage help.  It is impossible to add specific help for
                    individual usage.  In most embedded usages, there are particular     restrictions
                    like, "must refer only to types A and B" or "UID not honored"
                    or "name must be restricted".     Those cannot be well described
                    when embedded.  3. Inconsistent validation.  Because the usages
                    are different, the validation rules are different by usage, which
                    makes it hard for users to predict what will happen.  4. The fields
                    are both imprecise and overly precise.  Kind is not a precise
                    mapping to a URL. This can produce ambiguity     during interpretation
                    and require a REST mapping.  In most cases, the dependency is
                    on the group,resource tuple     and the version of the actual
                    struct is irrelevant.  5. We cannot easily change it.  Because
                    this type is embedded in many locations, updates to this type     will
                    affect numerous schemas.  Don''t make new APIs embed an underspecified
                    API type they do not control. Instead of using this type, create
                    a locally provided and used type that is well-focused on your
                    reference. For example, ServiceReferences for admission registration:
                    https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533
                    .'
                  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
                    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
              conditions:
                description: Conditions of the resource.
                items:
                  description: A Condition that may apply to a resource.
                  properties:
                    lastTransitionTime:
                      description: LastTransitionTime is the last time this condition
                        transitioned from one status to another.
                      format: date-time
                      type: string
                    message:
                      description: A Message containing details about this condition's
                        last transition from one status to another, if any.
                      type: string
                    reason:
                      description: A Reason for this condition's last transition from
                        one status to another.
                      type: string
                    status:
                      description: Status of this condition; is it currently True,
                        False, or Unknown?
                      type: string
                    type:
                      description: Type of this condition. At most one of each condition
                        type may apply to a resource at any point in time.
                      type: string
                  required:
                  - lastTransitionTime
                  - reason
                  - status
                  - type
                  type: object
                type: array
              latestRevision:
                description: LatestRevision of the application configuration it generates
                properties:
                  name:
                    type: string
                  revision:
                    format: int64
                    type: integer
                  revisionHash:
                    description: RevisionHash record the hash value of the spec of
                      ApplicationRevision object.
                    type: string
                required:
                - name
                - revision
                type: object
              observedGeneration:
                description: The generation observed by the application controller.
                format: int64
                type: integer
              policy:
                description: PolicyStatus records the status of policy
                items:
                  description: PolicyStatus records the status of policy
                  properties:
                    name:
                      type: string
                    status:
                      type: object
                      
                    type:
                      type: string
                  required:
                  - name
                  - type
                  type: object
                type: array
              services:
                description: Services record the status of the application services
                items:
                  description: ApplicationComponentStatus record the health status
                    of App component
                  properties:
                    cluster:
                      type: string
                    env:
                      type: string
                    healthy:
                      type: boolean
                    message:
                      type: string
                    name:
                      type: string
                    namespace:
                      type: string
                    scopes:
                      items:
                        description: 'ObjectReference contains enough information
                          to let you inspect or modify the referred object. --- New
                          uses of this type are discouraged because of difficulty
                          describing its usage when embedded in APIs.  1. Ignored
                          fields.  It includes many fields which are not generally
                          honored.  For instance, ResourceVersion and FieldPath are
                          both very rarely valid in actual usage.  2. Invalid usage
                          help.  It is impossible to add specific help for individual
                          usage.  In most embedded usages, there are particular     restrictions
                          like, "must refer only to types A and B" or "UID not honored"
                          or "name must be restricted".     Those cannot be well described
                          when embedded.  3. Inconsistent validation.  Because the
                          usages are different, the validation rules are different
                          by usage, which makes it hard for users to predict what
                          will happen.  4. The fields are both imprecise and overly
                          precise.  Kind is not a precise mapping to a URL. This can
                          produce ambiguity     during interpretation and require
                          a REST mapping.  In most cases, the dependency is on the
                          group,resource tuple     and the version of the actual struct
                          is irrelevant.  5. We cannot easily change it.  Because
                          this type is embedded in many locations, updates to this
                          type     will affect numerous schemas.  Don''t make new
                          APIs embed an underspecified API type they do not control.
                          Instead of using this type, create a locally provided and
                          used type that is well-focused on your reference. For example,
                          ServiceReferences for admission registration: https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533
                          .'
                        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
                          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
                    traits:
                      items:
                        description: ApplicationTraitStatus records the trait health
                          status
                        properties:
                          healthy:
                            type: boolean
                          message:
                            type: string
                          type:
                            type: string
                        required:
                        - healthy
                        - type
                        type: object
                      type: array
                    workloadDefinition:
                      description: WorkloadDefinition is the definition of a WorkloadDefinition,
                        such as deployments/apps.v1
                      properties:
                        apiVersion:
                          type: string
                        kind:
                          type: string
                      required:
                      - apiVersion
                      - kind
                      type: object
                  required:
                  - healthy
                  - name
                  type: object
                type: array
              status:
                description: ApplicationPhase is a label for the condition of an application
                  at the current time
                type: string
              workflow:
                description: Workflow record the status of workflow
                properties:
                  appRevision:
                    type: string
                  contextBackend:
                    description: 'ObjectReference contains enough information to let
                      you inspect or modify the referred object. --- New uses of this
                      type are discouraged because of difficulty describing its usage
                      when embedded in APIs.  1. Ignored fields.  It includes many
                      fields which are not generally honored.  For instance, ResourceVersion
                      and FieldPath are both very rarely valid in actual usage.  2.
                      Invalid usage help.  It is impossible to add specific help for
                      individual usage.  In most embedded usages, there are particular     restrictions
                      like, "must refer only to types A and B" or "UID not honored"
                      or "name must be restricted".     Those cannot be well described
                      when embedded.  3. Inconsistent validation.  Because the usages
                      are different, the validation rules are different by usage,
                      which makes it hard for users to predict what will happen.  4.
                      The fields are both imprecise and overly precise.  Kind is not
                      a precise mapping to a URL. This can produce ambiguity     during
                      interpretation and require a REST mapping.  In most cases, the
                      dependency is on the group,resource tuple     and the version
                      of the actual struct is irrelevant.  5. We cannot easily change
                      it.  Because this type is embedded in many locations, updates
                      to this type     will affect numerous schemas.  Don''t make
                      new APIs embed an underspecified API type they do not control.
                      Instead of using this type, create a locally provided and used
                      type that is well-focused on your reference. For example, ServiceReferences
                      for admission registration: https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533
                      .'
                    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
                      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
                  finished:
                    type: boolean
                  message:
                    type: string
                  mode:
                    description: WorkflowMode describes the mode of workflow
                    type: string
                  startTime:
                    format: date-time
                    type: string
                  steps:
                    items:
                      description: WorkflowStepStatus record the status of a workflow
                        step, include step status and subStep status
                      properties:
                        firstExecuteTime:
                          description: FirstExecuteTime is the first time this step
                            execution.
                          format: date-time
                          type: string
                        id:
                          type: string
                        lastExecuteTime:
                          description: LastExecuteTime is the last time this step
                            execution.
                          format: date-time
                          type: string
                        message:
                          description: A human readable message indicating details
                            about why the workflowStep is in this state.
                          type: string
                        name:
                          type: string
                        phase:
                          description: WorkflowStepPhase describes the phase of a
                            workflow step.
                          type: string
                        reason:
                          description: A brief CamelCase message indicating details
                            about why the workflowStep is in this state.
                          type: string
                        subSteps:
                          items:
                            description: WorkflowSubStepStatus record the status of
                              a workflow subStep
                            properties:
                              firstExecuteTime:
                                description: FirstExecuteTime is the first time this
                                  step execution.
                                format: date-time
                                type: string
                              id:
                                type: string
                              lastExecuteTime:
                                description: LastExecuteTime is the last time this
                                  step execution.
                                format: date-time
                                type: string
                              message:
                                description: A human readable message indicating details
                                  about why the workflowStep is in this state.
                                type: string
                              name:
                                type: string
                              phase:
                                description: WorkflowStepPhase describes the phase
                                  of a workflow step.
                                type: string
                              reason:
                                description: A brief CamelCase message indicating
                                  details about why the workflowStep is in this state.
                                type: string
                              type:
                                type: string
                            required:
                            - id
                            type: object
                          type: array
                        type:
                          type: string
                      required:
                      - id
                      type: object
                    type: array
                  suspend:
                    type: boolean
                  suspendState:
                    type: string
                  terminated:
                    type: boolean
                required:
                - finished
                - mode
                - suspend
                - terminated
                type: object
            type: object
        type: object
    served: true
    storage: true
    subresources:
      status: {}
status:
  acceptedNames:
    kind: ""
    plural: ""
  conditions: []
  storedVersions: []
