apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  creationTimestamp: null
  name: manifestworks.work.open-cluster-management.io
spec:
  group: work.open-cluster-management.io
  names:
    kind: ManifestWork
    listKind: ManifestWorkList
    plural: manifestworks
    singular: manifestwork
  scope: "Namespaced"
  preserveUnknownFields: false
  subresources:
    status: {}
  validation:
    openAPIV3Schema:
      description: ManifestWork represents a manifests workload that hub wants to
        deploy on the managed cluster. A manifest workload is defined as a set of
        kubernetes resources. ManifestWork must be created in the cluster namespace
        on the hub, so that agent on the corresponding managed cluster can access
        this resource and deploy on the managed cluster.
      type: object
      properties:
        apiVersion:
          description: 'APIVersion defines the versioned schema of this representation
            of an object. Servers should convert recognized schemas to the latest
            internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
          type: string
        kind:
          description: 'Kind is a string value representing the REST resource this
            object represents. Servers may infer this from the endpoint the client
            submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
          type: string
        metadata:
          type: object
        spec:
          description: Spec represents a desired configuration of work to be deployed
            on the managed cluster.
          type: object
          properties:
            workload:
              description: Workload represents the manifest workload to be deployed
                on managed cluster
              type: object
              properties:
                manifests:
                  description: Manifests represents a list of kuberenetes resources
                    to be deployed on the managed cluster.
                  type: array
                  items:
                    description: Manifest represents a resource to be deployed on
                      managed cluster
                    type: object
                    x-kubernetes-preserve-unknown-fields: true
                    x-kubernetes-embedded-resource: true
        status:
          description: Status represents the current status of work
          type: object
          properties:
            conditions:
              description: 'Conditions contains the different condition statuses for
                this work. Valid condition types are: 1. Applied represents workload
                in ManifestWork is applied successfully on managed cluster. 2. Progressing
                represents workload in ManifestWork is being applied on managed cluster.
                3. Available represents workload in ManifestWork exists on the managed
                cluster. 4. Degraded represents the current state of workload does
                not match the desired state for a certain period.'
              type: array
              items:
                description: "Condition contains details for one aspect of the current
                  state of this API Resource. --- This struct is intended for direct
                  use as an array at the field path .status.conditions.  For example,
                  type FooStatus struct{     // Represents the observations of a foo's
                  current state.     // Known .status.conditions.type are: \"Available\",
                  \"Progressing\", and \"Degraded\"     // +patchMergeKey=type     //
                  +patchStrategy=merge     // +listType=map     // +listMapKey=type
                  \    Conditions []metav1.Condition `json:\"conditions,omitempty\"
                  patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`
                  \n     // other fields }"
                type: object
                required:
                - lastTransitionTime
                - message
                - reason
                - status
                - type
                properties:
                  lastTransitionTime:
                    description: lastTransitionTime is the last time the condition
                      transitioned from one status to another. This should be when
                      the underlying condition changed.  If that is not known, then
                      using the time when the API field changed is acceptable.
                    type: string
                    format: date-time
                  message:
                    description: message is a human readable message indicating details
                      about the transition. This may be an empty string.
                    type: string
                    maxLength: 32768
                  observedGeneration:
                    description: observedGeneration represents the .metadata.generation
                      that the condition was set based upon. For instance, if .metadata.generation
                      is currently 12, but the .status.conditions[x].observedGeneration
                      is 9, the condition is out of date with respect to the current
                      state of the instance.
                    type: integer
                    format: int64
                    minimum: 0
                  reason:
                    description: reason contains a programmatic identifier indicating
                      the reason for the condition's last transition. Producers of
                      specific condition types may define expected values and meanings
                      for this field, and whether the values are considered a guaranteed
                      API. The value should be a CamelCase string. This field may
                      not be empty.
                    type: string
                    maxLength: 1024
                    minLength: 1
                    pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
                  status:
                    description: status of the condition, one of True, False, Unknown.
                    type: string
                    enum:
                    - "True"
                    - "False"
                    - Unknown
                  type:
                    description: type of condition in CamelCase or in foo.example.com/CamelCase.
                      --- Many .condition.type values are consistent across resources
                      like Available, but because arbitrary conditions can be useful
                      (see .node.status.conditions), the ability to deconflict is
                      important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)
                    type: string
                    maxLength: 316
                    pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
            resourceStatus:
              description: ResourceStatus represents the status of each resource in
                manifestwork deployed on managed cluster. The Klusterlet agent on
                managed cluster syncs the condition from managed to the hub.
              type: object
              properties:
                manifests:
                  description: 'Manifests represents the condition of manifests deployed
                    on managed cluster. Valid condition types are: 1. Progressing
                    represents the resource is being applied on managed cluster. 2.
                    Applied represents the resource is applied successfully on managed
                    cluster. 3. Available represents the resource exists on the managed
                    cluster. 4. Degraded represents the current state of resource
                    does not match the desired state for a certain period.'
                  type: array
                  items:
                    description: ManifestCondition represents the conditions of the
                      resources deployed on managed cluster
                    type: object
                    properties:
                      conditions:
                        description: Conditions represents the conditions of this
                          resource on managed cluster
                        type: array
                        items:
                          description: "Condition contains details for one aspect
                            of the current state of this API Resource. --- This struct
                            is intended for direct use as an array at the field path
                            .status.conditions.  For example, type FooStatus struct{
                            \    // Represents the observations of a foo's current
                            state.     // Known .status.conditions.type are: \"Available\",
                            \"Progressing\", and \"Degraded\"     // +patchMergeKey=type
                            \    // +patchStrategy=merge     // +listType=map     //
                            +listMapKey=type     Conditions []metav1.Condition `json:\"conditions,omitempty\"
                            patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`
                            \n     // other fields }"
                          type: object
                          required:
                          - lastTransitionTime
                          - message
                          - reason
                          - status
                          - type
                          properties:
                            lastTransitionTime:
                              description: lastTransitionTime is the last time the
                                condition transitioned from one status to another.
                                This should be when the underlying condition changed.  If
                                that is not known, then using the time when the API
                                field changed is acceptable.
                              type: string
                              format: date-time
                            message:
                              description: message is a human readable message indicating
                                details about the transition. This may be an empty
                                string.
                              type: string
                              maxLength: 32768
                            observedGeneration:
                              description: observedGeneration represents the .metadata.generation
                                that the condition was set based upon. For instance,
                                if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration
                                is 9, the condition is out of date with respect to
                                the current state of the instance.
                              type: integer
                              format: int64
                              minimum: 0
                            reason:
                              description: reason contains a programmatic identifier
                                indicating the reason for the condition's last transition.
                                Producers of specific condition types may define expected
                                values and meanings for this field, and whether the
                                values are considered a guaranteed API. The value
                                should be a CamelCase string. This field may not be
                                empty.
                              type: string
                              maxLength: 1024
                              minLength: 1
                              pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
                            status:
                              description: status of the condition, one of True, False,
                                Unknown.
                              type: string
                              enum:
                              - "True"
                              - "False"
                              - Unknown
                            type:
                              description: type of condition in CamelCase or in foo.example.com/CamelCase.
                                --- Many .condition.type values are consistent across
                                resources like Available, but because arbitrary conditions
                                can be useful (see .node.status.conditions), the ability
                                to deconflict is important. The regex it matches is
                                (dns1123SubdomainFmt/)?(qualifiedNameFmt)
                              type: string
                              maxLength: 316
                              pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
                      resourceMeta:
                        description: ResourceMeta represents the gvk, name and namespace
                          of a resoure
                        type: object
                        properties:
                          group:
                            description: Group is the API Group of the kubernetes
                              resource
                            type: string
                          kind:
                            description: Kind is the kind of the kubernetes resource
                            type: string
                          name:
                            description: Name is the name of the kubernetes resource
                            type: string
                          namespace:
                            description: Name is the namespace of the kubernetes resource
                            type: string
                          ordinal:
                            description: Ordinal represents the index of the manifest
                              on spec
                            type: integer
                            format: int32
                          resource:
                            description: Resource is the resource name of the kubernetes
                              resource
                            type: string
                          version:
                            description: Version is the version of the kubernetes
                              resource
                            type: string
  version: v1
  versions:
  - name: v1
    served: true
    storage: true
status:
  acceptedNames:
    kind: ""
    plural: ""
  conditions: []
  storedVersions: []
