crossplane - Condition based approach in Cross plane composition - Stack Overflow

I am looking condition base approach in cross plane composition. for example, I have below stepsVM prov

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/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 := .observedposite.resource.spec.eventtopic }}
        {{- $airflowcmdbParams := .observedposite.resource.spec.airflowcmdbParams }}
        {{- $companyname := .observedposite.resource.specpanyname }}
        {{- $eventnumber := .observedposite.resource.spec.eventnumber }}
        {{- $eventtype := .observedposite.resource.spec.eventtype }}
        {{- $eventsendername := .observedposite.resource.spec.eventsendername }}

        ---
        apiVersion: events.test/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.{{ $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 := .observedposite.resource.spec.eventtopic }}
        {{- $failureMessage := "VM deployment failed" }}
        {{- $companyname := .observedposite.resource.specpanyname }}
        {{- $eventnumber := .observedposite.resource.spec.eventnumber }}
        {{- $eventsendername := .observedposite.resource.spec.eventsendername }}

        ---
        apiVersion: event.test/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"
          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

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745309015a4621887.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信