文章目录
- 参数化 WorkflowTemplate
- 创建并提交一个工作流使用模板
- 提交工作流
- 查看工作流执行结果
- 总结
为了将 Argo WorkflowTemplate 进行参数化,您可以使用 inputs 和 outputs 来定义动态的参数,以便在实际执行时传入不同的值。这使得相同的模板可以在多个不同的工作流中重用,并根据需要调整行为。
参数化 WorkflowTemplate
我们可以通过 inputs 来定义模板的输入参数,并在模板中的步骤中使用这些参数。以下是一个参数化 WorkflowTemplate 的例子:
apiVersion: argoproj.io/v1alpha1
kind: WorkflowTemplate
metadata:name: parametric-workflow-template
spec:entrypoint: maintemplates:- name: maininputs:parameters:- name: greetingvalue: "Hello"- name: targetvalue: "World"steps:- - name: step-1template: say-messagearguments:parameters:- name: greetingvalue: "{{inputs.parameters.greeting}}"- name: targetvalue: "{{inputs.parameters.target}}"- name: say-messageinputs:parameters:- name: greeting- name: targetcontainer:image: alpinecommand: [echo, "{{inputs.parameters.greeting}}", "{{inputs.parameters.target}}"]
解释参数化 WorkflowTemplate:
inputs.parameters:WorkflowTemplate 允许通过 inputs.parameters 定义参数,这些参数可以在工作流模板中引用。在此示例中,我们定义了两个输入参数 greeting 和 target,并为它们提供了默认值 “Hello” 和 “World”。
arguments.parameters:在步骤中,您可以通过 arguments.parameters 来传递参数的值。这里我们将 greeting 和 target 参数传递给 say-message 模板,并通过 {{inputs.parameters.xxx}} 语法引用它们。
提交 WorkflowTemplate
将此参数化的模板保存为 parametric-workflow-template.yaml,并使用 kubectl 提交:
kubectl create -f parametric-workflow-template.yaml -n argo
创建并提交一个工作流使用模板
一旦 WorkflowTemplate 定义好,你就可以通过 workflowTemplateRef 来创建一个新的工作流,并传递具体的参数值。你可以通过 arguments.parameters 来覆盖模板中的默认值。
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:generateName: parametric-workflow-
spec:workflowTemplateRef:name: parametric-workflow-templatearguments:parameters:- name: greetingvalue: "Hi"- name: targetvalue: "Argo"
在这个工作流中,greeting 被设置为 “Hi”,target 被设置为 “Argo”,覆盖了模板中的默认值。
提交工作流
将上述工作流文件保存为 parametric-workflow.yaml,然后使用 kubectl 提交:
kubectl create -f parametric-workflow.yaml -n argo
查看工作流执行结果
kubectl get wf
kubectl logs -f <workflow-pod-name>
总结
使用 inputs.parameters 来定义模板的输入参数。
使用 arguments.parameters 来在实际工作流执行时传递参数的值。
可以通过 workflowTemplateRef 来引用参数化的 WorkflowTemplate,并在工作流中覆盖模板中的默认参数。
通过这种方式,你可以将 Argo WorkflowTemplate 参数化,并根据需要灵活地传递参数,支持不同的运行场景。