kubevela.github.io/docs/platform-engineers/workflow/cue-actions.md

4.6 KiB

title
Appendix - CUE Actions

This doc will illustrate the CUE actions provided in vela/op stdlib package.

To learn the syntax of CUE, read CUE Basic

Apply


Create or update resource in Kubernetes cluster.

Action Parameter

  • value: the resource structure to be created or updated. And after successful execution, value will be updated with resource status.
  • patch: the content support Strategic Merge Patch,let you can define the strategy of list merge through comments.
#Apply: {
  value: {...}
  patch: {
    //patchKey=$key
    ...
  }
}

Usage

import "vela/op"
stepName: op.#Apply & {
  value: {
    kind: "Deployment"
    apiVersion: "apps/v1"
    metadata: name: "test-app"
    spec: { 
      replicas: 2
      ...
    }
  }
  patch: {
   spec: template: spec: {
      //patchKey=name
      containers: [{name: "sidecar"}]
   }
  }
}

ConditionalWait


Step will be blocked until the condition is met.

Action Parameter

  • continue: Step will be blocked until the value becomes true.
#ConditionalWait: {
  continue: bool
}

Usage

import "vela/op"

apply: op.#Apply

wait: op.#ConditionalWait: {
  continue: apply.value.status.phase=="running"
}

Load


Get all components in application.

Action Parameter

No parameters.

#Load: {}

Usage

import "vela/op"

// You can use `load.value.[componentName] after this action.
load: op.#Load & {}

Read


Get resource in Kubernetes cluster.

Action Parameter

  • value: the resource metadata to be get. And after successful execution, value will be updated with resource definition in cluster.
  • err: if an error occurs, the err will contain the error message.
#Read: {
  value: {}
  err?: string
}

Usage

// You can use configmap.value.data after this action.
configmap: op.#Read & {
   value: {
      kind: "ConfigMap"
      apiVersion: "v1"
      metadata: {
        name: "configmap-name"
        namespace: "configmap-ns"
      }
   }
}

ApplyApplication


Create or update resources corresponding to the application in Kubernetes cluster.

Action Parameter

No parameters.

#ApplyApplication: {}

Usage

apply: op.#ApplyApplication & {}

ApplyComponent


Create or update resources corresponding to the component in Kubernetes cluster.

Action Parameter

  • component: the component name.
  • workload: the workload resource of the component. Value will be filled after successful execution.
  • traits: the trait resources of the component. Value will be filled after successful execution.
#ApplyComponent: {
  component: string
  workload: {...}
  traits: [string]: {...}
}

Usage

apply: op.#ApplyComponent & {
  component: "component-name"
}

ApplyRemaining


Create or update the resources corresponding to all components in the application in the Kubernetes cluster, and specify which components do not need to apply through exceptions, or skip some resources of the exceptional component.

Action Parameter

  • exceptions: indicates the name of the exceptional component.
  • skipApplyWorkload: indicates whether to skip apply the workload resource.
  • skipAllTraits: indicates to skip apply all resources of the traits.
#ApplyRemaining: {
 exceptions?: [componentName=string]: {
    skipApplyWorkload: *true | bool
      
    skipAllTraits: *true| bool
  }
}  

Usage

apply: op.#ApplyRemaining & {
  exceptions: {"applied-component-name": {}}
}

Slack


Send messages to Slack.

Action Parameter

  • url: The webhook address of Slack.
  • message: The messages that you want to send, please refer to Slack messaging
#Slack: {
  url: string
  message: {...}
}

Usage

apply: op.#Slack & {
  url: webhook url
  message:
    text: Hello KubeVela
}

DingTalk


Send messages to DingTalk.

Action Parameter

  • url: The webhook address of DingTalk.
  • message: The messages that you want to send, please refer to DingTalk messaging
#DingTalk: {
  url: string
  message: {...}
}

Usage

apply: op.#DingTalk & {
  url: webhook url
  message:
    msgtype: text
    text:
      context: Hello KubeVela
}

Steps


Used to encapsulate a set of operations.

  • In steps, you need to specify the execution order by tag.

Usage

app: op.#Steps & {
  load: op.#Load & {
    component: "component-name"
  } @step(1)
  apply: op.#Apply & {
    value: load.value.workload
  } @step(2)
}