Skip to content

Crossplane Composition function to enable creation of resources by Composite annotations.

License

Notifications You must be signed in to change notification settings

web-seven/function-switcher

Folders and files

NameName
Last commit message
Last commit date
Mar 11, 2024
Oct 12, 2024
Mar 12, 2024
Mar 2, 2024
Mar 6, 2024
Mar 2, 2024
Mar 2, 2024
Mar 11, 2024
Oct 12, 2024
Oct 12, 2024
Mar 6, 2024
Mar 4, 2024
Mar 2, 2024
Mar 11, 2024
Mar 6, 2024
Mar 2, 2024

Repository files navigation

function-switcher

CI

Function Switcher is a Crossplane function that enables Composition users to enable or disable creation of resources, without update schema of XRD, just using annotations like in on this example:

apiVersion: example.crossplane.io/v1
kind: XR
metadata:
  name: example-xr
  annotations:
    ## Annotations for enable/disable resources of Composition.
    switcher.fn.kndp.io/disabled: "resourceTwo,resourceThree"
    switcher.fn.kndp.io/enabled: "resourceOne"
spec:
  resourceOne:
    field1: "one"
    field2: "two"
  resourceTwo:
    field1: "three"
    field2: "four"
  resourceThree:
    field1: "five"
    field2: "six"

Installation:

  1. Create function using function package from registry:
apiVersion: pkg.crossplane.io/v1beta1
kind: Function
metadata:
  name: function-switcher
spec:
  package: xpkg.upbound.io/kndp/function-switcher:v0.0.1
  1. Setup function required to add it after resources generation function like function-patch-and-transform:
apiVersion: apiextensions.crossplane.io/v1
kind: Composition
metadata:
  name: function-switcher
spec:
  mode: Pipeline
  pipeline:
  - step: patch-and-transform
    functionRef:
      name: function-patch-and-transform
    input:
      apiVersion: pt.fn.crossplane.io/v1beta1
      kind: Resources
      resources:

      - name: resourceOne
        base:
          apiVersion: example.crossplane.io/v1
          kind: Resource
          spec:
            field1: ""
            field2: ""
        patches:
          - type: FromCompositeFieldPath
            fromFieldPath: "spec.resourceOne.field1"
            toFieldPath: "spec.field1"
          - type: FromCompositeFieldPath
            fromFieldPath: "spec.resourceOne.field2"
            toFieldPath: "spec.field2"

      - name: resourceTwo
        base:
          apiVersion: example.crossplane.io/v1
          kind: Resource
          spec:
            field1: ""
            field2: ""
        patches:
          - type: FromCompositeFieldPath
            fromFieldPath: "spec.resourceTwo.field1"
            toFieldPath: "spec.field1"
          - type: FromCompositeFieldPath
            fromFieldPath: "spec.resourceTwo.field2"
            toFieldPath: "spec.field2"

      - name: resourceThree
        base:
          apiVersion: example.crossplane.io/v1
          kind: Resource
          spec:
            field1: ""
            field2: ""
        patches:
          - type: FromCompositeFieldPath
            fromFieldPath: "spec.resourceThree.field1"
            toFieldPath: "spec.field1"
          - type: FromCompositeFieldPath
            fromFieldPath: "spec.resourceThree.field2"
            toFieldPath: "spec.field2"
  ## Enable or disable resources from previous step
  - step: enable-disable
    functionRef:
      name: function-switcher

  compositeTypeRef:
    apiVersion: example.crossplane.io/v1
    kind: XR

Templates

You could use simple Go template in function annotation for enable or disable composition resources conditionally using .observed and .desired, or even print name of resource:

apiVersion: example.crossplane.io/v1
kind: XR
metadata:
  name: example-xr
  annotations:
    switcher.fn.kndp.io/enabled: 'resourceThree,resourceOne'
    switcher.fn.kndp.io/disabled: '{{ if ne .observed.composite.resource.status.ready true }}resourceThree{{ end }}'
spec:
  resourceOne:
    field1: "one"
    field2: "two"
  resourceTwo:
    field1: "three"
    field2: "four"
  resourceThree:
    field1: "five"
    field2: "six"
status:
  ready: false

About

Crossplane Composition function to enable creation of resources by Composite annotations.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published