Skip to main content
Version: Next

Built-in WorkflowStep Type

This documentation will walk through all the built-in workflow step types sorted alphabetically.

It was generated automatically by scripts, please don't update manually, last updated at 2023-01-16T19:19:03+08:00.

Addon-Operation

Description

Enable a KubeVela addon.

Scope

This step type is only valid in WorkflowRun.

Examples (addon-operation)

apiVersion: core.oam.dev/v1alpha1
kind: WorkflowRun
metadata:
name: observability
namespace: vela-system
spec:
context:
readConfig: true
mode:
workflowSpec:
steps:
- name: Enable Prism
type: addon-operation
properties:
addonName: vela-prism

- name: Enable o11y
type: addon-operation
properties:
addonName: o11y-definitions
operation: enable
args:
- --override-definitions

- name: Prepare Prometheus
type: step-group
subSteps:
- name: get-exist-prometheus
type: list-config
properties:
template: prometheus-server
outputs:
- name: prometheus
valueFrom: "output.configs"

- name: prometheus-server
inputs:
- from: prometheus
# TODO: Make it is not required
parameterKey: configs
if: "!context.readConfig || len(inputs.prometheus) == 0"
type: addon-operation
properties:
addonName: prometheus-server
operation: enable
args:
- memory=4096Mi
- serviceType=LoadBalancer

- name: Prepare Loki
type: addon-operation
properties:
addonName: loki
operation: enable
args:
- --version=v0.1.4
- agent=vector
- serviceType=LoadBalancer

- name: Prepare Grafana
type: step-group
subSteps:

- name: get-exist-grafana
type: list-config
properties:
template: grafana
outputs:
- name: grafana
valueFrom: "output.configs"

- name: Install Grafana & Init Dashboards
inputs:
- from: grafana
parameterKey: configs
if: "!context.readConfig || len(inputs.grafana) == 0"
type: addon-operation
properties:
addonName: grafana
operation: enable
args:
- serviceType=LoadBalancer

- name: Init Dashboards
inputs:
- from: grafana
parameterKey: configs
if: "len(inputs.grafana) != 0"
type: addon-operation
properties:
addonName: grafana
operation: enable
args:
- install=false

- name: Clean
type: clean-jobs

- name: print-message
type: print-message-in-status
properties:
message: "All addons have been enabled successfully, you can use 'vela addon list' to check them."

Specification (addon-operation)

NameDescriptionTypeRequiredDefault
addonNameSpecify the name of the addon.stringtrue
argsSpecify addon enable args.[]stringfalse
imageSpecify the image.stringfalseoamdev/vela-cli:v1.6.4
operationoperation for the addon."enable" or "upgrade" or "disable"falseenable
serviceAccountNamespecify serviceAccountName want to use.stringfalsekubevela-vela-core

Apply-App

Description

Apply application from data or ref to the cluster.

Scope

This step type is only valid in WorkflowRun.

Examples (apply-app)

apiVersion: core.oam.dev/v1alpha1
kind: WorkflowRun
metadata:
name: apply-applications
namespace: default
annotations:
workflowrun.oam.dev/debug: "true"
spec:
workflowSpec:
steps:
- name: check-app-exist
type: read-app
properties:
name: webservice-app
- name: apply-app1
type: apply-app
if: status["check-app-exist"].message == "Application not found"
properties:
data:
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: webservice-app
spec:
components:
- name: express-server
type: webservice
properties:
image: crccheck/hello-world
ports:
- port: 8000
- name: suspend
type: suspend
timeout: 24h
- name: apply-app2
type: apply-app
properties:
ref:
name: my-app
key: application
type: configMap
---
apiVersion: v1
kind: ConfigMap
metadata:
name: my-app
namespace: default
data:
application: |
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: webservice-app2
spec:
components:
- name: express-server2
type: webservice
properties:
image: crccheck/hello-world
ports:
- port: 8000

Specification (apply-app)

NameDescriptionTypeRequiredDefault
datamap[string]_false
refreffalse

ref (apply-app)

NameDescriptionTypeRequiredDefault
namestringtrue
namespace|true
typestringfalseconfigMap
keystringfalseapplication

Apply-Component

Description

Apply a specific component and its corresponding traits in application.

Scope

This step type is only valid in Application.

Examples (apply-component)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: first-vela-workflow
namespace: default
spec:
components:
- name: express-server
type: webservice
properties:
image: oamdev/hello-world
port: 8000
traits:
- type: ingress
properties:
domain: testsvc.example.com
http:
/: 8000
workflow:
steps:
- name: express-server
type: apply-component
properties:
component: express-server
# cluster: <your cluster name>

Specification (apply-component)

NameDescriptionTypeRequiredDefault
componentSpecify the component name to apply.stringtrue
clusterSpecify the cluster.stringfalseempty

Apply-Deployment

Description

Apply deployment with specified image and cmd.

Scope

This step type is valid in both Application and WorkflowRun.

Examples (apply-deployment)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: apply-deploy
namespace: default
spec:
components:
- name: express-server
type: webservice
properties:
image: oamdev/hello-world
port: 8000
workflow:
steps:
- name: apply-comp
type: apply-component
properties:
component: express-server
- name: apply-deploy
type: apply-deployment
properties:
image: nginx

Specification (apply-deployment)

NameDescriptionTypeRequiredDefault
imagestringtrue
cmd[]stringfalse

Apply-Object

Description

Apply raw kubernetes objects for your workflow steps.

Scope

This step type is valid in both Application and WorkflowRun.

Examples (apply-object)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: server-with-pvc
namespace: default
spec:
components:
- name: express-server
type: webservice
properties:
image: oamdev/hello-world
port: 8000
volumes:
- name: "my-pvc"
type: "pvc"
mountPath: "/test"
claimName: "myclaim"

workflow:
steps:
- name: apply-pvc
type: apply-object
properties:
# Kubernetes native resources fields
value:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: myclaim
namespace: default
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 8Gi
storageClassName: standard
# the cluster you want to apply the resource to, default is the current cluster
cluster: <your cluster name>
- name: apply-server
type: apply-component
properties:
component: express-serve

Specification (apply-object)

NameDescriptionTypeRequiredDefault
valueSpecify Kubernetes native resource object to be applied.map[string]_true
clusterThe cluster you want to apply the resource to, default is the current control plane cluster.stringfalseempty

Apply-Terraform-Config

Description

Apply terraform configuration in the step.

Scope

This step type is valid in both Application and WorkflowRun.

Examples (apply-terraform-config)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: apply-terraform-resource
namespace: default
spec:
components: []
workflow:
steps:
- name: provider
type: apply-terraform-provider
properties:
type: alibaba
name: my-alibaba-provider
accessKey: <accessKey>
secretKey: <secretKey>
region: cn-hangzhou
- name: configuration
type: apply-terraform-config
properties:
source:
path: alibaba/cs/dedicated-kubernetes
remote: https://github.com/FogDong/terraform-modules
providerRef:
name: my-alibaba-provider
writeConnectionSecretToRef:
name: my-terraform-secret
namespace: vela-system
variable:
name: regular-check-ack
new_nat_gateway: true
vpc_name: "tf-k8s-vpc-regular-check"
vpc_cidr: "10.0.0.0/8"
vswitch_name_prefix: "tf-k8s-vsw-regualr-check"
vswitch_cidrs: [ "10.1.0.0/16", "10.2.0.0/16", "10.3.0.0/16" ]
k8s_name_prefix: "tf-k8s-regular-check"
k8s_version: 1.24.6-aliyun.1
k8s_pod_cidr: "192.168.5.0/24"
k8s_service_cidr: "192.168.2.0/24"
k8s_worker_number: 2
cpu_core_count: 4
memory_size: 8
tags:
created_by: "Terraform-of-KubeVela"
created_from: "module-tf-alicloud-ecs-instance"

Specification (apply-terraform-config)

NameDescriptionTypeRequiredDefault
sourcespecify the source of the terraform configuration.type-option-1 or type-option-2true
deleteResourcewhether to delete resource.boolfalsetrue
variablethe variable in the configuration.map[string]_true
writeConnectionSecretToRefthis specifies the namespace and name of a secret to which any connection details for this managed resource should be written.writeConnectionSecretToReffalse
providerRefproviderRef specifies the reference to Provider.providerReffalse
regionregion is cloud provider's region. It will override the region in the region field of providerRef.stringfalse
jobEnvthe envs for job.map[string]_false
forceDeleteboolfalsefalse

type-option-1 (apply-terraform-config)

NameDescriptionTypeRequiredDefault
hcldirectly specify the hcl of the terraform configuration.stringtrue

type-option-2 (apply-terraform-config)

NameDescriptionTypeRequiredDefault
remotespecify the remote url of the terraform configuration.stringfalsehttps://github.com/kubevela-contrib/terraform-modules.git
pathspecify the path of the terraform configuration.stringfalse

writeConnectionSecretToRef (apply-terraform-config)

NameDescriptionTypeRequiredDefault
namestringtrue
namespace|true

providerRef (apply-terraform-config)

NameDescriptionTypeRequiredDefault
namestringtrue
namespace|true

Apply-Terraform-Provider

Description

Apply terraform provider config.

Scope

This step type is valid in both Application and WorkflowRun.

Examples (apply-terraform-provider)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: apply-terraform-provider
namespace: default
spec:
components: []
workflow:
steps:
- name: provider
type: apply-terraform-provider
properties:
type: alibaba
name: my-alibaba-provider
accessKey: <accessKey>
secretKey: <secretKey>
region: cn-hangzhou

Specification (apply-terraform-provider)

NameDescriptionTypeRequiredDefault
AlibabaProvider or AWSProvider or AzureProvider or BaiduProvider or ECProvider or GCPProvider or TencentProvider or UCloudProviderfalse

AlibabaProvider (apply-terraform-provider)

NameDescriptionTypeRequiredDefault
typestringtrue
accessKeystringtrue
secretKeystringtrue
namestringfalsealibaba-provider
regionstringtrue

AWSProvider (apply-terraform-provider)

NameDescriptionTypeRequiredDefault
tokenstringfalseempty
typestringtrue
accessKeystringtrue
secretKeystringtrue
namestringfalseaws-provider
regionstringtrue

AzureProvider (apply-terraform-provider)

NameDescriptionTypeRequiredDefault
subscriptionIDstringtrue
tenantIDstringtrue
clientIDstringtrue
clientSecretstringtrue
namestringfalseazure-provider

BaiduProvider (apply-terraform-provider)

NameDescriptionTypeRequiredDefault
typestringtrue
accessKeystringtrue
secretKeystringtrue
namestringfalsebaidu-provider
regionstringtrue

ECProvider (apply-terraform-provider)

NameDescriptionTypeRequiredDefault
typestringtrue
apiKeystringfalseempty
namestringtrue

GCPProvider (apply-terraform-provider)

NameDescriptionTypeRequiredDefault
credentialsstringtrue
regionstringtrue
projectstringtrue
typestringtrue
namestringfalsegcp-provider

TencentProvider (apply-terraform-provider)

NameDescriptionTypeRequiredDefault
secretIDstringtrue
secretKeystringtrue
regionstringtrue
typestringtrue
namestringfalsetencent-provider

UCloudProvider (apply-terraform-provider)

NameDescriptionTypeRequiredDefault
publicKeystringtrue
privateKeystringtrue
projectIDstringtrue
regionstringtrue
typestringtrue
namestringfalseucloud-provider

Build-Push-Image

Description

Build and push image from git url.

Scope

This step type is valid in both Application and WorkflowRun.

Examples (build-push-image)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: build-push-image
namespace: default
spec:
components:
- name: my-web
type: webservice
properties:
image: fogdong/simple-web-demo:v1
ports:
- port: 80
expose: true
workflow:
steps:
- name: create-git-secret
type: export2secret
properties:
secretName: git-secret
data:
token: <git token>
- name: create-image-secret
type: export2secret
properties:
secretName: image-secret
kind: docker-registry
dockerRegistry:
username: <docker username>
password: <docker password>
- name: build-push
type: build-push-image
properties:
# use your kaniko executor image like below, if not set, it will use default image oamdev/kaniko-executor:v1.9.1
# kanikoExecutor: gcr.io/kaniko-project/executor:latest
# you can use context with git and branch or directly specify the context, please refer to https://github.com/GoogleContainerTools/kaniko#kaniko-build-contexts
context:
git: github.com/FogDong/simple-web-demo
branch: main
image: fogdong/simple-web-demo:v1
# specify your dockerfile, if not set, it will use default dockerfile ./Dockerfile
# dockerfile: ./Dockerfile
credentials:
image:
name: image-secret
# buildArgs:
# - key="value"
# platform: linux/arm
- name: apply-comp
type: apply-component
properties:
component: my-web

Specification (build-push-image)

NameDescriptionTypeRequiredDefault
kanikoExecutorSpecify the kaniko executor image, default to oamdev/kaniko-executor:v1.9.1.stringfalseoamdev/kaniko-executor:v1.9.1
contextSpecify the context to build image, you can use context with git and branch or directly specify the context, please refer to https://github.com/GoogleContainerTools/kaniko#kaniko-build-contexts.stringtrue
dockerfileSpecify the dockerfile.stringfalse./Dockerfile
imageSpecify the image.stringtrue
platformSpecify the platform to build.stringfalse
buildArgsSpecify the build args.[]stringfalse
credentialsSpecify the credentials to access git and image registry.credentialsfalse
verbositySpecify the verbosity level."info" or "panic" or "fatal" or "error" or "warn" or "debug" or "trace"falseinfo

credentials (build-push-image)

NameDescriptionTypeRequiredDefault
gitSpecify the credentials to access git.gitfalse
imageSpecify the credentials to access image registry.imagefalse
git (build-push-image)
NameDescriptionTypeRequiredDefault
nameSpecify the secret name.stringtrue
keySpecify the secret key.stringtrue
image (build-push-image)
NameDescriptionTypeRequiredDefault
nameSpecify the secret name.stringtrue
keySpecify the secret key.stringfalse.dockerconfigjson

Clean-Jobs

Description

clean applied jobs in the cluster.

Scope

This step type is valid in both Application and WorkflowRun.

Examples (clean-jobs)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: clean-jobs
namespace: default
spec:
components: []
workflow:
steps:
- name: clean-cli-jobs
type: clean-jobs
properties:
labelselector:
"my-label": my-value

Specification (clean-jobs)

NameDescriptionTypeRequiredDefault
labelselectormap[string]_false
namespace|true

Collect-Service-Endpoints

Description

Collect service endpoints for the application.

Scope

This step type is valid in both Application and WorkflowRun.

Examples (collect-service-endpoints)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: app-collect-service-endpoint-and-export
spec:
components:
- type: webservice
name: busybox
properties:
image: busybox
imagePullPolicy: IfNotPresent
cmd:
- sleep
- '1000000'
traits:
- type: expose
properties:
port: [8080]
type: ClusterIP
policies:
- type: topology
name: local
properties:
clusters: ["local"]
- type: topology
name: all
properties:
clusters: ["local", "cluster-worker"]
workflow:
steps:
- type: deploy
name: deploy
properties:
policies: ["local"]
- type: collect-service-endpoints
name: collect-service-endpoints
outputs:
- name: host
valueFrom: value.endpoint.host
- type: export-data
name: export-data
properties:
topology: all
inputs:
- from: host
parameterKey: data.host

Specification (collect-service-endpoints)

This capability has no arguments.

Create-Config

Description

Create or update a config.

Scope

This step type is valid in both Application and WorkflowRun.

Examples (create-config)

kind: Application
apiVersion: core.oam.dev/v1beta1
metadata:
name: test-config
namespace: "config-e2e-test"
spec:
components: []
workflow:
steps:
- name: write-config
type: create-config
properties:
name: test
config:
key1: value1
key2: 2
key3: true
key4:
key5: value5
- name: read-config
type: read-config
properties:
name: test
outputs:
- fromKey: config
name: read-config
- name: delete-config
type: delete-config
properties:
name: test

Specification (create-config)

NameDescriptionTypeRequiredDefault
nameSpecify the name of the config.stringtrue
namespaceSpecify the namespace of the config.stringfalse
templateSpecify the template of the config.stringfalse
configSpecify the content of the config.map[string]_true

Delete-Config

Description

Delete a config.

Scope

This step type is valid in both Application and WorkflowRun.

Examples (delete-config)

kind: Application
apiVersion: core.oam.dev/v1beta1
metadata:
name: test-config
namespace: "config-e2e-test"
spec:
components: []
workflow:
steps:
- name: write-config
type: create-config
properties:
name: test
config:
key1: value1
key2: 2
key3: true
key4:
key5: value5
- name: delete-config
type: delete-config
properties:
name: test

Specification (delete-config)

NameDescriptionTypeRequiredDefault
nameSpecify the name of the config.stringtrue
namespaceSpecify the namespace of the config.stringfalse

Depends-On-App

Description

Wait for the specified Application to complete.

Scope

This step type is valid in both Application and WorkflowRun.

Examples (depends-on-app)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: first-vela-workflow
namespace: default
spec:
components:
- name: express-server
type: webservice
properties:
image: oamdev/hello-world
port: 8000
traits:
- type: ingress
properties:
domain: testsvc.example.com
http:
/: 8000
workflow:
steps:
- name: express-server
type: depends-on-app
properties:
name: another-app
namespace: default

depends-on-app will check if the cluster has the application with name and namespace given in properties. If the application exists, it will hang the next step until the application is running. If the application does not exist, KubeVela will check the ConfigMap with the same name, and read the config of the Application and apply to cluster. The ConfigMap is like below: the name and namespace of the ConfigMap is the same in properties. In data, the key must be specified by application, and the value is the yaml of the deployed application yaml.

apiVersion: v1
kind: ConfigMap
metadata:
name: myapp
namespace: vela-system
data:
application:
<app yaml file>

Specification (depends-on-app)

NameDescriptionTypeRequiredDefault
nameSpecify the name of the dependent Application.stringtrue
namespaceSpecify the namespace of the dependent Application.stringtrue

Deploy

Description

A powerful and unified deploy step for components multi-cluster delivery with policies.

Scope

This step type is only valid in Application.

Examples (deploy)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: deploy-workflowstep
namespace: examples
spec:
components:
- name: nginx-deploy-workflowstep
type: webservice
properties:
image: nginx
policies:
- name: topology-hangzhou-clusters
type: topology
properties:
clusterLabelSelector:
region: hangzhou
- name: topology-local
type: topology
properties:
clusters: ["local"]
namespace: examples-alternative
workflow:
steps:
- type: deploy
name: deploy-local
properties:
policies: ["topology-local"]
- type: deploy
name: deploy-hangzhou
properties:
# require manual approval before running this step
auto: false
policies: ["topology-hangzhou-clusters"]

Specification (deploy)

NameDescriptionTypeRequiredDefault
autoIf set to false, the workflow will suspend automatically before this step, default to be true.boolfalsetrue
policiesDeclare the policies that used for this deployment. If not specified, the components will be deployed to the hub cluster.[]stringfalse
parallelismMaximum number of concurrent delivered components.intfalse5
ignoreTerraformComponentIf set false, this step will apply the components with the terraform workload.boolfalsetrue

Deploy-Cloud-Resource

Description

Deploy cloud resource and deliver secret to multi clusters.

Scope

This step type is only valid in Application.

Examples (deploy-cloud-resource)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: rds-app
namespace: project-1
spec:
components:
- name: db
type: alibaba-rds
properties:
instance_name: db
account_name: kubevela
password: my-password
writeConnectionSecretToRef:
name: project-1-rds-conn-credential
policies:
- name: env-policy
type: env-binding
properties:
envs:
# 部署 RDS 给杭州集群
- name: hangzhou
placement:
clusterSelector:
name: cluster-hangzhou
patch:
components:
- name: db
type: alibaba-rds
properties:
# region: hangzhou
instance_name: hangzhou_db
# 部署 RDS 给香港集群
- name: hongkong
placement:
clusterSelector:
name: cluster-hongkong
namespaceSelector:
name: hk-project-1
patch:
components:
- name: db
type: alibaba-rds
properties:
# region: hongkong
instance_name: hongkong_db
writeConnectionSecretToRef:
name: hk-project-rds-credential

workflow:
steps:
# 部署 RDS 给杭州区用
- name: deploy-hangzhou-rds
type: deploy-cloud-resource
properties:
env: hangzhou
# 将给杭州区用的 RDS 共享给北京区
- name: share-hangzhou-rds-to-beijing
type: share-cloud-resource
properties:
env: hangzhou
placements:
- cluster: cluster-beijing
# 部署 RDS 给香港区用
- name: deploy-hongkong-rds
type: deploy-cloud-resource
properties:
env: hongkong
# 将给香港区用的 RDS 共享给香港区其他项目用
- name: share-hongkong-rds-to-other-namespace
type: share-cloud-resource
properties:
env: hongkong
placements:
- cluster: cluster-hongkong
namespace: hk-project-2
- cluster: cluster-hongkong
namespace: hk-project-3

Specification (deploy-cloud-resource)

NameDescriptionTypeRequiredDefault
policyDeclare the name of the env-binding policy, if empty, the first env-binding policy will be used.stringfalseempty
envDeclare the name of the env in policy.stringtrue

Export-Data

Description

Export data to clusters specified by topology.

Scope

This step type is valid in both Application and WorkflowRun.

Examples (export-data)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: app-collect-service-endpoint-and-export
spec:
components:
- type: webservice
name: busybox
properties:
image: busybox
imagePullPolicy: IfNotPresent
cmd:
- sleep
- '1000000'
traits:
- type: expose
properties:
port: [8080]
type: ClusterIP
policies:
- type: topology
name: local
properties:
clusters: ["local"]
- type: topology
name: all
properties:
clusters: ["local", "cluster-worker"]
workflow:
steps:
- type: deploy
name: deploy
properties:
policies: ["local"]
- type: collect-service-endpoints
name: collect-service-endpoints
outputs:
- name: host
valueFrom: value.endpoint.host
- type: export-data
name: export-data
properties:
topology: all
inputs:
- from: host
parameterKey: data.host

Specification (export-data)

NameDescriptionTypeRequiredDefault
nameSpecify the name of the export destination.stringfalse
namespaceSpecify the namespace of the export destination.stringfalse
kindSpecify the kind of the export destination."ConfigMap" or "Secret"falseConfigMap
dataSpecify the data to export.structtrue
topologySpecify the topology to export.stringfalse

Export-Service

Description

Export service to clusters specified by topology.

Scope

This step type is valid in both Application and WorkflowRun.

Examples (export-service)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: app-collect-service-endpoint-and-export
spec:
components:
- type: webservice
name: busybox
properties:
image: busybox
imagePullPolicy: IfNotPresent
cmd:
- sleep
- '1000000'
traits:
- type: expose
properties:
port: [8080]
type: LoadBalancer
policies:
- type: topology
name: local
properties:
clusters: ["local"]
- type: topology
name: worker
properties:
clusters: ["cluster-worker"]
workflow:
steps:
- type: deploy
name: deploy
properties:
policies: ["local"]
- type: collect-service-endpoints
name: collect-service-endpoints
outputs:
- name: host
valueFrom: value.endpoint.host
- name: port
valueFrom: value.endpoint.port
- type: export-service
name: export-service
properties:
name: busybox
topology: worker
inputs:
- from: host
parameterKey: ip
- from: port
parameterKey: port

Specification (export-service)

NameDescriptionTypeRequiredDefault
nameSpecify the name of the export destination.stringfalse
namespaceSpecify the namespace of the export destination.stringfalse
ipSpecify the ip to be export.stringtrue
portSpecify the port to be used in service.inttrue
targetPortSpecify the port to be export.inttrue
topologySpecify the topology to export.stringfalse

Export2config

Description

Export data to specified Kubernetes ConfigMap in your workflow.

Scope

This step type is valid in both Application and WorkflowRun.

Examples (export2config)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: export2config
namespace: default
spec:
components:
- name: export2config-demo-server
type: webservice
properties:
image: oamdev/hello-world
port: 8000
workflow:
steps:
- name: apply-server
type: apply-component
outputs:
- name: status
valueFrom: output.status.conditions[0].message
properties:
component: export2config-demo-server
- name: export-config
type: export2config
inputs:
- from: status
parameterKey: data.serverstatus
properties:
configName: my-configmap
data:
testkey: |
testvalue
value-line-2

Specification (export2config)

NameDescriptionTypeRequiredDefault
configNameSpecify the name of the config map.stringtrue
namespaceSpecify the namespace of the config map.stringfalse
dataSpecify the data of config map.structtrue
clusterSpecify the cluster of the config map.stringfalseempty

Export2secret

Description

Export data to Kubernetes Secret in your workflow.

Scope

This step type is valid in both Application and WorkflowRun.

Examples (export2secret)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: export-secret
namespace: default
spec:
components:
- name: express-server-sec
type: webservice
properties:
image: oamdev/hello-world
port: 8000
workflow:
steps:
- name: apply-server
type: apply-component
outputs:
- name: status
valueFrom: output.status.conditions[0].message
properties:
component: express-server-sec
- name: export-secret
type: export2secret
inputs:
- from: status
parameterKey: data.serverstatus
properties:
secretName: my-secret
data:
testkey: |
testvalue
value-line-2

Specification (export2secret)

NameDescriptionTypeRequiredDefault
secretNameSpecify the name of the secret.stringtrue
namespaceSpecify the namespace of the secret.stringfalse
typeSpecify the type of the secret.stringfalse
dataSpecify the data of secret.structtrue
clusterSpecify the cluster of the secret.stringfalseempty
kindSpecify the kind of the secret."generic" or "docker-registry"falsegeneric
dockerRegistrySpecify the docker data.dockerRegistryfalse

dockerRegistry (export2secret)

NameDescriptionTypeRequiredDefault
usernameSpecify the username of the docker registry.stringtrue
passwordSpecify the password of the docker registry.stringtrue
serverSpecify the server of the docker registry.stringfalsehttps://index.docker.io/v1/

Generate-Jdbc-Connection

Description

Generate a JDBC connection based on Component of alibaba-rds.

Scope

This step type is valid in both Application and WorkflowRun.

Examples (generate-jdbc-connection)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: jdbc
spec:
components:
- name: db
type: alibaba-rds
properties:
instance_name: favorite-links
database_name: db1
account_name: oamtest
password: U34rfwefwefffaked
security_ips: [ "0.0.0.0/0" ]
privilege: ReadWrite
writeConnectionSecretToRef:
name: db-conn
- name: express-server
type: webservice
properties:
image: crccheck/hello-world
port: 8000

workflow:
steps:
- name: jdbc
type: generate-jdbc-connection
outputs:
- name: jdbc
valueFrom: jdbc
properties:
name: db-conn
namespace: default
- name: apply
type: apply-component
inputs:
- from: jdbc
parameterKey: env
properties:
component: express-server

Specification (generate-jdbc-connection)

NameDescriptionTypeRequiredDefault
nameSpecify the name of the secret generated by database component.stringtrue
namespaceSpecify the namespace of the secret generated by database component.stringfalse

List-Config

Description

List the configs.

Scope

This step type is valid in both Application and WorkflowRun.

Examples (list-config)

apiVersion: core.oam.dev/v1alpha1
kind: WorkflowRun
metadata:
name: observability
namespace: vela-system
spec:
context:
readConfig: true
mode:
workflowSpec:
steps:
- name: Enable Prism
type: addon-operation
properties:
addonName: vela-prism

- name: Enable o11y
type: addon-operation
properties:
addonName: o11y-definitions
operation: enable
args:
- --override-definitions

- name: Prepare Prometheus
type: step-group
subSteps:
- name: get-exist-prometheus
type: list-config
properties:
template: prometheus-server
outputs:
- name: prometheus
valueFrom: "output.configs"

- name: prometheus-server
inputs:
- from: prometheus
# TODO: Make it is not required
parameterKey: configs
if: "!context.readConfig || len(inputs.prometheus) == 0"
type: addon-operation
properties:
addonName: prometheus-server
operation: enable
args:
- memory=4096Mi
- serviceType=LoadBalancer

Specification (list-config)

NameDescriptionTypeRequiredDefault
templateSpecify the template of the config.stringtrue
namespaceSpecify the namespace of the config.stringfalse

Notification

Description

Send notifications to Email, DingTalk, Slack, Lark or webhook in your workflow.

Scope

This step type is valid in both Application and WorkflowRun.

Examples (notification)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: first-vela-workflow
namespace: default
spec:
components:
- name: express-server
type: webservice
properties:
image: oamdev/hello-world
port: 8000
traits:
- type: ingress
properties:
domain: testsvc.example.com
http:
/: 8000
workflow:
steps:
- name: dingtalk-message
type: notification
properties:
dingding:
# the DingTalk webhook address, please refer to: https://developers.dingtalk.com/document/robots/custom-robot-access
url:
value: <url>
message:
msgtype: text
text:
content: Workflow starting...
- name: application
type: apply-application
- name: slack-message
type: notification
properties:
slack:
# the Slack webhook address, please refer to: https://api.slack.com/messaging/webhooks
url:
secretRef:
name: <secret-key>
key: <secret-value>
message:
text: Workflow ended.
lark:
url:
value: <lark-url>
message:
msg_type: "text"
content: "{\"text\":\" Hello KubeVela\"}"
email:
from:
address: <sender-email-address>
alias: <sender-alias>
password:
# secretRef:
# name: <secret-name>
# key: <secret-key>
value: <sender-password>
host: <email host like smtp.gmail.com>
port: <email port, optional, default to 587>
to:
- kubevela1@gmail.com
- kubevela2@gmail.com
content:
subject: test-subject
body: test-body

Expected outcome

We can see that before and after the deployment of the application, the messages can be seen in the corresponding group chat.

Specification (notification)

NameDescriptionTypeRequiredDefault
larkPlease fulfill its url and message if you want to send Lark messages.larkfalse
dingdingPlease fulfill its url and message if you want to send DingTalk messages.dingdingfalse
slackPlease fulfill its url and message if you want to send Slack messages.slackfalse
emailPlease fulfill its from, to and content if you want to send email.emailfalse

lark (notification)

NameDescriptionTypeRequiredDefault
urlSpecify the the lark url, you can either sepcify it in value or use secretRef.type-option-1 or type-option-2true
messageSpecify the message that you want to sent, refer to Lark messaging.messagetrue
type-option-1 (notification)
NameDescriptionTypeRequiredDefault
valuethe url address content in string.stringtrue
type-option-2 (notification)
NameDescriptionTypeRequiredDefault
secretRefsecretReftrue
secretRef (notification)
NameDescriptionTypeRequiredDefault
namename is the name of the secret.stringtrue
keykey is the key in the secret.stringtrue
message (notification)
NameDescriptionTypeRequiredDefault
msg_typemsg_type can be text, post, image, interactive, share_chat, share_user, audio, media, file, sticker.stringtrue
contentcontent should be json encode string.stringtrue

dingding (notification)

NameDescriptionTypeRequiredDefault
urlSpecify the the dingding url, you can either sepcify it in value or use secretRef.type-option-1 or type-option-2true
messageSpecify the message that you want to sent, refer to dingtalk messaging.messagetrue
type-option-1 (notification)
NameDescriptionTypeRequiredDefault
valuethe url address content in string.stringtrue
type-option-2 (notification)
NameDescriptionTypeRequiredDefault
secretRefsecretReftrue
secretRef (notification)
NameDescriptionTypeRequiredDefault
namename is the name of the secret.stringtrue
keykey is the key in the secret.stringtrue
message (notification)
NameDescriptionTypeRequiredDefault
textSpecify the message content of dingtalk notification.nullfalse
msgtypemsgType can be text, link, mardown, actionCard, feedCard."text" or "link" or "markdown" or "actionCard" or "feedCard"falsetext
linknullfalse
markdownnullfalse
atnullfalse
actionCardnullfalse
feedCardnullfalse

slack (notification)

NameDescriptionTypeRequiredDefault
urlSpecify the the slack url, you can either sepcify it in value or use secretRef.type-option-1 or type-option-2true
messageSpecify the message that you want to sent, refer to slack messaging.messagetrue
type-option-1 (notification)
NameDescriptionTypeRequiredDefault
valuethe url address content in string.stringtrue
type-option-2 (notification)
NameDescriptionTypeRequiredDefault
secretRefsecretReftrue
secretRef (notification)
NameDescriptionTypeRequiredDefault
namename is the name of the secret.stringtrue
keykey is the key in the secret.stringtrue
message (notification)
NameDescriptionTypeRequiredDefault
textSpecify the message text for slack notification.stringtrue
blocksnullfalse
attachmentsnullfalse
thread_tsstringfalse
mrkdwnSpecify the message text format in markdown for slack notification.boolfalsetrue

email (notification)

NameDescriptionTypeRequiredDefault
fromSpecify the email info that you want to send from.fromtrue
toSpecify the email address that you want to send to.[]stringtrue
contentSpecify the content of the email.contenttrue
from (notification)
NameDescriptionTypeRequiredDefault
addressSpecify the email address that you want to send from.stringtrue
aliasThe alias is the email alias to show after sending the email.stringfalse
passwordSpecify the password of the email, you can either sepcify it in value or use secretRef.type-option-1 or type-option-2true
hostSpecify the host of your email.stringtrue
portSpecify the port of the email host, default to 587.intfalse587
type-option-1 (notification)
NameDescriptionTypeRequiredDefault
valuethe password content in string.stringtrue
type-option-2 (notification)
NameDescriptionTypeRequiredDefault
secretRefsecretReftrue
secretRef (notification)
NameDescriptionTypeRequiredDefault
namename is the name of the secret.stringtrue
keykey is the key in the secret.stringtrue
content (notification)
NameDescriptionTypeRequiredDefault
subjectSpecify the subject of the email.stringtrue
bodySpecify the context body of the email.stringtrue

Description

print message in workflow step status.

Scope

This step type is valid in both Application and WorkflowRun.

Examples (print-message-in-status)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: print-message-in-status
namespace: default
spec:
components:
- name: express-server
type: webservice
properties:
image: oamdev/hello-world
port: 8000
workflow:
steps:
- name: express-server
type: apply-component
properties:
component: express-server
- name: message
type: print-message-in-status
properties:
message: "All addons have been enabled successfully, you can use 'vela addon list' to check them."

Specification (print-message-in-status)

NameDescriptionTypeRequiredDefault
messagestringtrue

Read-App

Description

Read application from the cluster.

Scope

This step type is only valid in WorkflowRun.

Examples (read-app)

apiVersion: core.oam.dev/v1alpha1
kind: WorkflowRun
metadata:
name: apply-applications
namespace: default
annotations:
workflowrun.oam.dev/debug: "true"
spec:
workflowSpec:
steps:
- name: check-app-exist
type: read-app
properties:
name: webservice-app
- name: apply-app1
type: apply-app
if: status["check-app-exist"].message == "Application not found"
properties:
data:
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: webservice-app
spec:
components:
- name: express-server
type: webservice
properties:
image: crccheck/hello-world
ports:
- port: 8000
- name: suspend
type: suspend
timeout: 24h
- name: apply-app2
type: apply-app
properties:
ref:
name: my-app
key: application
type: configMap
---
apiVersion: v1
kind: ConfigMap
metadata:
name: my-app
namespace: default
data:
application: |
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: webservice-app2
spec:
components:
- name: express-server2
type: webservice
properties:
image: crccheck/hello-world
ports:
- port: 8000

Specification (read-app)

NameDescriptionTypeRequiredDefault
namestringtrue
namespace|true

Read-Config

Description

Read a config.

Scope

This step type is valid in both Application and WorkflowRun.

Examples (read-config)

kind: Application
apiVersion: core.oam.dev/v1beta1
metadata:
name: test-config
namespace: "config-e2e-test"
spec:
components: []
workflow:
steps:
- name: read-config
type: read-config
properties:
name: test
outputs:
- fromKey: config
name: read-config

Specification (read-config)

NameDescriptionTypeRequiredDefault
nameSpecify the name of the config.stringtrue
namespaceSpecify the namespace of the config.stringfalse

Read-Object

Description

Read Kubernetes objects from cluster for your workflow steps.

Scope

This step type is valid in both Application and WorkflowRun.

Examples (read-object)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: read-object
namespace: default
spec:
components:
- name: express-server
type: webservice
properties:
image: oamdev/hello-world
port: 8000
workflow:
steps:
- name: read-object
type: read-object
outputs:
- name: cpu
valueFrom: output.value.data["cpu"]
- name: memory
valueFrom: output.value.data["memory"]
properties:
apiVersion: v1
kind: ConfigMap
name: my-cm-name
cluster: <your cluster name
- name: apply
type: apply-component
inputs:
- from: cpu
parameterKey: cpu
- from: memory
parameterKey: memory
properties:
component: express-server

Specification (read-object)

NameDescriptionTypeRequiredDefault
apiVersionSpecify the apiVersion of the object, defaults to 'core.oam.dev/v1beta1'.stringfalse
kindSpecify the kind of the object, defaults to Application.stringfalse
nameSpecify the name of the object.stringtrue
namespaceThe namespace of the resource you want to read.stringfalsedefault
clusterThe cluster you want to apply the resource to, default is the current control plane cluster.stringfalseempty

Request

Description

Send request to the url.

Scope

This step type is valid in both Application and WorkflowRun.

Examples (request)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: request-http
namespace: default
spec:
components: []
workflow:
steps:
- name: request
type: request
properties:
url: https://api.github.com/repos/kubevela/workflow
outputs:
- name: stars
valueFrom: |
import "strconv"
"Current star count: " + strconv.FormatInt(response["stargazers_count"], 10)
- name: notification
type: notification
inputs:
- from: stars
parameterKey: slack.message.text
properties:
slack:
url:
value: <your slack url>
- name: failed-notification
type: notification
if: status.request.failed
properties:
slack:
url:
value: <your slack url>
message:
text: "Failed to request github"

Specification (request)

NameDescriptionTypeRequiredDefault
urlstringtrue
method"GET" or "POST" or "PUT" or "DELETE"falseGET
bodymap[string]_false
headermap[string]stringfalse

Share-Cloud-Resource

Description

Sync secrets created by terraform component to runtime clusters so that runtime clusters can share the created cloud resource.

Scope

This step type is only valid in Application.

Examples (share-cloud-resource)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: rds-app
namespace: project-1
spec:
components:
- name: db
type: alibaba-rds
properties:
instance_name: db
account_name: kubevela
password: my-password
writeConnectionSecretToRef:
name: project-1-rds-conn-credential
policies:
- name: env-policy
type: env-binding
properties:
envs:
# 部署 RDS 给杭州集群
- name: hangzhou
placement:
clusterSelector:
name: cluster-hangzhou
patch:
components:
- name: db
type: alibaba-rds
properties:
# region: hangzhou
instance_name: hangzhou_db
# 部署 RDS 给香港集群
- name: hongkong
placement:
clusterSelector:
name: cluster-hongkong
namespaceSelector:
name: hk-project-1
patch:
components:
- name: db
type: alibaba-rds
properties:
# region: hongkong
instance_name: hongkong_db
writeConnectionSecretToRef:
name: hk-project-rds-credential

workflow:
steps:
# 部署 RDS 给杭州区用
- name: deploy-hangzhou-rds
type: deploy-cloud-resource
properties:
env: hangzhou
# 将给杭州区用的 RDS 共享给北京区
- name: share-hangzhou-rds-to-beijing
type: share-cloud-resource
properties:
env: hangzhou
placements:
- cluster: cluster-beijing
# 部署 RDS 给香港区用
- name: deploy-hongkong-rds
type: deploy-cloud-resource
properties:
env: hongkong
# 将给香港区用的 RDS 共享给香港区其他项目用
- name: share-hongkong-rds-to-other-namespace
type: share-cloud-resource
properties:
env: hongkong
placements:
- cluster: cluster-hongkong
namespace: hk-project-2
- cluster: cluster-hongkong
namespace: hk-project-3

Specification (share-cloud-resource)

NameDescriptionTypeRequiredDefault
placementsDeclare the location to bind.[]placementstrue
policyDeclare the name of the env-binding policy, if empty, the first env-binding policy will be used.stringfalseempty
envDeclare the name of the env in policy.stringtrue

placements (share-cloud-resource)

NameDescriptionTypeRequiredDefault
namespacestringfalse
clusterstringfalse

Step-Group

Description

A special step that you can declare 'subSteps' in it, 'subSteps' is an array containing any step type whose valid parameters do not include the step-group step type itself. The sub steps were executed in parallel.

Scope

This step type is valid in both Application and WorkflowRun.

Examples (step-group)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: example
namespace: default
spec:
components:
- name: express-server
type: webservice
properties:
image: crccheck/hello-world
port: 8000
- name: express-server2
type: webservice
properties:
image: crccheck/hello-world
port: 8000

workflow:
steps:
- name: step
type: step-group
subSteps:
- name: apply-sub-step1
type: apply-component
properties:
component: express-server
- name: apply-sub-step2
type: apply-component
properties:
component: express-server2

Specification (step-group)

This capability has no arguments.

Suspend

Description

Suspend the current workflow, it can be resumed by 'vela workflow resume' command.

Scope

This step type is valid in both Application and WorkflowRun.

Examples (suspend)

The duration parameter is supported in KubeVela v1.4 or higher.

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: first-vela-workflow
namespace: default
spec:
components:
- name: express-server
type: webservice
properties:
image: oamdev/hello-world
port: 8000
workflow:
steps:
- name: slack-message
type: notification
properties:
slack:
url:
value: <your-slack-url>
# the Slack webhook address, please refer to: https://api.slack.com/messaging/webhooks
message:
text: Ready to apply the application, ask the administrator to approve and resume the workflow.
- name: manual-approval
type: suspend
# properties:
# duration: "30s"
- name: express-server
type: apply-component
properties:
component: express-server

Specification (suspend)

NameDescriptionTypeRequiredDefault
durationSpecify the wait duration time to resume workflow such as "30s", "1min" or "2m15s".stringfalse

Vela-Cli

Description

Run a vela command.

Scope

This step type is valid in both Application and WorkflowRun.

Examples (vela-cli)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: vela-cli
namespace: default
spec:
components: []
workflow:
steps:
- name: list-app
type: vela-cli
properties:
command:
- vela
- ls

Specification (vela-cli)

NameDescriptionTypeRequiredDefault
addonNameSpecify the name of the addon.stringtrue
commandSpecify the vela command.[]stringtrue
imageSpecify the image.stringfalseoamdev/vela-cli:v1.6.4
serviceAccountNamespecify serviceAccountName want to use.stringfalsekubevela-vela-core
storagestoragefalse

storage (vela-cli)

NameDescriptionTypeRequiredDefault
secretMount Secret type storage.[]secretfalse
hostPathDeclare host path type storage.[]hostPathfalse
secret (vela-cli)
NameDescriptionTypeRequiredDefault
namestringtrue
mountPathstringtrue
subPathstringfalse
defaultModeintfalse420
secretNamestringtrue
items[]itemsfalse
items (vela-cli)
NameDescriptionTypeRequiredDefault
keystringtrue
pathstringtrue
modeintfalse511
hostPath (vela-cli)
NameDescriptionTypeRequiredDefault
namestringtrue
pathstringtrue
mountPathstringtrue
type"Directory" or "DirectoryOrCreate" or "FileOrCreate" or "File" or "Socket" or "CharDevice" or "BlockDevice"falseDirectory

Webhook

Description

Send a request to the specified Webhook URL. If no request body is specified, the current Application body will be sent by default.

Scope

This step type is valid in both Application and WorkflowRun.

Examples (webhook)

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
name: first-vela-workflow
namespace: default
spec:
components:
- name: express-server
type: webservice
properties:
image: oamdev/hello-world
port: 8000
workflow:
steps:
- name: express-server
type: apply-application
- name: webhook
type: webhook
properties:
url:
value: <your webhook url>

Specification (webhook)

NameDescriptionTypeRequiredDefault
urlSpecify the webhook url.type-option-1 or type-option-2true
dataSpecify the data you want to send.map[string]_false

type-option-1 (webhook)

NameDescriptionTypeRequiredDefault
valuestringtrue

type-option-2 (webhook)

NameDescriptionTypeRequiredDefault
secretRefsecretReftrue
secretRef (webhook)
NameDescriptionTypeRequiredDefault
namename is the name of the secret.stringtrue
keykey is the key in the secret.stringtrue