Reputation: 1
I am looking condition base approach in cross plane composition. for example, I have below steps
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