Skip to content

crossplane-contrib/function-cel-filter

Repository files navigation

function-cel-filter

CI

A composition function that filters matching composed resources using CEL expressions.

Each filter:

  • Matches composed resources by name using a regular expression.
  • Specifies whether resources should be included using a CEL expression.

If a filter's CEL expression evaluates to true, Crossplane creates the matching composed resources.

Filters only apply to matching composed resources. The function doesn't filter composed resources that don't match a filter.

apiVersion: apiextensions.crossplane.io/v1
kind: Composition
metadata:
  name: function-template-go
spec:
  compositeTypeRef:
    apiVersion: example.crossplane.io/v1
    kind: NoSQL
  mode: Pipeline
  pipeline:
  - step: patch-and-transform
    functionRef:
      name: function-patch-and-transform
    input:
      apiVersion: pt.fn.crossplane.io/v1beta1
      kind: Resources
      resources:
      - name: table
        base:
          apiVersion: dynamodb.aws.upbound.io/v1beta1
          kind: Table
          metadata:
            name: crossplane-quickstart-database
          spec:
            forProvider:
              region: "us-east-2"
              writeCapacity: 1
              readCapacity: 1
              attribute:
                - name: S3ID
                  type: S
              hashKey: S3ID
      - name: bucket
        base:
          apiVersion: s3.aws.upbound.io/v1beta1
          kind: Bucket
          spec:
            forProvider:
              region: us-east-2
  - step: filter-composed-resources
    functionRef:
      name: function-cel-filter
    input:
      apiVersion: cel.fn.crossplane.io/v1beta1
      kind: Filters
      filters:
      # Only create the bucket if the XR's spec.export field is set to "S3".
      - name: bucket
        expression: observed.composite.resource.spec.export == "S3"

The following top-level variables are available to the CEL expression:

  • observed
  • desired
  • context

Example expressions:

  • observed.composite.resource.spec.widgets == 42
  • observed.resources['bucket'].connection_details['user'] == b'admin'
  • desired.resources['bucket'].resource.spec.widgets == 42
  • "bucket" in desired.resources

Expressions must evaluate to true for the composed resource to be included.

See the RunFunctionRequest protobuf message for schema details. The introduction to CEL documentation shows more example expressions.

About

Conditionally filter composed resources using CEL

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •