# argo-workflow parameter 로 json 형태를 전달 받았을떄
# single quotation 으로 감싸지 않으면 " escape 가 되지 않는다.
# test
# argo worfklow version: 3.4.4
# workflow
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: ysoftman-test
namespace: ysoftman-workflow
spec:
serviceAccountName: workflow-template
entrypoint: ysoftman
templates:
- name: ysoftman
steps:
- - name: ysoftman
template: print-data
arguments:
parameters:
- name: data1
value: "{\"a\":\"apple lemon\"}"
- name: data2
value: '{"b":"banana"}'
- name: print-data
inputs:
parameters:
- name: data1
- name: data2
script:
image: "alpine"
command: [sh]
source: |
echo '{{inputs.parameters.data1}}'
echo '{{inputs.parameters.data2}}'
echo '{{inputs.parameters}}'
# invalid JSON
echo "{{inputs.parameters.data1}}"
echo "{{inputs.parameters.data2}}"
echo "{{inputs.parameters}}"
# invalid JSON
echo {{inputs.parameters.data1}}
echo {{inputs.parameters.data2}}
echo {{inputs.parameters}}
sleep 1000
# workflow pod log 결과
{"a":"apple lemon"}
{"b":"banana"}
[{"name":"data1","value":"{\"a\":\"apple lemon\"}"},{"name":"data2","value":"{\"b\":\"banana\"}"}]
{a:apple lemon}
{b:banana}
[{name:data1,value:{"a":"apple lemon"}},{name:data2,value:{"b":"banana"}}]
{a:apple lemon}
{b:banana}
[{name:data1,value:{"a":"apple lemon"}},{name:data2,value:{"b":"banana"}}]
#####
# data3 의 값이 json 이고 필드값으로 yaml, xml 등이 escaped 로 된 복잡한 파라메터인 경우 다음과 같이 처리해도 올바른 JSON 으로 출력되지 않는다.
echo '{{inputs.parameters.data3}}' # /argo/staging/script 에러
echo {{inputs.parameters.data3}} # " 가 빠진 invalid JSON
echo -e {{inputs.parameters.data3}} # "가 빠지고 \n 등에서 /argo/staging/script 에러
# jq 가 포함된 이지미를 사용해 script 에 다음과 같이 환경변수를 파싱해서 사용했다.
echo "$ARGO_TEMPLATE" | jq -r '.inputs.parameters[] | select(.name=="data3").value' | jq -r .workflow_yaml > /tmp/data.yaml