Skip to content

Condition based approach in Crossplane composition #42

@A630508

Description

@A630508

Hello Team, I am looking condition base approach in cross plane composition. for example, I have below steps

  1. VM provision
  2. Send Event to Event Bus - if VM provision successful
  3. send Event to Event Bus - if VM provision failed

I am looking for some condition here to fulfilled above request.
currently crossplane sending payload to event bus before creating VM, it should send event depend upon VM provision status.

apiVersion: apiextensions.crossplane.io/v1
kind: Composition
metadata:
name: vm-vsphere
labels:
provider: vsphere
spec:
compositeTypeRef:
apiVersion: test.net/v1alpha1
kind: xvmcomm
mode: Pipeline
pipeline:
- step: vm-provisioning
functionRef:
name: function-go-templating
input:
apiVersion: gotemplating.fn.crossplane.io/v1beta1
kind: GoTemplate
source: Inline
inline:
template: |
"my VM Creation code"

- step: send-event-payload
  functionRef:
    name: function-go-templating
  input:
    apiVersion: gotemplating.fn.crossplane.io/v1beta1
    kind: GoTemplate
    source: Inline
    inline:
      template: |
        {{- $eventtopic := .observed.composite.resource.spec.eventtopic }}
        {{- $airflowcmdbParams := .observed.composite.resource.spec.airflowcmdbParams }}
        {{- $companyname := .observed.composite.resource.spec.companyname }}
        {{- $eventnumber := .observed.composite.resource.spec.eventnumber }}
        {{- $eventtype := .observed.composite.resource.spec.eventtype }}
        {{- $eventsendername := .observed.composite.resource.spec.eventsendername }}

        ---
        apiVersion: events.test.net/v1alpha1
        kind: xEventBusSender
        metadata:
          name: {{ $eventsendername }}
          annotations:
            gotemplating.fn.crossplane.io/composition-resource-name: xEventBusSender
            crossplane.io/paused: "false"
        spec:
          topic: {{ $eventtopic }}
          specversion: "1.0"
          source: "epis://{{ $companyname }}/acme/{{ $eventnumber }}/automation"
          type: "net.{{ $companyname }}.test.net.{{ $eventtype }}"
          data: '{{ $airflowcmdbParams | toJson }}'

- step: send-failure-payload
  dependsOn:
    - vm-provisioning
  condition:
    type: Failure
  functionRef:
    name: function-go-templating
  input:
    apiVersion: gotemplating.fn.crossplane.io/v1beta1
    kind: GoTemplate
    source: Inline
    inline:
      template: |
        {{- $eventtopic := .observed.composite.resource.spec.eventtopic }}
        {{- $failureMessage := "VM deployment failed" }}
        {{- $companyname := .observed.composite.resource.spec.companyname }}
        {{- $eventnumber := .observed.composite.resource.spec.eventnumber }}
        {{- $eventsendername := .observed.composite.resource.spec.eventsendername }}

        ---
        apiVersion: event.test.net/v1alpha1
        kind: xEventBusSender
        metadata:
          name: {{ $eventsendername }}-failure
          annotations:
            {{ setResourceNameAnnotation (printf "%s-failure" $eventsendername) }}
        spec:
          topic: {{ $eventtopic }}
          specversion: "1.0"
          source: "epis://{{ $companyname }}/acme/{{ $eventnumber }}/automation"
          type: "net.{{ $companyname }}.test.net"
          data: '{{ $failureMessage }}'


- step: automatically-detect-ready-composed-resources
  functionRef:
    name: function-auto-ready

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions