diff --git a/.github/workflows/maven-build.yaml b/.github/workflows/maven-build.yaml
new file mode 100644
index 0000000..ef161de
--- /dev/null
+++ b/.github/workflows/maven-build.yaml
@@ -0,0 +1,21 @@
+name: Build with maven
+
+on:
+ push:
+ branches: [ "*" ]
+ pull_request:
+ branches: [ "main" ]
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - name: Set up JDK 17
+ uses: actions/setup-java@v4
+ with:
+ java-version: '17'
+ distribution: 'oracle'
+ cache: maven
+ - name: Build with Maven
+ run: mvn -B clean verify --file pom.xml
\ No newline at end of file
diff --git a/.github/workflows/maven-release.yaml b/.github/workflows/maven-release.yaml
new file mode 100644
index 0000000..2b268cb
--- /dev/null
+++ b/.github/workflows/maven-release.yaml
@@ -0,0 +1,44 @@
+name: Release a new version
+
+on:
+ workflow_dispatch:
+ inputs:
+ releaseversion:
+ type: string
+ description: 'Version to reelase'
+ required: true
+
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - name: Set up JDK 17
+ uses: actions/setup-java@v4
+ with:
+ java-version: '17'
+ distribution: 'oracle'
+ cache: maven
+ server-id: central
+ server-username: MAVEN_CENTRAL_USERNAME # env variable for username in deploy
+ server-password: MAVEN_CENTRAL_TOKEN # env variable for token in deploy
+ gpg-private-key: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }} # Value of the GPG private key to import
+ gpg-passphrase: MAVEN_GPG_PASSPHRASE # env variable for GPG private key passphrase
+ - name: Set the revision property
+ run: mvn versions:set-property -Dproperty=revision "-DnewVersion==${{ github.event.inputs.releaseversion }}" -DgenerateBackupPoms=false
+ - name: Build with Maven
+ run: mvn -B deploy --file pom.xml -Pdeploy
+ env:
+ MAVEN_CENTRAL_USERNAME: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
+ MAVEN_CENTRAL_TOKEN: ${{ secrets.MAVEN_CENTRAL_TOKEN }}
+ MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }}
+ - name: Create release
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ tag: ${{ github.ref_name }}
+ run: |
+ gh release create "$tag" \
+ --repo="$GITHUB_REPOSITORY" \
+ --title="${GITHUB_REPOSITORY#*/} ${tag#v}" \
+ --generate-notes
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 524f096..1ffbe04 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,3 +22,9 @@
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
replay_pid*
+
+**/.flattened-pom.xml
+*.iml
+.idea/
+target/
+generated/
diff --git a/crossplane-crd-model/pom.xml b/crossplane-crd-model/pom.xml
new file mode 100644
index 0000000..67e8fb0
--- /dev/null
+++ b/crossplane-crd-model/pom.xml
@@ -0,0 +1,48 @@
+
+
+ 4.0.0
+
+
+ io.crossplane.compositefunctions
+ crossplane-parent
+ ${revision}
+
+
+ crossplane-crd-model
+ Crossplane coposite function CRDS
+
+
+
+ io.fabric8
+ kubernetes-client
+
+
+ io.fabric8
+ generator-annotations
+
+
+
+
+
+
+
+ io.fabric8
+ java-generator-maven-plugin
+ ${kubernetes-client.version}
+
+
+
+ generate
+
+
+
+
+ src/main/resources/kubernetes
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/crossplane-crd-model/src/main/resources/kubernetes/apiextensions.crossplane.io_compositeresourcedefinitions.yaml b/crossplane-crd-model/src/main/resources/kubernetes/apiextensions.crossplane.io_compositeresourcedefinitions.yaml
new file mode 100644
index 0000000..602690a
--- /dev/null
+++ b/crossplane-crd-model/src/main/resources/kubernetes/apiextensions.crossplane.io_compositeresourcedefinitions.yaml
@@ -0,0 +1,553 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ controller-gen.kubebuilder.io/version: v0.14.0
+ name: compositeresourcedefinitions.apiextensions.crossplane.io
+spec:
+ group: apiextensions.crossplane.io
+ names:
+ categories:
+ - crossplane
+ kind: CompositeResourceDefinition
+ listKind: CompositeResourceDefinitionList
+ plural: compositeresourcedefinitions
+ shortNames:
+ - xrd
+ - xrds
+ singular: compositeresourcedefinition
+ scope: Cluster
+ versions:
+ - additionalPrinterColumns:
+ - jsonPath: .status.conditions[?(@.type=='Established')].status
+ name: ESTABLISHED
+ type: string
+ - jsonPath: .status.conditions[?(@.type=='Offered')].status
+ name: OFFERED
+ type: string
+ - jsonPath: .metadata.creationTimestamp
+ name: AGE
+ type: date
+ name: v1
+ schema:
+ openAPIV3Schema:
+ description: |-
+ A CompositeResourceDefinition defines a new kind of composite infrastructure
+ resource. The new resource is composed of other composite or managed
+ infrastructure resources.
+ 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: CompositeResourceDefinitionSpec specifies the desired state
+ of the definition.
+ properties:
+ claimNames:
+ description: |-
+ ClaimNames specifies the names of an optional composite resource claim.
+ When claim names are specified Crossplane will create a namespaced
+ 'composite resource claim' CRD that corresponds to the defined composite
+ resource. This composite resource claim acts as a namespaced proxy for
+ the composite resource; creating, updating, or deleting the claim will
+ create, update, or delete a corresponding composite resource. You may add
+ claim names to an existing CompositeResourceDefinition, but they cannot
+ be changed or removed once they have been set.
+ properties:
+ categories:
+ description: |-
+ categories is a list of grouped resources this custom resource belongs to (e.g. 'all').
+ This is published in API discovery documents, and used by clients to support invocations like
+ `kubectl get all`.
+ items:
+ type: string
+ type: array
+ kind:
+ description: |-
+ kind is the serialized kind of the resource. It is normally CamelCase and singular.
+ Custom resource instances will use this value as the `kind` attribute in API calls.
+ type: string
+ listKind:
+ description: listKind is the serialized kind of the list for this
+ resource. Defaults to "`kind`List".
+ type: string
+ plural:
+ description: |-
+ plural is the plural name of the resource to serve.
+ The custom resources are served under `/apis///.../`.
+ Must match the name of the CustomResourceDefinition (in the form `.`).
+ Must be all lowercase.
+ type: string
+ shortNames:
+ description: |-
+ shortNames are short names for the resource, exposed in API discovery documents,
+ and used by clients to support invocations like `kubectl get `.
+ It must be all lowercase.
+ items:
+ type: string
+ type: array
+ singular:
+ description: singular is the singular name of the resource. It
+ must be all lowercase. Defaults to lowercased `kind`.
+ type: string
+ required:
+ - kind
+ - plural
+ type: object
+ connectionSecretKeys:
+ description: |-
+ ConnectionSecretKeys is the list of keys that will be exposed to the end
+ user of the defined kind.
+ If the list is empty, all keys will be published.
+ items:
+ type: string
+ type: array
+ conversion:
+ description: Conversion defines all conversion settings for the defined
+ Composite resource.
+ properties:
+ strategy:
+ description: |-
+ strategy specifies how custom resources are converted between versions. Allowed values are:
+ - `"None"`: The converter only change the apiVersion and would not touch any other field in the custom resource.
+ - `"Webhook"`: API Server will call to an external webhook to do the conversion. Additional information
+ is needed for this option. This requires spec.preserveUnknownFields to be false, and spec.conversion.webhook to be set.
+ type: string
+ webhook:
+ description: webhook describes how to call the conversion webhook.
+ Required when `strategy` is set to `"Webhook"`.
+ properties:
+ clientConfig:
+ description: clientConfig is the instructions for how to call
+ the webhook if strategy is `Webhook`.
+ properties:
+ caBundle:
+ description: |-
+ caBundle is a PEM encoded CA bundle which will be used to validate the webhook's server certificate.
+ If unspecified, system trust roots on the apiserver are used.
+ format: byte
+ type: string
+ service:
+ description: |-
+ service is a reference to the service for this webhook. Either
+ service or url must be specified.
+
+
+ If the webhook is running within the cluster, then you should use `service`.
+ properties:
+ name:
+ description: |-
+ name is the name of the service.
+ Required
+ type: string
+ namespace:
+ description: |-
+ namespace is the namespace of the service.
+ Required
+ type: string
+ path:
+ description: path is an optional URL path at which
+ the webhook will be contacted.
+ type: string
+ port:
+ description: |-
+ port is an optional service port at which the webhook will be contacted.
+ `port` should be a valid port number (1-65535, inclusive).
+ Defaults to 443 for backward compatibility.
+ format: int32
+ type: integer
+ required:
+ - name
+ - namespace
+ type: object
+ url:
+ description: |-
+ url gives the location of the webhook, in standard URL form
+ (`scheme://host:port/path`). Exactly one of `url` or `service`
+ must be specified.
+
+
+ The `host` should not refer to a service running in the cluster; use
+ the `service` field instead. The host might be resolved via external
+ DNS in some apiservers (e.g., `kube-apiserver` cannot resolve
+ in-cluster DNS as that would be a layering violation). `host` may
+ also be an IP address.
+
+
+ Please note that using `localhost` or `127.0.0.1` as a `host` is
+ risky unless you take great care to run this webhook on all hosts
+ which run an apiserver which might need to make calls to this
+ webhook. Such installs are likely to be non-portable, i.e., not easy
+ to turn up in a new cluster.
+
+
+ The scheme must be "https"; the URL must begin with "https://".
+
+
+ A path is optional, and if present may be any string permissible in
+ a URL. You may use the path to pass an arbitrary string to the
+ webhook, for example, a cluster identifier.
+
+
+ Attempting to use a user or basic auth e.g. "user:password@" is not
+ allowed. Fragments ("#...") and query parameters ("?...") are not
+ allowed, either.
+ type: string
+ type: object
+ conversionReviewVersions:
+ description: |-
+ conversionReviewVersions is an ordered list of preferred `ConversionReview`
+ versions the Webhook expects. The API server will use the first version in
+ the list which it supports. If none of the versions specified in this list
+ are supported by API server, conversion will fail for the custom resource.
+ If a persisted Webhook configuration specifies allowed versions and does not
+ include any versions known to the API Server, calls to the webhook will fail.
+ items:
+ type: string
+ type: array
+ required:
+ - conversionReviewVersions
+ type: object
+ required:
+ - strategy
+ type: object
+ defaultCompositeDeletePolicy:
+ default: Background
+ description: |-
+ DefaultCompositeDeletePolicy is the policy used when deleting the Composite
+ that is associated with the Claim if no policy has been specified.
+ enum:
+ - Background
+ - Foreground
+ type: string
+ defaultCompositionRef:
+ description: |-
+ DefaultCompositionRef refers to the Composition resource that will be used
+ in case no composition selector is given.
+ properties:
+ name:
+ description: Name of the Composition.
+ type: string
+ required:
+ - name
+ type: object
+ defaultCompositionUpdatePolicy:
+ default: Automatic
+ description: |-
+ DefaultCompositionUpdatePolicy is the policy used when updating composites after a new
+ Composition Revision has been created if no policy has been specified on the composite.
+ enum:
+ - Automatic
+ - Manual
+ type: string
+ enforcedCompositionRef:
+ description: |-
+ EnforcedCompositionRef refers to the Composition resource that will be used
+ by all composite instances whose schema is defined by this definition.
+ properties:
+ name:
+ description: Name of the Composition.
+ type: string
+ required:
+ - name
+ type: object
+ group:
+ description: |-
+ Group specifies the API group of the defined composite resource.
+ Composite resources are served under `/apis//...`. Must match the
+ name of the XRD (in the form `.`).
+ type: string
+ metadata:
+ description: Metadata specifies the desired metadata for the defined
+ composite resource and claim CRD's.
+ properties:
+ annotations:
+ additionalProperties:
+ type: string
+ description: |-
+ Annotations is an unstructured key value map stored with a resource that may be
+ set by external tools to store and retrieve arbitrary metadata. They are not
+ queryable and should be preserved when modifying objects.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations
+ type: object
+ labels:
+ additionalProperties:
+ type: string
+ description: |-
+ Map of string keys and values that can be used to organize and categorize
+ (scope and select) objects. May match selectors of replication controllers
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels
+ and services.
+ These labels are added to the composite resource and claim CRD's in addition
+ to any labels defined by `CompositionResourceDefinition` `metadata.labels`.
+ type: object
+ type: object
+ names:
+ description: |-
+ Names specifies the resource and kind names of the defined composite
+ resource.
+ properties:
+ categories:
+ description: |-
+ categories is a list of grouped resources this custom resource belongs to (e.g. 'all').
+ This is published in API discovery documents, and used by clients to support invocations like
+ `kubectl get all`.
+ items:
+ type: string
+ type: array
+ kind:
+ description: |-
+ kind is the serialized kind of the resource. It is normally CamelCase and singular.
+ Custom resource instances will use this value as the `kind` attribute in API calls.
+ type: string
+ listKind:
+ description: listKind is the serialized kind of the list for this
+ resource. Defaults to "`kind`List".
+ type: string
+ plural:
+ description: |-
+ plural is the plural name of the resource to serve.
+ The custom resources are served under `/apis///.../`.
+ Must match the name of the CustomResourceDefinition (in the form `.`).
+ Must be all lowercase.
+ type: string
+ shortNames:
+ description: |-
+ shortNames are short names for the resource, exposed in API discovery documents,
+ and used by clients to support invocations like `kubectl get `.
+ It must be all lowercase.
+ items:
+ type: string
+ type: array
+ singular:
+ description: singular is the singular name of the resource. It
+ must be all lowercase. Defaults to lowercased `kind`.
+ type: string
+ required:
+ - kind
+ - plural
+ type: object
+ versions:
+ description: |-
+ Versions is the list of all API versions of the defined composite
+ resource. Version names are used to compute the order in which served
+ versions are listed in API discovery. If the version string is
+ "kube-like", it will sort above non "kube-like" version strings, which
+ are ordered lexicographically. "Kube-like" versions start with a "v",
+ then are followed by a number (the major version), then optionally the
+ string "alpha" or "beta" and another number (the minor version). These
+ are sorted first by GA > beta > alpha (where GA is a version with no
+ suffix such as beta or alpha), and then by comparing major version, then
+ minor version. An example sorted list of versions: v10, v2, v1, v11beta2,
+ v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.
+ items:
+ description: CompositeResourceDefinitionVersion describes a version
+ of an XR.
+ properties:
+ additionalPrinterColumns:
+ description: |-
+ AdditionalPrinterColumns specifies additional columns returned in Table
+ output. If no columns are specified, a single column displaying the age
+ of the custom resource is used. See the following link for details:
+ https://kubernetes.io/docs/reference/using-api/api-concepts/#receiving-resources-as-tables
+ items:
+ description: CustomResourceColumnDefinition specifies a column
+ for server side printing.
+ properties:
+ description:
+ description: description is a human readable description
+ of this column.
+ type: string
+ format:
+ description: |-
+ format is an optional OpenAPI type definition for this column. The 'name' format is applied
+ to the primary identifier column to assist in clients identifying column is the resource name.
+ See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types for details.
+ type: string
+ jsonPath:
+ description: |-
+ jsonPath is a simple JSON path (i.e. with array notation) which is evaluated against
+ each custom resource to produce the value for this column.
+ type: string
+ name:
+ description: name is a human readable name for the column.
+ type: string
+ priority:
+ description: |-
+ priority is an integer defining the relative importance of this column compared to others. Lower
+ numbers are considered higher priority. Columns that may be omitted in limited space scenarios
+ should be given a priority greater than 0.
+ format: int32
+ type: integer
+ type:
+ description: |-
+ type is an OpenAPI type definition for this column.
+ See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types for details.
+ type: string
+ required:
+ - jsonPath
+ - name
+ - type
+ type: object
+ type: array
+ deprecated:
+ description: |-
+ The deprecated field specifies that this version is deprecated and should
+ not be used.
+ type: boolean
+ deprecationWarning:
+ description: |-
+ DeprecationWarning specifies the message that should be shown to the user
+ when using this version.
+ maxLength: 256
+ type: string
+ name:
+ description: |-
+ Name of this version, e.g. “v1”, “v2beta1”, etc. Composite resources are
+ served under this version at `/apis///...` if `served` is
+ true.
+ type: string
+ referenceable:
+ description: |-
+ Referenceable specifies that this version may be referenced by a
+ Composition in order to configure which resources an XR may be composed
+ of. Exactly one version must be marked as referenceable; all Compositions
+ must target only the referenceable version. The referenceable version
+ must be served. It's mapped to the CRD's `spec.versions[*].storage` field.
+ type: boolean
+ schema:
+ description: |-
+ Schema describes the schema used for validation, pruning, and defaulting
+ of this version of the defined composite resource. Fields required by all
+ composite resources will be injected into this schema automatically, and
+ will override equivalently named fields in this schema. Omitting this
+ schema results in a schema that contains only the fields required by all
+ composite resources.
+ properties:
+ openAPIV3Schema:
+ description: |-
+ OpenAPIV3Schema is the OpenAPI v3 schema to use for validation and
+ pruning.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ type: object
+ served:
+ description: Served specifies that this version should be served
+ via REST APIs.
+ type: boolean
+ required:
+ - name
+ - referenceable
+ - served
+ type: object
+ type: array
+ required:
+ - group
+ - names
+ - versions
+ type: object
+ status:
+ description: CompositeResourceDefinitionStatus shows the observed state
+ of the definition.
+ 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
+ x-kubernetes-list-map-keys:
+ - type
+ x-kubernetes-list-type: map
+ controllers:
+ description: |-
+ Controllers represents the status of the controllers that power this
+ composite resource definition.
+ properties:
+ compositeResourceClaimType:
+ description: |-
+ The CompositeResourceClaimTypeRef is the type of composite resource claim
+ that Crossplane is currently reconciling for this definition. Its version
+ will eventually become consistent with the definition's referenceable
+ version. Note that clients may interact with any served type; this is
+ simply the type that Crossplane interacts with.
+ properties:
+ apiVersion:
+ description: APIVersion of the type.
+ type: string
+ kind:
+ description: Kind of the type.
+ type: string
+ required:
+ - apiVersion
+ - kind
+ type: object
+ compositeResourceType:
+ description: |-
+ The CompositeResourceTypeRef is the type of composite resource that
+ Crossplane is currently reconciling for this definition. Its version will
+ eventually become consistent with the definition's referenceable version.
+ Note that clients may interact with any served type; this is simply the
+ type that Crossplane interacts with.
+ properties:
+ apiVersion:
+ description: APIVersion of the type.
+ type: string
+ kind:
+ description: Kind of the type.
+ type: string
+ required:
+ - apiVersion
+ - kind
+ type: object
+ type: object
+ type: object
+ type: object
+ served: true
+ storage: true
+ subresources:
+ status: {}
diff --git a/crossplane-crd-model/src/main/resources/kubernetes/apiextensions.crossplane.io_compositionrevisions.yaml b/crossplane-crd-model/src/main/resources/kubernetes/apiextensions.crossplane.io_compositionrevisions.yaml
new file mode 100644
index 0000000..93f4dcb
--- /dev/null
+++ b/crossplane-crd-model/src/main/resources/kubernetes/apiextensions.crossplane.io_compositionrevisions.yaml
@@ -0,0 +1,3183 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ controller-gen.kubebuilder.io/version: v0.14.0
+ name: compositionrevisions.apiextensions.crossplane.io
+spec:
+ group: apiextensions.crossplane.io
+ names:
+ categories:
+ - crossplane
+ kind: CompositionRevision
+ listKind: CompositionRevisionList
+ plural: compositionrevisions
+ shortNames:
+ - comprev
+ singular: compositionrevision
+ scope: Cluster
+ versions:
+ - additionalPrinterColumns:
+ - jsonPath: .spec.revision
+ name: REVISION
+ type: string
+ - jsonPath: .spec.compositeTypeRef.kind
+ name: XR-KIND
+ type: string
+ - jsonPath: .spec.compositeTypeRef.apiVersion
+ name: XR-APIVERSION
+ type: string
+ - jsonPath: .metadata.creationTimestamp
+ name: AGE
+ type: date
+ name: v1
+ schema:
+ openAPIV3Schema:
+ description: |-
+ A CompositionRevision represents a revision in time of a Composition.
+ Revisions are created by Crossplane; they should be treated as immutable.
+ 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: |-
+ CompositionRevisionSpec specifies the desired state of the composition
+ revision.
+ properties:
+ compositeTypeRef:
+ description: |-
+ CompositeTypeRef specifies the type of composite resource that this
+ composition is compatible with.
+ properties:
+ apiVersion:
+ description: APIVersion of the type.
+ type: string
+ kind:
+ description: Kind of the type.
+ type: string
+ required:
+ - apiVersion
+ - kind
+ type: object
+ environment:
+ description: |-
+ Environment configures the environment in which resources are rendered.
+
+
+ THIS IS AN ALPHA FIELD. Do not use it in production. It is not honored
+ unless the relevant Crossplane feature flag is enabled, and may be
+ changed or removed without notice.
+ properties:
+ defaultData:
+ additionalProperties:
+ x-kubernetes-preserve-unknown-fields: true
+ description: |-
+ DefaultData statically defines the initial state of the environment.
+ It has the same schema-less structure as the data field in
+ environment configs.
+ It is overwritten by the selected environment configs.
+ type: object
+ environmentConfigs:
+ description: |-
+ EnvironmentConfigs selects a list of `EnvironmentConfig`s. The resolved
+ resources are stored in the composite resource at
+ `spec.environmentConfigRefs` and is only updated if it is null.
+
+
+ The list of references is used to compute an in-memory environment at
+ compose time. The data of all object is merged in the order they are
+ listed, meaning the values of EnvironmentConfigs with a larger index take
+ priority over ones with smaller indices.
+
+
+ The computed environment can be accessed in a composition using
+ `FromEnvironmentFieldPath` and `CombineFromEnvironment` patches.
+ items:
+ description: EnvironmentSource selects a EnvironmentConfig resource.
+ properties:
+ ref:
+ description: |-
+ Ref is a named reference to a single EnvironmentConfig.
+ Either Ref or Selector is required.
+ properties:
+ name:
+ description: The name of the object.
+ type: string
+ required:
+ - name
+ type: object
+ selector:
+ description: Selector selects EnvironmentConfig(s) via labels.
+ properties:
+ matchLabels:
+ description: MatchLabels ensures an object with matching
+ labels is selected.
+ items:
+ description: |-
+ An EnvironmentSourceSelectorLabelMatcher acts like a k8s label selector but
+ can draw the label value from a different path.
+ properties:
+ fromFieldPathPolicy:
+ default: Required
+ description: |-
+ FromFieldPathPolicy specifies the policy for the valueFromFieldPath.
+ The default is Required, meaning that an error will be returned if the
+ field is not found in the composite resource.
+ Optional means that if the field is not found in the composite resource,
+ that label pair will just be skipped. N.B. other specified label
+ matchers will still be used to retrieve the desired
+ environment config, if any.
+ enum:
+ - Optional
+ - Required
+ type: string
+ key:
+ description: Key of the label to match.
+ type: string
+ type:
+ default: FromCompositeFieldPath
+ description: Type specifies where the value for
+ a label comes from.
+ enum:
+ - FromCompositeFieldPath
+ - Value
+ type: string
+ value:
+ description: Value specifies a literal label value.
+ type: string
+ valueFromFieldPath:
+ description: ValueFromFieldPath specifies the
+ field path to look for the label value.
+ type: string
+ required:
+ - key
+ type: object
+ type: array
+ maxMatch:
+ description: MaxMatch specifies the number of extracted
+ EnvironmentConfigs in Multiple mode, extracts all
+ if nil.
+ format: int64
+ type: integer
+ minMatch:
+ description: MinMatch specifies the required minimum
+ of extracted EnvironmentConfigs in Multiple mode.
+ format: int64
+ type: integer
+ mode:
+ default: Single
+ description: 'Mode specifies retrieval strategy: "Single"
+ or "Multiple".'
+ enum:
+ - Single
+ - Multiple
+ type: string
+ sortByFieldPath:
+ default: metadata.name
+ description: SortByFieldPath is the path to the field
+ based on which list of EnvironmentConfigs is alphabetically
+ sorted.
+ type: string
+ type: object
+ type:
+ default: Reference
+ description: |-
+ Type specifies the way the EnvironmentConfig is selected.
+ Default is `Reference`
+ enum:
+ - Reference
+ - Selector
+ type: string
+ type: object
+ type: array
+ patches:
+ description: |-
+ Patches is a list of environment patches that are executed before a
+ composition's resources are composed.
+ items:
+ description: EnvironmentPatch is a patch for a Composition environment.
+ properties:
+ combine:
+ description: |-
+ Combine is the patch configuration for a CombineFromComposite or
+ CombineToComposite patch.
+ properties:
+ strategy:
+ description: |-
+ Strategy defines the strategy to use to combine the input variable values.
+ Currently only string is supported.
+ enum:
+ - string
+ type: string
+ string:
+ description: |-
+ String declares that input variables should be combined into a single
+ string, using the relevant settings for formatting purposes.
+ properties:
+ fmt:
+ description: |-
+ Format the input using a Go format string. See
+ https://golang.org/pkg/fmt/ for details.
+ type: string
+ required:
+ - fmt
+ type: object
+ variables:
+ description: |-
+ Variables are the list of variables whose values will be retrieved and
+ combined.
+ items:
+ description: |-
+ A CombineVariable defines the source of a value that is combined with
+ others to form and patch an output value. Currently, this only supports
+ retrieving values from a field path.
+ properties:
+ fromFieldPath:
+ description: |-
+ FromFieldPath is the path of the field on the source whose value is
+ to be used as input.
+ type: string
+ required:
+ - fromFieldPath
+ type: object
+ minItems: 1
+ type: array
+ required:
+ - strategy
+ - variables
+ type: object
+ fromFieldPath:
+ description: |-
+ FromFieldPath is the path of the field on the resource whose value is
+ to be used as input. Required when type is FromCompositeFieldPath or
+ ToCompositeFieldPath.
+ type: string
+ policy:
+ description: Policy configures the specifics of patching
+ behaviour.
+ properties:
+ fromFieldPath:
+ description: |-
+ FromFieldPath specifies how to patch from a field path. The default is
+ 'Optional', which means the patch will be a no-op if the specified
+ fromFieldPath does not exist. Use 'Required' if the patch should fail if
+ the specified path does not exist.
+ enum:
+ - Optional
+ - Required
+ type: string
+ mergeOptions:
+ description: MergeOptions Specifies merge options on
+ a field path
+ properties:
+ appendSlice:
+ description: Specifies that already existing elements
+ in a merged slice should be preserved
+ type: boolean
+ keepMapValues:
+ description: Specifies that already existing values
+ in a merged map should be preserved
+ type: boolean
+ type: object
+ type: object
+ toFieldPath:
+ description: |-
+ ToFieldPath is the path of the field on the resource whose value will
+ be changed with the result of transforms. Leave empty if you'd like to
+ propagate to the same path as fromFieldPath.
+ type: string
+ transforms:
+ description: |-
+ Transforms are the list of functions that are used as a FIFO pipe for the
+ input to be transformed.
+ items:
+ description: |-
+ Transform is a unit of process whose input is transformed into an output with
+ the supplied configuration.
+ properties:
+ convert:
+ description: Convert is used to cast the input into
+ the given output type.
+ properties:
+ format:
+ description: |-
+ The expected input format.
+
+
+ * `quantity` - parses the input as a K8s [`resource.Quantity`](https://pkg.go.dev/k8s.io/apimachinery/pkg/api/resource#Quantity).
+ Only used during `string -> float64` conversions.
+ * `json` - parses the input as a JSON string.
+ Only used during `string -> object` or `string -> list` conversions.
+
+
+ If this property is null, the default conversion is applied.
+ enum:
+ - none
+ - quantity
+ - json
+ type: string
+ toType:
+ description: ToType is the type of the output
+ of this transform.
+ enum:
+ - string
+ - int
+ - int64
+ - bool
+ - float64
+ - object
+ - array
+ type: string
+ required:
+ - toType
+ type: object
+ map:
+ additionalProperties:
+ x-kubernetes-preserve-unknown-fields: true
+ description: Map uses the input as a key in the given
+ map and returns the value.
+ type: object
+ match:
+ description: Match is a more complex version of Map
+ that matches a list of patterns.
+ properties:
+ fallbackTo:
+ default: Value
+ description: Determines to what value the transform
+ should fallback if no pattern matches.
+ enum:
+ - Value
+ - Input
+ type: string
+ fallbackValue:
+ description: |-
+ The fallback value that should be returned by the transform if now pattern
+ matches.
+ x-kubernetes-preserve-unknown-fields: true
+ patterns:
+ description: |-
+ The patterns that should be tested against the input string.
+ Patterns are tested in order. The value of the first match is used as
+ result of this transform.
+ items:
+ description: |-
+ MatchTransformPattern is a transform that returns the value that matches a
+ pattern.
+ properties:
+ literal:
+ description: |-
+ Literal exactly matches the input string (case sensitive).
+ Is required if `type` is `literal`.
+ type: string
+ regexp:
+ description: |-
+ Regexp to match against the input string.
+ Is required if `type` is `regexp`.
+ type: string
+ result:
+ description: The value that is used as result
+ of the transform if the pattern matches.
+ x-kubernetes-preserve-unknown-fields: true
+ type:
+ default: literal
+ description: |-
+ Type specifies how the pattern matches the input.
+
+
+ * `literal` - the pattern value has to exactly match (case sensitive) the
+ input string. This is the default.
+
+
+ * `regexp` - the pattern treated as a regular expression against
+ which the input string is tested. Crossplane will throw an error if the
+ key is not a valid regexp.
+ enum:
+ - literal
+ - regexp
+ type: string
+ required:
+ - result
+ - type
+ type: object
+ type: array
+ type: object
+ math:
+ description: |-
+ Math is used to transform the input via mathematical operations such as
+ multiplication.
+ properties:
+ clampMax:
+ description: ClampMax makes sure that the value
+ is not bigger than the given value.
+ format: int64
+ type: integer
+ clampMin:
+ description: ClampMin makes sure that the value
+ is not smaller than the given value.
+ format: int64
+ type: integer
+ multiply:
+ description: Multiply the value.
+ format: int64
+ type: integer
+ type:
+ default: Multiply
+ description: Type of the math transform to be
+ run.
+ enum:
+ - Multiply
+ - ClampMin
+ - ClampMax
+ type: string
+ type: object
+ string:
+ description: |-
+ String is used to transform the input into a string or a different kind
+ of string. Note that the input does not necessarily need to be a string.
+ properties:
+ convert:
+ description: |-
+ Optional conversion method to be specified.
+ `ToUpper` and `ToLower` change the letter case of the input string.
+ `ToBase64` and `FromBase64` perform a base64 conversion based on the input string.
+ `ToJson` converts any input value into its raw JSON representation.
+ `ToSha1`, `ToSha256` and `ToSha512` generate a hash value based on the input
+ converted to JSON.
+ `ToAdler32` generate a addler32 hash based on the input string.
+ enum:
+ - ToUpper
+ - ToLower
+ - ToBase64
+ - FromBase64
+ - ToJson
+ - ToSha1
+ - ToSha256
+ - ToSha512
+ - ToAdler32
+ type: string
+ fmt:
+ description: |-
+ Format the input using a Go format string. See
+ https://golang.org/pkg/fmt/ for details.
+ type: string
+ join:
+ description: Join defines parameters to join a
+ slice of values to a string.
+ properties:
+ separator:
+ description: |-
+ Separator defines the character that should separate the values from each
+ other in the joined string.
+ type: string
+ required:
+ - separator
+ type: object
+ regexp:
+ description: Extract a match from the input using
+ a regular expression.
+ properties:
+ group:
+ description: Group number to match. 0 (the
+ default) matches the entire expression.
+ type: integer
+ match:
+ description: |-
+ Match string. May optionally include submatches, aka capture groups.
+ See https://pkg.go.dev/regexp/ for details.
+ type: string
+ required:
+ - match
+ type: object
+ trim:
+ description: Trim the prefix or suffix from the
+ input
+ type: string
+ type:
+ default: Format
+ description: Type of the string transform to be
+ run.
+ enum:
+ - Format
+ - Convert
+ - TrimPrefix
+ - TrimSuffix
+ - Regexp
+ - Join
+ type: string
+ type: object
+ type:
+ description: Type of the transform to be run.
+ enum:
+ - map
+ - match
+ - math
+ - string
+ - convert
+ type: string
+ required:
+ - type
+ type: object
+ type: array
+ type:
+ default: FromCompositeFieldPath
+ description: |-
+ Type sets the patching behaviour to be used. Each patch type may require
+ its own fields to be set on the Patch object.
+ enum:
+ - FromCompositeFieldPath
+ - ToCompositeFieldPath
+ - CombineFromComposite
+ - CombineToComposite
+ type: string
+ type: object
+ type: array
+ policy:
+ description: |-
+ Policy represents the Resolve and Resolution policies which apply to
+ all EnvironmentSourceReferences in EnvironmentConfigs list.
+ properties:
+ resolution:
+ default: Required
+ description: |-
+ Resolution specifies whether resolution of this reference is required.
+ The default is 'Required', which means the reconcile will fail if the
+ reference cannot be resolved. 'Optional' means this reference will be
+ a no-op if it cannot be resolved.
+ enum:
+ - Required
+ - Optional
+ type: string
+ resolve:
+ description: |-
+ Resolve specifies when this reference should be resolved. The default
+ is 'IfNotPresent', which will attempt to resolve the reference only when
+ the corresponding field is not present. Use 'Always' to resolve the
+ reference on every reconcile.
+ enum:
+ - Always
+ - IfNotPresent
+ type: string
+ type: object
+ type: object
+ mode:
+ default: Resources
+ description: |-
+ Mode controls what type or "mode" of Composition will be used.
+
+
+ "Resources" (the default) indicates that a Composition uses what is
+ commonly referred to as "Patch & Transform" or P&T composition. This mode
+ of Composition uses an array of resources, each a template for a composed
+ resource.
+
+
+ "Pipeline" indicates that a Composition specifies a pipeline
+ of Composition Functions, each of which is responsible for producing
+ composed resources that Crossplane should create or update. THE PIPELINE
+ MODE IS A BETA FEATURE. It is not honored if the relevant Crossplane
+ feature flag is disabled.
+ enum:
+ - Resources
+ - Pipeline
+ type: string
+ patchSets:
+ description: |-
+ PatchSets define a named set of patches that may be included by any
+ resource in this Composition. PatchSets cannot themselves refer to other
+ PatchSets.
+
+
+ PatchSets are only used by the "Resources" mode of Composition. They
+ are ignored by other modes.
+ items:
+ description: |-
+ A PatchSet is a set of patches that can be reused from all resources within
+ a Composition.
+ properties:
+ name:
+ description: Name of this PatchSet.
+ type: string
+ patches:
+ description: Patches will be applied as an overlay to the base
+ resource.
+ items:
+ description: |-
+ Patch objects are applied between composite and composed resources. Their
+ behaviour depends on the Type selected. The default Type,
+ FromCompositeFieldPath, copies a value from the composite resource to
+ the composed resource, applying any defined transformers.
+ properties:
+ combine:
+ description: |-
+ Combine is the patch configuration for a CombineFromComposite,
+ CombineFromEnvironment, CombineToComposite or CombineToEnvironment patch.
+ properties:
+ strategy:
+ description: |-
+ Strategy defines the strategy to use to combine the input variable values.
+ Currently only string is supported.
+ enum:
+ - string
+ type: string
+ string:
+ description: |-
+ String declares that input variables should be combined into a single
+ string, using the relevant settings for formatting purposes.
+ properties:
+ fmt:
+ description: |-
+ Format the input using a Go format string. See
+ https://golang.org/pkg/fmt/ for details.
+ type: string
+ required:
+ - fmt
+ type: object
+ variables:
+ description: |-
+ Variables are the list of variables whose values will be retrieved and
+ combined.
+ items:
+ description: |-
+ A CombineVariable defines the source of a value that is combined with
+ others to form and patch an output value. Currently, this only supports
+ retrieving values from a field path.
+ properties:
+ fromFieldPath:
+ description: |-
+ FromFieldPath is the path of the field on the source whose value is
+ to be used as input.
+ type: string
+ required:
+ - fromFieldPath
+ type: object
+ minItems: 1
+ type: array
+ required:
+ - strategy
+ - variables
+ type: object
+ fromFieldPath:
+ description: |-
+ FromFieldPath is the path of the field on the resource whose value is
+ to be used as input. Required when type is FromCompositeFieldPath,
+ FromEnvironmentFieldPath, ToCompositeFieldPath, ToEnvironmentFieldPath.
+ type: string
+ patchSetName:
+ description: PatchSetName to include patches from. Required
+ when type is PatchSet.
+ type: string
+ policy:
+ description: Policy configures the specifics of patching
+ behaviour.
+ properties:
+ fromFieldPath:
+ description: |-
+ FromFieldPath specifies how to patch from a field path. The default is
+ 'Optional', which means the patch will be a no-op if the specified
+ fromFieldPath does not exist. Use 'Required' if the patch should fail if
+ the specified path does not exist.
+ enum:
+ - Optional
+ - Required
+ type: string
+ mergeOptions:
+ description: MergeOptions Specifies merge options
+ on a field path
+ properties:
+ appendSlice:
+ description: Specifies that already existing elements
+ in a merged slice should be preserved
+ type: boolean
+ keepMapValues:
+ description: Specifies that already existing values
+ in a merged map should be preserved
+ type: boolean
+ type: object
+ type: object
+ toFieldPath:
+ description: |-
+ ToFieldPath is the path of the field on the resource whose value will
+ be changed with the result of transforms. Leave empty if you'd like to
+ propagate to the same path as fromFieldPath.
+ type: string
+ transforms:
+ description: |-
+ Transforms are the list of functions that are used as a FIFO pipe for the
+ input to be transformed.
+ items:
+ description: |-
+ Transform is a unit of process whose input is transformed into an output with
+ the supplied configuration.
+ properties:
+ convert:
+ description: Convert is used to cast the input into
+ the given output type.
+ properties:
+ format:
+ description: |-
+ The expected input format.
+
+
+ * `quantity` - parses the input as a K8s [`resource.Quantity`](https://pkg.go.dev/k8s.io/apimachinery/pkg/api/resource#Quantity).
+ Only used during `string -> float64` conversions.
+ * `json` - parses the input as a JSON string.
+ Only used during `string -> object` or `string -> list` conversions.
+
+
+ If this property is null, the default conversion is applied.
+ enum:
+ - none
+ - quantity
+ - json
+ type: string
+ toType:
+ description: ToType is the type of the output
+ of this transform.
+ enum:
+ - string
+ - int
+ - int64
+ - bool
+ - float64
+ - object
+ - array
+ type: string
+ required:
+ - toType
+ type: object
+ map:
+ additionalProperties:
+ x-kubernetes-preserve-unknown-fields: true
+ description: Map uses the input as a key in the
+ given map and returns the value.
+ type: object
+ match:
+ description: Match is a more complex version of
+ Map that matches a list of patterns.
+ properties:
+ fallbackTo:
+ default: Value
+ description: Determines to what value the transform
+ should fallback if no pattern matches.
+ enum:
+ - Value
+ - Input
+ type: string
+ fallbackValue:
+ description: |-
+ The fallback value that should be returned by the transform if now pattern
+ matches.
+ x-kubernetes-preserve-unknown-fields: true
+ patterns:
+ description: |-
+ The patterns that should be tested against the input string.
+ Patterns are tested in order. The value of the first match is used as
+ result of this transform.
+ items:
+ description: |-
+ MatchTransformPattern is a transform that returns the value that matches a
+ pattern.
+ properties:
+ literal:
+ description: |-
+ Literal exactly matches the input string (case sensitive).
+ Is required if `type` is `literal`.
+ type: string
+ regexp:
+ description: |-
+ Regexp to match against the input string.
+ Is required if `type` is `regexp`.
+ type: string
+ result:
+ description: The value that is used as
+ result of the transform if the pattern
+ matches.
+ x-kubernetes-preserve-unknown-fields: true
+ type:
+ default: literal
+ description: |-
+ Type specifies how the pattern matches the input.
+
+
+ * `literal` - the pattern value has to exactly match (case sensitive) the
+ input string. This is the default.
+
+
+ * `regexp` - the pattern treated as a regular expression against
+ which the input string is tested. Crossplane will throw an error if the
+ key is not a valid regexp.
+ enum:
+ - literal
+ - regexp
+ type: string
+ required:
+ - result
+ - type
+ type: object
+ type: array
+ type: object
+ math:
+ description: |-
+ Math is used to transform the input via mathematical operations such as
+ multiplication.
+ properties:
+ clampMax:
+ description: ClampMax makes sure that the value
+ is not bigger than the given value.
+ format: int64
+ type: integer
+ clampMin:
+ description: ClampMin makes sure that the value
+ is not smaller than the given value.
+ format: int64
+ type: integer
+ multiply:
+ description: Multiply the value.
+ format: int64
+ type: integer
+ type:
+ default: Multiply
+ description: Type of the math transform to be
+ run.
+ enum:
+ - Multiply
+ - ClampMin
+ - ClampMax
+ type: string
+ type: object
+ string:
+ description: |-
+ String is used to transform the input into a string or a different kind
+ of string. Note that the input does not necessarily need to be a string.
+ properties:
+ convert:
+ description: |-
+ Optional conversion method to be specified.
+ `ToUpper` and `ToLower` change the letter case of the input string.
+ `ToBase64` and `FromBase64` perform a base64 conversion based on the input string.
+ `ToJson` converts any input value into its raw JSON representation.
+ `ToSha1`, `ToSha256` and `ToSha512` generate a hash value based on the input
+ converted to JSON.
+ `ToAdler32` generate a addler32 hash based on the input string.
+ enum:
+ - ToUpper
+ - ToLower
+ - ToBase64
+ - FromBase64
+ - ToJson
+ - ToSha1
+ - ToSha256
+ - ToSha512
+ - ToAdler32
+ type: string
+ fmt:
+ description: |-
+ Format the input using a Go format string. See
+ https://golang.org/pkg/fmt/ for details.
+ type: string
+ join:
+ description: Join defines parameters to join
+ a slice of values to a string.
+ properties:
+ separator:
+ description: |-
+ Separator defines the character that should separate the values from each
+ other in the joined string.
+ type: string
+ required:
+ - separator
+ type: object
+ regexp:
+ description: Extract a match from the input
+ using a regular expression.
+ properties:
+ group:
+ description: Group number to match. 0 (the
+ default) matches the entire expression.
+ type: integer
+ match:
+ description: |-
+ Match string. May optionally include submatches, aka capture groups.
+ See https://pkg.go.dev/regexp/ for details.
+ type: string
+ required:
+ - match
+ type: object
+ trim:
+ description: Trim the prefix or suffix from
+ the input
+ type: string
+ type:
+ default: Format
+ description: Type of the string transform to
+ be run.
+ enum:
+ - Format
+ - Convert
+ - TrimPrefix
+ - TrimSuffix
+ - Regexp
+ - Join
+ type: string
+ type: object
+ type:
+ description: Type of the transform to be run.
+ enum:
+ - map
+ - match
+ - math
+ - string
+ - convert
+ type: string
+ required:
+ - type
+ type: object
+ type: array
+ type:
+ default: FromCompositeFieldPath
+ description: |-
+ Type sets the patching behaviour to be used. Each patch type may require
+ its own fields to be set on the Patch object.
+ enum:
+ - FromCompositeFieldPath
+ - FromEnvironmentFieldPath
+ - PatchSet
+ - ToCompositeFieldPath
+ - ToEnvironmentFieldPath
+ - CombineFromEnvironment
+ - CombineFromComposite
+ - CombineToComposite
+ - CombineToEnvironment
+ type: string
+ type: object
+ type: array
+ required:
+ - name
+ - patches
+ type: object
+ type: array
+ pipeline:
+ description: |-
+ Pipeline is a list of composition function steps that will be used when a
+ composite resource referring to this composition is created. One of
+ resources and pipeline must be specified - you cannot specify both.
+
+
+ The Pipeline is only used by the "Pipeline" mode of Composition. It is
+ ignored by other modes.
+
+
+ THIS IS A BETA FIELD. It is not honored if the relevant Crossplane
+ feature flag is disabled.
+ items:
+ description: A PipelineStep in a Composition Function pipeline.
+ properties:
+ functionRef:
+ description: |-
+ FunctionRef is a reference to the Composition Function this step should
+ execute.
+ properties:
+ name:
+ description: Name of the referenced Function.
+ type: string
+ required:
+ - name
+ type: object
+ input:
+ description: |-
+ Input is an optional, arbitrary Kubernetes resource (i.e. a resource
+ with an apiVersion and kind) that will be passed to the Composition
+ Function as the 'input' of its RunFunctionRequest.
+ type: object
+ x-kubernetes-embedded-resource: true
+ x-kubernetes-preserve-unknown-fields: true
+ step:
+ description: Step name. Must be unique within its Pipeline.
+ type: string
+ required:
+ - functionRef
+ - step
+ type: object
+ type: array
+ publishConnectionDetailsWithStoreConfigRef:
+ default:
+ name: default
+ description: |-
+ PublishConnectionDetailsWithStoreConfig specifies the secret store config
+ with which the connection details of composite resources dynamically
+ provisioned using this composition will be published.
+
+
+ THIS IS AN ALPHA FIELD. Do not use it in production. It is not honored
+ unless the relevant Crossplane feature flag is enabled, and may be
+ changed or removed without notice.
+ properties:
+ name:
+ description: Name of the referenced StoreConfig.
+ type: string
+ required:
+ - name
+ type: object
+ resources:
+ description: |-
+ Resources is a list of resource templates that will be used when a
+ composite resource referring to this composition is created.
+
+
+ Resources are only used by the "Resources" mode of Composition. They are
+ ignored by other modes.
+ items:
+ description: |-
+ ComposedTemplate is used to provide information about how the composed resource
+ should be processed.
+ properties:
+ base:
+ description: Base is the target resource that the patches will
+ be applied on.
+ type: object
+ x-kubernetes-embedded-resource: true
+ x-kubernetes-preserve-unknown-fields: true
+ connectionDetails:
+ description: |-
+ ConnectionDetails lists the propagation secret keys from this target
+ resource to the composition instance connection secret.
+ items:
+ description: |-
+ ConnectionDetail includes the information about the propagation of the connection
+ information from one secret to another.
+ properties:
+ fromConnectionSecretKey:
+ description: |-
+ FromConnectionSecretKey is the key that will be used to fetch the value
+ from the composed resource's connection secret.
+ type: string
+ fromFieldPath:
+ description: |-
+ FromFieldPath is the path of the field on the composed resource whose
+ value to be used as input. Name must be specified if the type is
+ FromFieldPath.
+ type: string
+ name:
+ description: |-
+ Name of the connection secret key that will be propagated to the
+ connection secret of the composition instance. Leave empty if you'd like
+ to use the same key name.
+ type: string
+ type:
+ description: |-
+ Type sets the connection detail fetching behaviour to be used. Each
+ connection detail type may require its own fields to be set on the
+ ConnectionDetail object. If the type is omitted Crossplane will attempt
+ to infer it based on which other fields were specified. If multiple
+ fields are specified the order of precedence is:
+ 1. FromValue
+ 2. FromConnectionSecretKey
+ 3. FromFieldPath
+ enum:
+ - FromConnectionSecretKey
+ - FromFieldPath
+ - FromValue
+ type: string
+ value:
+ description: |-
+ Value that will be propagated to the connection secret of the composite
+ resource. May be set to inject a fixed, non-sensitive connection secret
+ value, for example a well-known port.
+ type: string
+ type: object
+ type: array
+ name:
+ description: |-
+ A Name uniquely identifies this entry within its Composition's resources
+ array. Names are optional but *strongly* recommended. When all entries in
+ the resources array are named entries may added, deleted, and reordered
+ as long as their names do not change. When entries are not named the
+ length and order of the resources array should be treated as immutable.
+ Either all or no entries must be named.
+ type: string
+ patches:
+ description: Patches will be applied as overlay to the base
+ resource.
+ items:
+ description: |-
+ Patch objects are applied between composite and composed resources. Their
+ behaviour depends on the Type selected. The default Type,
+ FromCompositeFieldPath, copies a value from the composite resource to
+ the composed resource, applying any defined transformers.
+ properties:
+ combine:
+ description: |-
+ Combine is the patch configuration for a CombineFromComposite,
+ CombineFromEnvironment, CombineToComposite or CombineToEnvironment patch.
+ properties:
+ strategy:
+ description: |-
+ Strategy defines the strategy to use to combine the input variable values.
+ Currently only string is supported.
+ enum:
+ - string
+ type: string
+ string:
+ description: |-
+ String declares that input variables should be combined into a single
+ string, using the relevant settings for formatting purposes.
+ properties:
+ fmt:
+ description: |-
+ Format the input using a Go format string. See
+ https://golang.org/pkg/fmt/ for details.
+ type: string
+ required:
+ - fmt
+ type: object
+ variables:
+ description: |-
+ Variables are the list of variables whose values will be retrieved and
+ combined.
+ items:
+ description: |-
+ A CombineVariable defines the source of a value that is combined with
+ others to form and patch an output value. Currently, this only supports
+ retrieving values from a field path.
+ properties:
+ fromFieldPath:
+ description: |-
+ FromFieldPath is the path of the field on the source whose value is
+ to be used as input.
+ type: string
+ required:
+ - fromFieldPath
+ type: object
+ minItems: 1
+ type: array
+ required:
+ - strategy
+ - variables
+ type: object
+ fromFieldPath:
+ description: |-
+ FromFieldPath is the path of the field on the resource whose value is
+ to be used as input. Required when type is FromCompositeFieldPath,
+ FromEnvironmentFieldPath, ToCompositeFieldPath, ToEnvironmentFieldPath.
+ type: string
+ patchSetName:
+ description: PatchSetName to include patches from. Required
+ when type is PatchSet.
+ type: string
+ policy:
+ description: Policy configures the specifics of patching
+ behaviour.
+ properties:
+ fromFieldPath:
+ description: |-
+ FromFieldPath specifies how to patch from a field path. The default is
+ 'Optional', which means the patch will be a no-op if the specified
+ fromFieldPath does not exist. Use 'Required' if the patch should fail if
+ the specified path does not exist.
+ enum:
+ - Optional
+ - Required
+ type: string
+ mergeOptions:
+ description: MergeOptions Specifies merge options
+ on a field path
+ properties:
+ appendSlice:
+ description: Specifies that already existing elements
+ in a merged slice should be preserved
+ type: boolean
+ keepMapValues:
+ description: Specifies that already existing values
+ in a merged map should be preserved
+ type: boolean
+ type: object
+ type: object
+ toFieldPath:
+ description: |-
+ ToFieldPath is the path of the field on the resource whose value will
+ be changed with the result of transforms. Leave empty if you'd like to
+ propagate to the same path as fromFieldPath.
+ type: string
+ transforms:
+ description: |-
+ Transforms are the list of functions that are used as a FIFO pipe for the
+ input to be transformed.
+ items:
+ description: |-
+ Transform is a unit of process whose input is transformed into an output with
+ the supplied configuration.
+ properties:
+ convert:
+ description: Convert is used to cast the input into
+ the given output type.
+ properties:
+ format:
+ description: |-
+ The expected input format.
+
+
+ * `quantity` - parses the input as a K8s [`resource.Quantity`](https://pkg.go.dev/k8s.io/apimachinery/pkg/api/resource#Quantity).
+ Only used during `string -> float64` conversions.
+ * `json` - parses the input as a JSON string.
+ Only used during `string -> object` or `string -> list` conversions.
+
+
+ If this property is null, the default conversion is applied.
+ enum:
+ - none
+ - quantity
+ - json
+ type: string
+ toType:
+ description: ToType is the type of the output
+ of this transform.
+ enum:
+ - string
+ - int
+ - int64
+ - bool
+ - float64
+ - object
+ - array
+ type: string
+ required:
+ - toType
+ type: object
+ map:
+ additionalProperties:
+ x-kubernetes-preserve-unknown-fields: true
+ description: Map uses the input as a key in the
+ given map and returns the value.
+ type: object
+ match:
+ description: Match is a more complex version of
+ Map that matches a list of patterns.
+ properties:
+ fallbackTo:
+ default: Value
+ description: Determines to what value the transform
+ should fallback if no pattern matches.
+ enum:
+ - Value
+ - Input
+ type: string
+ fallbackValue:
+ description: |-
+ The fallback value that should be returned by the transform if now pattern
+ matches.
+ x-kubernetes-preserve-unknown-fields: true
+ patterns:
+ description: |-
+ The patterns that should be tested against the input string.
+ Patterns are tested in order. The value of the first match is used as
+ result of this transform.
+ items:
+ description: |-
+ MatchTransformPattern is a transform that returns the value that matches a
+ pattern.
+ properties:
+ literal:
+ description: |-
+ Literal exactly matches the input string (case sensitive).
+ Is required if `type` is `literal`.
+ type: string
+ regexp:
+ description: |-
+ Regexp to match against the input string.
+ Is required if `type` is `regexp`.
+ type: string
+ result:
+ description: The value that is used as
+ result of the transform if the pattern
+ matches.
+ x-kubernetes-preserve-unknown-fields: true
+ type:
+ default: literal
+ description: |-
+ Type specifies how the pattern matches the input.
+
+
+ * `literal` - the pattern value has to exactly match (case sensitive) the
+ input string. This is the default.
+
+
+ * `regexp` - the pattern treated as a regular expression against
+ which the input string is tested. Crossplane will throw an error if the
+ key is not a valid regexp.
+ enum:
+ - literal
+ - regexp
+ type: string
+ required:
+ - result
+ - type
+ type: object
+ type: array
+ type: object
+ math:
+ description: |-
+ Math is used to transform the input via mathematical operations such as
+ multiplication.
+ properties:
+ clampMax:
+ description: ClampMax makes sure that the value
+ is not bigger than the given value.
+ format: int64
+ type: integer
+ clampMin:
+ description: ClampMin makes sure that the value
+ is not smaller than the given value.
+ format: int64
+ type: integer
+ multiply:
+ description: Multiply the value.
+ format: int64
+ type: integer
+ type:
+ default: Multiply
+ description: Type of the math transform to be
+ run.
+ enum:
+ - Multiply
+ - ClampMin
+ - ClampMax
+ type: string
+ type: object
+ string:
+ description: |-
+ String is used to transform the input into a string or a different kind
+ of string. Note that the input does not necessarily need to be a string.
+ properties:
+ convert:
+ description: |-
+ Optional conversion method to be specified.
+ `ToUpper` and `ToLower` change the letter case of the input string.
+ `ToBase64` and `FromBase64` perform a base64 conversion based on the input string.
+ `ToJson` converts any input value into its raw JSON representation.
+ `ToSha1`, `ToSha256` and `ToSha512` generate a hash value based on the input
+ converted to JSON.
+ `ToAdler32` generate a addler32 hash based on the input string.
+ enum:
+ - ToUpper
+ - ToLower
+ - ToBase64
+ - FromBase64
+ - ToJson
+ - ToSha1
+ - ToSha256
+ - ToSha512
+ - ToAdler32
+ type: string
+ fmt:
+ description: |-
+ Format the input using a Go format string. See
+ https://golang.org/pkg/fmt/ for details.
+ type: string
+ join:
+ description: Join defines parameters to join
+ a slice of values to a string.
+ properties:
+ separator:
+ description: |-
+ Separator defines the character that should separate the values from each
+ other in the joined string.
+ type: string
+ required:
+ - separator
+ type: object
+ regexp:
+ description: Extract a match from the input
+ using a regular expression.
+ properties:
+ group:
+ description: Group number to match. 0 (the
+ default) matches the entire expression.
+ type: integer
+ match:
+ description: |-
+ Match string. May optionally include submatches, aka capture groups.
+ See https://pkg.go.dev/regexp/ for details.
+ type: string
+ required:
+ - match
+ type: object
+ trim:
+ description: Trim the prefix or suffix from
+ the input
+ type: string
+ type:
+ default: Format
+ description: Type of the string transform to
+ be run.
+ enum:
+ - Format
+ - Convert
+ - TrimPrefix
+ - TrimSuffix
+ - Regexp
+ - Join
+ type: string
+ type: object
+ type:
+ description: Type of the transform to be run.
+ enum:
+ - map
+ - match
+ - math
+ - string
+ - convert
+ type: string
+ required:
+ - type
+ type: object
+ type: array
+ type:
+ default: FromCompositeFieldPath
+ description: |-
+ Type sets the patching behaviour to be used. Each patch type may require
+ its own fields to be set on the Patch object.
+ enum:
+ - FromCompositeFieldPath
+ - FromEnvironmentFieldPath
+ - PatchSet
+ - ToCompositeFieldPath
+ - ToEnvironmentFieldPath
+ - CombineFromEnvironment
+ - CombineFromComposite
+ - CombineToComposite
+ - CombineToEnvironment
+ type: string
+ type: object
+ type: array
+ readinessChecks:
+ default:
+ - matchCondition:
+ status: "True"
+ type: Ready
+ type: MatchCondition
+ description: |-
+ ReadinessChecks allows users to define custom readiness checks. All checks
+ have to return true in order for resource to be considered ready. The
+ default readiness check is to have the "Ready" condition to be "True".
+ items:
+ description: |-
+ ReadinessCheck is used to indicate how to tell whether a resource is ready
+ for consumption
+ properties:
+ fieldPath:
+ description: FieldPath shows the path of the field whose
+ value will be used.
+ type: string
+ matchCondition:
+ description: MatchCondition specifies the condition you'd
+ like to match if you're using "MatchCondition" type.
+ properties:
+ status:
+ default: "True"
+ description: Status is the status of the condition
+ you'd like to match.
+ type: string
+ type:
+ default: Ready
+ description: Type indicates the type of condition
+ you'd like to use.
+ type: string
+ required:
+ - status
+ - type
+ type: object
+ matchInteger:
+ description: MatchInt is the value you'd like to match
+ if you're using "MatchInt" type.
+ format: int64
+ type: integer
+ matchString:
+ description: MatchString is the value you'd like to match
+ if you're using "MatchString" type.
+ type: string
+ type:
+ description: Type indicates the type of probe you'd like
+ to use.
+ enum:
+ - MatchString
+ - MatchInteger
+ - NonEmpty
+ - MatchCondition
+ - MatchTrue
+ - MatchFalse
+ - None
+ type: string
+ required:
+ - type
+ type: object
+ type: array
+ required:
+ - base
+ type: object
+ type: array
+ revision:
+ description: Revision number. Newer revisions have larger numbers.
+ format: int64
+ type: integer
+ writeConnectionSecretsToNamespace:
+ description: |-
+ WriteConnectionSecretsToNamespace specifies the namespace in which the
+ connection secrets of composite resource dynamically provisioned using
+ this composition will be created.
+ This field is planned to be replaced in a future release in favor of
+ PublishConnectionDetailsWithStoreConfigRef. Currently, both could be
+ set independently and connection details would be published to both
+ without affecting each other as long as related fields at MR level
+ specified.
+ type: string
+ required:
+ - compositeTypeRef
+ - revision
+ type: object
+ status:
+ description: |-
+ CompositionRevisionStatus shows the observed state of the composition
+ revision.
+ 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
+ x-kubernetes-list-map-keys:
+ - type
+ x-kubernetes-list-type: map
+ type: object
+ type: object
+ served: true
+ storage: true
+ subresources:
+ status: {}
+ - additionalPrinterColumns:
+ - jsonPath: .spec.revision
+ name: REVISION
+ type: string
+ - jsonPath: .spec.compositeTypeRef.kind
+ name: XR-KIND
+ type: string
+ - jsonPath: .spec.compositeTypeRef.apiVersion
+ name: XR-APIVERSION
+ type: string
+ - jsonPath: .metadata.creationTimestamp
+ name: AGE
+ type: date
+ name: v1beta1
+ schema:
+ openAPIV3Schema:
+ description: |-
+ A CompositionRevision represents a revision in time of a Composition.
+ Revisions are created by Crossplane; they should be treated as immutable.
+ 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: |-
+ CompositionRevisionSpec specifies the desired state of the composition
+ revision.
+ properties:
+ compositeTypeRef:
+ description: |-
+ CompositeTypeRef specifies the type of composite resource that this
+ composition is compatible with.
+ properties:
+ apiVersion:
+ description: APIVersion of the type.
+ type: string
+ kind:
+ description: Kind of the type.
+ type: string
+ required:
+ - apiVersion
+ - kind
+ type: object
+ environment:
+ description: |-
+ Environment configures the environment in which resources are rendered.
+
+
+ THIS IS AN ALPHA FIELD. Do not use it in production. It is not honored
+ unless the relevant Crossplane feature flag is enabled, and may be
+ changed or removed without notice.
+ properties:
+ defaultData:
+ additionalProperties:
+ x-kubernetes-preserve-unknown-fields: true
+ description: |-
+ DefaultData statically defines the initial state of the environment.
+ It has the same schema-less structure as the data field in
+ environment configs.
+ It is overwritten by the selected environment configs.
+ type: object
+ environmentConfigs:
+ description: |-
+ EnvironmentConfigs selects a list of `EnvironmentConfig`s. The resolved
+ resources are stored in the composite resource at
+ `spec.environmentConfigRefs` and is only updated if it is null.
+
+
+ The list of references is used to compute an in-memory environment at
+ compose time. The data of all object is merged in the order they are
+ listed, meaning the values of EnvironmentConfigs with a larger index take
+ priority over ones with smaller indices.
+
+
+ The computed environment can be accessed in a composition using
+ `FromEnvironmentFieldPath` and `CombineFromEnvironment` patches.
+ items:
+ description: EnvironmentSource selects a EnvironmentConfig resource.
+ properties:
+ ref:
+ description: |-
+ Ref is a named reference to a single EnvironmentConfig.
+ Either Ref or Selector is required.
+ properties:
+ name:
+ description: The name of the object.
+ type: string
+ required:
+ - name
+ type: object
+ selector:
+ description: Selector selects EnvironmentConfig(s) via labels.
+ properties:
+ matchLabels:
+ description: MatchLabels ensures an object with matching
+ labels is selected.
+ items:
+ description: |-
+ An EnvironmentSourceSelectorLabelMatcher acts like a k8s label selector but
+ can draw the label value from a different path.
+ properties:
+ fromFieldPathPolicy:
+ default: Required
+ description: |-
+ FromFieldPathPolicy specifies the policy for the valueFromFieldPath.
+ The default is Required, meaning that an error will be returned if the
+ field is not found in the composite resource.
+ Optional means that if the field is not found in the composite resource,
+ that label pair will just be skipped. N.B. other specified label
+ matchers will still be used to retrieve the desired
+ environment config, if any.
+ enum:
+ - Optional
+ - Required
+ type: string
+ key:
+ description: Key of the label to match.
+ type: string
+ type:
+ default: FromCompositeFieldPath
+ description: Type specifies where the value for
+ a label comes from.
+ enum:
+ - FromCompositeFieldPath
+ - Value
+ type: string
+ value:
+ description: Value specifies a literal label value.
+ type: string
+ valueFromFieldPath:
+ description: ValueFromFieldPath specifies the
+ field path to look for the label value.
+ type: string
+ required:
+ - key
+ type: object
+ type: array
+ maxMatch:
+ description: MaxMatch specifies the number of extracted
+ EnvironmentConfigs in Multiple mode, extracts all
+ if nil.
+ format: int64
+ type: integer
+ minMatch:
+ description: MinMatch specifies the required minimum
+ of extracted EnvironmentConfigs in Multiple mode.
+ format: int64
+ type: integer
+ mode:
+ default: Single
+ description: 'Mode specifies retrieval strategy: "Single"
+ or "Multiple".'
+ enum:
+ - Single
+ - Multiple
+ type: string
+ sortByFieldPath:
+ default: metadata.name
+ description: SortByFieldPath is the path to the field
+ based on which list of EnvironmentConfigs is alphabetically
+ sorted.
+ type: string
+ type: object
+ type:
+ default: Reference
+ description: |-
+ Type specifies the way the EnvironmentConfig is selected.
+ Default is `Reference`
+ enum:
+ - Reference
+ - Selector
+ type: string
+ type: object
+ type: array
+ patches:
+ description: |-
+ Patches is a list of environment patches that are executed before a
+ composition's resources are composed.
+ items:
+ description: EnvironmentPatch is a patch for a Composition environment.
+ properties:
+ combine:
+ description: |-
+ Combine is the patch configuration for a CombineFromComposite or
+ CombineToComposite patch.
+ properties:
+ strategy:
+ description: |-
+ Strategy defines the strategy to use to combine the input variable values.
+ Currently only string is supported.
+ enum:
+ - string
+ type: string
+ string:
+ description: |-
+ String declares that input variables should be combined into a single
+ string, using the relevant settings for formatting purposes.
+ properties:
+ fmt:
+ description: |-
+ Format the input using a Go format string. See
+ https://golang.org/pkg/fmt/ for details.
+ type: string
+ required:
+ - fmt
+ type: object
+ variables:
+ description: |-
+ Variables are the list of variables whose values will be retrieved and
+ combined.
+ items:
+ description: |-
+ A CombineVariable defines the source of a value that is combined with
+ others to form and patch an output value. Currently, this only supports
+ retrieving values from a field path.
+ properties:
+ fromFieldPath:
+ description: |-
+ FromFieldPath is the path of the field on the source whose value is
+ to be used as input.
+ type: string
+ required:
+ - fromFieldPath
+ type: object
+ minItems: 1
+ type: array
+ required:
+ - strategy
+ - variables
+ type: object
+ fromFieldPath:
+ description: |-
+ FromFieldPath is the path of the field on the resource whose value is
+ to be used as input. Required when type is FromCompositeFieldPath or
+ ToCompositeFieldPath.
+ type: string
+ policy:
+ description: Policy configures the specifics of patching
+ behaviour.
+ properties:
+ fromFieldPath:
+ description: |-
+ FromFieldPath specifies how to patch from a field path. The default is
+ 'Optional', which means the patch will be a no-op if the specified
+ fromFieldPath does not exist. Use 'Required' if the patch should fail if
+ the specified path does not exist.
+ enum:
+ - Optional
+ - Required
+ type: string
+ mergeOptions:
+ description: MergeOptions Specifies merge options on
+ a field path
+ properties:
+ appendSlice:
+ description: Specifies that already existing elements
+ in a merged slice should be preserved
+ type: boolean
+ keepMapValues:
+ description: Specifies that already existing values
+ in a merged map should be preserved
+ type: boolean
+ type: object
+ type: object
+ toFieldPath:
+ description: |-
+ ToFieldPath is the path of the field on the resource whose value will
+ be changed with the result of transforms. Leave empty if you'd like to
+ propagate to the same path as fromFieldPath.
+ type: string
+ transforms:
+ description: |-
+ Transforms are the list of functions that are used as a FIFO pipe for the
+ input to be transformed.
+ items:
+ description: |-
+ Transform is a unit of process whose input is transformed into an output with
+ the supplied configuration.
+ properties:
+ convert:
+ description: Convert is used to cast the input into
+ the given output type.
+ properties:
+ format:
+ description: |-
+ The expected input format.
+
+
+ * `quantity` - parses the input as a K8s [`resource.Quantity`](https://pkg.go.dev/k8s.io/apimachinery/pkg/api/resource#Quantity).
+ Only used during `string -> float64` conversions.
+ * `json` - parses the input as a JSON string.
+ Only used during `string -> object` or `string -> list` conversions.
+
+
+ If this property is null, the default conversion is applied.
+ enum:
+ - none
+ - quantity
+ - json
+ type: string
+ toType:
+ description: ToType is the type of the output
+ of this transform.
+ enum:
+ - string
+ - int
+ - int64
+ - bool
+ - float64
+ - object
+ - array
+ type: string
+ required:
+ - toType
+ type: object
+ map:
+ additionalProperties:
+ x-kubernetes-preserve-unknown-fields: true
+ description: Map uses the input as a key in the given
+ map and returns the value.
+ type: object
+ match:
+ description: Match is a more complex version of Map
+ that matches a list of patterns.
+ properties:
+ fallbackTo:
+ default: Value
+ description: Determines to what value the transform
+ should fallback if no pattern matches.
+ enum:
+ - Value
+ - Input
+ type: string
+ fallbackValue:
+ description: |-
+ The fallback value that should be returned by the transform if now pattern
+ matches.
+ x-kubernetes-preserve-unknown-fields: true
+ patterns:
+ description: |-
+ The patterns that should be tested against the input string.
+ Patterns are tested in order. The value of the first match is used as
+ result of this transform.
+ items:
+ description: |-
+ MatchTransformPattern is a transform that returns the value that matches a
+ pattern.
+ properties:
+ literal:
+ description: |-
+ Literal exactly matches the input string (case sensitive).
+ Is required if `type` is `literal`.
+ type: string
+ regexp:
+ description: |-
+ Regexp to match against the input string.
+ Is required if `type` is `regexp`.
+ type: string
+ result:
+ description: The value that is used as result
+ of the transform if the pattern matches.
+ x-kubernetes-preserve-unknown-fields: true
+ type:
+ default: literal
+ description: |-
+ Type specifies how the pattern matches the input.
+
+
+ * `literal` - the pattern value has to exactly match (case sensitive) the
+ input string. This is the default.
+
+
+ * `regexp` - the pattern treated as a regular expression against
+ which the input string is tested. Crossplane will throw an error if the
+ key is not a valid regexp.
+ enum:
+ - literal
+ - regexp
+ type: string
+ required:
+ - result
+ - type
+ type: object
+ type: array
+ type: object
+ math:
+ description: |-
+ Math is used to transform the input via mathematical operations such as
+ multiplication.
+ properties:
+ clampMax:
+ description: ClampMax makes sure that the value
+ is not bigger than the given value.
+ format: int64
+ type: integer
+ clampMin:
+ description: ClampMin makes sure that the value
+ is not smaller than the given value.
+ format: int64
+ type: integer
+ multiply:
+ description: Multiply the value.
+ format: int64
+ type: integer
+ type:
+ default: Multiply
+ description: Type of the math transform to be
+ run.
+ enum:
+ - Multiply
+ - ClampMin
+ - ClampMax
+ type: string
+ type: object
+ string:
+ description: |-
+ String is used to transform the input into a string or a different kind
+ of string. Note that the input does not necessarily need to be a string.
+ properties:
+ convert:
+ description: |-
+ Optional conversion method to be specified.
+ `ToUpper` and `ToLower` change the letter case of the input string.
+ `ToBase64` and `FromBase64` perform a base64 conversion based on the input string.
+ `ToJson` converts any input value into its raw JSON representation.
+ `ToSha1`, `ToSha256` and `ToSha512` generate a hash value based on the input
+ converted to JSON.
+ `ToAdler32` generate a addler32 hash based on the input string.
+ enum:
+ - ToUpper
+ - ToLower
+ - ToBase64
+ - FromBase64
+ - ToJson
+ - ToSha1
+ - ToSha256
+ - ToSha512
+ - ToAdler32
+ type: string
+ fmt:
+ description: |-
+ Format the input using a Go format string. See
+ https://golang.org/pkg/fmt/ for details.
+ type: string
+ join:
+ description: Join defines parameters to join a
+ slice of values to a string.
+ properties:
+ separator:
+ description: |-
+ Separator defines the character that should separate the values from each
+ other in the joined string.
+ type: string
+ required:
+ - separator
+ type: object
+ regexp:
+ description: Extract a match from the input using
+ a regular expression.
+ properties:
+ group:
+ description: Group number to match. 0 (the
+ default) matches the entire expression.
+ type: integer
+ match:
+ description: |-
+ Match string. May optionally include submatches, aka capture groups.
+ See https://pkg.go.dev/regexp/ for details.
+ type: string
+ required:
+ - match
+ type: object
+ trim:
+ description: Trim the prefix or suffix from the
+ input
+ type: string
+ type:
+ default: Format
+ description: Type of the string transform to be
+ run.
+ enum:
+ - Format
+ - Convert
+ - TrimPrefix
+ - TrimSuffix
+ - Regexp
+ - Join
+ type: string
+ type: object
+ type:
+ description: Type of the transform to be run.
+ enum:
+ - map
+ - match
+ - math
+ - string
+ - convert
+ type: string
+ required:
+ - type
+ type: object
+ type: array
+ type:
+ default: FromCompositeFieldPath
+ description: |-
+ Type sets the patching behaviour to be used. Each patch type may require
+ its own fields to be set on the Patch object.
+ enum:
+ - FromCompositeFieldPath
+ - ToCompositeFieldPath
+ - CombineFromComposite
+ - CombineToComposite
+ type: string
+ type: object
+ type: array
+ policy:
+ description: |-
+ Policy represents the Resolve and Resolution policies which apply to
+ all EnvironmentSourceReferences in EnvironmentConfigs list.
+ properties:
+ resolution:
+ default: Required
+ description: |-
+ Resolution specifies whether resolution of this reference is required.
+ The default is 'Required', which means the reconcile will fail if the
+ reference cannot be resolved. 'Optional' means this reference will be
+ a no-op if it cannot be resolved.
+ enum:
+ - Required
+ - Optional
+ type: string
+ resolve:
+ description: |-
+ Resolve specifies when this reference should be resolved. The default
+ is 'IfNotPresent', which will attempt to resolve the reference only when
+ the corresponding field is not present. Use 'Always' to resolve the
+ reference on every reconcile.
+ enum:
+ - Always
+ - IfNotPresent
+ type: string
+ type: object
+ type: object
+ mode:
+ default: Resources
+ description: |-
+ Mode controls what type or "mode" of Composition will be used.
+
+
+ "Resources" (the default) indicates that a Composition uses what is
+ commonly referred to as "Patch & Transform" or P&T composition. This mode
+ of Composition uses an array of resources, each a template for a composed
+ resource.
+
+
+ "Pipeline" indicates that a Composition specifies a pipeline
+ of Composition Functions, each of which is responsible for producing
+ composed resources that Crossplane should create or update. THE PIPELINE
+ MODE IS A BETA FEATURE. It is not honored if the relevant Crossplane
+ feature flag is disabled.
+ enum:
+ - Resources
+ - Pipeline
+ type: string
+ patchSets:
+ description: |-
+ PatchSets define a named set of patches that may be included by any
+ resource in this Composition. PatchSets cannot themselves refer to other
+ PatchSets.
+
+
+ PatchSets are only used by the "Resources" mode of Composition. They
+ are ignored by other modes.
+ items:
+ description: |-
+ A PatchSet is a set of patches that can be reused from all resources within
+ a Composition.
+ properties:
+ name:
+ description: Name of this PatchSet.
+ type: string
+ patches:
+ description: Patches will be applied as an overlay to the base
+ resource.
+ items:
+ description: |-
+ Patch objects are applied between composite and composed resources. Their
+ behaviour depends on the Type selected. The default Type,
+ FromCompositeFieldPath, copies a value from the composite resource to
+ the composed resource, applying any defined transformers.
+ properties:
+ combine:
+ description: |-
+ Combine is the patch configuration for a CombineFromComposite,
+ CombineFromEnvironment, CombineToComposite or CombineToEnvironment patch.
+ properties:
+ strategy:
+ description: |-
+ Strategy defines the strategy to use to combine the input variable values.
+ Currently only string is supported.
+ enum:
+ - string
+ type: string
+ string:
+ description: |-
+ String declares that input variables should be combined into a single
+ string, using the relevant settings for formatting purposes.
+ properties:
+ fmt:
+ description: |-
+ Format the input using a Go format string. See
+ https://golang.org/pkg/fmt/ for details.
+ type: string
+ required:
+ - fmt
+ type: object
+ variables:
+ description: |-
+ Variables are the list of variables whose values will be retrieved and
+ combined.
+ items:
+ description: |-
+ A CombineVariable defines the source of a value that is combined with
+ others to form and patch an output value. Currently, this only supports
+ retrieving values from a field path.
+ properties:
+ fromFieldPath:
+ description: |-
+ FromFieldPath is the path of the field on the source whose value is
+ to be used as input.
+ type: string
+ required:
+ - fromFieldPath
+ type: object
+ minItems: 1
+ type: array
+ required:
+ - strategy
+ - variables
+ type: object
+ fromFieldPath:
+ description: |-
+ FromFieldPath is the path of the field on the resource whose value is
+ to be used as input. Required when type is FromCompositeFieldPath,
+ FromEnvironmentFieldPath, ToCompositeFieldPath, ToEnvironmentFieldPath.
+ type: string
+ patchSetName:
+ description: PatchSetName to include patches from. Required
+ when type is PatchSet.
+ type: string
+ policy:
+ description: Policy configures the specifics of patching
+ behaviour.
+ properties:
+ fromFieldPath:
+ description: |-
+ FromFieldPath specifies how to patch from a field path. The default is
+ 'Optional', which means the patch will be a no-op if the specified
+ fromFieldPath does not exist. Use 'Required' if the patch should fail if
+ the specified path does not exist.
+ enum:
+ - Optional
+ - Required
+ type: string
+ mergeOptions:
+ description: MergeOptions Specifies merge options
+ on a field path
+ properties:
+ appendSlice:
+ description: Specifies that already existing elements
+ in a merged slice should be preserved
+ type: boolean
+ keepMapValues:
+ description: Specifies that already existing values
+ in a merged map should be preserved
+ type: boolean
+ type: object
+ type: object
+ toFieldPath:
+ description: |-
+ ToFieldPath is the path of the field on the resource whose value will
+ be changed with the result of transforms. Leave empty if you'd like to
+ propagate to the same path as fromFieldPath.
+ type: string
+ transforms:
+ description: |-
+ Transforms are the list of functions that are used as a FIFO pipe for the
+ input to be transformed.
+ items:
+ description: |-
+ Transform is a unit of process whose input is transformed into an output with
+ the supplied configuration.
+ properties:
+ convert:
+ description: Convert is used to cast the input into
+ the given output type.
+ properties:
+ format:
+ description: |-
+ The expected input format.
+
+
+ * `quantity` - parses the input as a K8s [`resource.Quantity`](https://pkg.go.dev/k8s.io/apimachinery/pkg/api/resource#Quantity).
+ Only used during `string -> float64` conversions.
+ * `json` - parses the input as a JSON string.
+ Only used during `string -> object` or `string -> list` conversions.
+
+
+ If this property is null, the default conversion is applied.
+ enum:
+ - none
+ - quantity
+ - json
+ type: string
+ toType:
+ description: ToType is the type of the output
+ of this transform.
+ enum:
+ - string
+ - int
+ - int64
+ - bool
+ - float64
+ - object
+ - array
+ type: string
+ required:
+ - toType
+ type: object
+ map:
+ additionalProperties:
+ x-kubernetes-preserve-unknown-fields: true
+ description: Map uses the input as a key in the
+ given map and returns the value.
+ type: object
+ match:
+ description: Match is a more complex version of
+ Map that matches a list of patterns.
+ properties:
+ fallbackTo:
+ default: Value
+ description: Determines to what value the transform
+ should fallback if no pattern matches.
+ enum:
+ - Value
+ - Input
+ type: string
+ fallbackValue:
+ description: |-
+ The fallback value that should be returned by the transform if now pattern
+ matches.
+ x-kubernetes-preserve-unknown-fields: true
+ patterns:
+ description: |-
+ The patterns that should be tested against the input string.
+ Patterns are tested in order. The value of the first match is used as
+ result of this transform.
+ items:
+ description: |-
+ MatchTransformPattern is a transform that returns the value that matches a
+ pattern.
+ properties:
+ literal:
+ description: |-
+ Literal exactly matches the input string (case sensitive).
+ Is required if `type` is `literal`.
+ type: string
+ regexp:
+ description: |-
+ Regexp to match against the input string.
+ Is required if `type` is `regexp`.
+ type: string
+ result:
+ description: The value that is used as
+ result of the transform if the pattern
+ matches.
+ x-kubernetes-preserve-unknown-fields: true
+ type:
+ default: literal
+ description: |-
+ Type specifies how the pattern matches the input.
+
+
+ * `literal` - the pattern value has to exactly match (case sensitive) the
+ input string. This is the default.
+
+
+ * `regexp` - the pattern treated as a regular expression against
+ which the input string is tested. Crossplane will throw an error if the
+ key is not a valid regexp.
+ enum:
+ - literal
+ - regexp
+ type: string
+ required:
+ - result
+ - type
+ type: object
+ type: array
+ type: object
+ math:
+ description: |-
+ Math is used to transform the input via mathematical operations such as
+ multiplication.
+ properties:
+ clampMax:
+ description: ClampMax makes sure that the value
+ is not bigger than the given value.
+ format: int64
+ type: integer
+ clampMin:
+ description: ClampMin makes sure that the value
+ is not smaller than the given value.
+ format: int64
+ type: integer
+ multiply:
+ description: Multiply the value.
+ format: int64
+ type: integer
+ type:
+ default: Multiply
+ description: Type of the math transform to be
+ run.
+ enum:
+ - Multiply
+ - ClampMin
+ - ClampMax
+ type: string
+ type: object
+ string:
+ description: |-
+ String is used to transform the input into a string or a different kind
+ of string. Note that the input does not necessarily need to be a string.
+ properties:
+ convert:
+ description: |-
+ Optional conversion method to be specified.
+ `ToUpper` and `ToLower` change the letter case of the input string.
+ `ToBase64` and `FromBase64` perform a base64 conversion based on the input string.
+ `ToJson` converts any input value into its raw JSON representation.
+ `ToSha1`, `ToSha256` and `ToSha512` generate a hash value based on the input
+ converted to JSON.
+ `ToAdler32` generate a addler32 hash based on the input string.
+ enum:
+ - ToUpper
+ - ToLower
+ - ToBase64
+ - FromBase64
+ - ToJson
+ - ToSha1
+ - ToSha256
+ - ToSha512
+ - ToAdler32
+ type: string
+ fmt:
+ description: |-
+ Format the input using a Go format string. See
+ https://golang.org/pkg/fmt/ for details.
+ type: string
+ join:
+ description: Join defines parameters to join
+ a slice of values to a string.
+ properties:
+ separator:
+ description: |-
+ Separator defines the character that should separate the values from each
+ other in the joined string.
+ type: string
+ required:
+ - separator
+ type: object
+ regexp:
+ description: Extract a match from the input
+ using a regular expression.
+ properties:
+ group:
+ description: Group number to match. 0 (the
+ default) matches the entire expression.
+ type: integer
+ match:
+ description: |-
+ Match string. May optionally include submatches, aka capture groups.
+ See https://pkg.go.dev/regexp/ for details.
+ type: string
+ required:
+ - match
+ type: object
+ trim:
+ description: Trim the prefix or suffix from
+ the input
+ type: string
+ type:
+ default: Format
+ description: Type of the string transform to
+ be run.
+ enum:
+ - Format
+ - Convert
+ - TrimPrefix
+ - TrimSuffix
+ - Regexp
+ - Join
+ type: string
+ type: object
+ type:
+ description: Type of the transform to be run.
+ enum:
+ - map
+ - match
+ - math
+ - string
+ - convert
+ type: string
+ required:
+ - type
+ type: object
+ type: array
+ type:
+ default: FromCompositeFieldPath
+ description: |-
+ Type sets the patching behaviour to be used. Each patch type may require
+ its own fields to be set on the Patch object.
+ enum:
+ - FromCompositeFieldPath
+ - FromEnvironmentFieldPath
+ - PatchSet
+ - ToCompositeFieldPath
+ - ToEnvironmentFieldPath
+ - CombineFromEnvironment
+ - CombineFromComposite
+ - CombineToComposite
+ - CombineToEnvironment
+ type: string
+ type: object
+ type: array
+ required:
+ - name
+ - patches
+ type: object
+ type: array
+ pipeline:
+ description: |-
+ Pipeline is a list of composition function steps that will be used when a
+ composite resource referring to this composition is created. One of
+ resources and pipeline must be specified - you cannot specify both.
+
+
+ The Pipeline is only used by the "Pipeline" mode of Composition. It is
+ ignored by other modes.
+
+
+ THIS IS A BETA FIELD. It is not honored if the relevant Crossplane
+ feature flag is disabled.
+ items:
+ description: A PipelineStep in a Composition Function pipeline.
+ properties:
+ functionRef:
+ description: |-
+ FunctionRef is a reference to the Composition Function this step should
+ execute.
+ properties:
+ name:
+ description: Name of the referenced Function.
+ type: string
+ required:
+ - name
+ type: object
+ input:
+ description: |-
+ Input is an optional, arbitrary Kubernetes resource (i.e. a resource
+ with an apiVersion and kind) that will be passed to the Composition
+ Function as the 'input' of its RunFunctionRequest.
+ type: object
+ x-kubernetes-embedded-resource: true
+ x-kubernetes-preserve-unknown-fields: true
+ step:
+ description: Step name. Must be unique within its Pipeline.
+ type: string
+ required:
+ - functionRef
+ - step
+ type: object
+ type: array
+ publishConnectionDetailsWithStoreConfigRef:
+ default:
+ name: default
+ description: |-
+ PublishConnectionDetailsWithStoreConfig specifies the secret store config
+ with which the connection details of composite resources dynamically
+ provisioned using this composition will be published.
+
+
+ THIS IS AN ALPHA FIELD. Do not use it in production. It is not honored
+ unless the relevant Crossplane feature flag is enabled, and may be
+ changed or removed without notice.
+ properties:
+ name:
+ description: Name of the referenced StoreConfig.
+ type: string
+ required:
+ - name
+ type: object
+ resources:
+ description: |-
+ Resources is a list of resource templates that will be used when a
+ composite resource referring to this composition is created.
+
+
+ Resources are only used by the "Resources" mode of Composition. They are
+ ignored by other modes.
+ items:
+ description: |-
+ ComposedTemplate is used to provide information about how the composed resource
+ should be processed.
+ properties:
+ base:
+ description: Base is the target resource that the patches will
+ be applied on.
+ type: object
+ x-kubernetes-embedded-resource: true
+ x-kubernetes-preserve-unknown-fields: true
+ connectionDetails:
+ description: |-
+ ConnectionDetails lists the propagation secret keys from this target
+ resource to the composition instance connection secret.
+ items:
+ description: |-
+ ConnectionDetail includes the information about the propagation of the connection
+ information from one secret to another.
+ properties:
+ fromConnectionSecretKey:
+ description: |-
+ FromConnectionSecretKey is the key that will be used to fetch the value
+ from the composed resource's connection secret.
+ type: string
+ fromFieldPath:
+ description: |-
+ FromFieldPath is the path of the field on the composed resource whose
+ value to be used as input. Name must be specified if the type is
+ FromFieldPath.
+ type: string
+ name:
+ description: |-
+ Name of the connection secret key that will be propagated to the
+ connection secret of the composition instance. Leave empty if you'd like
+ to use the same key name.
+ type: string
+ type:
+ description: |-
+ Type sets the connection detail fetching behaviour to be used. Each
+ connection detail type may require its own fields to be set on the
+ ConnectionDetail object. If the type is omitted Crossplane will attempt
+ to infer it based on which other fields were specified. If multiple
+ fields are specified the order of precedence is:
+ 1. FromValue
+ 2. FromConnectionSecretKey
+ 3. FromFieldPath
+ enum:
+ - FromConnectionSecretKey
+ - FromFieldPath
+ - FromValue
+ type: string
+ value:
+ description: |-
+ Value that will be propagated to the connection secret of the composite
+ resource. May be set to inject a fixed, non-sensitive connection secret
+ value, for example a well-known port.
+ type: string
+ type: object
+ type: array
+ name:
+ description: |-
+ A Name uniquely identifies this entry within its Composition's resources
+ array. Names are optional but *strongly* recommended. When all entries in
+ the resources array are named entries may added, deleted, and reordered
+ as long as their names do not change. When entries are not named the
+ length and order of the resources array should be treated as immutable.
+ Either all or no entries must be named.
+ type: string
+ patches:
+ description: Patches will be applied as overlay to the base
+ resource.
+ items:
+ description: |-
+ Patch objects are applied between composite and composed resources. Their
+ behaviour depends on the Type selected. The default Type,
+ FromCompositeFieldPath, copies a value from the composite resource to
+ the composed resource, applying any defined transformers.
+ properties:
+ combine:
+ description: |-
+ Combine is the patch configuration for a CombineFromComposite,
+ CombineFromEnvironment, CombineToComposite or CombineToEnvironment patch.
+ properties:
+ strategy:
+ description: |-
+ Strategy defines the strategy to use to combine the input variable values.
+ Currently only string is supported.
+ enum:
+ - string
+ type: string
+ string:
+ description: |-
+ String declares that input variables should be combined into a single
+ string, using the relevant settings for formatting purposes.
+ properties:
+ fmt:
+ description: |-
+ Format the input using a Go format string. See
+ https://golang.org/pkg/fmt/ for details.
+ type: string
+ required:
+ - fmt
+ type: object
+ variables:
+ description: |-
+ Variables are the list of variables whose values will be retrieved and
+ combined.
+ items:
+ description: |-
+ A CombineVariable defines the source of a value that is combined with
+ others to form and patch an output value. Currently, this only supports
+ retrieving values from a field path.
+ properties:
+ fromFieldPath:
+ description: |-
+ FromFieldPath is the path of the field on the source whose value is
+ to be used as input.
+ type: string
+ required:
+ - fromFieldPath
+ type: object
+ minItems: 1
+ type: array
+ required:
+ - strategy
+ - variables
+ type: object
+ fromFieldPath:
+ description: |-
+ FromFieldPath is the path of the field on the resource whose value is
+ to be used as input. Required when type is FromCompositeFieldPath,
+ FromEnvironmentFieldPath, ToCompositeFieldPath, ToEnvironmentFieldPath.
+ type: string
+ patchSetName:
+ description: PatchSetName to include patches from. Required
+ when type is PatchSet.
+ type: string
+ policy:
+ description: Policy configures the specifics of patching
+ behaviour.
+ properties:
+ fromFieldPath:
+ description: |-
+ FromFieldPath specifies how to patch from a field path. The default is
+ 'Optional', which means the patch will be a no-op if the specified
+ fromFieldPath does not exist. Use 'Required' if the patch should fail if
+ the specified path does not exist.
+ enum:
+ - Optional
+ - Required
+ type: string
+ mergeOptions:
+ description: MergeOptions Specifies merge options
+ on a field path
+ properties:
+ appendSlice:
+ description: Specifies that already existing elements
+ in a merged slice should be preserved
+ type: boolean
+ keepMapValues:
+ description: Specifies that already existing values
+ in a merged map should be preserved
+ type: boolean
+ type: object
+ type: object
+ toFieldPath:
+ description: |-
+ ToFieldPath is the path of the field on the resource whose value will
+ be changed with the result of transforms. Leave empty if you'd like to
+ propagate to the same path as fromFieldPath.
+ type: string
+ transforms:
+ description: |-
+ Transforms are the list of functions that are used as a FIFO pipe for the
+ input to be transformed.
+ items:
+ description: |-
+ Transform is a unit of process whose input is transformed into an output with
+ the supplied configuration.
+ properties:
+ convert:
+ description: Convert is used to cast the input into
+ the given output type.
+ properties:
+ format:
+ description: |-
+ The expected input format.
+
+
+ * `quantity` - parses the input as a K8s [`resource.Quantity`](https://pkg.go.dev/k8s.io/apimachinery/pkg/api/resource#Quantity).
+ Only used during `string -> float64` conversions.
+ * `json` - parses the input as a JSON string.
+ Only used during `string -> object` or `string -> list` conversions.
+
+
+ If this property is null, the default conversion is applied.
+ enum:
+ - none
+ - quantity
+ - json
+ type: string
+ toType:
+ description: ToType is the type of the output
+ of this transform.
+ enum:
+ - string
+ - int
+ - int64
+ - bool
+ - float64
+ - object
+ - array
+ type: string
+ required:
+ - toType
+ type: object
+ map:
+ additionalProperties:
+ x-kubernetes-preserve-unknown-fields: true
+ description: Map uses the input as a key in the
+ given map and returns the value.
+ type: object
+ match:
+ description: Match is a more complex version of
+ Map that matches a list of patterns.
+ properties:
+ fallbackTo:
+ default: Value
+ description: Determines to what value the transform
+ should fallback if no pattern matches.
+ enum:
+ - Value
+ - Input
+ type: string
+ fallbackValue:
+ description: |-
+ The fallback value that should be returned by the transform if now pattern
+ matches.
+ x-kubernetes-preserve-unknown-fields: true
+ patterns:
+ description: |-
+ The patterns that should be tested against the input string.
+ Patterns are tested in order. The value of the first match is used as
+ result of this transform.
+ items:
+ description: |-
+ MatchTransformPattern is a transform that returns the value that matches a
+ pattern.
+ properties:
+ literal:
+ description: |-
+ Literal exactly matches the input string (case sensitive).
+ Is required if `type` is `literal`.
+ type: string
+ regexp:
+ description: |-
+ Regexp to match against the input string.
+ Is required if `type` is `regexp`.
+ type: string
+ result:
+ description: The value that is used as
+ result of the transform if the pattern
+ matches.
+ x-kubernetes-preserve-unknown-fields: true
+ type:
+ default: literal
+ description: |-
+ Type specifies how the pattern matches the input.
+
+
+ * `literal` - the pattern value has to exactly match (case sensitive) the
+ input string. This is the default.
+
+
+ * `regexp` - the pattern treated as a regular expression against
+ which the input string is tested. Crossplane will throw an error if the
+ key is not a valid regexp.
+ enum:
+ - literal
+ - regexp
+ type: string
+ required:
+ - result
+ - type
+ type: object
+ type: array
+ type: object
+ math:
+ description: |-
+ Math is used to transform the input via mathematical operations such as
+ multiplication.
+ properties:
+ clampMax:
+ description: ClampMax makes sure that the value
+ is not bigger than the given value.
+ format: int64
+ type: integer
+ clampMin:
+ description: ClampMin makes sure that the value
+ is not smaller than the given value.
+ format: int64
+ type: integer
+ multiply:
+ description: Multiply the value.
+ format: int64
+ type: integer
+ type:
+ default: Multiply
+ description: Type of the math transform to be
+ run.
+ enum:
+ - Multiply
+ - ClampMin
+ - ClampMax
+ type: string
+ type: object
+ string:
+ description: |-
+ String is used to transform the input into a string or a different kind
+ of string. Note that the input does not necessarily need to be a string.
+ properties:
+ convert:
+ description: |-
+ Optional conversion method to be specified.
+ `ToUpper` and `ToLower` change the letter case of the input string.
+ `ToBase64` and `FromBase64` perform a base64 conversion based on the input string.
+ `ToJson` converts any input value into its raw JSON representation.
+ `ToSha1`, `ToSha256` and `ToSha512` generate a hash value based on the input
+ converted to JSON.
+ `ToAdler32` generate a addler32 hash based on the input string.
+ enum:
+ - ToUpper
+ - ToLower
+ - ToBase64
+ - FromBase64
+ - ToJson
+ - ToSha1
+ - ToSha256
+ - ToSha512
+ - ToAdler32
+ type: string
+ fmt:
+ description: |-
+ Format the input using a Go format string. See
+ https://golang.org/pkg/fmt/ for details.
+ type: string
+ join:
+ description: Join defines parameters to join
+ a slice of values to a string.
+ properties:
+ separator:
+ description: |-
+ Separator defines the character that should separate the values from each
+ other in the joined string.
+ type: string
+ required:
+ - separator
+ type: object
+ regexp:
+ description: Extract a match from the input
+ using a regular expression.
+ properties:
+ group:
+ description: Group number to match. 0 (the
+ default) matches the entire expression.
+ type: integer
+ match:
+ description: |-
+ Match string. May optionally include submatches, aka capture groups.
+ See https://pkg.go.dev/regexp/ for details.
+ type: string
+ required:
+ - match
+ type: object
+ trim:
+ description: Trim the prefix or suffix from
+ the input
+ type: string
+ type:
+ default: Format
+ description: Type of the string transform to
+ be run.
+ enum:
+ - Format
+ - Convert
+ - TrimPrefix
+ - TrimSuffix
+ - Regexp
+ - Join
+ type: string
+ type: object
+ type:
+ description: Type of the transform to be run.
+ enum:
+ - map
+ - match
+ - math
+ - string
+ - convert
+ type: string
+ required:
+ - type
+ type: object
+ type: array
+ type:
+ default: FromCompositeFieldPath
+ description: |-
+ Type sets the patching behaviour to be used. Each patch type may require
+ its own fields to be set on the Patch object.
+ enum:
+ - FromCompositeFieldPath
+ - FromEnvironmentFieldPath
+ - PatchSet
+ - ToCompositeFieldPath
+ - ToEnvironmentFieldPath
+ - CombineFromEnvironment
+ - CombineFromComposite
+ - CombineToComposite
+ - CombineToEnvironment
+ type: string
+ type: object
+ type: array
+ readinessChecks:
+ default:
+ - matchCondition:
+ status: "True"
+ type: Ready
+ type: MatchCondition
+ description: |-
+ ReadinessChecks allows users to define custom readiness checks. All checks
+ have to return true in order for resource to be considered ready. The
+ default readiness check is to have the "Ready" condition to be "True".
+ items:
+ description: |-
+ ReadinessCheck is used to indicate how to tell whether a resource is ready
+ for consumption
+ properties:
+ fieldPath:
+ description: FieldPath shows the path of the field whose
+ value will be used.
+ type: string
+ matchCondition:
+ description: MatchCondition specifies the condition you'd
+ like to match if you're using "MatchCondition" type.
+ properties:
+ status:
+ default: "True"
+ description: Status is the status of the condition
+ you'd like to match.
+ type: string
+ type:
+ default: Ready
+ description: Type indicates the type of condition
+ you'd like to use.
+ type: string
+ required:
+ - status
+ - type
+ type: object
+ matchInteger:
+ description: MatchInt is the value you'd like to match
+ if you're using "MatchInt" type.
+ format: int64
+ type: integer
+ matchString:
+ description: MatchString is the value you'd like to match
+ if you're using "MatchString" type.
+ type: string
+ type:
+ description: Type indicates the type of probe you'd like
+ to use.
+ enum:
+ - MatchString
+ - MatchInteger
+ - NonEmpty
+ - MatchCondition
+ - MatchTrue
+ - MatchFalse
+ - None
+ type: string
+ required:
+ - type
+ type: object
+ type: array
+ required:
+ - base
+ type: object
+ type: array
+ revision:
+ description: Revision number. Newer revisions have larger numbers.
+ format: int64
+ type: integer
+ writeConnectionSecretsToNamespace:
+ description: |-
+ WriteConnectionSecretsToNamespace specifies the namespace in which the
+ connection secrets of composite resource dynamically provisioned using
+ this composition will be created.
+ This field is planned to be replaced in a future release in favor of
+ PublishConnectionDetailsWithStoreConfigRef. Currently, both could be
+ set independently and connection details would be published to both
+ without affecting each other as long as related fields at MR level
+ specified.
+ type: string
+ required:
+ - compositeTypeRef
+ - revision
+ type: object
+ status:
+ description: |-
+ CompositionRevisionStatus shows the observed state of the composition
+ revision.
+ 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
+ x-kubernetes-list-map-keys:
+ - type
+ x-kubernetes-list-type: map
+ type: object
+ type: object
+ served: true
+ storage: false
+ subresources:
+ status: {}
diff --git a/crossplane-crd-model/src/main/resources/kubernetes/apiextensions.crossplane.io_compositions.yaml b/crossplane-crd-model/src/main/resources/kubernetes/apiextensions.crossplane.io_compositions.yaml
new file mode 100644
index 0000000..cb1d489
--- /dev/null
+++ b/crossplane-crd-model/src/main/resources/kubernetes/apiextensions.crossplane.io_compositions.yaml
@@ -0,0 +1,1543 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ controller-gen.kubebuilder.io/version: v0.14.0
+ name: compositions.apiextensions.crossplane.io
+spec:
+ group: apiextensions.crossplane.io
+ names:
+ categories:
+ - crossplane
+ kind: Composition
+ listKind: CompositionList
+ plural: compositions
+ shortNames:
+ - comp
+ singular: composition
+ scope: Cluster
+ versions:
+ - additionalPrinterColumns:
+ - jsonPath: .spec.compositeTypeRef.kind
+ name: XR-KIND
+ type: string
+ - jsonPath: .spec.compositeTypeRef.apiVersion
+ name: XR-APIVERSION
+ type: string
+ - jsonPath: .metadata.creationTimestamp
+ name: AGE
+ type: date
+ name: v1
+ schema:
+ openAPIV3Schema:
+ description: A Composition specifies how a composite resource should be composed.
+ 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: CompositionSpec specifies desired state of a composition.
+ properties:
+ compositeTypeRef:
+ description: |-
+ CompositeTypeRef specifies the type of composite resource that this
+ composition is compatible with.
+ properties:
+ apiVersion:
+ description: APIVersion of the type.
+ type: string
+ kind:
+ description: Kind of the type.
+ type: string
+ required:
+ - apiVersion
+ - kind
+ type: object
+ environment:
+ description: |-
+ Environment configures the environment in which resources are rendered.
+
+
+ THIS IS AN ALPHA FIELD. Do not use it in production. It is not honored
+ unless the relevant Crossplane feature flag is enabled, and may be
+ changed or removed without notice.
+ properties:
+ defaultData:
+ additionalProperties:
+ x-kubernetes-preserve-unknown-fields: true
+ description: |-
+ DefaultData statically defines the initial state of the environment.
+ It has the same schema-less structure as the data field in
+ environment configs.
+ It is overwritten by the selected environment configs.
+ type: object
+ environmentConfigs:
+ description: |-
+ EnvironmentConfigs selects a list of `EnvironmentConfig`s. The resolved
+ resources are stored in the composite resource at
+ `spec.environmentConfigRefs` and is only updated if it is null.
+
+
+ The list of references is used to compute an in-memory environment at
+ compose time. The data of all object is merged in the order they are
+ listed, meaning the values of EnvironmentConfigs with a larger index take
+ priority over ones with smaller indices.
+
+
+ The computed environment can be accessed in a composition using
+ `FromEnvironmentFieldPath` and `CombineFromEnvironment` patches.
+ items:
+ description: EnvironmentSource selects a EnvironmentConfig resource.
+ properties:
+ ref:
+ description: |-
+ Ref is a named reference to a single EnvironmentConfig.
+ Either Ref or Selector is required.
+ properties:
+ name:
+ description: The name of the object.
+ type: string
+ required:
+ - name
+ type: object
+ selector:
+ description: Selector selects EnvironmentConfig(s) via labels.
+ properties:
+ matchLabels:
+ description: MatchLabels ensures an object with matching
+ labels is selected.
+ items:
+ description: |-
+ An EnvironmentSourceSelectorLabelMatcher acts like a k8s label selector but
+ can draw the label value from a different path.
+ properties:
+ fromFieldPathPolicy:
+ default: Required
+ description: |-
+ FromFieldPathPolicy specifies the policy for the valueFromFieldPath.
+ The default is Required, meaning that an error will be returned if the
+ field is not found in the composite resource.
+ Optional means that if the field is not found in the composite resource,
+ that label pair will just be skipped. N.B. other specified label
+ matchers will still be used to retrieve the desired
+ environment config, if any.
+ enum:
+ - Optional
+ - Required
+ type: string
+ key:
+ description: Key of the label to match.
+ type: string
+ type:
+ default: FromCompositeFieldPath
+ description: Type specifies where the value for
+ a label comes from.
+ enum:
+ - FromCompositeFieldPath
+ - Value
+ type: string
+ value:
+ description: Value specifies a literal label value.
+ type: string
+ valueFromFieldPath:
+ description: ValueFromFieldPath specifies the
+ field path to look for the label value.
+ type: string
+ required:
+ - key
+ type: object
+ type: array
+ maxMatch:
+ description: MaxMatch specifies the number of extracted
+ EnvironmentConfigs in Multiple mode, extracts all
+ if nil.
+ format: int64
+ type: integer
+ minMatch:
+ description: MinMatch specifies the required minimum
+ of extracted EnvironmentConfigs in Multiple mode.
+ format: int64
+ type: integer
+ mode:
+ default: Single
+ description: 'Mode specifies retrieval strategy: "Single"
+ or "Multiple".'
+ enum:
+ - Single
+ - Multiple
+ type: string
+ sortByFieldPath:
+ default: metadata.name
+ description: SortByFieldPath is the path to the field
+ based on which list of EnvironmentConfigs is alphabetically
+ sorted.
+ type: string
+ type: object
+ type:
+ default: Reference
+ description: |-
+ Type specifies the way the EnvironmentConfig is selected.
+ Default is `Reference`
+ enum:
+ - Reference
+ - Selector
+ type: string
+ type: object
+ type: array
+ patches:
+ description: |-
+ Patches is a list of environment patches that are executed before a
+ composition's resources are composed.
+ items:
+ description: EnvironmentPatch is a patch for a Composition environment.
+ properties:
+ combine:
+ description: |-
+ Combine is the patch configuration for a CombineFromComposite or
+ CombineToComposite patch.
+ properties:
+ strategy:
+ description: |-
+ Strategy defines the strategy to use to combine the input variable values.
+ Currently only string is supported.
+ enum:
+ - string
+ type: string
+ string:
+ description: |-
+ String declares that input variables should be combined into a single
+ string, using the relevant settings for formatting purposes.
+ properties:
+ fmt:
+ description: |-
+ Format the input using a Go format string. See
+ https://golang.org/pkg/fmt/ for details.
+ type: string
+ required:
+ - fmt
+ type: object
+ variables:
+ description: |-
+ Variables are the list of variables whose values will be retrieved and
+ combined.
+ items:
+ description: |-
+ A CombineVariable defines the source of a value that is combined with
+ others to form and patch an output value. Currently, this only supports
+ retrieving values from a field path.
+ properties:
+ fromFieldPath:
+ description: |-
+ FromFieldPath is the path of the field on the source whose value is
+ to be used as input.
+ type: string
+ required:
+ - fromFieldPath
+ type: object
+ minItems: 1
+ type: array
+ required:
+ - strategy
+ - variables
+ type: object
+ fromFieldPath:
+ description: |-
+ FromFieldPath is the path of the field on the resource whose value is
+ to be used as input. Required when type is FromCompositeFieldPath or
+ ToCompositeFieldPath.
+ type: string
+ policy:
+ description: Policy configures the specifics of patching
+ behaviour.
+ properties:
+ fromFieldPath:
+ description: |-
+ FromFieldPath specifies how to patch from a field path. The default is
+ 'Optional', which means the patch will be a no-op if the specified
+ fromFieldPath does not exist. Use 'Required' if the patch should fail if
+ the specified path does not exist.
+ enum:
+ - Optional
+ - Required
+ type: string
+ mergeOptions:
+ description: MergeOptions Specifies merge options on
+ a field path
+ properties:
+ appendSlice:
+ description: Specifies that already existing elements
+ in a merged slice should be preserved
+ type: boolean
+ keepMapValues:
+ description: Specifies that already existing values
+ in a merged map should be preserved
+ type: boolean
+ type: object
+ type: object
+ toFieldPath:
+ description: |-
+ ToFieldPath is the path of the field on the resource whose value will
+ be changed with the result of transforms. Leave empty if you'd like to
+ propagate to the same path as fromFieldPath.
+ type: string
+ transforms:
+ description: |-
+ Transforms are the list of functions that are used as a FIFO pipe for the
+ input to be transformed.
+ items:
+ description: |-
+ Transform is a unit of process whose input is transformed into an output with
+ the supplied configuration.
+ properties:
+ convert:
+ description: Convert is used to cast the input into
+ the given output type.
+ properties:
+ format:
+ description: |-
+ The expected input format.
+
+
+ * `quantity` - parses the input as a K8s [`resource.Quantity`](https://pkg.go.dev/k8s.io/apimachinery/pkg/api/resource#Quantity).
+ Only used during `string -> float64` conversions.
+ * `json` - parses the input as a JSON string.
+ Only used during `string -> object` or `string -> list` conversions.
+
+
+ If this property is null, the default conversion is applied.
+ enum:
+ - none
+ - quantity
+ - json
+ type: string
+ toType:
+ description: ToType is the type of the output
+ of this transform.
+ enum:
+ - string
+ - int
+ - int64
+ - bool
+ - float64
+ - object
+ - array
+ type: string
+ required:
+ - toType
+ type: object
+ map:
+ additionalProperties:
+ x-kubernetes-preserve-unknown-fields: true
+ description: Map uses the input as a key in the given
+ map and returns the value.
+ type: object
+ match:
+ description: Match is a more complex version of Map
+ that matches a list of patterns.
+ properties:
+ fallbackTo:
+ default: Value
+ description: Determines to what value the transform
+ should fallback if no pattern matches.
+ enum:
+ - Value
+ - Input
+ type: string
+ fallbackValue:
+ description: |-
+ The fallback value that should be returned by the transform if now pattern
+ matches.
+ x-kubernetes-preserve-unknown-fields: true
+ patterns:
+ description: |-
+ The patterns that should be tested against the input string.
+ Patterns are tested in order. The value of the first match is used as
+ result of this transform.
+ items:
+ description: |-
+ MatchTransformPattern is a transform that returns the value that matches a
+ pattern.
+ properties:
+ literal:
+ description: |-
+ Literal exactly matches the input string (case sensitive).
+ Is required if `type` is `literal`.
+ type: string
+ regexp:
+ description: |-
+ Regexp to match against the input string.
+ Is required if `type` is `regexp`.
+ type: string
+ result:
+ description: The value that is used as result
+ of the transform if the pattern matches.
+ x-kubernetes-preserve-unknown-fields: true
+ type:
+ default: literal
+ description: |-
+ Type specifies how the pattern matches the input.
+
+
+ * `literal` - the pattern value has to exactly match (case sensitive) the
+ input string. This is the default.
+
+
+ * `regexp` - the pattern treated as a regular expression against
+ which the input string is tested. Crossplane will throw an error if the
+ key is not a valid regexp.
+ enum:
+ - literal
+ - regexp
+ type: string
+ required:
+ - result
+ - type
+ type: object
+ type: array
+ type: object
+ math:
+ description: |-
+ Math is used to transform the input via mathematical operations such as
+ multiplication.
+ properties:
+ clampMax:
+ description: ClampMax makes sure that the value
+ is not bigger than the given value.
+ format: int64
+ type: integer
+ clampMin:
+ description: ClampMin makes sure that the value
+ is not smaller than the given value.
+ format: int64
+ type: integer
+ multiply:
+ description: Multiply the value.
+ format: int64
+ type: integer
+ type:
+ default: Multiply
+ description: Type of the math transform to be
+ run.
+ enum:
+ - Multiply
+ - ClampMin
+ - ClampMax
+ type: string
+ type: object
+ string:
+ description: |-
+ String is used to transform the input into a string or a different kind
+ of string. Note that the input does not necessarily need to be a string.
+ properties:
+ convert:
+ description: |-
+ Optional conversion method to be specified.
+ `ToUpper` and `ToLower` change the letter case of the input string.
+ `ToBase64` and `FromBase64` perform a base64 conversion based on the input string.
+ `ToJson` converts any input value into its raw JSON representation.
+ `ToSha1`, `ToSha256` and `ToSha512` generate a hash value based on the input
+ converted to JSON.
+ `ToAdler32` generate a addler32 hash based on the input string.
+ enum:
+ - ToUpper
+ - ToLower
+ - ToBase64
+ - FromBase64
+ - ToJson
+ - ToSha1
+ - ToSha256
+ - ToSha512
+ - ToAdler32
+ type: string
+ fmt:
+ description: |-
+ Format the input using a Go format string. See
+ https://golang.org/pkg/fmt/ for details.
+ type: string
+ join:
+ description: Join defines parameters to join a
+ slice of values to a string.
+ properties:
+ separator:
+ description: |-
+ Separator defines the character that should separate the values from each
+ other in the joined string.
+ type: string
+ required:
+ - separator
+ type: object
+ regexp:
+ description: Extract a match from the input using
+ a regular expression.
+ properties:
+ group:
+ description: Group number to match. 0 (the
+ default) matches the entire expression.
+ type: integer
+ match:
+ description: |-
+ Match string. May optionally include submatches, aka capture groups.
+ See https://pkg.go.dev/regexp/ for details.
+ type: string
+ required:
+ - match
+ type: object
+ trim:
+ description: Trim the prefix or suffix from the
+ input
+ type: string
+ type:
+ default: Format
+ description: Type of the string transform to be
+ run.
+ enum:
+ - Format
+ - Convert
+ - TrimPrefix
+ - TrimSuffix
+ - Regexp
+ - Join
+ type: string
+ type: object
+ type:
+ description: Type of the transform to be run.
+ enum:
+ - map
+ - match
+ - math
+ - string
+ - convert
+ type: string
+ required:
+ - type
+ type: object
+ type: array
+ type:
+ default: FromCompositeFieldPath
+ description: |-
+ Type sets the patching behaviour to be used. Each patch type may require
+ its own fields to be set on the Patch object.
+ enum:
+ - FromCompositeFieldPath
+ - ToCompositeFieldPath
+ - CombineFromComposite
+ - CombineToComposite
+ type: string
+ type: object
+ type: array
+ policy:
+ description: |-
+ Policy represents the Resolve and Resolution policies which apply to
+ all EnvironmentSourceReferences in EnvironmentConfigs list.
+ properties:
+ resolution:
+ default: Required
+ description: |-
+ Resolution specifies whether resolution of this reference is required.
+ The default is 'Required', which means the reconcile will fail if the
+ reference cannot be resolved. 'Optional' means this reference will be
+ a no-op if it cannot be resolved.
+ enum:
+ - Required
+ - Optional
+ type: string
+ resolve:
+ description: |-
+ Resolve specifies when this reference should be resolved. The default
+ is 'IfNotPresent', which will attempt to resolve the reference only when
+ the corresponding field is not present. Use 'Always' to resolve the
+ reference on every reconcile.
+ enum:
+ - Always
+ - IfNotPresent
+ type: string
+ type: object
+ type: object
+ mode:
+ default: Resources
+ description: |-
+ Mode controls what type or "mode" of Composition will be used.
+
+
+ "Resources" (the default) indicates that a Composition uses what is
+ commonly referred to as "Patch & Transform" or P&T composition. This mode
+ of Composition uses an array of resources, each a template for a composed
+ resource.
+
+
+ "Pipeline" indicates that a Composition specifies a pipeline
+ of Composition Functions, each of which is responsible for producing
+ composed resources that Crossplane should create or update. THE PIPELINE
+ MODE IS A BETA FEATURE. It is not honored if the relevant Crossplane
+ feature flag is disabled.
+ enum:
+ - Resources
+ - Pipeline
+ type: string
+ patchSets:
+ description: |-
+ PatchSets define a named set of patches that may be included by any
+ resource in this Composition. PatchSets cannot themselves refer to other
+ PatchSets.
+
+
+ PatchSets are only used by the "Resources" mode of Composition. They
+ are ignored by other modes.
+ items:
+ description: |-
+ A PatchSet is a set of patches that can be reused from all resources within
+ a Composition.
+ properties:
+ name:
+ description: Name of this PatchSet.
+ type: string
+ patches:
+ description: Patches will be applied as an overlay to the base
+ resource.
+ items:
+ description: |-
+ Patch objects are applied between composite and composed resources. Their
+ behaviour depends on the Type selected. The default Type,
+ FromCompositeFieldPath, copies a value from the composite resource to
+ the composed resource, applying any defined transformers.
+ properties:
+ combine:
+ description: |-
+ Combine is the patch configuration for a CombineFromComposite,
+ CombineFromEnvironment, CombineToComposite or CombineToEnvironment patch.
+ properties:
+ strategy:
+ description: |-
+ Strategy defines the strategy to use to combine the input variable values.
+ Currently only string is supported.
+ enum:
+ - string
+ type: string
+ string:
+ description: |-
+ String declares that input variables should be combined into a single
+ string, using the relevant settings for formatting purposes.
+ properties:
+ fmt:
+ description: |-
+ Format the input using a Go format string. See
+ https://golang.org/pkg/fmt/ for details.
+ type: string
+ required:
+ - fmt
+ type: object
+ variables:
+ description: |-
+ Variables are the list of variables whose values will be retrieved and
+ combined.
+ items:
+ description: |-
+ A CombineVariable defines the source of a value that is combined with
+ others to form and patch an output value. Currently, this only supports
+ retrieving values from a field path.
+ properties:
+ fromFieldPath:
+ description: |-
+ FromFieldPath is the path of the field on the source whose value is
+ to be used as input.
+ type: string
+ required:
+ - fromFieldPath
+ type: object
+ minItems: 1
+ type: array
+ required:
+ - strategy
+ - variables
+ type: object
+ fromFieldPath:
+ description: |-
+ FromFieldPath is the path of the field on the resource whose value is
+ to be used as input. Required when type is FromCompositeFieldPath,
+ FromEnvironmentFieldPath, ToCompositeFieldPath, ToEnvironmentFieldPath.
+ type: string
+ patchSetName:
+ description: PatchSetName to include patches from. Required
+ when type is PatchSet.
+ type: string
+ policy:
+ description: Policy configures the specifics of patching
+ behaviour.
+ properties:
+ fromFieldPath:
+ description: |-
+ FromFieldPath specifies how to patch from a field path. The default is
+ 'Optional', which means the patch will be a no-op if the specified
+ fromFieldPath does not exist. Use 'Required' if the patch should fail if
+ the specified path does not exist.
+ enum:
+ - Optional
+ - Required
+ type: string
+ mergeOptions:
+ description: MergeOptions Specifies merge options
+ on a field path
+ properties:
+ appendSlice:
+ description: Specifies that already existing elements
+ in a merged slice should be preserved
+ type: boolean
+ keepMapValues:
+ description: Specifies that already existing values
+ in a merged map should be preserved
+ type: boolean
+ type: object
+ type: object
+ toFieldPath:
+ description: |-
+ ToFieldPath is the path of the field on the resource whose value will
+ be changed with the result of transforms. Leave empty if you'd like to
+ propagate to the same path as fromFieldPath.
+ type: string
+ transforms:
+ description: |-
+ Transforms are the list of functions that are used as a FIFO pipe for the
+ input to be transformed.
+ items:
+ description: |-
+ Transform is a unit of process whose input is transformed into an output with
+ the supplied configuration.
+ properties:
+ convert:
+ description: Convert is used to cast the input into
+ the given output type.
+ properties:
+ format:
+ description: |-
+ The expected input format.
+
+
+ * `quantity` - parses the input as a K8s [`resource.Quantity`](https://pkg.go.dev/k8s.io/apimachinery/pkg/api/resource#Quantity).
+ Only used during `string -> float64` conversions.
+ * `json` - parses the input as a JSON string.
+ Only used during `string -> object` or `string -> list` conversions.
+
+
+ If this property is null, the default conversion is applied.
+ enum:
+ - none
+ - quantity
+ - json
+ type: string
+ toType:
+ description: ToType is the type of the output
+ of this transform.
+ enum:
+ - string
+ - int
+ - int64
+ - bool
+ - float64
+ - object
+ - array
+ type: string
+ required:
+ - toType
+ type: object
+ map:
+ additionalProperties:
+ x-kubernetes-preserve-unknown-fields: true
+ description: Map uses the input as a key in the
+ given map and returns the value.
+ type: object
+ match:
+ description: Match is a more complex version of
+ Map that matches a list of patterns.
+ properties:
+ fallbackTo:
+ default: Value
+ description: Determines to what value the transform
+ should fallback if no pattern matches.
+ enum:
+ - Value
+ - Input
+ type: string
+ fallbackValue:
+ description: |-
+ The fallback value that should be returned by the transform if now pattern
+ matches.
+ x-kubernetes-preserve-unknown-fields: true
+ patterns:
+ description: |-
+ The patterns that should be tested against the input string.
+ Patterns are tested in order. The value of the first match is used as
+ result of this transform.
+ items:
+ description: |-
+ MatchTransformPattern is a transform that returns the value that matches a
+ pattern.
+ properties:
+ literal:
+ description: |-
+ Literal exactly matches the input string (case sensitive).
+ Is required if `type` is `literal`.
+ type: string
+ regexp:
+ description: |-
+ Regexp to match against the input string.
+ Is required if `type` is `regexp`.
+ type: string
+ result:
+ description: The value that is used as
+ result of the transform if the pattern
+ matches.
+ x-kubernetes-preserve-unknown-fields: true
+ type:
+ default: literal
+ description: |-
+ Type specifies how the pattern matches the input.
+
+
+ * `literal` - the pattern value has to exactly match (case sensitive) the
+ input string. This is the default.
+
+
+ * `regexp` - the pattern treated as a regular expression against
+ which the input string is tested. Crossplane will throw an error if the
+ key is not a valid regexp.
+ enum:
+ - literal
+ - regexp
+ type: string
+ required:
+ - result
+ - type
+ type: object
+ type: array
+ type: object
+ math:
+ description: |-
+ Math is used to transform the input via mathematical operations such as
+ multiplication.
+ properties:
+ clampMax:
+ description: ClampMax makes sure that the value
+ is not bigger than the given value.
+ format: int64
+ type: integer
+ clampMin:
+ description: ClampMin makes sure that the value
+ is not smaller than the given value.
+ format: int64
+ type: integer
+ multiply:
+ description: Multiply the value.
+ format: int64
+ type: integer
+ type:
+ default: Multiply
+ description: Type of the math transform to be
+ run.
+ enum:
+ - Multiply
+ - ClampMin
+ - ClampMax
+ type: string
+ type: object
+ string:
+ description: |-
+ String is used to transform the input into a string or a different kind
+ of string. Note that the input does not necessarily need to be a string.
+ properties:
+ convert:
+ description: |-
+ Optional conversion method to be specified.
+ `ToUpper` and `ToLower` change the letter case of the input string.
+ `ToBase64` and `FromBase64` perform a base64 conversion based on the input string.
+ `ToJson` converts any input value into its raw JSON representation.
+ `ToSha1`, `ToSha256` and `ToSha512` generate a hash value based on the input
+ converted to JSON.
+ `ToAdler32` generate a addler32 hash based on the input string.
+ enum:
+ - ToUpper
+ - ToLower
+ - ToBase64
+ - FromBase64
+ - ToJson
+ - ToSha1
+ - ToSha256
+ - ToSha512
+ - ToAdler32
+ type: string
+ fmt:
+ description: |-
+ Format the input using a Go format string. See
+ https://golang.org/pkg/fmt/ for details.
+ type: string
+ join:
+ description: Join defines parameters to join
+ a slice of values to a string.
+ properties:
+ separator:
+ description: |-
+ Separator defines the character that should separate the values from each
+ other in the joined string.
+ type: string
+ required:
+ - separator
+ type: object
+ regexp:
+ description: Extract a match from the input
+ using a regular expression.
+ properties:
+ group:
+ description: Group number to match. 0 (the
+ default) matches the entire expression.
+ type: integer
+ match:
+ description: |-
+ Match string. May optionally include submatches, aka capture groups.
+ See https://pkg.go.dev/regexp/ for details.
+ type: string
+ required:
+ - match
+ type: object
+ trim:
+ description: Trim the prefix or suffix from
+ the input
+ type: string
+ type:
+ default: Format
+ description: Type of the string transform to
+ be run.
+ enum:
+ - Format
+ - Convert
+ - TrimPrefix
+ - TrimSuffix
+ - Regexp
+ - Join
+ type: string
+ type: object
+ type:
+ description: Type of the transform to be run.
+ enum:
+ - map
+ - match
+ - math
+ - string
+ - convert
+ type: string
+ required:
+ - type
+ type: object
+ type: array
+ type:
+ default: FromCompositeFieldPath
+ description: |-
+ Type sets the patching behaviour to be used. Each patch type may require
+ its own fields to be set on the Patch object.
+ enum:
+ - FromCompositeFieldPath
+ - FromEnvironmentFieldPath
+ - PatchSet
+ - ToCompositeFieldPath
+ - ToEnvironmentFieldPath
+ - CombineFromEnvironment
+ - CombineFromComposite
+ - CombineToComposite
+ - CombineToEnvironment
+ type: string
+ type: object
+ type: array
+ required:
+ - name
+ - patches
+ type: object
+ type: array
+ pipeline:
+ description: |-
+ Pipeline is a list of composition function steps that will be used when a
+ composite resource referring to this composition is created. One of
+ resources and pipeline must be specified - you cannot specify both.
+
+
+ The Pipeline is only used by the "Pipeline" mode of Composition. It is
+ ignored by other modes.
+
+
+ THIS IS A BETA FIELD. It is not honored if the relevant Crossplane
+ feature flag is disabled.
+ items:
+ description: A PipelineStep in a Composition Function pipeline.
+ properties:
+ functionRef:
+ description: |-
+ FunctionRef is a reference to the Composition Function this step should
+ execute.
+ properties:
+ name:
+ description: Name of the referenced Function.
+ type: string
+ required:
+ - name
+ type: object
+ input:
+ description: |-
+ Input is an optional, arbitrary Kubernetes resource (i.e. a resource
+ with an apiVersion and kind) that will be passed to the Composition
+ Function as the 'input' of its RunFunctionRequest.
+ type: object
+ x-kubernetes-embedded-resource: true
+ x-kubernetes-preserve-unknown-fields: true
+ step:
+ description: Step name. Must be unique within its Pipeline.
+ type: string
+ required:
+ - functionRef
+ - step
+ type: object
+ type: array
+ publishConnectionDetailsWithStoreConfigRef:
+ default:
+ name: default
+ description: |-
+ PublishConnectionDetailsWithStoreConfig specifies the secret store config
+ with which the connection details of composite resources dynamically
+ provisioned using this composition will be published.
+
+
+ THIS IS AN ALPHA FIELD. Do not use it in production. It is not honored
+ unless the relevant Crossplane feature flag is enabled, and may be
+ changed or removed without notice.
+ properties:
+ name:
+ description: Name of the referenced StoreConfig.
+ type: string
+ required:
+ - name
+ type: object
+ resources:
+ description: |-
+ Resources is a list of resource templates that will be used when a
+ composite resource referring to this composition is created.
+
+
+ Resources are only used by the "Resources" mode of Composition. They are
+ ignored by other modes.
+ items:
+ description: |-
+ ComposedTemplate is used to provide information about how the composed resource
+ should be processed.
+ properties:
+ base:
+ description: Base is the target resource that the patches will
+ be applied on.
+ type: object
+ x-kubernetes-embedded-resource: true
+ x-kubernetes-preserve-unknown-fields: true
+ connectionDetails:
+ description: |-
+ ConnectionDetails lists the propagation secret keys from this target
+ resource to the composition instance connection secret.
+ items:
+ description: |-
+ ConnectionDetail includes the information about the propagation of the connection
+ information from one secret to another.
+ properties:
+ fromConnectionSecretKey:
+ description: |-
+ FromConnectionSecretKey is the key that will be used to fetch the value
+ from the composed resource's connection secret.
+ type: string
+ fromFieldPath:
+ description: |-
+ FromFieldPath is the path of the field on the composed resource whose
+ value to be used as input. Name must be specified if the type is
+ FromFieldPath.
+ type: string
+ name:
+ description: |-
+ Name of the connection secret key that will be propagated to the
+ connection secret of the composition instance. Leave empty if you'd like
+ to use the same key name.
+ type: string
+ type:
+ description: |-
+ Type sets the connection detail fetching behaviour to be used. Each
+ connection detail type may require its own fields to be set on the
+ ConnectionDetail object. If the type is omitted Crossplane will attempt
+ to infer it based on which other fields were specified. If multiple
+ fields are specified the order of precedence is:
+ 1. FromValue
+ 2. FromConnectionSecretKey
+ 3. FromFieldPath
+ enum:
+ - FromConnectionSecretKey
+ - FromFieldPath
+ - FromValue
+ type: string
+ value:
+ description: |-
+ Value that will be propagated to the connection secret of the composite
+ resource. May be set to inject a fixed, non-sensitive connection secret
+ value, for example a well-known port.
+ type: string
+ type: object
+ type: array
+ name:
+ description: |-
+ A Name uniquely identifies this entry within its Composition's resources
+ array. Names are optional but *strongly* recommended. When all entries in
+ the resources array are named entries may added, deleted, and reordered
+ as long as their names do not change. When entries are not named the
+ length and order of the resources array should be treated as immutable.
+ Either all or no entries must be named.
+ type: string
+ patches:
+ description: Patches will be applied as overlay to the base
+ resource.
+ items:
+ description: |-
+ Patch objects are applied between composite and composed resources. Their
+ behaviour depends on the Type selected. The default Type,
+ FromCompositeFieldPath, copies a value from the composite resource to
+ the composed resource, applying any defined transformers.
+ properties:
+ combine:
+ description: |-
+ Combine is the patch configuration for a CombineFromComposite,
+ CombineFromEnvironment, CombineToComposite or CombineToEnvironment patch.
+ properties:
+ strategy:
+ description: |-
+ Strategy defines the strategy to use to combine the input variable values.
+ Currently only string is supported.
+ enum:
+ - string
+ type: string
+ string:
+ description: |-
+ String declares that input variables should be combined into a single
+ string, using the relevant settings for formatting purposes.
+ properties:
+ fmt:
+ description: |-
+ Format the input using a Go format string. See
+ https://golang.org/pkg/fmt/ for details.
+ type: string
+ required:
+ - fmt
+ type: object
+ variables:
+ description: |-
+ Variables are the list of variables whose values will be retrieved and
+ combined.
+ items:
+ description: |-
+ A CombineVariable defines the source of a value that is combined with
+ others to form and patch an output value. Currently, this only supports
+ retrieving values from a field path.
+ properties:
+ fromFieldPath:
+ description: |-
+ FromFieldPath is the path of the field on the source whose value is
+ to be used as input.
+ type: string
+ required:
+ - fromFieldPath
+ type: object
+ minItems: 1
+ type: array
+ required:
+ - strategy
+ - variables
+ type: object
+ fromFieldPath:
+ description: |-
+ FromFieldPath is the path of the field on the resource whose value is
+ to be used as input. Required when type is FromCompositeFieldPath,
+ FromEnvironmentFieldPath, ToCompositeFieldPath, ToEnvironmentFieldPath.
+ type: string
+ patchSetName:
+ description: PatchSetName to include patches from. Required
+ when type is PatchSet.
+ type: string
+ policy:
+ description: Policy configures the specifics of patching
+ behaviour.
+ properties:
+ fromFieldPath:
+ description: |-
+ FromFieldPath specifies how to patch from a field path. The default is
+ 'Optional', which means the patch will be a no-op if the specified
+ fromFieldPath does not exist. Use 'Required' if the patch should fail if
+ the specified path does not exist.
+ enum:
+ - Optional
+ - Required
+ type: string
+ mergeOptions:
+ description: MergeOptions Specifies merge options
+ on a field path
+ properties:
+ appendSlice:
+ description: Specifies that already existing elements
+ in a merged slice should be preserved
+ type: boolean
+ keepMapValues:
+ description: Specifies that already existing values
+ in a merged map should be preserved
+ type: boolean
+ type: object
+ type: object
+ toFieldPath:
+ description: |-
+ ToFieldPath is the path of the field on the resource whose value will
+ be changed with the result of transforms. Leave empty if you'd like to
+ propagate to the same path as fromFieldPath.
+ type: string
+ transforms:
+ description: |-
+ Transforms are the list of functions that are used as a FIFO pipe for the
+ input to be transformed.
+ items:
+ description: |-
+ Transform is a unit of process whose input is transformed into an output with
+ the supplied configuration.
+ properties:
+ convert:
+ description: Convert is used to cast the input into
+ the given output type.
+ properties:
+ format:
+ description: |-
+ The expected input format.
+
+
+ * `quantity` - parses the input as a K8s [`resource.Quantity`](https://pkg.go.dev/k8s.io/apimachinery/pkg/api/resource#Quantity).
+ Only used during `string -> float64` conversions.
+ * `json` - parses the input as a JSON string.
+ Only used during `string -> object` or `string -> list` conversions.
+
+
+ If this property is null, the default conversion is applied.
+ enum:
+ - none
+ - quantity
+ - json
+ type: string
+ toType:
+ description: ToType is the type of the output
+ of this transform.
+ enum:
+ - string
+ - int
+ - int64
+ - bool
+ - float64
+ - object
+ - array
+ type: string
+ required:
+ - toType
+ type: object
+ map:
+ additionalProperties:
+ x-kubernetes-preserve-unknown-fields: true
+ description: Map uses the input as a key in the
+ given map and returns the value.
+ type: object
+ match:
+ description: Match is a more complex version of
+ Map that matches a list of patterns.
+ properties:
+ fallbackTo:
+ default: Value
+ description: Determines to what value the transform
+ should fallback if no pattern matches.
+ enum:
+ - Value
+ - Input
+ type: string
+ fallbackValue:
+ description: |-
+ The fallback value that should be returned by the transform if now pattern
+ matches.
+ x-kubernetes-preserve-unknown-fields: true
+ patterns:
+ description: |-
+ The patterns that should be tested against the input string.
+ Patterns are tested in order. The value of the first match is used as
+ result of this transform.
+ items:
+ description: |-
+ MatchTransformPattern is a transform that returns the value that matches a
+ pattern.
+ properties:
+ literal:
+ description: |-
+ Literal exactly matches the input string (case sensitive).
+ Is required if `type` is `literal`.
+ type: string
+ regexp:
+ description: |-
+ Regexp to match against the input string.
+ Is required if `type` is `regexp`.
+ type: string
+ result:
+ description: The value that is used as
+ result of the transform if the pattern
+ matches.
+ x-kubernetes-preserve-unknown-fields: true
+ type:
+ default: literal
+ description: |-
+ Type specifies how the pattern matches the input.
+
+
+ * `literal` - the pattern value has to exactly match (case sensitive) the
+ input string. This is the default.
+
+
+ * `regexp` - the pattern treated as a regular expression against
+ which the input string is tested. Crossplane will throw an error if the
+ key is not a valid regexp.
+ enum:
+ - literal
+ - regexp
+ type: string
+ required:
+ - result
+ - type
+ type: object
+ type: array
+ type: object
+ math:
+ description: |-
+ Math is used to transform the input via mathematical operations such as
+ multiplication.
+ properties:
+ clampMax:
+ description: ClampMax makes sure that the value
+ is not bigger than the given value.
+ format: int64
+ type: integer
+ clampMin:
+ description: ClampMin makes sure that the value
+ is not smaller than the given value.
+ format: int64
+ type: integer
+ multiply:
+ description: Multiply the value.
+ format: int64
+ type: integer
+ type:
+ default: Multiply
+ description: Type of the math transform to be
+ run.
+ enum:
+ - Multiply
+ - ClampMin
+ - ClampMax
+ type: string
+ type: object
+ string:
+ description: |-
+ String is used to transform the input into a string or a different kind
+ of string. Note that the input does not necessarily need to be a string.
+ properties:
+ convert:
+ description: |-
+ Optional conversion method to be specified.
+ `ToUpper` and `ToLower` change the letter case of the input string.
+ `ToBase64` and `FromBase64` perform a base64 conversion based on the input string.
+ `ToJson` converts any input value into its raw JSON representation.
+ `ToSha1`, `ToSha256` and `ToSha512` generate a hash value based on the input
+ converted to JSON.
+ `ToAdler32` generate a addler32 hash based on the input string.
+ enum:
+ - ToUpper
+ - ToLower
+ - ToBase64
+ - FromBase64
+ - ToJson
+ - ToSha1
+ - ToSha256
+ - ToSha512
+ - ToAdler32
+ type: string
+ fmt:
+ description: |-
+ Format the input using a Go format string. See
+ https://golang.org/pkg/fmt/ for details.
+ type: string
+ join:
+ description: Join defines parameters to join
+ a slice of values to a string.
+ properties:
+ separator:
+ description: |-
+ Separator defines the character that should separate the values from each
+ other in the joined string.
+ type: string
+ required:
+ - separator
+ type: object
+ regexp:
+ description: Extract a match from the input
+ using a regular expression.
+ properties:
+ group:
+ description: Group number to match. 0 (the
+ default) matches the entire expression.
+ type: integer
+ match:
+ description: |-
+ Match string. May optionally include submatches, aka capture groups.
+ See https://pkg.go.dev/regexp/ for details.
+ type: string
+ required:
+ - match
+ type: object
+ trim:
+ description: Trim the prefix or suffix from
+ the input
+ type: string
+ type:
+ default: Format
+ description: Type of the string transform to
+ be run.
+ enum:
+ - Format
+ - Convert
+ - TrimPrefix
+ - TrimSuffix
+ - Regexp
+ - Join
+ type: string
+ type: object
+ type:
+ description: Type of the transform to be run.
+ enum:
+ - map
+ - match
+ - math
+ - string
+ - convert
+ type: string
+ required:
+ - type
+ type: object
+ type: array
+ type:
+ default: FromCompositeFieldPath
+ description: |-
+ Type sets the patching behaviour to be used. Each patch type may require
+ its own fields to be set on the Patch object.
+ enum:
+ - FromCompositeFieldPath
+ - FromEnvironmentFieldPath
+ - PatchSet
+ - ToCompositeFieldPath
+ - ToEnvironmentFieldPath
+ - CombineFromEnvironment
+ - CombineFromComposite
+ - CombineToComposite
+ - CombineToEnvironment
+ type: string
+ type: object
+ type: array
+ readinessChecks:
+ default:
+ - matchCondition:
+ status: "True"
+ type: Ready
+ type: MatchCondition
+ description: |-
+ ReadinessChecks allows users to define custom readiness checks. All checks
+ have to return true in order for resource to be considered ready. The
+ default readiness check is to have the "Ready" condition to be "True".
+ items:
+ description: |-
+ ReadinessCheck is used to indicate how to tell whether a resource is ready
+ for consumption
+ properties:
+ fieldPath:
+ description: FieldPath shows the path of the field whose
+ value will be used.
+ type: string
+ matchCondition:
+ description: MatchCondition specifies the condition you'd
+ like to match if you're using "MatchCondition" type.
+ properties:
+ status:
+ default: "True"
+ description: Status is the status of the condition
+ you'd like to match.
+ type: string
+ type:
+ default: Ready
+ description: Type indicates the type of condition
+ you'd like to use.
+ type: string
+ required:
+ - status
+ - type
+ type: object
+ matchInteger:
+ description: MatchInt is the value you'd like to match
+ if you're using "MatchInt" type.
+ format: int64
+ type: integer
+ matchString:
+ description: MatchString is the value you'd like to match
+ if you're using "MatchString" type.
+ type: string
+ type:
+ description: Type indicates the type of probe you'd like
+ to use.
+ enum:
+ - MatchString
+ - MatchInteger
+ - NonEmpty
+ - MatchCondition
+ - MatchTrue
+ - MatchFalse
+ - None
+ type: string
+ required:
+ - type
+ type: object
+ type: array
+ required:
+ - base
+ type: object
+ type: array
+ writeConnectionSecretsToNamespace:
+ description: |-
+ WriteConnectionSecretsToNamespace specifies the namespace in which the
+ connection secrets of composite resource dynamically provisioned using
+ this composition will be created.
+ This field is planned to be replaced in a future release in favor of
+ PublishConnectionDetailsWithStoreConfigRef. Currently, both could be
+ set independently and connection details would be published to both
+ without affecting each other as long as related fields at MR level
+ specified.
+ type: string
+ required:
+ - compositeTypeRef
+ type: object
+ type: object
+ served: true
+ storage: true
+ subresources: {}
diff --git a/crossplane-crd-model/src/main/resources/kubernetes/apiextensions.crossplane.io_environmentconfigs.yaml b/crossplane-crd-model/src/main/resources/kubernetes/apiextensions.crossplane.io_environmentconfigs.yaml
new file mode 100644
index 0000000..9a703e2
--- /dev/null
+++ b/crossplane-crd-model/src/main/resources/kubernetes/apiextensions.crossplane.io_environmentconfigs.yaml
@@ -0,0 +1,57 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ controller-gen.kubebuilder.io/version: v0.14.0
+ name: environmentconfigs.apiextensions.crossplane.io
+spec:
+ group: apiextensions.crossplane.io
+ names:
+ categories:
+ - crossplane
+ kind: EnvironmentConfig
+ listKind: EnvironmentConfigList
+ plural: environmentconfigs
+ shortNames:
+ - envcfg
+ singular: environmentconfig
+ scope: Cluster
+ versions:
+ - additionalPrinterColumns:
+ - jsonPath: .metadata.creationTimestamp
+ name: AGE
+ type: date
+ name: v1alpha1
+ schema:
+ openAPIV3Schema:
+ description: A EnvironmentConfig contains a set of arbitrary, unstructured
+ values.
+ 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
+ data:
+ additionalProperties:
+ x-kubernetes-preserve-unknown-fields: true
+ description: |-
+ The data of this EnvironmentConfig.
+ This may contain any kind of structure that can be serialized into JSON.
+ type: object
+ 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
+ type: object
+ served: true
+ storage: true
+ subresources: {}
diff --git a/crossplane-crd-model/src/main/resources/kubernetes/apiextensions.crossplane.io_usages.yaml b/crossplane-crd-model/src/main/resources/kubernetes/apiextensions.crossplane.io_usages.yaml
new file mode 100644
index 0000000..e05a9b4
--- /dev/null
+++ b/crossplane-crd-model/src/main/resources/kubernetes/apiextensions.crossplane.io_usages.yaml
@@ -0,0 +1,201 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ controller-gen.kubebuilder.io/version: v0.14.0
+ name: usages.apiextensions.crossplane.io
+spec:
+ group: apiextensions.crossplane.io
+ names:
+ categories:
+ - crossplane
+ kind: Usage
+ listKind: UsageList
+ plural: usages
+ singular: usage
+ scope: Cluster
+ versions:
+ - additionalPrinterColumns:
+ - jsonPath: .metadata.annotations.crossplane\.io/usage-details
+ name: DETAILS
+ type: string
+ - jsonPath: .status.conditions[?(@.type=='Ready')].status
+ name: READY
+ type: string
+ - jsonPath: .metadata.creationTimestamp
+ name: AGE
+ type: date
+ name: v1alpha1
+ schema:
+ openAPIV3Schema:
+ description: A Usage defines a deletion blocking relationship between two
+ resources.
+ 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: UsageSpec defines the desired state of Usage.
+ properties:
+ by:
+ description: By is the resource that is "using the other resource".
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ 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
+ resourceRef:
+ description: Reference to the resource.
+ properties:
+ name:
+ description: Name of the referent.
+ type: string
+ required:
+ - name
+ type: object
+ resourceSelector:
+ description: |-
+ Selector to the resource.
+ This field will be ignored if ResourceRef is set.
+ properties:
+ matchControllerRef:
+ description: |-
+ MatchControllerRef ensures an object with the same controller reference
+ as the selecting object is selected.
+ type: boolean
+ matchLabels:
+ additionalProperties:
+ type: string
+ description: MatchLabels ensures an object with matching labels
+ is selected.
+ type: object
+ type: object
+ type: object
+ x-kubernetes-validations:
+ - message: either a resource reference or a resource selector should
+ be set.
+ rule: has(self.resourceRef) || has(self.resourceSelector)
+ of:
+ description: Of is the resource that is "being used".
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ 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
+ resourceRef:
+ description: Reference to the resource.
+ properties:
+ name:
+ description: Name of the referent.
+ type: string
+ required:
+ - name
+ type: object
+ resourceSelector:
+ description: |-
+ Selector to the resource.
+ This field will be ignored if ResourceRef is set.
+ properties:
+ matchControllerRef:
+ description: |-
+ MatchControllerRef ensures an object with the same controller reference
+ as the selecting object is selected.
+ type: boolean
+ matchLabels:
+ additionalProperties:
+ type: string
+ description: MatchLabels ensures an object with matching labels
+ is selected.
+ type: object
+ type: object
+ type: object
+ x-kubernetes-validations:
+ - message: either a resource reference or a resource selector should
+ be set.
+ rule: has(self.resourceRef) || has(self.resourceSelector)
+ reason:
+ description: Reason is the reason for blocking deletion of the resource.
+ type: string
+ replayDeletion:
+ description: ReplayDeletion will trigger a deletion on the used resource
+ during the deletion of the usage itself, if it was attempted to
+ be deleted at least once.
+ type: boolean
+ required:
+ - of
+ type: object
+ x-kubernetes-validations:
+ - message: either "spec.by" or "spec.reason" must be specified.
+ rule: has(self.by) || has(self.reason)
+ status:
+ description: UsageStatus defines the observed state of Usage.
+ 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
+ x-kubernetes-list-map-keys:
+ - type
+ x-kubernetes-list-type: map
+ type: object
+ required:
+ - spec
+ type: object
+ served: true
+ storage: true
+ subresources:
+ status: {}
diff --git a/crossplane-crd-model/src/main/resources/kubernetes/fetch.sh b/crossplane-crd-model/src/main/resources/kubernetes/fetch.sh
new file mode 100755
index 0000000..0c3588a
--- /dev/null
+++ b/crossplane-crd-model/src/main/resources/kubernetes/fetch.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+release="release-1.16"
+
+apiextensions=$(gh api --jq '.[].name' "/repos/crossplane/crossplane/contents/cluster/crds?ref=${release}" | grep apiextensions)
+
+
+for file in $apiextensions;
+do
+ # output=$(echo $file | cut -d'_' -f2)
+ gh api -H "Accept: application/vnd.github.raw+json" "/repos/crossplane/crossplane/contents/cluster/crds/${file}?ref=${release}" > $file
+done
diff --git a/crossplane-function-base/pom.xml b/crossplane-function-base/pom.xml
new file mode 100644
index 0000000..ac159b5
--- /dev/null
+++ b/crossplane-function-base/pom.xml
@@ -0,0 +1,33 @@
+
+
+ 4.0.0
+
+
+ io.crossplane.compositefunctions
+ crossplane-parent
+ ${revision}
+
+
+ crossplane-function-base
+ Crossplane base module for functions
+
+
+
+
+ io.crossplane.compositefunctions
+ crossplane-protobuf-model
+
+
+ org.slf4j
+ slf4j-api
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+
+
+
+
\ No newline at end of file
diff --git a/crossplane-function-base/src/main/java/io/crossplane/compositefunctions/CrossplaneCompositeFunctionBase.java b/crossplane-function-base/src/main/java/io/crossplane/compositefunctions/CrossplaneCompositeFunctionBase.java
new file mode 100644
index 0000000..cddf20b
--- /dev/null
+++ b/crossplane-function-base/src/main/java/io/crossplane/compositefunctions/CrossplaneCompositeFunctionBase.java
@@ -0,0 +1,69 @@
+package io.crossplane.compositefunctions;
+
+import io.crossplane.compositefunctions.protobuf.*;
+import io.grpc.stub.StreamObserver;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Map;
+
+/**
+ * The base class for a function to implement. Extend this class and implement the abstract runFunction method.
+ * This class adds any desired resources from a previously called function into the returned desired map.
+ * Any returned objects from the runFunction in the desiredresources map will be converted to protobuf resources,
+ * so the implemented method can work with the regular Java objects.
+ */
+public abstract class CrossplaneCompositeFunctionBase extends FunctionRunnerServiceGrpc.FunctionRunnerServiceImplBase {
+
+ private static final Logger logger = LoggerFactory.getLogger(CrossplaneCompositeFunctionBase.class);
+
+ @Override
+ public void runFunction(RunFunctionRequest request, StreamObserver responseObserver) {
+ try {
+
+ State.Builder desiredBuilder = State.newBuilder();
+ State desired = request.getDesired();
+
+ // Copy existing state into new desired state
+ // Should these be sent to the function? Probably?
+ desiredBuilder.putAllResources(desired.getResourcesMap());
+
+ CrossplaneFunctionRequest crossplaneFunctionRequest = new CrossplaneFunctionRequest(request.getObserved(),
+ request.getExtraResourcesMap(), request.getCredentialsMap());
+
+ logger.debug("Calling method with implemented logic");
+ CrossplaneFunctionResponse crossplaneFunctionResponse = runFunction(crossplaneFunctionRequest);
+ logger.debug("Finished calling method with implemented logic");
+
+ for (Map.Entry entry : crossplaneFunctionResponse.desiredResources().entrySet()) {
+ desiredBuilder.putResources(entry.getKey(), CrossplaneObjectToProtobufConverter.convertToResource(entry.getValue()));
+ }
+
+ Requirements requirements = Requirements.newBuilder()
+ .putAllExtraResources(crossplaneFunctionResponse.resourceSelectors())
+ .build();
+
+ RunFunctionResponse runFunctionResponse = RunFunctionResponse
+ .newBuilder()
+ .setRequirements(requirements)
+ .addAllResults(crossplaneFunctionResponse.results())
+ .setDesired(desiredBuilder.build())
+ .build();
+
+ responseObserver.onNext(runFunctionResponse);
+ responseObserver.onCompleted();
+ } catch (Exception e) {
+ logger.error("Error when running function logic", e);
+ responseObserver.onError(e);
+ }
+
+ }
+
+ /**
+ * The main method where the logic should live.
+ * @param crossplaneFunctionRequest The request object with the inputs from Crossplane added to it
+ * @return The response with desired resources, resource selectors and function results
+ */
+ public abstract CrossplaneFunctionResponse runFunction(CrossplaneFunctionRequest crossplaneFunctionRequest);
+
+}
diff --git a/crossplane-function-base/src/main/java/io/crossplane/compositefunctions/CrossplaneFunctionRequest.java b/crossplane-function-base/src/main/java/io/crossplane/compositefunctions/CrossplaneFunctionRequest.java
new file mode 100644
index 0000000..48b184c
--- /dev/null
+++ b/crossplane-function-base/src/main/java/io/crossplane/compositefunctions/CrossplaneFunctionRequest.java
@@ -0,0 +1,18 @@
+package io.crossplane.compositefunctions;
+
+import io.crossplane.compositefunctions.protobuf.Credentials;
+import io.crossplane.compositefunctions.protobuf.Resources;
+import io.crossplane.compositefunctions.protobuf.State;
+
+import java.util.Map;
+
+/**
+ * Holder for the request from crossplane
+ * @param observedState The observedstate of the crossplane resources
+ * @param extraResourcesMap A map of any extra resources requested
+ * @param credentialsMap A map of credentials sent as input
+ */
+public record CrossplaneFunctionRequest(State observedState,
+ Map extraResourcesMap,
+ Map credentialsMap) {
+}
diff --git a/crossplane-function-base/src/main/java/io/crossplane/compositefunctions/CrossplaneFunctionResponse.java b/crossplane-function-base/src/main/java/io/crossplane/compositefunctions/CrossplaneFunctionResponse.java
new file mode 100644
index 0000000..beb2478
--- /dev/null
+++ b/crossplane-function-base/src/main/java/io/crossplane/compositefunctions/CrossplaneFunctionResponse.java
@@ -0,0 +1,28 @@
+package io.crossplane.compositefunctions;
+
+import io.crossplane.compositefunctions.protobuf.ResourceSelector;
+import io.crossplane.compositefunctions.protobuf.Result;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Holder for the response to Crossplane
+ * @param desiredResources Map of the desired resources
+ * @param resourceSelectors Map of the resource selectors for any extra resources
+ * @param results List of the results
+ */
+public record CrossplaneFunctionResponse(Map desiredResources,
+ Map resourceSelectors,
+ List results) {
+
+
+ /**
+ * Create an empty response with all fields initiated
+ */
+ public CrossplaneFunctionResponse() {
+ this(new HashMap<>(), new HashMap<>(), new ArrayList<>());
+ }
+}
diff --git a/crossplane-function-base/src/main/java/io/crossplane/compositefunctions/CrossplaneObjectToProtobufConverter.java b/crossplane-function-base/src/main/java/io/crossplane/compositefunctions/CrossplaneObjectToProtobufConverter.java
new file mode 100644
index 0000000..e937774
--- /dev/null
+++ b/crossplane-function-base/src/main/java/io/crossplane/compositefunctions/CrossplaneObjectToProtobufConverter.java
@@ -0,0 +1,46 @@
+package io.crossplane.compositefunctions;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.protobuf.Struct;
+import com.google.protobuf.util.JsonFormat;
+import io.crossplane.compositefunctions.protobuf.Resource;
+
+/**
+ * Helper class for converting Java Objects into protobuf Structs within the Resource object
+ */
+public final class CrossplaneObjectToProtobufConverter {
+
+ private static final ObjectMapper objectMapper = new ObjectMapper();
+ private static final JsonFormat.Parser parser = JsonFormat.parser();
+
+ /**
+ * Convert a java object to a resource
+ * @param object The object to convert
+ * @return The Resource with the object wrapped as a Struct
+ */
+ public static Resource convertToResource(Object object) {
+ try {
+ Resource.Builder builder = Resource.newBuilder();
+ return builder.setResource(convertToStruct(object)).build();
+ } catch (Exception e) {
+ throw new RuntimeException("Unable to convert object to resource", e);
+ }
+
+ }
+
+ /**
+ * Convert a java object to a struct
+ * @param object The object to convert
+ * @return The object as a protobuf struct
+ */
+ public static Struct convertToStruct(Object object) {
+ try {
+ Struct.Builder structBuilder = Struct.newBuilder();
+ parser.merge(objectMapper.writeValueAsString(object), structBuilder);
+ return structBuilder.build();
+ } catch (Exception e) {
+ throw new RuntimeException("Unable to convert object to struct", e);
+ }
+
+ }
+}
diff --git a/crossplane-protobuf-model/pom.xml b/crossplane-protobuf-model/pom.xml
new file mode 100644
index 0000000..a560c5c
--- /dev/null
+++ b/crossplane-protobuf-model/pom.xml
@@ -0,0 +1,113 @@
+
+
+ 4.0.0
+
+
+ io.crossplane.compositefunctions
+ crossplane-parent
+ ${revision}
+
+
+ crossplane-protobuf-model
+ Crossplane coposite function protobuf
+
+
+
+ com.google.protobuf
+ protobuf-java
+
+
+ com.google.protobuf
+ protobuf-java-util
+
+
+
+ io.grpc
+ grpc-protobuf
+
+
+ io.grpc
+ grpc-stub
+
+
+ io.grpc
+ grpc-core
+
+
+ io.grpc
+ grpc-api
+
+
+ io.grpc
+ grpc-util
+
+
+ io.grpc
+ grpc-netty-shaded
+
+
+ jakarta.annotation
+ jakarta.annotation-api
+ true
+
+
+
+
+
+
+
+ kr.motd.maven
+ os-maven-plugin
+ ${os-maven-plugin.version}
+
+
+
+
+
+ org.codehaus.mojo
+ build-helper-maven-plugin
+ ${build-helper-maven-plugin.version}
+
+
+ add-source
+ generate-sources
+
+ add-source
+
+
+
+ src/main/proto/
+
+
+
+
+
+
+
+ org.xolstice.maven.plugins
+ protobuf-maven-plugin
+ 0.6.1
+
+
+
+ compile
+ compile-custom
+
+
+ grpc-java
+
+ com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier}
+
+
+ io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/crossplane-protobuf-model/src/main/proto/fetch.sh b/crossplane-protobuf-model/src/main/proto/fetch.sh
new file mode 100755
index 0000000..78b5292
--- /dev/null
+++ b/crossplane-protobuf-model/src/main/proto/fetch.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+release="release-1.16"
+file="run_function.proto"
+gh api -H "Accept: application/vnd.github.raw+json" "/repos/crossplane/crossplane/contents/apis/apiextensions/fn/proto/v1beta1/${file}?ref=${release}" > $file
+
+sed -i '/option go_package/a\option java_package = "io.crossplane.compositefunctions.protobuf";\noption java_multiple_files = true;' $file
\ No newline at end of file
diff --git a/crossplane-protobuf-model/src/main/proto/run_function.proto b/crossplane-protobuf-model/src/main/proto/run_function.proto
new file mode 100644
index 0000000..7db077e
--- /dev/null
+++ b/crossplane-protobuf-model/src/main/proto/run_function.proto
@@ -0,0 +1,267 @@
+/*
+Copyright 2022 The Crossplane Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+syntax = "proto3";
+
+import "google/protobuf/struct.proto";
+import "google/protobuf/duration.proto";
+
+package apiextensions.fn.proto.v1beta1;
+
+option go_package = "github.com/crossplane/crossplane/apis/apiextensions/fn/proto/v1beta1";
+option java_package = "io.crossplane.compositefunctions.protobuf";
+option java_multiple_files = true;
+
+// A FunctionRunnerService is a Composition Function.
+service FunctionRunnerService {
+ // RunFunction runs the Composition Function.
+ rpc RunFunction(RunFunctionRequest) returns (RunFunctionResponse) {}
+}
+
+// A RunFunctionRequest requests that the Composition Function be run.
+message RunFunctionRequest {
+ // Metadata pertaining to this request.
+ RequestMeta meta = 1;
+
+ // The observed state prior to invocation of a Function pipeline. State passed
+ // to each Function is fresh as of the time the pipeline was invoked, not as
+ // of the time each Function was invoked.
+ State observed = 2;
+
+ // Desired state according to a Function pipeline. The state passed to a
+ // particular Function may have been accumulated by previous Functions in the
+ // pipeline.
+ //
+ // Note that the desired state must be a partial object with only the fields
+ // that this function (and its predecessors in the pipeline) wants to have
+ // set in the object. Copying a non-partial observed state to desired is most
+ // likely not what you want to do. Leaving out fields that had been returned
+ // as desired before will result in them being deleted from the objects in the
+ // cluster.
+ State desired = 3;
+
+ // Optional input specific to this Function invocation. A JSON representation
+ // of the 'input' block of the relevant entry in a Composition's pipeline.
+ optional google.protobuf.Struct input = 4;
+
+ // Optional context. Crossplane may pass arbitary contextual information to a
+ // Function. A Function may also return context in its RunFunctionResponse,
+ // and that context will be passed to subsequent Functions. Crossplane
+ // discards all context returned by the last Function in the pipeline.
+ optional google.protobuf.Struct context = 5;
+
+ // Optional extra resources that the Function required.
+ // Note that extra resources is a map to Resources, plural.
+ // The map key corresponds to the key in a RunFunctionResponse's
+ // extra_resources field. If a Function requested extra resources that
+ // did not exist, Crossplane sets the map key to an empty Resources message to
+ // indicate that it attempted to satisfy the request.
+ map extra_resources = 6;
+
+ // Optional credentials that this Function may use to communicate with an
+ // external system.
+ map credentials = 7;
+}
+
+// Credentials that a Function may use to communicate with an external system.
+message Credentials {
+ // Source of the credentials.
+ oneof source {
+ // Credential data loaded by Crossplane, for example from a Secret.
+ CredentialData credential_data = 1;
+ }
+}
+
+// CredentialData loaded by Crossplane, for example from a Secret.
+message CredentialData {
+ map data = 1;
+}
+
+// Resources represents the state of several Crossplane resources.
+message Resources {
+ repeated Resource items = 1;
+}
+
+// A RunFunctionResponse contains the result of a Composition Function run.
+message RunFunctionResponse {
+ // Metadata pertaining to this response.
+ ResponseMeta meta = 1;
+
+ // Desired state according to a Function pipeline. Functions may add desired
+ // state, and may mutate or delete any part of the desired state they are
+ // concerned with. A Function must pass through any part of the desired state
+ // that it is not concerned with.
+ //
+ //
+ // Note that the desired state must be a partial object with only the fields
+ // that this function (and its predecessors in the pipeline) wants to have
+ // set in the object. Copying a non-partial observed state to desired is most
+ // likely not what you want to do. Leaving out fields that had been returned
+ // as desired before will result in them being deleted from the objects in the
+ // cluster.
+ State desired = 2;
+
+ // Results of the Function run. Results are used for observability purposes.
+ repeated Result results = 3;
+
+ // Optional context to be passed to the next Function in the pipeline as part
+ // of the RunFunctionRequest. Dropped on the last function in the pipeline.
+ optional google.protobuf.Struct context = 4;
+
+ // Requirements that must be satisfied for this Function to run successfully.
+ Requirements requirements = 5;
+}
+
+// RequestMeta contains metadata pertaining to a RunFunctionRequest.
+message RequestMeta {
+ // An opaque string identifying the content of the request. Two identical
+ // requests should have the same tag.
+ string tag = 1;
+}
+
+// Requirements that must be satisfied for a Function to run successfully.
+message Requirements {
+ // Extra resources that this Function requires.
+ // The map key uniquely identifies the group of resources.
+ map extra_resources = 1;
+}
+
+// ResourceSelector selects a group of resources, either by name or by label.
+message ResourceSelector {
+ // API version of resources to select.
+ string api_version = 1;
+
+ // Kind of resources to select.
+ string kind = 2;
+
+ // Resources to match.
+ oneof match {
+ // Match the resource with this name.
+ string match_name = 3;
+
+ // Match all resources with these labels.
+ MatchLabels match_labels = 4;
+ }
+}
+
+// MatchLabels defines a set of labels to match resources against.
+message MatchLabels {
+ map labels = 1;
+}
+
+// ResponseMeta contains metadata pertaining to a RunFunctionResponse.
+message ResponseMeta {
+ // An opaque string identifying the content of the request. Must match the
+ // meta.tag of the corresponding RunFunctionRequest.
+ string tag = 1;
+
+ // Time-to-live of this response. Deterministic Functions with no side-effects
+ // (e.g. simple templating Functions) may specify a TTL. Crossplane may choose
+ // to cache responses until the TTL expires.
+ optional google.protobuf.Duration ttl = 2;
+}
+
+// State of the composite resource (XR) and any composed resources.
+message State {
+ // The state of the composite resource (XR).
+ Resource composite = 1;
+
+ // The state of any composed resources.
+ map resources = 2;
+}
+
+// A Resource represents the state of a composite or composed resource.
+message Resource {
+ // The JSON representation of the resource.
+ //
+ // * Crossplane will set this field in a RunFunctionRequest to the entire
+ // observed state of a resource - including its metadata, spec, and status.
+ //
+ // * A Function should set this field in a RunFunctionRequest to communicate
+ // the desired state of a composite or composed resource.
+ //
+ // * A Function may only specify the desired status of a composite resource -
+ // not its metadata or spec. A Function should not return desired metadata
+ // or spec for a composite resource. This will be ignored.
+ //
+ // * A Function may not specify the desired status of a composed resource -
+ // only its metadata and spec. A Function should not return desired status
+ // for a composed resource. This will be ignored.
+ google.protobuf.Struct resource = 1;
+
+ // The resource's connection details.
+ //
+ // * Crossplane will set this field in a RunFunctionRequest to communicate the
+ // the observed connection details of a composite or composed resource.
+ //
+ // * A Function should set this field in a RunFunctionResponse to indicate the
+ // desired connection details of the composite resource.
+ //
+ // * A Function should not set this field in a RunFunctionResponse to indicate
+ // the desired connection details of a composed resource. This will be
+ // ignored.
+ map connection_details = 2;
+
+ // Ready indicates whether the resource should be considered ready.
+ //
+ // * Crossplane will never set this field in a RunFunctionRequest.
+ //
+ // * A Function should set this field to READY_TRUE in a RunFunctionResponse
+ // to indicate that a desired composed resource is ready.
+ //
+ // * A Function should not set this field in a RunFunctionResponse to indicate
+ // that the desired composite resource is ready. This will be ignored.
+ Ready ready = 3;
+}
+
+// Ready indicates whether a composed resource should be considered ready.
+enum Ready {
+ READY_UNSPECIFIED = 0;
+
+ // True means the composed resource has been observed to be ready.
+ READY_TRUE = 1;
+
+ // False means the composed resource has not been observed to be ready.
+ READY_FALSE = 2;
+}
+
+// A Result of running a Function.
+message Result {
+ // Severity of this result.
+ Severity severity = 1;
+
+ // Human-readable details about the result.
+ string message = 2;
+}
+
+// Severity of Function results.
+enum Severity {
+ SEVERITY_UNSPECIFIED = 0;
+
+ // Fatal results are fatal; subsequent Composition Functions may run, but
+ // the Composition Function pipeline run will be considered a failure and
+ // the first fatal result will be returned as an error.
+ SEVERITY_FATAL = 1;
+
+ // Warning results are non-fatal; the entire Composition will run to
+ // completion but warning events and debug logs associated with the
+ // composite resource will be emitted.
+ SEVERITY_WARNING = 2;
+
+ // Normal results are emitted as normal events and debug logs associated
+ // with the composite resource.
+ SEVERITY_NORMAL = 3;
+}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..630600b
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,250 @@
+
+
+ 4.0.0
+
+
+ io.crossplane.compositefunctions
+ crossplane-parent
+ ${revision}
+ pom
+
+ https://crossplane.io/
+ Crossplane parent pom for composite functions
+
+
+ 1.0.0-SNAPSHOT
+ UTF-8
+ UTF-8
+ 17
+ 17
+
+
+ 6.13.0
+ 1.7.1
+ 4.27.0
+ 1.64.0
+ 1.3.5
+ 2.0.13
+ 2.17.1
+
+
+ 1.6.0
+ 0.4.0
+ 3.3.1
+ 3.7.0
+ 3.2.4
+ 3.6.0
+
+
+
+ crossplane-crd-model
+ crossplane-protobuf-model
+ crossplane-function-base
+
+
+
+
+
+ io.crossplane.compositefunctions
+ crossplane-crd-model
+ ${revision}
+
+
+ io.crossplane.compositefunctions
+ crossplane-protobuf-model
+ ${revision}
+
+
+
+
+ io.fabric8
+ kubernetes-client-bom
+ ${kubernetes-client.version}
+ import
+ pom
+
+
+ com.google.protobuf
+ protobuf-java
+ ${protobuf.version}
+
+
+ com.google.protobuf
+ protobuf-java-util
+ ${protobuf.version}
+
+
+
+
+ io.grpc
+ grpc-protobuf
+ ${grpc.version}
+
+
+ io.grpc
+ grpc-stub
+ ${grpc.version}
+
+
+ io.grpc
+ grpc-core
+ ${grpc.version}
+
+
+ io.grpc
+ grpc-api
+ ${grpc.version}
+
+
+ io.grpc
+ grpc-util
+ ${grpc.version}
+
+
+ io.grpc
+ grpc-netty-shaded
+ ${grpc.version}
+
+
+ jakarta.annotation
+ jakarta.annotation-api
+ ${jakarta-annotation.version}
+
+
+ org.slf4j
+ slf4j-api
+ ${slf4j.version}
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson-databind.version}
+
+
+
+
+
+
+
+
+ org.codehaus.mojo
+ flatten-maven-plugin
+ ${flatten-maven-plugin.version}
+
+ true
+ resolveCiFriendliesOnly
+
+
+
+ flatten
+ process-resources
+
+ flatten
+
+
+
+ flatten.clean
+ clean
+
+ clean
+
+
+
+
+
+ org.sonatype.central
+ central-publishing-maven-plugin
+ ${central-publishing-maven-plugin.version}
+ true
+
+ central
+ true
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+ ${maven-source-plugin.version}
+
+
+ attach-sources
+
+ jar-no-fork
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+ ${maven-javadoc-plugin.version}
+
+ all,missing
+ io.crossplane.compositefunctions.protobuf:io.crossplane.apiextensions.*
+
+
+
+ attach-javadocs
+
+ jar
+
+
+
+
+
+
+
+
+
+
+ The Apache License, Version 2.0
+ http://www.apache.org/licenses/LICENSE-2.0.txt
+
+
+
+
+
+
+ Knut-Erik Johnsen
+ Crossplane
+ https://crossplane.io
+
+
+
+
+ scm:git:git://github.com/crossplane/function-sdk-java.git
+ scm:git:ssh://github.com:crossplane/function-sdk-java.git
+ https://github.com/crossplane/function-sdk-java/tree/main
+
+
+
+
+ deploy
+
+
+
+ org.apache.maven.plugins
+ maven-gpg-plugin
+ ${maven-gpg-plugin.version}
+
+
+ --pinentry-mode
+ loopback
+
+
+
+
+ sign-artifacts
+ verify
+
+ sign
+
+
+
+
+
+
+
+
+
\ No newline at end of file