Workflow Variables
workflow specification의 일부 fields는 Argo에 의해서 자동으로 대체되는 variable references가 가능하다.
해당 변수들은 {} 안에 포함시켜서 사용하면 된다.
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: hello-world-parameters-
spec:
entrypoint: whalesay
arguments:
parameters:
- name: message
value: hello world
templates:
- name: whalesay
inputs:
parameters:
- name: message
container:
image: docker/whalesay
command: [ cowsay ]
args: [ "{{inputs.parameters.message}}" ]
다음과 같은 두 종류의 template tag가 존재한다.
{{workflow.name}}{{=workflow.name}}{{ 바로 뒤에 =가 붙은 형식-으로 연결된 parameter name 혹은 step name인 경우 인텍싱을 통해 참조해야 한다. e.g. inputs.parameters['my-param'] or steps['my-step'].outputs.result🤔 workflow.parameters.json
All input parameters to the workflow as a JSON string
- 워크플로우에 대한 모든 input parameter를 JSON string으로 사용한다.
- workflow variable 중 Global 변수에 해당
workflow.parameters.json 에서 제공되는 JSON은 parameter values 값에서 quotes를 이스케이프 처리하지 않고 잘못된 JSON을 생성할 수 있다고 한다.
기여자는 workflow.parameters.json이 항상 유효한 JSON 문자열을 제공하기 위해 workflow input parameter 안의 "가 이스케이프될 것으로 예상했다.
workflow는 error가 발생하고 argument-1's value의 "를 제거하면 에러가 사라진다고 한다.
에러가 발생하는 코드는 다음과 같다.
kind: Workflow
metadata:
generateName: json-test-
spec:
entrypoint: params-dumper
arguments:
parameters:
- name: argument-1
value: with " quote
templates:
- name: params-dumper
container:
image: python
command:
- python
- -c
args:
- |
from json import loads
from json.decoder import JSONDecodeError
try:
loads("""{{workflow.parameters.json}}""")
except JSONDecodeError as e:
print(f"not ok: {e}")
raise e
else:
print("ok")

loads()는 json 문자열을 python 객체로 변환하기 위한 함수 """{value}"""를 활용(?)json: [{"name":"argument-1","value":"with " quote"}] <<< 이렇게 json string이 생성
-> 해당 파라미터 값 중 value의 with " quote 부분에서 "가 escape 안 됨
What does it mean to escape a string?
quote 안에서 ambiguity(모호성)을 줄이기 위한 문자열"Hello World" "Hello "World""따라서
"를 escape하기 위해"Hello \"World\""
해당 코드를 작성해보고 실행한 결과 python 환경에서도 비슷한 에러가 발생함을 확인하였고 Argo workflows와 무관하다 판단되어 다른 이슈를 탐색하기로 함