Argo Workflows Variables
변수 사용 방법
CR 정의에 따라 자동으로 정의 및 할당되는 변수와 사용자 정의(inputs.parameters
) 및 할당(arguments.parameters
)이 필요한 변수가 있습니다.
정의된 변수는 아래와 같은 형태로 template
을 구성하는 데 사용할 수 있습니다.
- 단순 치환
"{{inputs.parameters.<parameterName>}}"
- 연산 후 치환
"{{=inputs.parameters['<parameterName>']}}"
"{{=inputs.parameters.<parameterName>}}"
예를 들어 아래와 같은 방식으로 변수를 사용할 수 있습니다.
spec:
templates:
- name: whalesay
inputs:
parameters:
- name: message
container:
image: docker/whalesay
command: [cowsay]
args: ["{{inputs.parameters.message}}"]
사용자 정의 및 할당
inputs.parameters
spec:
templates:
- name: <templateName>
inputs:
parameters:
- name: <parameterName>
# value: <defaultValue>
arguments.parameters
템플릿은 Workflow의 entrypoint로 직접 사용되거나 steps, dag에서 사용됩니다. 그 때 arguments.parameters
를 통해 템플릿에 정의된 파라미터에 인자를 전달할 수 있습니다.
dag
spec:
templates:
- name: ""
dag:
tasks:
- name: ""
template: <templateName>
arguments:
parameters:
- name: <parameterName>
value: <defaultValue>
entrypoint
spec:
entrypoint: <templateName>
arguments:
parameters:
- name: <parameterName>
value: <defaultValue>
workflow.parameters
(전역변수)
spec:
arguments:
parameters:
- name: <parameterName>
value: <defaultValue>
위와 같이 정의하면 CR 정의 전체 영역에서 "{{workflow.parameters.<parameterName>}}"
으로 사용할 수 있습니다.
submit할 때 --parameter <parameterName>=<value>
형태로도 전달 할 수도 있습니다.
outputs.parameters
spec:
templates:
- name: <templateName>
outputs:
parameters:
- name: <parameterName>
valueFrom:
path: <path>
resource
-> outputs.parameters
spec:
templates:
- name: <templateName>
resource:
manifest: |
metadata:
generateName: <prefix>- # <resourceObjName> = <prefix>-<randomString>
outputs:
parameters:
- name: <parameterName>
valueFrom:
# `kubectl get job <resourceObjName> -o jsonpath='<jsonPath>'`
jsonPath: "<jsonPath>"
- name: <parameterName>
valueFrom:
# `kubectl get job <resourceObjName> -o json | jq -c '<filter>'
jqFilter: "<filter>"
함수 사용하기(expression)
- https://argoproj.github.io/argo-workflows/variables/#expression
- expr과 sprig를 혼용해서 사용할 수 있습니다.
warning
- 함수를 사용할 때,
-
가 있는<key>
를 사용하는 경우['<key>']
로 사용해야 합니다. - 시작은
{{=
로 해야합니다.
expr
- https://expr.medv.io/docs/Language-Definition
- https://argoproj.github.io/argo-workflows/conditional-artifacts-parameters/#built-in-functions
sprig
Helm에서 선언하기
{{
와 }}
는 Go 템플릿에서 사용하는 구문이기 때문에 Helm에서 사용할 때는 템플릿 처리가 안되도록 수정해야합니다.
아래와 같은 방법으로 처리할 수 있습니다.
{{`<escape 하고싶은 내용>`}}
{{`"{{inputs.parameters.message}}"`}}