是否可以使用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}}` }}"
之后
希望它能有所帮助!