adding more examples
This commit is contained in:
parent
10c9d65945
commit
32a768ffb8
|
@ -31,7 +31,9 @@ Serverless Workflow specification part.
|
|||
- [Scripts and Results](#Scripts-And-Results)
|
||||
- [Loops](#Loops)
|
||||
- [Conditionals](#Conditionals)
|
||||
|
||||
- [Retrying Failed Steps](#Retrying-Failed-Steps)
|
||||
- [Recursion](#Recursion)
|
||||
- [Exit Handlers](#Exit-Handlers)
|
||||
|
||||
### Hello World With Parameters
|
||||
|
||||
|
@ -695,3 +697,340 @@ states:
|
|||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
### Retrying Failed Steps
|
||||
|
||||
[Argo Example](https://github.com/argoproj/argo/tree/master/examples#retrying-failed-or-errored-steps)
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<th>Argo</th>
|
||||
<th>Serverless Workflow</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top">
|
||||
|
||||
```yaml
|
||||
apiVersion: argoproj.io/v1alpha1
|
||||
kind: Workflow
|
||||
metadata:
|
||||
generateName: retry-backoff-
|
||||
spec:
|
||||
entrypoint: retry-backoff
|
||||
templates:
|
||||
- name: retry-backoff
|
||||
retryStrategy:
|
||||
limit: 10
|
||||
retryPolicy: "Always"
|
||||
backoff:
|
||||
duration: "1"
|
||||
factor: 2
|
||||
maxDuration: "1m"
|
||||
container:
|
||||
image: python:alpine3.6
|
||||
command: ["python", -c]
|
||||
# fail with a 66% probability
|
||||
args: ["import random; import sys; exit_code = random.choice([0, 1, 1]); sys.exit(exit_code)"]
|
||||
```
|
||||
|
||||
</td>
|
||||
<td valign="top">
|
||||
|
||||
```yaml
|
||||
id: retry-backoff-
|
||||
name: Retry Example
|
||||
version: '1.0'
|
||||
functions:
|
||||
- name: fail-function
|
||||
resource: python:alpine3.6
|
||||
type: container
|
||||
metadata:
|
||||
command: python
|
||||
states:
|
||||
- name: retry-backoff
|
||||
type: OPERATION
|
||||
start:
|
||||
kind: DEFAULT
|
||||
actions:
|
||||
- functionRef:
|
||||
refName: flip-coin-function
|
||||
parameters:
|
||||
args:
|
||||
- import random; import sys; exit_code = random.choice([0, 1, 1]); sys.exit(exit_code)
|
||||
retry:
|
||||
- expression:
|
||||
language: spel
|
||||
body: "$.exit_code == 1"
|
||||
maxAttempts: 10
|
||||
multiplier: PT2M
|
||||
interval: PT1M
|
||||
end:
|
||||
kind: DEFAULT
|
||||
```
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
### Recursion
|
||||
|
||||
[Argo Example](https://github.com/argoproj/argo/tree/master/examples#recursion)
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<th>Argo</th>
|
||||
<th>Serverless Workflow</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top">
|
||||
|
||||
```yaml
|
||||
apiVersion: argoproj.io/v1alpha1
|
||||
kind: Workflow
|
||||
metadata:
|
||||
generateName: coinflip-recursive-
|
||||
spec:
|
||||
entrypoint: coinflip
|
||||
templates:
|
||||
- name: coinflip
|
||||
steps:
|
||||
# flip a coin
|
||||
- - name: flip-coin
|
||||
template: flip-coin
|
||||
# evaluate the result in parallel
|
||||
- - name: heads
|
||||
template: heads # call heads template if "heads"
|
||||
when: "{{steps.flip-coin.outputs.result}} == heads"
|
||||
- name: tails # keep flipping coins if "tails"
|
||||
template: coinflip
|
||||
when: "{{steps.flip-coin.outputs.result}} == tails"
|
||||
|
||||
- name: flip-coin
|
||||
script:
|
||||
image: python:alpine3.6
|
||||
command: [python]
|
||||
source: |
|
||||
import random
|
||||
result = "heads" if random.randint(0,1) == 0 else "tails"
|
||||
print(result)
|
||||
|
||||
- name: heads
|
||||
container:
|
||||
image: alpine:3.6
|
||||
command: [sh, -c]
|
||||
args: ["echo \"it was heads\""]
|
||||
```
|
||||
|
||||
</td>
|
||||
<td valign="top">
|
||||
|
||||
```yaml
|
||||
id: coinflip-recursive-
|
||||
name: Recursion Example
|
||||
version: '1.0'
|
||||
functions:
|
||||
- name: heads-function
|
||||
resource: alpine:3.6
|
||||
type: container
|
||||
metadata:
|
||||
command: echo "it was heads"
|
||||
- name: flip-coin-function
|
||||
resource: python:alpine3.6
|
||||
type: script
|
||||
metadata:
|
||||
command: python
|
||||
source: import random result = "heads" if random.randint(0,1) == 0 else "tail" print(result)
|
||||
states:
|
||||
- name: flip-coin-state
|
||||
type: OPERATION
|
||||
start:
|
||||
kind: DEFAULT
|
||||
actions:
|
||||
- functionRef:
|
||||
refName: flip-coin-function
|
||||
actionDataFilter:
|
||||
dataResultsPath: "$.steps.flip-coin.outputs.result"
|
||||
transition:
|
||||
nextState: flip-coin-check
|
||||
- name: flip-coin-check
|
||||
type: SWITCH
|
||||
conditions:
|
||||
- path: "$.steps.flip-coin.outputs.result"
|
||||
value: tails
|
||||
operator: Equals
|
||||
transition:
|
||||
nextState: flip-coin-state
|
||||
- path: "$.steps.flip-coin.outputs.result"
|
||||
value: heads
|
||||
operator: Equals
|
||||
transition:
|
||||
nextState: heads-state
|
||||
- name: heads-state
|
||||
type: OPERATION
|
||||
actions:
|
||||
- functionRef:
|
||||
refName: heads-function
|
||||
parameters:
|
||||
args: echo "it was heads"
|
||||
end:
|
||||
kind: DEFAULT
|
||||
```
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
### Exit Handlers
|
||||
|
||||
[Argo Example](https://github.com/argoproj/argo/tree/master/examples#exit-handlers)
|
||||
|
||||
*Note*: With Serverless Workflow specification we can handle Argos "onExit" functionality
|
||||
in couple of ways. One is the "onError" functionality to catch errors and transition to the
|
||||
"error" part of the workflow. Another is to send an event at the end of workflow execution
|
||||
which includes the workflow status. This event can then trigger execution other workflows
|
||||
that can handle each status. For this example we use the "onError" definition.
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<th>Argo</th>
|
||||
<th>Serverless Workflow</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top">
|
||||
|
||||
```yaml
|
||||
apiVersion: argoproj.io/v1alpha1
|
||||
kind: Workflow
|
||||
metadata:
|
||||
generateName: exit-handlers-
|
||||
spec:
|
||||
entrypoint: intentional-fail
|
||||
onExit: exit-handler
|
||||
templates:
|
||||
# primary workflow template
|
||||
- name: intentional-fail
|
||||
container:
|
||||
image: alpine:latest
|
||||
command: [sh, -c]
|
||||
args: ["echo intentional failure; exit 1"]
|
||||
|
||||
# Exit handler templates
|
||||
# After the completion of the entrypoint template, the status of the
|
||||
# workflow is made available in the global variable {{workflow.status}}.
|
||||
# {{workflow.status}} will be one of: Succeeded, Failed, Error
|
||||
- name: exit-handler
|
||||
steps:
|
||||
- - name: notify
|
||||
template: send-email
|
||||
- name: celebrate
|
||||
template: celebrate
|
||||
when: "{{workflow.status}} == Succeeded"
|
||||
- name: cry
|
||||
template: cry
|
||||
when: "{{workflow.status}} != Succeeded"
|
||||
- name: send-email
|
||||
container:
|
||||
image: alpine:latest
|
||||
command: [sh, -c]
|
||||
args: ["echo send e-mail: {{workflow.name}} {{workflow.status}}"]
|
||||
- name: celebrate
|
||||
container:
|
||||
image: alpine:latest
|
||||
command: [sh, -c]
|
||||
args: ["echo hooray!"]
|
||||
- name: cry
|
||||
container:
|
||||
image: alpine:latest
|
||||
command: [sh, -c]
|
||||
args: ["echo boohoo!"]
|
||||
```
|
||||
|
||||
</td>
|
||||
<td valign="top">
|
||||
|
||||
```yaml
|
||||
id: exit-handlers-
|
||||
name: Exit/Error Handling Example
|
||||
version: '1.0'
|
||||
functions:
|
||||
- name: intentional-fail-function
|
||||
resource: alpine:latest
|
||||
type: container
|
||||
metadata:
|
||||
command: "[sh, -c]"
|
||||
- name: send-email-function
|
||||
resource: alpine:latest
|
||||
type: script
|
||||
metadata:
|
||||
command: "[sh, -c]"
|
||||
- name: celebrate-cry-function
|
||||
resource: alpine:latest
|
||||
type: script
|
||||
metadata:
|
||||
command: "[sh, -c]"
|
||||
states:
|
||||
- name: intentional-fail-state
|
||||
type: OPERATION
|
||||
start:
|
||||
kind: DEFAULT
|
||||
actions:
|
||||
- functionRef:
|
||||
refName: intentional-fail-function
|
||||
parameters:
|
||||
args: echo intentional failure; exit 1
|
||||
onError:
|
||||
- expression:
|
||||
language: spel
|
||||
body: "$.error != null"
|
||||
errorDataFilter:
|
||||
dataOutputPath: "$.exit-code"
|
||||
transition:
|
||||
nextState: send-email-state
|
||||
- name: send-email-state
|
||||
type: OPERATION
|
||||
actions:
|
||||
- functionRef:
|
||||
refName: send-email-function
|
||||
parameters:
|
||||
args: 'echo send e-mail: $.workflow.name $.exit-code'
|
||||
transition:
|
||||
nextState: emo-state
|
||||
- name: emo-state
|
||||
type: SWITCH
|
||||
conditions:
|
||||
- path: "$.exit-code"
|
||||
value: '1'
|
||||
operator: Equals
|
||||
transition:
|
||||
nextState: celebrate-state
|
||||
- path: "$.exit-code"
|
||||
value: '1'
|
||||
operator: NotEquals
|
||||
transition:
|
||||
nextState: cry-state
|
||||
- name: celebrate-state
|
||||
type: OPERATION
|
||||
actions:
|
||||
- functionRef:
|
||||
refName: celebrate-cry-function
|
||||
parameters:
|
||||
args: echo hooray!
|
||||
end:
|
||||
kind: DEFAULT
|
||||
- name: cry-state
|
||||
type: OPERATION
|
||||
actions:
|
||||
- functionRef:
|
||||
refName: celebrate-cry-function
|
||||
parameters:
|
||||
args: echo boohoo!
|
||||
end:
|
||||
kind: DEFAULT
|
||||
```
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
Loading…
Reference in New Issue