diff --git a/test/e2e/functional/output-jqfilter-parameters.yaml b/test/e2e/functional/output-jqfilter-parameters.yaml new file mode 100644 index 000000000000..8dc0226aa376 --- /dev/null +++ b/test/e2e/functional/output-jqfilter-parameters.yaml @@ -0,0 +1,103 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Workflow +metadata: + generateName: output-jqfilter-parameters- +spec: + entrypoint: main + templates: + + # main template that: + # * create a configmap with json payload + # * extract data using jqFilter from it + # * compare the output parameters are what we expect + - name: main + steps: + - - name: create-param + template: create-param + + - - name: get-param + template: get-param + + - - name: check-param-one-value + template: check-param + arguments: + parameters: + - name: key + value: "{{steps.get-param.outputs.parameters.one_value}}" + - name: value + value: "foo" + - name: check-param-one-dict + template: check-param + arguments: + parameters: + - name: key + value: "{{steps.get-param.outputs.parameters.one_dict}}" + - name: value + value: | + {"foo":"bar"} + - name: check-param-one-list + template: check-param + arguments: + parameters: + - name: key + value: "{{steps.get-param.outputs.parameters.one_list}}" + - name: value + value: | + [{"foo":"bar"}] + + # check that key and value parameters are aligned + - name: check-param + inputs: + parameters: + - name: key + - name: value + container: + image: argoproj/argoexec:latest + command: [sh, -c] + args: [" + echo '<{{inputs.parameters.key}}>' > /tmp/input; + echo '<{{inputs.parameters.value}}>' > /tmp/expected; + diff /tmp/input /tmp/expected; + "] + + # extract parameters from a configmap json payload using jqFilter + - name: get-param + resource: + action: get + manifest: | + apiVersion: v1 + kind: ConfigMap + metadata: + name: cm-output-jqfilter-parameters + outputs: + parameters: + - name: one_value + valueFrom: + jqFilter: '.data.some | fromjson | .one_value' + - name: one_dict + valueFrom: + jqfilter: '.data.some | fromjson | .one_dict' + - name: one_list + valueFrom: + jqfilter: '.data.some | fromjson | .one_list' + + # create a configmap with json payload + - name: create-param + resource: + action: create + manifest: | + apiVersion: v1 + kind: ConfigMap + metadata: + name: cm-output-jqfilter-parameters + data: + some: | + { + "one_value": "foo", + "one_dict": {"foo":"bar"}, + "one_list": [ + { + "foo":"bar" + } + ] + } diff --git a/workflow/executor/resource.go b/workflow/executor/resource.go index 515a91ea2aaa..9e64c7765d44 100644 --- a/workflow/executor/resource.go +++ b/workflow/executor/resource.go @@ -330,7 +330,7 @@ func (we *WorkflowExecutor) SaveResourceParameters(resourceNamespace string, res if resourceNamespace != "" { resArgs = append(resArgs, "-n", resourceNamespace) } - cmdStr := fmt.Sprintf("kubectl get %s -o json | jq -c '%s'", strings.Join(resArgs, " "), param.ValueFrom.JQFilter) + cmdStr := fmt.Sprintf("kubectl get %s -o json | jq -rc '%s'", strings.Join(resArgs, " "), param.ValueFrom.JQFilter) cmd = exec.Command("sh", "-c", cmdStr) } else { continue