Pradip
Pradip

Reputation: 1

Condition based approach in Cross plane composition

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

I tried above code but event is getting send to event bus before VM provision, it will be difficult understand whether VM Provision completed successfully or not

Upvotes: 0

Views: 36

Answers (0)

Related Questions