如何在Helm中使用Argo工作流模板



是否可以使用Helm部署Argo工作流?当我进行helm install时,我会出现如下错误

错误:升级失败:在处解析错误(工作流/templates/my_dag.yaml:47(:函数";工作流";未定义

yaml本身具有带有{{..}}的Argo和Helm插值。我理解它为什么失败。有办法绕过这个吗?

我已经看过了,但它看起来不像是我想做的事情,因为它在某种程度上改变了语法。

这是可能的。我所在的团队定期部署Helm模板工作流模板。

有两种方法可以解决Helm/Argo模板标签冲突。(正如您所知,问题在于Helm的Go模板语言和Argo的模板语言都使用{{}}来表示模板区域。(

选项1:

第一种方法是小心地嵌套标签。例如,如果我想使用{{steps.hello-world.result}}作为Argo模板,我可以将其写成{{`{{steps.hello-world.result}}`}}。外部{{命令Helm开始解释模板化代码。backtick命令告诉Helm从字面上解释backtick分隔的内容。最后,内部{{作为工作流的纯文本部分安装在集群中,并最终由Argo解释为模板。

下面是一个修改后的arguments参数版本示例,该示例被修改为与Helm一起部署。

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: arguments-parameters-
spec:
entrypoint: whalesay
arguments:
parameters:
- name: message
value: hello world
templates:
- name: whalesay
inputs:
parameters:
- name: message
container:
image: docker/whalesay:latest
command: [cowsay]
args: ["{{`{{inputs.parameters.message}}`}}"]

选项2:

你链接的博客文章中描述了第二个解决方案。这种方法确实改变了语法。第一种方法使用了一种看起来很有趣的语法,但从技术上讲,它仍然只是Helm和Argo的默认语法。

如果{{`{{yikes}}`}}解决方案不能解决您的错误消息,请发布整个工作流程(或经过编辑/简化的版本(,我很乐意看看。

相关:

以上是针对Helm中的Argo(Go中的Jinja2(模板。如果你需要Argo中的somethingelse(somethingease-in-Jinja2(模板,其中somethingerse也使用{{,请查看这个答案:如何逃离";{{〃和{}〃}〃;argo工作流中的

It Option1失败,其他解决方法可以是

{{ "{{inputs.parameters.message}}"|quote}}

我刚刚遇到这个问题,尝试了crenshaw-dev的解决方案,但没有成功。Helm会多次抛出以下消息:

unable to parse YAML: error converting YAML to JSON: yaml: invalid map key: map[interface {}]interface {}{"tasks.data-formatting.outputs.parameters.employee-username-enc":interface {}(nil)}

我解决这个问题的方法是用双引号包裹逃脱的Argo语句,比如:

# ...
arguments:
parameters:
- name: first-name
value: "{{ `{{tasks.data-formatting.outputs.parameters.employee-username-enc}}` }}"

之后

希望它能有所帮助!

相关内容

  • 没有找到相关文章

最新更新