Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Condition based approach in Crossplane composition #42

Open
A630508 opened this issue Jan 29, 2025 · 0 comments
Open

Condition based approach in Crossplane composition #42

A630508 opened this issue Jan 29, 2025 · 0 comments

Comments

@A630508
Copy link

A630508 commented Jan 29, 2025

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant