Skip to content

Commit

Permalink
Update Composition Functions content to v1beta1
Browse files Browse the repository at this point in the history
This updates all current documentation of Composition Functions in the
master directory to reflect the new v1beta1 implementation.

Signed-off-by: Nic Cope <[email protected]>
  • Loading branch information
negz committed Oct 25, 2023
1 parent 80a66e8 commit 8baf045
Showing 1 changed file with 51 additions and 28 deletions.
79 changes: 51 additions & 28 deletions content/master/concepts/compositions.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ Optionally, Compositions also support:
* [Modifying and patching](#changing-resource-fields) resource settings.
* [Storing connection details](#storing-connection-details) and secrets
generated by the managed resources.
* Using [Composition functions](#composition-functions) to allow custom
programs to run alongside the Composition.
* Using [Composition Functions](#composition-functions) to template resources
using custom programs.
* Creating a
[custom check of when a resource is ready](#resource-readiness-checks)
to use.
Expand Down Expand Up @@ -664,40 +664,59 @@ spec:
The [EnvironmentConfigs]({{<ref "./environment-configs" >}}) page has
more information on EnvironmentConfigs options and usage.

### Composition functions
### Use Composition functions

Composition functions (`XFNs`) are containers executing any code you define.
Composition functions can read and write to any resource in the Composition
they're attached to. This allows composition functions to perform complex
operations to patch fields, determine if a resource is ready for use or notify
an external system about the details of resource.
Composition functions (or just Functions, for short) are custom programs that
template Crossplane resources. You can write a Function to template resources
using a general purpose programming language like Go or Python. Using a general
purpose programming language allows a Function to use more advanced logic to
template resources, like loops and conditionals.

{{<hint "important" >}}
Composition functions are an alpha feature. Alpha features aren't enabled by
default.
Composition functions are a beta feature.
{{< /hint >}}

To attach a composition function to a Composition define a
{{<hover label="xfn" line="7">}}function{{</hover>}} inside the Composition
{{<hover label="xfn" line="4">}}spec{{</hover>}}.

Provide a {{<hover label="xfn" line="8">}}name{{</hover>}} for the function.
The {{<hover label="xfn" line="9">}}type{{</hover>}} is always `Container`.
The {{<hover label="xfn" line="11">}}container.image{{</hover>}} is the
location of the composition function container image.
To use composition functions define a {{<hover label="xfn"
line="7">}}pipeline{{</hover>}} of steps inside the Composition {{<hover
label="xfn" line="4">}}spec{{</hover>}}. Each {{<hover label="xfn"
line="8">}}step{{</hover>}} calls a Function. You can't specify resource
templates using the `resources` field when you specify a pipeline of Functions.
You must set the Composition {{<hover label="xfn" line="6">}}mode{{</hover>}} to
`Pipeline` to use Functions.

Each {{<hover label="xfn" line="8">}}step{{</hover>}} must specify the {{<hover
label="xfn" line="10">}}name{{</hover>}} of the Function to call. Some Functions
also allow you to specify an {{<hover label="xfn" line="11">}}input{{</hover>}}.
Different Functions each have a different {{<hover label="xfn"
line="13">}}kind{{</hover>}} of input.

This example uses Function Patch and Transform. Function Patch and Transform is
a Function that implements Crossplane resource templates. You can use Function
Patch and Transform to specify resource templates in a pipeline with other
Functions.

```yaml {label="xfn",copy-lines="none"}
apiVersion: apiextensions.crossplane.io/v1
kind: Composition
# Removed for Brevity
spec:
resources:
# Removed for Brevity
functions:
- name: rds-instance-password
type: Container
container:
image: xpkg.upbound.io/provider-aws-xfns/random-rds-password:v0.1.0
mode: Pipeline
pipeline:
- step: patch-and-transform
functionRef:
name: function-patch-and-transform
input:
apiVersion: pt.fn.crossplane.io/v1beta1
kind: Resources
resources:
- name: storage-bucket
base:
apiVersion: s3.aws.upbound.io/v1beta1
kind: Bucket
spec:
forProvider:
region: "us-east-2"
```

Read the [composition functions]({{<ref "./composition-functions">}}) page for
Expand Down Expand Up @@ -1293,6 +1312,9 @@ Composition.
When creating a Composition Crossplane automatically validates specific
parameters in the Composition.

If using `mode: Resources`:

* The `resources` field isn't empty.
* All resources either use a `name` or don't. Compositions can't use both named
and unnamed resources.
* No duplicate resource names.
Expand All @@ -1303,10 +1325,11 @@ parameters in the Composition.
* Readiness checks using `matchString` aren't empty.
* Readiness checks using `matchInteger` isn't `0`.
* Readiness checks requiring a `fieldPath` value provide it.
* If using composition functions, all resources must have names.
* Composition function container field isn't empty.
* Composition function `type` is `container`.
* Composition function names are unique.

If using `mode: Pipeline` (Composition Functions):

* The `pipeline` field isn't empty.
* No duplicate step names.

### Resource schema validation
<!-- vale write-good.TooWordy = NO -->
Expand Down

0 comments on commit 8baf045

Please sign in to comment.