---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.11.4
  name: componentdefinitions.core.oam.dev
spec:
  group: core.oam.dev
  names:
    categories:
    - oam
    kind: ComponentDefinition
    listKind: ComponentDefinitionList
    plural: componentdefinitions
    shortNames:
    - comp
    singular: componentdefinition
  scope: Namespaced
  versions:
  - additionalPrinterColumns:
    - jsonPath: .spec.workload.definition.kind
      name: WORKLOAD-KIND
      type: string
    - jsonPath: .metadata.annotations.definition\.oam\.dev/description
      name: DESCRIPTION
      type: string
    name: v1beta1
    schema:
      openAPIV3Schema:
        description: ComponentDefinition is the Schema for the componentdefinitions
          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: ComponentDefinitionSpec defines the desired state of ComponentDefinition
            properties:
              childResourceKinds:
                description: ChildResourceKinds are the list of GVK of the child resources
                  this workload generates
                items:
                  description: A ChildResourceKind defines a child Kubernetes resource
                    kind with a selector
                  properties:
                    apiVersion:
                      description: APIVersion of the child resource
                      type: string
                    kind:
                      description: Kind of the child resource
                      type: string
                    selector:
                      additionalProperties:
                        type: string
                      description: Selector to select the child resources that the
                        workload wants to expose to traits
                      type: object
                  required:
                  - apiVersion
                  - kind
                  type: object
                type: array
              extension:
                description: Extension is used for extension needs by OAM platform
                  builders
                type: object
                x-kubernetes-preserve-unknown-fields: true
              podSpecPath:
                description: PodSpecPath indicates where/if this workload has K8s
                  podSpec field if one workload has podSpec, trait can do lot's of
                  assumption such as port, env, volume fields.
                type: string
              revisionLabel:
                description: RevisionLabel indicates which label for underlying resources(e.g.
                  pods) of this workload can be used by trait to create resource selectors(e.g.
                  label selector for pods).
                type: string
              schematic:
                description: Schematic defines the data format and template of the
                  encapsulation of the workload
                properties:
                  cue:
                    description: CUE defines the encapsulation in CUE format
                    properties:
                      template:
                        description: Template defines the abstraction template data
                          of the capability, it will replace the old CUE template
                          in extension field. Template is a required field if CUE
                          is defined in Capability Definition.
                        type: string
                    required:
                    - template
                    type: object
                  terraform:
                    description: Terraform is the struct to describe cloud resources
                      managed by Hashicorp Terraform
                    properties:
                      configuration:
                        description: Configuration is Terraform Configuration
                        type: string
                      customRegion:
                        description: Region is cloud provider's region. It will override
                          the region in the region field of ProviderReference
                        type: string
                      deleteResource:
                        default: true
                        description: DeleteResource will determine whether provisioned
                          cloud resources will be deleted when CR is deleted
                        type: boolean
                      gitCredentialsSecretReference:
                        description: GitCredentialsSecretReference specifies the reference
                          to the secret containing the git credentials
                        properties:
                          name:
                            description: name is unique within a namespace to reference
                              a secret resource.
                            type: string
                          namespace:
                            description: namespace defines the space within which
                              the secret name must be unique.
                            type: string
                        type: object
                        x-kubernetes-map-type: atomic
                      path:
                        description: Path is the sub-directory of remote git repository.
                          It's valid when remote is set
                        type: string
                      providerRef:
                        description: ProviderReference specifies the reference to
                          Provider
                        properties:
                          name:
                            description: Name of the referenced object.
                            type: string
                          namespace:
                            default: default
                            description: Namespace of the referenced object.
                            type: string
                        required:
                        - name
                        type: object
                      type:
                        default: hcl
                        description: Type specifies which Terraform configuration
                          it is, HCL or JSON syntax
                        enum:
                        - hcl
                        - json
                        - remote
                        type: string
                      writeConnectionSecretToRef:
                        description: WriteConnectionSecretToReference specifies the
                          namespace and name of a Secret to which any connection details
                          for this managed resource should be written. Connection
                          details frequently include the endpoint, username, and password
                          required to connect to the managed resource.
                        properties:
                          name:
                            description: Name of the secret.
                            type: string
                          namespace:
                            description: Namespace of the secret.
                            type: string
                        required:
                        - name
                        type: object
                    required:
                    - configuration
                    type: object
                type: object
              status:
                description: Status defines the custom health policy and status message
                  for workload
                properties:
                  customStatus:
                    description: CustomStatus defines the custom status message that
                      could display to user
                    type: string
                  healthPolicy:
                    description: HealthPolicy defines the health check policy for
                      the abstraction
                    type: string
                type: object
              workload:
                description: Workload is a workload type descriptor
                properties:
                  definition:
                    description: Definition mutually exclusive to workload.type, a
                      embedded WorkloadDefinition
                    properties:
                      apiVersion:
                        type: string
                      kind:
                        type: string
                    required:
                    - apiVersion
                    - kind
                    type: object
                  type:
                    description: Type ref to a WorkloadDefinition via name
                    type: string
                type: object
            required:
            - workload
            type: object
          status:
            description: ComponentDefinitionStatus is the status of ComponentDefinition
            properties:
              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
              configMapRef:
                description: ConfigMapRef refer to a ConfigMap which contains OpenAPI
                  V3 JSON schema of Component parameters.
                type: string
              latestRevision:
                description: LatestRevision of the component definition
                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
            type: object
        type: object
    served: true
    storage: true
    subresources:
      status: {}
