数据传递

本节将介绍如何在 KubeVela 中使用 Inputs 和 Outputs 在工作流步骤间进行数据传递。

Outputs

outputs 由 namevalueFrom 组成。name 声明了这个 output 的名称,在 input 中将通过 from 引用 output。

valueFrom 有以下几种写法:

  1. 通过指定 value 来指定值,如:valueFrom: output.value.status.workflow.message。注意,output.value.status.workflow.message 将使用变量引用的方式从当前步骤的 CUE 模板中取值,如果该步骤的 CUE 模板中没有该字段,那么得到的值为空。
  2. 使用 CUE 表达式。如,用 + 来连接值和字符串: valueFrom: output.metadata.name + "testString"。你也可以引入 CUE 的内置包:
  1. valueFrom: |
  2. import "strings"
  3. strings.Join(["1","2"], ",")

Inputs

inputs 由 fromparameterKey 组成。from 声明了这个 input 从哪个 output 中取值,parameterKey 为一个表达式,将会把 input 取得的值赋给对应的字段。

如:

  1. 指定 inputs:
  1. ...
  2. - name: notify
  3. type: notification
  4. inputs:
  5. - from: read-status
  6. parameterKey: slack.message.text

如何使用

假设我们已经在集群中有了一个 depends 应用,我们希望在一个新的应用中读取到 depends 应用的工作流状态,并且发送状态信息到 Slack 中。

部署如下应用:

  1. apiVersion: core.oam.dev/v1beta1
  2. kind: Application
  3. metadata:
  4. name: input-output
  5. namespace: default
  6. spec:
  7. components:
  8. - name: express-server
  9. type: webservice
  10. properties:
  11. image: oamdev/hello-world
  12. ports:
  13. - port: 8000
  14. workflow:
  15. steps:
  16. - name: read
  17. type: read-object
  18. properties:
  19. name: depends
  20. outputs:
  21. - name: read-status
  22. valueFrom: output.value.status.workflow.message
  23. - name: slack-message
  24. type: notification
  25. inputs:
  26. - from: read-status
  27. parameterKey: slack.message.text
  28. properties:
  29. slack:
  30. url:
  31. value: <your slack url>

读取 depends 应用时,我们使用了 read-object 这个步骤类型,在这个步骤类型中,读取到的资源会被放在 output.value 中,因此,我们可以使用 output.value.status.workflow.message 读取到 depends 应用的工作流状态信息。

当应用成功运行后,我们可以在 Slack 消息通知中收到 depends 应用的工作流状态信息。