From 6921301495f3167d97b744d63df4c891311dca2e Mon Sep 17 00:00:00 2001 From: Knut-Erik Johnsen Date: Tue, 18 Jun 2024 23:20:06 +0200 Subject: [PATCH] Inital project structure (#1) Base structure for the Java SDK. --------- Signed-off-by: Knut-Erik Johnsen --- .github/workflows/maven-build.yaml | 21 + .github/workflows/maven-release.yaml | 44 + .gitignore | 6 + crossplane-crd-model/pom.xml | 48 + ...plane.io_compositeresourcedefinitions.yaml | 553 +++ ...ns.crossplane.io_compositionrevisions.yaml | 3183 +++++++++++++++++ ...extensions.crossplane.io_compositions.yaml | 1543 ++++++++ ...ions.crossplane.io_environmentconfigs.yaml | 57 + .../apiextensions.crossplane.io_usages.yaml | 201 ++ .../src/main/resources/kubernetes/fetch.sh | 12 + crossplane-function-base/pom.xml | 33 + .../CrossplaneCompositeFunctionBase.java | 69 + .../CrossplaneFunctionRequest.java | 18 + .../CrossplaneFunctionResponse.java | 28 + .../CrossplaneObjectToProtobufConverter.java | 46 + crossplane-protobuf-model/pom.xml | 113 + .../src/main/proto/fetch.sh | 7 + .../src/main/proto/run_function.proto | 267 ++ pom.xml | 250 ++ 19 files changed, 6499 insertions(+) create mode 100644 .github/workflows/maven-build.yaml create mode 100644 .github/workflows/maven-release.yaml create mode 100644 crossplane-crd-model/pom.xml create mode 100644 crossplane-crd-model/src/main/resources/kubernetes/apiextensions.crossplane.io_compositeresourcedefinitions.yaml create mode 100644 crossplane-crd-model/src/main/resources/kubernetes/apiextensions.crossplane.io_compositionrevisions.yaml create mode 100644 crossplane-crd-model/src/main/resources/kubernetes/apiextensions.crossplane.io_compositions.yaml create mode 100644 crossplane-crd-model/src/main/resources/kubernetes/apiextensions.crossplane.io_environmentconfigs.yaml create mode 100644 crossplane-crd-model/src/main/resources/kubernetes/apiextensions.crossplane.io_usages.yaml create mode 100755 crossplane-crd-model/src/main/resources/kubernetes/fetch.sh create mode 100644 crossplane-function-base/pom.xml create mode 100644 crossplane-function-base/src/main/java/io/crossplane/compositefunctions/CrossplaneCompositeFunctionBase.java create mode 100644 crossplane-function-base/src/main/java/io/crossplane/compositefunctions/CrossplaneFunctionRequest.java create mode 100644 crossplane-function-base/src/main/java/io/crossplane/compositefunctions/CrossplaneFunctionResponse.java create mode 100644 crossplane-function-base/src/main/java/io/crossplane/compositefunctions/CrossplaneObjectToProtobufConverter.java create mode 100644 crossplane-protobuf-model/pom.xml create mode 100755 crossplane-protobuf-model/src/main/proto/fetch.sh create mode 100644 crossplane-protobuf-model/src/main/proto/run_function.proto create mode 100644 pom.xml 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