Argo WorkflowTemplate自定义命令参数报错,如何实现任意命令执行?
解决Argo WorkflowTemplate通过参数传递命令数组的问题
问题重现
你定义了一个接收command参数的WorkflowTemplate,期望用户传入字符串数组形式的命令来执行,但保存时收到错误:
Bad Request: json: cannot unmarshal string into Go struct field Container.workflow.spec.templates.container.command of type []string
原因是你用引号包裹了模板变量"{{ inputs.parameters.command }}",导致Argo将其解析为字符串,而container.command要求的是字符串数组类型。
解决方案
要实现传递数组类型的命令,需要做两处调整:
- 在WorkflowTemplate的参数定义中,明确指定
command参数的类型为array,避免Argo默认将其解析为字符串。 - 去掉
container.command字段中模板变量的引号,直接引用参数,让Argo将其渲染为数组。
修改后的WorkflowTemplate
apiVersion: argoproj.io/v1alpha1 kind: WorkflowTemplate metadata: name: test-container-command spec: entrypoint: main templates: - name: main inputs: parameters: - name: command type: array # 明确参数为数组类型 container: image: alpine:latest command: {{ inputs.parameters.command }} # 直接引用参数,无需引号 env: # some predefined env
验证用Workflow
你原来的Workflow示例无需修改,直接使用即可:
apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: test-run- spec: workflowTemplateRef: name: test-container-command arguments: parameters: - name: command value: - echo - hello
调整后,Argo会正确将传入的数组参数绑定到container.command字段,执行指定的命令。
内容的提问来源于stack exchange,提问作者johnlinp
相关产品推荐
相关产品推荐

