kubevela.github.io/docs/end-user/workflow/dependency.md

2.5 KiB

title
Dependency

This section will introduce how to specify dependencies for workflow steps.

:::note In the version <=1.4, the steps in the workflow are executed sequentially, which means that there is an implicit dependency between steps, ie: the next step depends on the successful execution of the previous step. At this point, specifying dependencies in the workflow may not make much sense.

In versions 1.5+, you can display the execution method of the specified workflow steps (eg: change to DAG parallel execution). At this time, you can control the execution of the workflow by specifying the dependencies of the steps. :::

How to use

In KubeVela, the dependencies between steps can be specified by dependsOn in the steps.

For example: we want to send a message notification after deploying the component:

...
workflow:
  steps:
    - name: comp
      type: apply-component
    - name: notify
      type: notification
      dependsOn:
        - comp

In this case, KubeVela waits for the completion of the step comp before executing the notify step to send a message notification.

Apply the following YAML:

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
  name: dependsOn-app
  namespace: default
spec:
  components:
  - name: express-server
    type: webservice
    properties:
      image: oamdev/hello-world
      ports:
        - port: 8000
  workflow:
    steps:
      - name: comp
        type: apply-component
        properties:
          component: express-server
      - name: slack-message
        type: notification
        dependsOn:
          - comp
        properties:
          slack:
            url:
              value: <your slack url>
            message:
              text: depends on comp

Expected outcome

Use vela status to check the status of the Application:

$ vela status depends
About:

  Name:      	depends
  Namespace: 	default
  Created at:	2022-06-24 17:20:50 +0800 CST
  Status:    	running

Workflow:

  mode: StepByStep
  finished: true
  Suspend: false
  Terminated: false
  Steps
  - id:e6votsntq3
    name:comp
    type:apply-component
    phase:succeeded
    message:
  - id:esvzxehgwc
    name:slack-message
    type:notification
    phase:succeeded
    message:

Services:

  - Name: express-server
    Cluster: local  Namespace: default
    Type: webservice
    Healthy Ready:1/1
    No trait applied

As you can see, all step statuses are succeeded. And when the component is successfully deployed, a message is also sent in slack.