数据传递
本节将介绍如何在 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: notifytype: notificationinputs:- from: read-statusparameterKey: slack.message.text
如何使用
假设我们已经在集群中有了一个 depends 应用,我们希望在一个新的应用中读取到 depends 应用的工作流状态,并且发送状态信息到 Slack 中。
部署如下应用:
apiVersion: core.oam.dev/v1beta1kind: Applicationmetadata:name: input-outputnamespace: defaultspec:components:- name: express-servertype: webserviceproperties:image: oamdev/hello-worldports:- port: 8000workflow:steps:- name: readtype: read-objectproperties:name: dependsoutputs:- name: read-statusvalueFrom: output.value.status.workflow.message- name: slack-messagetype: notificationinputs:- from: read-statusparameterKey: slack.message.textproperties:slack:url:value: <your slack url>
读取 depends 应用时,我们使用了
read-object这个步骤类型,在这个步骤类型中,读取到的资源会被放在output.value中,因此,我们可以使用output.value.status.workflow.message读取到 depends 应用的工作流状态信息。
当应用成功运行后,我们可以在 Slack 消息通知中收到 depends 应用的工作流状态信息。