kubevela.github.io/versioned_docs/version-v1.1/end-user/workflow/apply-remaining.md

4.1 KiB

title
Apply Remaining

If we want to apply one component first and then apply the rest of the components after the first one is running, KubeVela provides the apply-remaining workflow step to filter out selected resources and apply remaining.

In this guide, you will learn how to apply remaining resources via apply-remaining in Workflow.

How to use

Apply the following Application with workflow step type of apply-remaining:

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
  name: first-vela-workflow
  namespace: default
spec:
  components:
  - name: express-server
    type: webservice
    properties:
      image: crccheck/hello-world
      port: 8000
    traits:
    - type: ingress
      properties:
        domain: testsvc.example.com
        http:
          /: 8000
  - name: express-server2
    type: webservice
    properties:
      image: crccheck/hello-world
      port: 8000
  - name: express-server3
    type: webservice
    properties:
      image: crccheck/hello-world
      port: 8000
  - name: express-server4
    type: webservice
    properties:
      image: crccheck/hello-world
      port: 8000
  workflow:
    steps:
      - name: first-server
        type: apply-component
        properties:
          component: express-server
      - name: manual-approval
        # suspend is a built-in task of workflow used to suspend the workflow
        type: suspend
      - name: remaining-server
        # specify the workflow step type
        type: apply-remaining
        properties:
          # specify the component that needs to be skipped
          exceptions:
            # specify the configuration of the component
            express-server:
              # skipApplyWorkload indicates whether to skip apply the workload resource
              skipApplyWorkload: true
              # skipAllTraits indicates to skip apply all resources of the traits
              skipAllTraits: true

Expected outcome

Check the Application status:

kubectl get application first-vela-workflow -o yaml

We can see that the workflow is suspended at manual-approval:

...
  status:
    workflow:
      ...
      stepIndex: 2
      steps:
      - name: first-server
        phase: succeeded
        resourceRef: {}
        type: apply-component
      - name: manual-approval
        phase: succeeded
        resourceRef: {}
        type: suspend
      suspend: true
      terminated: false

Check the component status in cluster and resume the workflow after the component is running:

$ kubectl get deployment

NAME             READY   UP-TO-DATE   AVAILABLE   AGE
express-server   1/1     1            1           5s

$ kubectl get ingress

NAME             CLASS    HOSTS                 ADDRESS   PORTS   AGE
express-server   <none>   testsvc.example.com             80      47s

Resume the workflow:

vela workflow resume first-vela-workflow

Recheck the Application status:

kubectl get application first-vela-workflow -o yaml

All the step status in workflow is succeeded:

...
  status:
    workflow:
      ...
      stepIndex: 3
      steps:
      - name: first-server
        phase: succeeded
        resourceRef: {}
        type: apply-component
      - name: manual-approval
        phase: succeeded
        resourceRef: {}
        type: suspend
      - name: remaining-server
        phase: succeeded
        resourceRef: {}
        type: apply-remaining
      suspend: false
      terminated: true

Recheck the component status:

$ kubectl get deployment

NAME              READY   UP-TO-DATE   AVAILABLE   AGE
express-server    1/1     1            1           110s
express-server2   1/1     1            1           6s
express-server3   1/1     1            1           6s
express-server4   1/1     1            1           6s

We can see that all of the components has been applied to the cluster successfully. Besides, the first component express-server is not applied repeatedly.

With apply-remaining, we can easily filter and apply resources by filling in the built-in parameters.