Data Passing
This section introduces how to use Inputs
and Outputs
to pass data between workflow steps in KubeVela.
Outputs
Outputs consists of name
and valueFrom
. name
declares the name of this output, which will be referenced by from
in input.
valueFrom
can be written in the following ways:
- Use value expression, eg.
valueFrom: output.value.status.workflow.message
. Note thatoutput.value.status.workflow.message
will use the value of the variable from the CUE template of the current step. If this field does not exist in the CUE template of the step, the resulting value will be empty. - Use CUE expressions, eg. use
+
to combine value and string:valueFrom: output.metadata.name + "testString"
or you can import built-in packages in CUE like:
valueFrom: |
import "strings"
strings.Join(["1","2"], ",")
Inputs
Inputs is made of from
and parameterKey
. Input uses from
to reference output, parameterKey
is a expression that assigns the value of the input to the corresponding field.
If you want to set the parameterKey with a invalid CUE variable name (eg: contains -
, or starts with a number, etc.), you can refer to it with []
like:
inputs:
- from: output
parameterKey: data["my-input"]
eg. Specify inputs:
...
- name: notify
type: notification
inputs:
- from: read-status
parameterKey: slack.message.text
How to use
Suppose we already have a depends
application in the cluster, and we want to read the workflow status of the depends
Application in a new Application and send the status information to Slack.
Apply the following YAML:
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>
When reading the
depends
application, we use theread-object
step type. In this step type, the read resources will be placed inoutput.value
, so we can useoutput.value.status.workflow.message
reads the workflow status information ofdepends
.
When the application runs successfully, we can receive the workflow status information of the depends
application in the Slack message notification.