版本:v1.3

附录:CUE 操作符

这个文档介绍 step 定义过程中,可以使用的 CUE 操作类型。这些操作均由 vela/op 包提供。

可以阅读 CUE 基础文档 来学习 CUE 基础语法。


在 Kubernetes 集群中创建或者更新资源。

  • value: 将被 apply 的资源的定义。操作成功执行后,会用集群中资源的状态重新渲染 value
  • patch: 对 value 的内容打补丁,支持策略性合并,比如可以通过注释 // +patchKey 实现数组的按主键合并。
  1. #Apply: {
  2. value: {...}
  3. patch: {
  4. // patchKey=$key
  5. ...
  6. }
  7. }
  1. import "vela/op"
  2. stepName: op.#Apply & {
  3. value: {
  4. kind: "Deployment"
  5. apiVersion: "apps/v1"
  6. metadata: name: "test-app"
  7. spec: {
  8. replicas: 2
  9. ...
  10. }
  11. }
  12. patch: {
  13. spec: template: spec: {
  14. // patchKey=name
  15. containers: [{name: "sidecar"}]
  16. }
  17. }
  18. }

会让 workflow step 处于等待状态,直到条件被满足。

  • continue: 当该字段为 true 时,workflow step 才会恢复继续执行。
  1. #ConditionalWait: {
  2. continue: bool
  3. }
  1. import "vela/op"
  2. apply: op.#Apply
  3. wait: op.#ConditionalWait & {
  4. continue: apply.value.status.phase=="running"
  5. }

获取 Application 中所有组件对应的资源数据。

无需指定参数。

  1. #Load: {}
  1. import "vela/op"
  2. // 该操作完成后,你可以使用 `load.value.[componentName]` 来获取到对应组件的资源数据
  3. load: op.#Load & {}

读取 Kubernetes 集群中的资源。

  • value: 需要用户描述读取资源的元数据,比如 kind、name 等,操作完成后,集群中资源的数据会被填充到 value 上。
  • err: 如果读取操作发生错误,这里会以字符串的方式指示错误信息。
  1. #Read: {
  2. value: {}
  3. err?: string
  4. }
  1. // 操作完成后,你可以通过 configmap.value.data 使用 configmap 里面的数据
  2. configmap: op.#Read & {
  3. value: {
  4. kind: "ConfigMap"
  5. apiVersion: "v1"
  6. metadata: {
  7. name: "configmap-name"
  8. namespace: "configmap-ns"
  9. }
  10. }
  11. }

在 Kubernetes 集群中创建或者更新应用对应的所有资源。

无需指定参数。

  1. #ApplyApplication: {}
  1. apply: op.#ApplyApplication & {}

在 Kubernetes 集群中创建或者更新组件对应的所有资源。注意,在使用该操作前需要先用 Load 加载资源。

  • value: 指定需要 apply 的资源定义。
  • patch: 指定需要 patch 的资源定义
  1. #ApplyComponent: {
  2. value: {...}
  3. patch: {...}
  4. }
  1. load: op.#Load & {}
  2. apply: op.#ApplyComponent & {
  3. value: load.value[parameter.component]
  4. }

在 Kubernetes 集群中创建或者更新 Application 中所有组件对应的资源,并可以通过 exceptions 指明哪些组件或者组件中的某些资源跳过创建和更新。

  • exceptions: 指明该操作需要排除掉的组件。
  1. #ApplyRemaining: {
  2. exceptions?: [...string]
  3. }
  1. apply: op.#ApplyRemaining & {
  2. exceptions: ["applied-component-name"]
  3. }

向 Slack 发送消息通知。

  • url: Slack 的 Webhook 地址。
  • message: 需要发送的 Slack 消息,需要符合 Slack 信息规范
  1. #Slack: {
  2. url: string
  3. message: {...}
  4. }
  1. apply: op.#Slack & {
  2. url: webhook url
  3. message:
  4. text: Hello KubeVela
  5. }

向钉钉发送消息通知。

  • url: 钉钉的 Webhook 地址。
  • message: 需要发送的钉钉消息,需要符合 钉钉信息规范
  1. #DingTalk: {
  2. url: string
  3. message: {...}
  4. }
  1. apply: op.#DingTalk & {
  2. url: webhook url
  3. message:
  4. msgtype: text
  5. text:
  6. context: Hello KubeVela
  7. }

用来封装一组操作。

  • steps 里面需要通过 tag 的方式指定执行顺序,数字越小执行越靠前。
  1. app: op.#Steps & {
  2. load: op.#Load & {
  3. component: "component-name"
  4. } @step(1)
  5. apply: op.#Apply & {
  6. value: load.value.workload
  7. } @step(2)
  8. }

用来在workflow的上下文中保存或者读取用户定义的数据

  • method: 值为Get或者Put,用于表示该动作是从 workflow 中读取还是保存数据
  • path: 数据保存或者读取的路径
  • value: 数据内容(格式为 cue ),当 method 为 Get 表示读取到的数据,当 method 为 Put 时表示要保存的数据
  1. put: op.ws.#DoVar & {
  2. method: "Put"
  3. path: "foo.score"
  4. value: 100
  5. }
  6. // 用户可以通过get.value拿到上面保存的数据(100)
  7. get: op.ws.#DoVar & {
  8. method: "Get"
  9. path: "foo.score"
  10. }

Last updated on 2022年11月1日 by Tianxin Dong