Walle is an open-source, vendor-neutral and cloud-native serverless workflow management system.
-
Kubernetes
-
OpenFaaS deployed on your Kubernetes
export OPENFAAS_GATEWAY=XXX
faas-cli deploy -f walle-engine.yml -g $OPENFAAS_GATEWAY
chmod +x install.sh
./install.sh
kubectl get ingress -n walle
NAME CLASS HOSTS ADDRESS PORTS AGE
gateway-ingress nginx * 192.168.64.2 80 10h
Open ADDRESS
in your browser
name: example-workflow
triggers:
- type: http
name: http-trigger
async: true
tasks:
- name: task-1 # task name
type: http # task type
url: http://example.com/api/task-1 # the cloud function URL
method: GET # HTTP method
headers: # HTTP headers
- name: Content-Type
value: application/json
body: {"message": "Hello Walle!"} # HTTP body
retry: 3 # max retry times if the task failed
timeout: 10s # max request timeout
depends: [] # dependency list
- name: task-2 # Task 2, no dependency
url: http://example.com/api/task-2
- name: task-3
url: http://example.com/api/task-3
depends: [task-1, task-2] # depends on both Task 1 and Task 2, should be run after them
- name: task-4
url: http://example.com/api/task-4
depends: [task-1] # Only depends on Task 1 and should be immediately run after Task 1
name: sequence-pattern
tasks:
- name: task-1
url: http://example.com/api/task-1
- name: task-2
url: http://example.com/api/task-2
depends: [task-1]
- name: task-3
url: http://example.com/api/task-3
depends: [task-2]
name: parallel-split-pattern
tasks:
- name: task-1
url: http://example.com/api/task-1
- name: task-2
url: http://example.com/api/task-2
depends: [task-1]
- name: task-3
url: http://example.com/api/task-3
depends: [task-1]
name: synchronization-pattern
tasks:
- name: task-1
url: http://example.com/api/task-1
- name: task-2
url: http://example.com/api/task-2
- name: task-3
url: http://example.com/api/task-3
depends: [task-1, task-2]