如何使用Argo server API向工作流传递JSON数据进行处理
通过Argo Server API提交JSON数据给工作流处理的实现方法
你可以通过调用Argo Server的工作流提交接口,将JSON数据以工作流参数或者输入工件的形式注入到工作流中,后续在工作流步骤里就可以像从webhook、nats等数据源获取内容一样调用该数据。
方式1:JSON数据量较小时,作为工作流参数传递
- 调用API:POST请求
/api/v1/workflows/{你的命名空间}/submit - 核心配置:在请求体的
submitOptions.parameters中定义对应的参数键,将JSON序列化后作为参数值传入 - 示例curl请求:
curl -X POST "https://<你的Argo Server域名>/api/v1/workflows/default/submit" \ -H "Authorization: Bearer <你的认证token>" \ -H "Content-Type: application/json" \ -d '{ "namespace": "default", "resourceKind": "WorkflowTemplate", "resourceName": "你的目标工作流模板名称", "submitOptions": { "parameters": [ "input_json={\"key1\":\"value1\",\"key2\":123,\"nested\":{\"foo\":\"bar\"}}" ] } }'
- 工作流模板接收参数的配置示例:
apiVersion: argoproj.io/v1alpha1 kind: WorkflowTemplate metadata: name: 你的目标工作流模板名称 spec: entrypoint: main arguments: parameters: - name: input_json value: "" # 该字段会被API传入的JSON内容覆盖 templates: - name: main inputs: parameters: - name: input_json container: image: 你的业务处理镜像 command: ["python", "process.py"] args: ["--input", "{{inputs.parameters.input_json}}"]
工作流运行时,你可以直接在步骤中通过模板变量{{inputs.parameters.input_json}}引用该JSON内容,和其他数据源获取的参数用法完全一致。
方式2:JSON数据量较大时,作为输入工件传递
如果JSON数据体积较大,作为参数传递容易触发长度限制,可以选择以原始工件的形式注入:
- 核心配置:在请求体的
submitOptions.artifacts中定义工件,通过raw.data字段直接传入JSON内容 - 示例请求片段:
"artifacts": [ { "name": "input_json_file", "raw": { "data": "{\"key1\":\"value1\",\"key2\":123,\"nested\":{\"foo\":\"bar\"}}" } } ]
- 工作流模板接收工件的配置示例:
inputs: artifacts: - name: input_json_file path: /tmp/input.json
工作流运行时,JSON内容会自动写入你指定的path路径下,你可以像读取本地文件一样读取该JSON内容,和通过file数据源获取内容的用法完全一致。
其他注意事项
- 调用API前需要确保使用的认证凭证有对应命名空间下的工作流提交权限
- 传入的JSON如果包含特殊字符,需要提前做好转义,避免请求体格式非法
- 如果你不需要复用工作流模板,可以直接调用
/api/v1/workflows/{命名空间}的POST接口,把完整的Workflow定义和你的JSON参数一起放在请求体中提交即可。
内容的提问来源于stack exchange,提问作者Eduard Nickel
相关产品推荐
相关产品推荐

