--- title: Built-in WorkflowStep Type --- This documentation will walk through all the built-in workflow step types sorted alphabetically. > It was generated automatically by [scripts](../../contributor/cli-ref-doc.md), please don't update manually, last updated at 2023-07-28T09:33:26+08:00. ## Addon-Operation ### Description Enable a KubeVela addon. ### Scope This step type is only valid in WorkflowRun. ### Examples (addon-operation) ```yaml 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) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- addonName | Specify the name of the addon. | string | true | args | Specify addon enable args. | []string | false | image | Specify the image. | string | false | oamdev/vela-cli:v1.7.2 operation | operation for the addon. | "enable" or "upgrade" or "disable" | false | enable serviceAccountName | specify serviceAccountName want to use. | string | false | kubevela-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) ```yaml 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) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- data | | map[string]_ | false | ref | | [ref](#ref-apply-app) | false | #### ref (apply-app) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- name | | string | true | namespace | | _|_ | true | type | | string | false | configMap key | | string | false | application ## 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) ```yaml 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: # namespace: ``` ### Specification (apply-component) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- component | Specify the component name to apply. | string | true | cluster | Specify the cluster. | string | false | empty namespace | Specify the namespace. | string | false | empty ## Apply-Deployment ### Description Apply deployment with specified image and cmd. ### Scope This step type is valid in both Application and WorkflowRun. ### Examples (apply-deployment) ```yaml 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) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- image | | string | true | replicas | | int | false | 1 cluster | | string | false | empty cmd | | []string | false | ## 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) ```yaml 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: - name: apply-server type: apply-component properties: component: express-serve ``` ### Specification (apply-object) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- value | Specify Kubernetes native resource object to be applied. | map[string]_ | true | cluster | The cluster you want to apply the resource to, default is the current control plane cluster. | string | false | empty ## 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) ```yaml 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: 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) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- source | specify the source of the terraform configuration. | [type-option-1](#type-option-1-apply-terraform-config) or [type-option-2](#type-option-2-apply-terraform-config) | true | deleteResource | whether to delete resource. | bool | false | true variable | the variable in the configuration. | map[string]_ | true | writeConnectionSecretToRef | this specifies the namespace and name of a secret to which any connection details for this managed resource should be written. | [writeConnectionSecretToRef](#writeconnectionsecrettoref-apply-terraform-config) | false | providerRef | providerRef specifies the reference to Provider. | [providerRef](#providerref-apply-terraform-config) | false | region | region is cloud provider's region. It will override the region in the region field of providerRef. | string | false | jobEnv | the envs for job. | map[string]_ | false | forceDelete | forceDelete will force delete Configuration no matter which state it is or whether it has provisioned some resources. | bool | false | false #### type-option-1 (apply-terraform-config) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- hcl | directly specify the hcl of the terraform configuration. | string | true | #### type-option-2 (apply-terraform-config) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- remote | specify the remote url of the terraform configuration. | string | false | https://github.com/kubevela-contrib/terraform-modules.git path | specify the path of the terraform configuration. | string | false | #### writeConnectionSecretToRef (apply-terraform-config) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- name | | string | true | namespace | | _|_ | true | #### providerRef (apply-terraform-config) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- name | | string | true | 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) ```yaml 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: secretKey: region: cn-hangzhou ``` ### Specification (apply-terraform-provider) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- | | [AlibabaProvider](#alibabaprovider-apply-terraform-provider) or [AWSProvider](#awsprovider-apply-terraform-provider) or [AzureProvider](#azureprovider-apply-terraform-provider) or [BaiduProvider](#baiduprovider-apply-terraform-provider) or [ECProvider](#ecprovider-apply-terraform-provider) or [GCPProvider](#gcpprovider-apply-terraform-provider) or [TencentProvider](#tencentprovider-apply-terraform-provider) or [UCloudProvider](#ucloudprovider-apply-terraform-provider) | false | #### AlibabaProvider (apply-terraform-provider) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- type | | string | true | accessKey | | string | true | secretKey | | string | true | name | | string | false | alibaba-provider region | | string | true | #### AWSProvider (apply-terraform-provider) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- token | | string | false | empty type | | string | true | accessKey | | string | true | secretKey | | string | true | name | | string | false | aws-provider region | | string | true | #### AzureProvider (apply-terraform-provider) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- subscriptionID | | string | true | tenantID | | string | true | clientID | | string | true | clientSecret | | string | true | name | | string | false | azure-provider #### BaiduProvider (apply-terraform-provider) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- type | | string | true | accessKey | | string | true | secretKey | | string | true | name | | string | false | baidu-provider region | | string | true | #### ECProvider (apply-terraform-provider) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- type | | string | true | apiKey | | string | false | empty name | | string | false | ec-provider #### GCPProvider (apply-terraform-provider) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- credentials | | string | true | region | | string | true | project | | string | true | type | | string | true | name | | string | false | gcp-provider #### TencentProvider (apply-terraform-provider) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- secretID | | string | true | secretKey | | string | true | region | | string | true | type | | string | true | name | | string | false | tencent-provider #### UCloudProvider (apply-terraform-provider) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- publicKey | | string | true | privateKey | | string | true | projectID | | string | true | region | | string | true | type | | string | true | name | | string | false | ucloud-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) ```yaml 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: - name: create-image-secret type: export2secret properties: secretName: image-secret kind: docker-registry dockerRegistry: username: 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) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- kanikoExecutor | Specify the kaniko executor image, default to oamdev/kaniko-executor:v1.9.1. | string | false | oamdev/kaniko-executor:v1.9.1 context | Specify 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. | string | true | dockerfile | Specify the dockerfile. | string | false | ./Dockerfile image | Specify the image. | string | true | platform | Specify the platform to build. | string | false | buildArgs | Specify the build args. | []string | false | credentials | Specify the credentials to access git and image registry. | [credentials](#credentials-build-push-image) | false | verbosity | Specify the verbosity level. | "info" or "panic" or "fatal" or "error" or "warn" or "debug" or "trace" | false | info #### credentials (build-push-image) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- git | Specify the credentials to access git. | [git](#git-build-push-image) | false | image | Specify the credentials to access image registry. | [image](#image-build-push-image) | false | ##### git (build-push-image) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- name | Specify the secret name. | string | true | key | Specify the secret key. | string | true | ##### image (build-push-image) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- name | Specify the secret name. | string | true | key | Specify the secret key. | string | false | .dockerconfigjson ## Chat-Gpt ### Description Send request to chat-gpt. ### Scope This step type is valid in both Application and WorkflowRun. ### Examples (chat-gpt) ```yaml apiVersion: core.oam.dev/v1alpha1 kind: WorkflowRun metadata: name: chat-gpt namespace: default spec: workflowSpec: steps: # apply a deployment with invalid image, this step will fail because of timeout # the resource will be passed to chat-gpt step to anaylze - name: apply type: apply-deployment timeout: 3s outputs: - name: resource valueFrom: output.value properties: image: invalid # if apply step failed, send the resource to chat-gpt to diagnose - name: chat-diagnose if: status.apply.failed type: chat-gpt inputs: - from: resource parameterKey: prompt.content properties: token: # specify your token value: prompt: type: diagnose # if apply step succeeded, send the resource to chat-gpt to audit - name: chat-audit if: status.apply.succeeded type: chat-gpt inputs: - from: resource parameterKey: prompt.content properties: token: # or read your token from secret secretRef: name: chat-gpt-token-secret key: token prompt: type: audit lang: Chinese ``` ### Specification (chat-gpt) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- token | | [type-option-1](#type-option-1-chat-gpt) or [type-option-2](#type-option-2-chat-gpt) | true | model | the model name. | string | false | gpt-3.5-turbo prompt | the prompt to use. | [prompt](#prompt-chat-gpt) | true | timeout | | string | false | 30s #### type-option-1 (chat-gpt) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- value | the token value. | string | true | #### type-option-2 (chat-gpt) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- secretRef | | [secretRef](#secretref-chat-gpt) | true | ##### secretRef (chat-gpt) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- name | name is the name of the secret. | string | true | key | key is the token key in the secret. | string | true | #### prompt (chat-gpt) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- type | | "custom" or "diagnose" or "audit" or "quality-gate" | false | custom lang | | "English" or "Chinese" | false | English content | | string | true | ## Check-Metrics ### Description Verify application's metrics. ### Scope This step type is valid in both Application and WorkflowRun. ### Examples (check-metrics) ```yaml apiVersion: core.oam.dev/v1beta1 kind: Application metadata: name: canary-demo annotations: app.oam.dev/publishVersion: v2 spec: components: - name: canary-demo type: webservice properties: image: wangyikewyk/canarydemo:v2 ports: - port: 8090 traits: - type: scaler properties: replicas: 5 - type: gateway properties: domain: canary-demo.com http: "/version": 8090 workflow: steps: - name: 200-status-percent-2-phase type: check-metrics timeout: 3m properties: query: sum(irate(nginx_ingress_controller_requests{host="canary-demo.com",status="200"}[5m]))/sum(irate(nginx_ingress_controller_requests{host="canary-demo.com"}[2m])) promAddress: "http://prometheus-server.o11y-system.svc:9090" condition: ">=0.95" duration: 2m ``` ### Specification (check-metrics) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- query | Query is a raw prometheus query to perform. | string | true | metricEndpoint | The HTTP address and port of the prometheus server. | string | false | condition | Condition is an expression which determines if a measurement is considered successful. eg: >=0.95. | string | true | duration | Duration defines the duration of time required for this step to be considered successful. | string | false | 5m failDuration | FailDuration is the duration of time that, if the check fails, will result in the step being marked as failed. | string | false | 2m ## Clean-Jobs ### Description clean applied jobs in the cluster. ### Scope This step type is valid in both Application and WorkflowRun. ### Examples (clean-jobs) ```yaml 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) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- labelselector | | map[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) ```yaml 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) ```yaml 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) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- name | Specify the name of the config. | string | true | namespace | Specify the namespace of the config. | string | false | template | Specify the template of the config. | string | false | config | Specify 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) ```yaml 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) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- name | Specify the name of the config. | string | true | namespace | Specify the namespace of the config. | string | false | ## 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) ```yaml 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. ```yaml apiVersion: v1 kind: ConfigMap metadata: name: myapp namespace: vela-system data: application: ``` ### Specification (depends-on-app) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- name | Specify the name of the dependent Application. | string | true | namespace | Specify the namespace of the dependent Application. | string | true | ## 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) ```yaml 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) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- auto | If set to false, the workflow will suspend automatically before this step, default to be true. | bool | false | true policies | Declare the policies that used for this deployment. If not specified, the components will be deployed to the hub cluster. | []string | true | parallelism | Maximum number of concurrent delivered components. | int | false | 5 ignoreTerraformComponent | If set false, this step will apply the components with the terraform workload. | bool | false | true ## 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) ```yaml 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) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- policy | Declare the name of the env-binding policy, if empty, the first env-binding policy will be used. | string | false | empty env | Declare the name of the env in policy. | string | true | ## Export-Data ### Description Export data to clusters specified by topology. ### Scope This step type is only valid in Application. ### Examples (export-data) ```yaml 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) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- name | Specify the name of the export destination. | string | false | namespace | Specify the namespace of the export destination. | string | false | kind | Specify the kind of the export destination. | "ConfigMap" or "Secret" | false | ConfigMap data | Specify the data to export. | struct | true | topology | Specify the topology to export. | string | false | ## Export-Service ### Description Export service to clusters specified by topology. ### Scope This step type is only valid in Application. ### Examples (export-service) ```yaml 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) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- name | Specify the name of the export destination. | string | false | namespace | Specify the namespace of the export destination. | string | false | ip | Specify the ip to be export. | string | true | port | Specify the port to be used in service. | int | true | targetPort | Specify the port to be export. | int | true | topology | Specify the topology to export. | string | false | ## Export2config ### Description Export data to specified Kubernetes ConfigMap in your workflow. ### Scope This step type is valid in both Application and WorkflowRun. ### Examples (export2config) ```yaml 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) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- configName | Specify the name of the config map. | string | true | namespace | Specify the namespace of the config map. | string | false | data | Specify the data of config map. | struct | true | cluster | Specify the cluster of the config map. | string | false | empty ## Export2secret ### Description Export data to Kubernetes Secret in your workflow. ### Scope This step type is valid in both Application and WorkflowRun. ### Examples (export2secret) ```yaml 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) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- secretName | Specify the name of the secret. | string | true | namespace | Specify the namespace of the secret. | string | false | type | Specify the type of the secret. | string | false | data | Specify the data of secret. | struct | true | cluster | Specify the cluster of the secret. | string | false | empty kind | Specify the kind of the secret. | "generic" or "docker-registry" | false | generic dockerRegistry | Specify the docker data. | [dockerRegistry](#dockerregistry-export2secret) | false | #### dockerRegistry (export2secret) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- username | Specify the username of the docker registry. | string | true | password | Specify the password of the docker registry. | string | true | server | Specify the server of the docker registry. | string | false | https://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) ```yaml 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) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- name | Specify the name of the secret generated by database component. | string | true | namespace | Specify the namespace of the secret generated by database component. | string | false | ## List-Config ### Description List the configs. ### Scope This step type is valid in both Application and WorkflowRun. ### Examples (list-config) ```yaml 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) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- template | Specify the template of the config. | string | true | namespace | Specify the namespace of the config. | string | false | ## 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) ```yaml 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: 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: key: message: text: Workflow ended. lark: url: value: message: msg_type: "text" content: "{\"text\":\" Hello KubeVela\"}" email: from: address: alias: password: # secretRef: # name: # key: value: host: port: 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) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- lark | Please fulfill its url and message if you want to send Lark messages. | [lark](#lark-notification) | false | dingding | Please fulfill its url and message if you want to send DingTalk messages. | [dingding](#dingding-notification) | false | slack | Please fulfill its url and message if you want to send Slack messages. | [slack](#slack-notification) | false | email | Please fulfill its from, to and content if you want to send email. | [email](#email-notification) | false | #### lark (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- url | Specify the the lark url, you can either sepcify it in value or use secretRef. | [type-option-1](#type-option-1-notification) or [type-option-2](#type-option-2-notification) | true | message | Specify the message that you want to sent, refer to [Lark messaging](https://open.feishu.cn/document/ukTMukTMukTM/ucTM5YjL3ETO24yNxkjN#8b0f2a1b). | [message](#message-notification) | true | ##### type-option-1 (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- value | the url address content in string. | string | true | ##### type-option-2 (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- secretRef | | [secretRef](#secretref-notification) | true | ##### secretRef (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- name | name is the name of the secret. | string | true | key | key is the key in the secret. | string | true | ##### message (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- msg_type | msg_type can be text, post, image, interactive, share_chat, share_user, audio, media, file, sticker. | string | true | content | content should be json encode string. | string | true | #### dingding (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- url | Specify the the dingding url, you can either sepcify it in value or use secretRef. | [type-option-1](#type-option-1-notification) or [type-option-2](#type-option-2-notification) | true | message | Specify the message that you want to sent, refer to [dingtalk messaging](https://developers.dingtalk.com/document/robots/custom-robot-access/title-72m-8ag-pqw). | [message](#message-notification) | true | ##### type-option-1 (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- value | the url address content in string. | string | true | ##### type-option-2 (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- secretRef | | [secretRef](#secretref-notification) | true | ##### secretRef (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- name | name is the name of the secret. | string | true | key | key is the key in the secret. | string | true | ##### message (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- text | Specify the message content of dingtalk notification. | [text](#text-notification) | false | msgtype | msgType can be text, link, mardown, actionCard, feedCard. | "text" or "link" or "markdown" or "actionCard" or "feedCard" | false | text link | | [link](#link-notification) | false | markdown | | [markdown](#markdown-notification) | false | at | | [at](#at-notification) | false | actionCard | | [actionCard](#actioncard-notification) | false | feedCard | | [feedCard](#feedcard-notification) | false | ##### text (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- content | | string | true | ##### link (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- text | | string | false | title | | string | false | messageUrl | | string | false | picUrl | | string | false | ##### markdown (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- text | | string | true | title | | string | true | ##### at (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- atMobiles | | []string | false | isAtAll | | bool | false | ##### actionCard (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- text | | string | true | title | | string | true | hideAvatar | | string | true | btnOrientation | | string | true | singleTitle | | string | true | singleURL | | string | true | btns | | [[]btns](#btns-notification) | false | ##### btns (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- title | | string | true | actionURL | | string | true | ##### feedCard (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- links | | [[]links](#links-notification) | true | ##### links (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- text | | string | false | title | | string | false | messageUrl | | string | false | picUrl | | string | false | #### slack (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- url | Specify the the slack url, you can either sepcify it in value or use secretRef. | [type-option-1](#type-option-1-notification) or [type-option-2](#type-option-2-notification) | true | message | Specify the message that you want to sent, refer to [slack messaging](https://api.slack.com/reference/messaging/payload). | [message](#message-notification) | true | ##### type-option-1 (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- value | the url address content in string. | string | true | ##### type-option-2 (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- secretRef | | [secretRef](#secretref-notification) | true | ##### secretRef (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- name | name is the name of the secret. | string | true | key | key is the key in the secret. | string | true | ##### message (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- text | Specify the message text for slack notification. | string | true | blocks | | [[]blocks](#blocks-notification) | false | attachments | | [attachments](#attachments-notification) | false | thread_ts | | string | false | mrkdwn | Specify the message text format in markdown for slack notification. | bool | false | true ##### blocks (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- type | | string | true | block_id | | string | false | elements | | [[]elements](#elements-notification) | false | ##### elements (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- type | | string | true | action_id | | string | false | url | | string | false | value | | string | false | style | | string | false | text | | [text](#text-notification) | false | confirm | | [confirm](#confirm-notification) | false | options | | [[]options](#options-notification) | false | initial_options | | [[]initial_options](#initial_options-notification) | false | placeholder | | [placeholder](#placeholder-notification) | false | initial_date | | string | false | image_url | | string | false | alt_text | | string | false | option_groups | | [[]option_groups](#option_groups-notification) | false | max_selected_items | | int | false | initial_value | | string | false | multiline | | bool | false | min_length | | int | false | max_length | | int | false | dispatch_action_config | | [dispatch_action_config](#dispatch_action_config-notification) | false | initial_time | | string | false | ##### text (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- type | | string | true | text | | string | true | emoji | | bool | false | verbatim | | bool | false | ##### confirm (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- title | | [title](#title-notification) | true | text | | [text](#text-notification) | true | confirm | | [confirm](#confirm-notification) | true | deny | | [deny](#deny-notification) | true | style | | string | false | ##### title (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- type | | string | true | text | | string | true | emoji | | bool | false | verbatim | | bool | false | ##### text (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- type | | string | true | text | | string | true | emoji | | bool | false | verbatim | | bool | false | ##### confirm (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- type | | string | true | text | | string | true | emoji | | bool | false | verbatim | | bool | false | ##### deny (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- type | | string | true | text | | string | true | emoji | | bool | false | verbatim | | bool | false | ##### options (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- text | | [text](#text-notification) | true | value | | string | true | description | | [description](#description-notification) | false | url | | string | false | ##### text (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- type | | string | true | text | | string | true | emoji | | bool | false | verbatim | | bool | false | ##### description (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- type | | string | true | text | | string | true | emoji | | bool | false | verbatim | | bool | false | ##### initial_options (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- text | | [text](#text-notification) | true | value | | string | true | description | | [description](#description-notification) | false | url | | string | false | ##### text (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- type | | string | true | text | | string | true | emoji | | bool | false | verbatim | | bool | false | ##### description (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- type | | string | true | text | | string | true | emoji | | bool | false | verbatim | | bool | false | ##### placeholder (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- type | | string | true | text | | string | true | emoji | | bool | false | verbatim | | bool | false | ##### option_groups (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- text | | [text](#text-notification) | true | value | | string | true | description | | [description](#description-notification) | false | url | | string | false | ##### text (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- type | | string | true | text | | string | true | emoji | | bool | false | verbatim | | bool | false | ##### description (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- type | | string | true | text | | string | true | emoji | | bool | false | verbatim | | bool | false | ##### dispatch_action_config (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- trigger_actions_on | | []string | false | ##### attachments (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- blocks | | [[]blocks](#blocks-notification) | false | color | | string | false | ##### blocks (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- type | | string | true | block_id | | string | false | elements | | [[]elements](#elements-notification) | false | ##### elements (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- type | | string | true | action_id | | string | false | url | | string | false | value | | string | false | style | | string | false | text | | [text](#text-notification) | false | confirm | | [confirm](#confirm-notification) | false | options | | [[]options](#options-notification) | false | initial_options | | [[]initial_options](#initial_options-notification) | false | placeholder | | [placeholder](#placeholder-notification) | false | initial_date | | string | false | image_url | | string | false | alt_text | | string | false | option_groups | | [[]option_groups](#option_groups-notification) | false | max_selected_items | | int | false | initial_value | | string | false | multiline | | bool | false | min_length | | int | false | max_length | | int | false | dispatch_action_config | | [dispatch_action_config](#dispatch_action_config-notification) | false | initial_time | | string | false | ##### text (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- type | | string | true | text | | string | true | emoji | | bool | false | verbatim | | bool | false | ##### confirm (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- title | | [title](#title-notification) | true | text | | [text](#text-notification) | true | confirm | | [confirm](#confirm-notification) | true | deny | | [deny](#deny-notification) | true | style | | string | false | ##### title (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- type | | string | true | text | | string | true | emoji | | bool | false | verbatim | | bool | false | ##### text (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- type | | string | true | text | | string | true | emoji | | bool | false | verbatim | | bool | false | ##### confirm (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- type | | string | true | text | | string | true | emoji | | bool | false | verbatim | | bool | false | ##### deny (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- type | | string | true | text | | string | true | emoji | | bool | false | verbatim | | bool | false | ##### options (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- text | | [text](#text-notification) | true | value | | string | true | description | | [description](#description-notification) | false | url | | string | false | ##### text (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- type | | string | true | text | | string | true | emoji | | bool | false | verbatim | | bool | false | ##### description (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- type | | string | true | text | | string | true | emoji | | bool | false | verbatim | | bool | false | ##### initial_options (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- text | | [text](#text-notification) | true | value | | string | true | description | | [description](#description-notification) | false | url | | string | false | ##### text (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- type | | string | true | text | | string | true | emoji | | bool | false | verbatim | | bool | false | ##### description (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- type | | string | true | text | | string | true | emoji | | bool | false | verbatim | | bool | false | ##### placeholder (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- type | | string | true | text | | string | true | emoji | | bool | false | verbatim | | bool | false | ##### option_groups (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- text | | [text](#text-notification) | true | value | | string | true | description | | [description](#description-notification) | false | url | | string | false | ##### text (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- type | | string | true | text | | string | true | emoji | | bool | false | verbatim | | bool | false | ##### description (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- type | | string | true | text | | string | true | emoji | | bool | false | verbatim | | bool | false | ##### dispatch_action_config (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- trigger_actions_on | | []string | false | #### email (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- from | Specify the email info that you want to send from. | [from](#from-notification) | true | to | Specify the email address that you want to send to. | []string | true | content | Specify the content of the email. | [content](#content-notification) | true | ##### from (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- address | Specify the email address that you want to send from. | string | true | alias | The alias is the email alias to show after sending the email. | string | false | password | Specify the password of the email, you can either sepcify it in value or use secretRef. | [type-option-1](#type-option-1-notification) or [type-option-2](#type-option-2-notification) | true | host | Specify the host of your email. | string | true | port | Specify the port of the email host, default to 587. | int | false | 587 ##### type-option-1 (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- value | the password content in string. | string | true | ##### type-option-2 (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- secretRef | | [secretRef](#secretref-notification) | true | ##### secretRef (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- name | name is the name of the secret. | string | true | key | key is the key in the secret. | string | true | ##### content (notification) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- subject | Specify the subject of the email. | string | true | body | Specify the context body of the email. | string | true | ## Print-Message-In-Status ### Description print message in workflow step status. ### Scope This step type is valid in both Application and WorkflowRun. ### Examples (print-message-in-status) ```yaml 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) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- message | | string | true | ## Read-App ### Description Read application from the cluster. ### Scope This step type is only valid in WorkflowRun. ### Examples (read-app) ```yaml 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) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- name | | string | true | namespace | | _|_ | true | ## Read-Config ### Description Read a config. ### Scope This step type is valid in both Application and WorkflowRun. ### Examples (read-config) ```yaml 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) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- name | Specify the name of the config. | string | true | namespace | Specify the namespace of the config. | string | false | ## 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) ```yaml 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: - name: failed-notification type: notification if: status.request.failed properties: slack: url: value: message: text: "Failed to request github" ``` ### Specification (request) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- url | | string | true | method | | "GET" or "POST" or "PUT" or "DELETE" | false | GET body | | map[string]_ | false | header | | map[string]string | false | ## 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) ```yaml 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) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- placements | Declare the location to bind. | [[]placements](#placements-share-cloud-resource) | true | policy | Declare the name of the env-binding policy, if empty, the first env-binding policy will be used. | string | false | empty env | Declare the name of the env in policy. | string | true | #### placements (share-cloud-resource) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- namespace | | string | false | cluster | | string | false | ## 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) ```yaml 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. ```yaml 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: # 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) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- duration | Specify the wait duration time to resume workflow such as "30s", "1min" or "2m15s". | string | false | message | The suspend message to show. | string | false | ## Vela-Cli ### Description Run a vela command. ### Scope This step type is valid in both Application and WorkflowRun. ### Examples (vela-cli) ```yaml 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) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- addonName | Specify the name of the addon. | string | true | command | Specify the vela command. | []string | true | image | Specify the image. | string | false | oamdev/vela-cli:v1.6.4 serviceAccountName | specify serviceAccountName want to use. | string | false | kubevela-vela-core storage | | [storage](#storage-vela-cli) | false | #### storage (vela-cli) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- secret | Mount Secret type storage. | [[]secret](#secret-vela-cli) | false | hostPath | Declare host path type storage. | [[]hostPath](#hostpath-vela-cli) | false | ##### secret (vela-cli) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- name | | string | true | mountPath | | string | true | subPath | | string | false | defaultMode | | int | false | 420 secretName | | string | true | items | | [[]items](#items-vela-cli) | false | ##### items (vela-cli) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- key | | string | true | path | | string | true | mode | | int | false | 511 ##### hostPath (vela-cli) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- name | | string | true | path | | string | true | mountPath | | string | true | type | | "Directory" or "DirectoryOrCreate" or "FileOrCreate" or "File" or "Socket" or "CharDevice" or "BlockDevice" | false | Directory ## Webhook ### Description Send a POST 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) ```yaml 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: ``` ### Specification (webhook) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- url | Specify the webhook url. | [type-option-1](#type-option-1-webhook) or [type-option-2](#type-option-2-webhook) | true | data | Specify the data you want to send. | map[string]_ | false | #### type-option-1 (webhook) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- value | | string | true | #### type-option-2 (webhook) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- secretRef | | [secretRef](#secretref-webhook) | true | ##### secretRef (webhook) Name | Description | Type | Required | Default ---- | ----------- | ---- | -------- | ------- name | name is the name of the secret. | string | true | key | key is the key in the secret. | string | true |