是否可以使用 Helm 部署 Argo 工作流程?当我执行以下操作时,我收到如下错误helm install
错误:升级失败:在 (workflows/templates/my_dag.yaml:47) 处解析错误:未定义函数“workflow”
yaml 本身具有 Argo 和 Helm 插值,带有{{..}}
. 我明白为什么会失败。有没有解决的办法?
我看过这个,但它看起来不像我想做的事情,因为它有点改变语法。
是否可以使用 Helm 部署 Argo 工作流程?当我执行以下操作时,我收到如下错误helm install
错误:升级失败:在 (workflows/templates/my_dag.yaml:47) 处解析错误:未定义函数“workflow”
yaml 本身具有 Argo 和 Helm 插值,带有{{..}}
. 我明白为什么会失败。有没有解决的办法?
我看过这个,但它看起来不像我想做的事情,因为它有点改变语法。
有可能的。我一直在一个定期部署 Helm 模板化工作流模板的团队中。
有两种方法可以解决 Helm/Argo 模板标签冲突。(如您所知,问题在于 Helm 的 Go 模板语言和 Argo 的 Jinja2 模板语言都用于{{}}
表示模板区域。)
第一种方法是仔细嵌套标签。例如,如果我想{{steps.hello-world.result}}
用作 Argo 模板,我可以将其写为{{`{{steps.hello-world.result}}`}}
. 外部{{
告诉 Helm 开始解释模板化代码。反引号告诉 Helm 从字面上解释反引号分隔的内容。最后,内部{{
作为工作流的纯文本部分安装在集群中,并最终被 Argo 解释为模板。
这是修改后的arguments-parameters 示例的修改版本,以使用 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}}`}}"]
您链接的博客文章中描述了第二种解决方法。这种方法确实改变了语法。第一种方法使用看起来很有趣的语法,但从技术上讲,它仍然只是 Helm 和 Argo 的默认语法。
如果{{`{{yikes}}`}}
解决方法不能解决您的错误消息,请发布整个工作流程(或编辑/简化版本),我很乐意看看。
有关的:
以上是 Argo-in-Helm (Jinja2-in-Go) 模板。如果您需要 somethingelse-in-Argo (somethingelse-in-Jinja2) 模板,其中 somethingelse 也使用{{
,请查看此答案:如何在 argo 工作流程中转义“{{”和“}}”