Skip to main content

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)

warning
  • 함수를 사용할 때, -가 있는 <key>를 사용하는 경우 ['<key>']로 사용해야 합니다.
  • 시작은 {{=로 해야합니다.

expr

sprig

Helm에서 선언하기

{{}}는 Go 템플릿에서 사용하는 구문이기 때문에 Helm에서 사용할 때는 템플릿 처리가 안되도록 수정해야합니다.

아래와 같은 방법으로 처리할 수 있습니다.

{{`<escape 하고싶은 내용>`}}
{{`"{{inputs.parameters.message}}"`}}