数据传递
本节将介绍如何在 KubeVela 中使用 Inputs 和 Outputs 在工作流步骤间进行数据传递。
Outputs
outputs 由 name 和 valueFrom 组成。name 声明了这个 output 的名称,在 input 中将通过 from 引用 output。
valueFrom 有以下几种写法:
- 通过指定 value 来指定值,如:
valueFrom: output.value.status.workflow.message。注意,output.value.status.workflow.message将使用变量引用的方式从当前步骤的 CUE 模板中取值,如果该步骤的 CUE 模板中没有该字段,那么得到的值为空。 - 使用 CUE 表达式。如,用
+来连接值和字符串:valueFrom: output.metadata.name + "testString"。你也可以引入 CUE 的内置包:
valueFrom: |
import "strings"
strings.Join(["1","2"], ",")
Inputs
inputs 由 from 和 parameterKey 组成。from 声明了这个 input 从哪个 output 中取值,parameterKey 为一个表达式,将会把 input 取得的值赋给对应的字段。
如:
- 指定 inputs:
...
- name: notify
type: notification
inputs:
- from: read-status
parameterKey: slack.message.text
如何使用
假设我们已经在集群中有了一个 depends 应用,我们希望在一个新的应用中读取到 depends 应用的工作流状态,并且发送状态信息到 Slack 中。
部署如下应用:
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: input-output
namespace: default
spec:
components:
- name: express-server
type: webservice
properties:
image: oamdev/hello-world
ports:
- port: 8000
workflow:
steps:
- name: read
type: read-object
properties:
name: depends
outputs:
- name: read-status
valueFrom: output.value.status.workflow.message
- name: slack-message
type: notification
inputs:
- from: read-status
parameterKey: slack.message.text
properties:
slack:
url:
value: <your slack url>
读取 depends 应用时,我们使用了
read-object这个步骤类型,在这个步骤类型中,读取到的资源会被放在output.value中,因此,我们可以使用output.value.status.workflow.message读取到 depends 应用的工作流状态信息。
当应用成功运行后,我们可以在 Slack 消息通知中收到 depends 应用的工作流状态信息。