forked from argoproj/argo-workflows
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfibonacci-seq-conditional-param.yaml
124 lines (122 loc) · 3.8 KB
/
fibonacci-seq-conditional-param.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: fibonacci-
annotations:
workflows.argoproj.io/description: |
This example demonstrates fibonacci sequence problem using conditional parameter feature.
workflows.argoproj.io/veriiony: ">= 3.1.0"
spec:
entrypoint: main
arguments:
parameters:
- name: num
value: "5"
templates:
- name: main
steps:
- - name: fibonaccimain
template: fibonacci
arguments:
parameters:
- name: num
value: "{{workflow.parameters.num}}"
- - name: printresult
template: printresult
arguments:
parameters:
- name: result
value: "{{steps.fibonaccimain.outputs.parameters.fib}}"
- name: fibonacci
inputs:
parameters:
- name: num
memoize:
key: "{{inputs.parameters.num}}"
maxAge: "120s"
cache:
configMap:
name: fibonacci-m
key: fibonacci-cache
steps:
- - name: fibonacci-helper
template: fibonaccihelper
when: "{{inputs.parameters.num}} != 1 && {{inputs.parameters.num}} != 2"
arguments:
parameters:
- name: num-1
value: "{{inputs.parameters.num}}"
outputs:
parameters:
- name: fib
valueFrom:
# If template name has "-" then variable path should have steps['fibonacci-helper']
expression: "asInt(inputs.parameters.num) == 1? 1: asInt(inputs.parameters.num) == 2? 1: steps['fibonacci-helper'].outputs.parameters.result"
- name: fibonaccihelper
inputs:
parameters:
- name: num-1
steps:
- - name: sub-1
template: do-math
arguments:
parameters:
- { name: a, value: "{{inputs.parameters.num-1}}" }
- { name: op, value: "-" }
- { name: b, value: "1" }
- - name: sub-2
template: do-math
when: "{{inputs.parameters.num-1}} != 1 && {{inputs.parameters.num-1}} != 2"
arguments:
parameters:
- { name: a, value: "{{inputs.parameters.num-1}}" }
- { name: op, value: "-" }
- { name: b, value: "2" }
- - name: fib-sub-1
template: fibonacci
arguments:
parameters:
- name: num
value: "{{steps.sub-1.outputs.result}}"
- - name: fib-sub-2
template: fibonacci
arguments:
parameters:
- name: num
value: "{{steps.sub-2.outputs.result}}"
- - name: add
template: do-math
arguments:
parameters:
- { name: a, value: "{{steps.fib-sub-1.outputs.parameters.fib}}" }
- { name: op, value: "+" }
- { name: b, value: "{{steps.fib-sub-2.outputs.parameters.fib}}" }
outputs:
parameters:
- name: result
valueFrom:
parameter: "{{steps.add.outputs.result}}"
- name: return-1
script:
image: python:alpine3.6
command: [ python ]
source: print(1)
- name: do-math
inputs:
parameters:
- name: a
- name: op
- name: b
script:
image: python:alpine3.6
command: [ python ]
source: |
print({{inputs.parameters.a}} {{inputs.parameters.op}} {{inputs.parameters.b}})
- name: printresult
inputs:
parameters:
- name: result
container:
image: alpine:latest
command: [ sh, -c ]
args: [ "echo {{inputs.parameters.result}}" ]