---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.17.3
  name: compositions.eno.azure.io
spec:
  group: eno.azure.io
  names:
    kind: Composition
    listKind: CompositionList
    plural: compositions
    singular: composition
  scope: Namespaced
  versions:
  - additionalPrinterColumns:
    - jsonPath: .spec.synthesizer.name
      name: Synthesizer
      type: string
    - jsonPath: .status.currentSynthesis.synthesized
      name: Age
      type: date
    - jsonPath: .status.simplified.status
      name: Status
      type: string
    - jsonPath: .status.simplified.error
      name: Error
      type: string
    name: v1
    schema:
      openAPIV3Schema:
        description: |-
          Compositions represent a collection of related, synthesized resources.

          For example: when managing Postgres with Eno, one would create a composition
          per distinct instance of Postgres, all referencing a single synthesizer resource.

          Changing the spec of a composition will result in re-synthesis.
        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:
            properties:
              bindings:
                description: |-
                  Synthesizers can accept Kubernetes resources as inputs.
                  Bindings allow compositions to specify which resource to use for a particular input "reference".
                  Declaring extra bindings not (yet) supported by the synthesizer is valid.
                items:
                  description: |-
                    Bindings map a specific Kubernetes resource to a ref exposed by a synthesizer.
                    Compositions use bindings to populate inputs supported by their synthesizer.
                  properties:
                    key:
                      description: Key determines which ref this binding binds to.
                        Opaque.
                      type: string
                    resource:
                      description: A reference to a specific resource name and optionally
                        namespace.
                      properties:
                        name:
                          type: string
                        namespace:
                          type: string
                      required:
                      - name
                      type: object
                  required:
                  - key
                  - resource
                  type: object
                type: array
              synthesisEnv:
                description: |-
                  SynthesisEnv
                  A set of environment variables that will be made available inside the synthesis Pod.
                items:
                  properties:
                    name:
                      maxLength: 100
                      type: string
                    value:
                      type: string
                  required:
                  - name
                  type: object
                maxItems: 500
                type: array
              synthesizer:
                description: Compositions are synthesized by a Synthesizer, referenced
                  by name.
                properties:
                  name:
                    type: string
                type: object
            type: object
          status:
            properties:
              currentSynthesis:
                description: |-
                  A synthesis is the result of synthesizing a composition.
                  In other words: it's a collection of resources returned from a synthesizer.
                properties:
                  attempts:
                    description: Counter used internally to calculate back off when
                      retrying failed syntheses.
                    type: integer
                  canceled:
                    description: |-
                      Canceled signals that any running synthesis pods should be deleted,
                      and new synthesis pods should never be created for this synthesis UUID.
                    format: date-time
                    type: string
                  deferred:
                    description: |-
                      Deferred is true when this synthesis was caused by a change to either the synthesizer
                      or an input with a ref that sets `Defer == true`.
                    type: boolean
                  initialized:
                    description: Initialized is set when the synthesis process is
                      initiated.
                    format: date-time
                    type: string
                  inputRevisions:
                    description: InputRevisions contains the versions of the input
                      resources that were used for this synthesis.
                    items:
                      properties:
                        key:
                          type: string
                        resourceVersion:
                          type: string
                        revision:
                          type: integer
                        synthesizerGeneration:
                          format: int64
                          type: integer
                      type: object
                    type: array
                  observedCompositionGeneration:
                    description: |-
                      The value of the composition's metadata.generation at the time the synthesis began.
                      This is a min i.e. a newer composition may have been used.
                    format: int64
                    type: integer
                  observedSynthesizerGeneration:
                    description: |-
                      The value of the synthesizer's metadata.generation at the time the synthesis began.
                      This is a min i.e. a newer composition may have been used.
                    format: int64
                    type: integer
                  podCreation:
                    description: Time at which the most recent synthesizer pod was
                      created.
                    format: date-time
                    type: string
                  ready:
                    description: Time at which the synthesis's reconciled resources
                      became ready.
                    format: date-time
                    type: string
                  reconciled:
                    description: Time at which the synthesis's resources were reconciled
                      into real Kubernetes resources.
                    format: date-time
                    type: string
                  resourceSlices:
                    description: |-
                      References to every resource slice that contains the resources comprising this synthesis.
                      Immutable.
                    items:
                      properties:
                        name:
                          type: string
                      type: object
                    type: array
                  results:
                    description: Results are passed through opaquely from the synthesizer's
                      KRM function.
                    items:
                      properties:
                        message:
                          type: string
                        severity:
                          type: string
                        tags:
                          additionalProperties:
                            type: string
                          type: object
                      type: object
                    type: array
                  synthesized:
                    description: Time at which the synthesis completed i.e. resourceSlices
                      was written
                    format: date-time
                    type: string
                  uuid:
                    description: |-
                      A random UUID scoped to this particular synthesis operation.
                      Used internally for strict ordering semantics.
                    type: string
                type: object
              inFlightSynthesis:
                description: |-
                  A synthesis is the result of synthesizing a composition.
                  In other words: it's a collection of resources returned from a synthesizer.
                properties:
                  attempts:
                    description: Counter used internally to calculate back off when
                      retrying failed syntheses.
                    type: integer
                  canceled:
                    description: |-
                      Canceled signals that any running synthesis pods should be deleted,
                      and new synthesis pods should never be created for this synthesis UUID.
                    format: date-time
                    type: string
                  deferred:
                    description: |-
                      Deferred is true when this synthesis was caused by a change to either the synthesizer
                      or an input with a ref that sets `Defer == true`.
                    type: boolean
                  initialized:
                    description: Initialized is set when the synthesis process is
                      initiated.
                    format: date-time
                    type: string
                  inputRevisions:
                    description: InputRevisions contains the versions of the input
                      resources that were used for this synthesis.
                    items:
                      properties:
                        key:
                          type: string
                        resourceVersion:
                          type: string
                        revision:
                          type: integer
                        synthesizerGeneration:
                          format: int64
                          type: integer
                      type: object
                    type: array
                  observedCompositionGeneration:
                    description: |-
                      The value of the composition's metadata.generation at the time the synthesis began.
                      This is a min i.e. a newer composition may have been used.
                    format: int64
                    type: integer
                  observedSynthesizerGeneration:
                    description: |-
                      The value of the synthesizer's metadata.generation at the time the synthesis began.
                      This is a min i.e. a newer composition may have been used.
                    format: int64
                    type: integer
                  podCreation:
                    description: Time at which the most recent synthesizer pod was
                      created.
                    format: date-time
                    type: string
                  ready:
                    description: Time at which the synthesis's reconciled resources
                      became ready.
                    format: date-time
                    type: string
                  reconciled:
                    description: Time at which the synthesis's resources were reconciled
                      into real Kubernetes resources.
                    format: date-time
                    type: string
                  resourceSlices:
                    description: |-
                      References to every resource slice that contains the resources comprising this synthesis.
                      Immutable.
                    items:
                      properties:
                        name:
                          type: string
                      type: object
                    type: array
                  results:
                    description: Results are passed through opaquely from the synthesizer's
                      KRM function.
                    items:
                      properties:
                        message:
                          type: string
                        severity:
                          type: string
                        tags:
                          additionalProperties:
                            type: string
                          type: object
                      type: object
                    type: array
                  synthesized:
                    description: Time at which the synthesis completed i.e. resourceSlices
                      was written
                    format: date-time
                    type: string
                  uuid:
                    description: |-
                      A random UUID scoped to this particular synthesis operation.
                      Used internally for strict ordering semantics.
                    type: string
                type: object
              inputRevisions:
                items:
                  properties:
                    key:
                      type: string
                    resourceVersion:
                      type: string
                    revision:
                      type: integer
                    synthesizerGeneration:
                      format: int64
                      type: integer
                  type: object
                type: array
              previousSynthesis:
                description: |-
                  A synthesis is the result of synthesizing a composition.
                  In other words: it's a collection of resources returned from a synthesizer.
                properties:
                  attempts:
                    description: Counter used internally to calculate back off when
                      retrying failed syntheses.
                    type: integer
                  canceled:
                    description: |-
                      Canceled signals that any running synthesis pods should be deleted,
                      and new synthesis pods should never be created for this synthesis UUID.
                    format: date-time
                    type: string
                  deferred:
                    description: |-
                      Deferred is true when this synthesis was caused by a change to either the synthesizer
                      or an input with a ref that sets `Defer == true`.
                    type: boolean
                  initialized:
                    description: Initialized is set when the synthesis process is
                      initiated.
                    format: date-time
                    type: string
                  inputRevisions:
                    description: InputRevisions contains the versions of the input
                      resources that were used for this synthesis.
                    items:
                      properties:
                        key:
                          type: string
                        resourceVersion:
                          type: string
                        revision:
                          type: integer
                        synthesizerGeneration:
                          format: int64
                          type: integer
                      type: object
                    type: array
                  observedCompositionGeneration:
                    description: |-
                      The value of the composition's metadata.generation at the time the synthesis began.
                      This is a min i.e. a newer composition may have been used.
                    format: int64
                    type: integer
                  observedSynthesizerGeneration:
                    description: |-
                      The value of the synthesizer's metadata.generation at the time the synthesis began.
                      This is a min i.e. a newer composition may have been used.
                    format: int64
                    type: integer
                  podCreation:
                    description: Time at which the most recent synthesizer pod was
                      created.
                    format: date-time
                    type: string
                  ready:
                    description: Time at which the synthesis's reconciled resources
                      became ready.
                    format: date-time
                    type: string
                  reconciled:
                    description: Time at which the synthesis's resources were reconciled
                      into real Kubernetes resources.
                    format: date-time
                    type: string
                  resourceSlices:
                    description: |-
                      References to every resource slice that contains the resources comprising this synthesis.
                      Immutable.
                    items:
                      properties:
                        name:
                          type: string
                      type: object
                    type: array
                  results:
                    description: Results are passed through opaquely from the synthesizer's
                      KRM function.
                    items:
                      properties:
                        message:
                          type: string
                        severity:
                          type: string
                        tags:
                          additionalProperties:
                            type: string
                          type: object
                      type: object
                    type: array
                  synthesized:
                    description: Time at which the synthesis completed i.e. resourceSlices
                      was written
                    format: date-time
                    type: string
                  uuid:
                    description: |-
                      A random UUID scoped to this particular synthesis operation.
                      Used internally for strict ordering semantics.
                    type: string
                type: object
              simplified:
                properties:
                  error:
                    type: string
                  status:
                    type: string
                type: object
            type: object
        type: object
    served: true
    storage: true
    subresources:
      status: {}
