---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.9.2
  name: healthscopes.core.oam.dev
spec:
  group: core.oam.dev
  names:
    categories:
    - oam
    kind: HealthScope
    listKind: HealthScopeList
    plural: healthscopes
    singular: healthscope
  scope: Namespaced
  versions:
  - additionalPrinterColumns:
    - jsonPath: .status.health
      name: HEALTH
      type: string
    name: v1alpha2
    schema:
      openAPIV3Schema:
        description: A HealthScope determines an aggregate health status based of
          the health of components.
        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: A HealthScopeSpec defines the desired state of a HealthScope.
            properties:
              appReferences:
                description: AppRefs records references of applications' components
                items:
                  description: AppReference records references of an application's
                    components
                  properties:
                    appName:
                      type: string
                    compReferences:
                      items:
                        description: CompReference records references of a component's
                          resources
                        properties:
                          compName:
                            type: string
                          traits:
                            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.
                                \n 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
                              x-kubernetes-map-type: atomic
                            type: array
                          workload:
                            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. \n 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
                            x-kubernetes-map-type: atomic
                        type: object
                      type: array
                  type: object
                type: array
              probe-interval:
                description: ProbeInterval is the amount of time in seconds between
                  probing tries.
                format: int32
                type: integer
              probe-timeout:
                description: ProbeTimeout is the amount of time in seconds to wait
                  when receiving a response before marked failure.
                format: int32
                type: integer
              workloadRefs:
                description: WorkloadReferences to the workloads that are in this
                  scope.
                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. \n 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
                  x-kubernetes-map-type: atomic
                type: array
            required:
            - workloadRefs
            type: object
          status:
            description: A HealthScopeStatus represents the observed state of a HealthScope.
            properties:
              appHealthConditions:
                description: AppHealthConditions represents health condition of applications
                  in the scope
                items:
                  description: AppHealthCondition represents health condition of an
                    application
                  properties:
                    appName:
                      type: string
                    components:
                      items:
                        description: WorkloadHealthCondition represents informative
                          health condition of a workload.
                        properties:
                          componentName:
                            description: ComponentName represents the component name
                              if target is a workload
                            type: string
                          customStatusMsg:
                            type: string
                          diagnosis:
                            type: string
                          healthStatus:
                            description: HealthStatus represents health status strings.
                            type: string
                          targetWorkload:
                            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. \n 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
                            x-kubernetes-map-type: atomic
                          traits:
                            items:
                              description: TraitHealthCondition represents informative
                                health condition of a trait.
                              properties:
                                customStatusMsg:
                                  type: string
                                diagnosis:
                                  type: string
                                healthStatus:
                                  description: HealthStatus represents health status
                                    strings.
                                  type: string
                                resource:
                                  type: string
                                type:
                                  type: string
                              required:
                              - healthStatus
                              - resource
                              - type
                              type: object
                            type: array
                          workloadStatus:
                            description: WorkloadStatus represents status of workloads
                              whose HealthStatus is UNKNOWN.
                            type: string
                        required:
                        - healthStatus
                        type: object
                      type: array
                    envName:
                      type: string
                  required:
                  - appName
                  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
              healthConditions:
                description: WorkloadHealthConditions represents health condition
                  of workloads in the scope Use AppHealthConditions to provide app
                  level status
                items:
                  description: WorkloadHealthCondition represents informative health
                    condition of a workload.
                  properties:
                    componentName:
                      description: ComponentName represents the component name if
                        target is a workload
                      type: string
                    customStatusMsg:
                      type: string
                    diagnosis:
                      type: string
                    healthStatus:
                      description: HealthStatus represents health status strings.
                      type: string
                    targetWorkload:
                      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. \n 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
                      x-kubernetes-map-type: atomic
                    traits:
                      items:
                        description: TraitHealthCondition represents informative health
                          condition of a trait.
                        properties:
                          customStatusMsg:
                            type: string
                          diagnosis:
                            type: string
                          healthStatus:
                            description: HealthStatus represents health status strings.
                            type: string
                          resource:
                            type: string
                          type:
                            type: string
                        required:
                        - healthStatus
                        - resource
                        - type
                        type: object
                      type: array
                    workloadStatus:
                      description: WorkloadStatus represents status of workloads whose
                        HealthStatus is UNKNOWN.
                      type: string
                  required:
                  - healthStatus
                  type: object
                type: array
              scopeHealthCondition:
                description: ScopeHealthCondition represents health condition summary
                  of the scope
                properties:
                  healthStatus:
                    description: HealthStatus represents health status strings.
                    type: string
                  healthyWorkloads:
                    format: int64
                    type: integer
                  total:
                    format: int64
                    type: integer
                  unhealthyWorkloads:
                    format: int64
                    type: integer
                  unknownWorkloads:
                    format: int64
                    type: integer
                required:
                - healthStatus
                type: object
            required:
            - scopeHealthCondition
            type: object
        type: object
    served: true
    storage: true
    subresources:
      status: {}
