gpt4 book ai didi

kubernetes - 子字符串匹配条件时的 Argo 工作流程

转载 作者:行者123 更新时间:2023-12-02 01:51:19 24 4
gpt4 key购买 nike

如果字符串以特定子字符串开头,我想在 Argo 工作流中执行任务。例如,我的字符串是 tests/dev-or.yaml 如果我的字符串以 tasks/

开头,我想执行任务

这是我的工作流程,但条件未得到正确验证

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: conditional-
spec:
entrypoint: conditional-example
arguments:
parameters:
- name: should-print
value: "tests/dev-or.yaml"

templates:
- name: conditional-example
inputs:
parameters:
- name: should-print
steps:
- - name: print-hello
template: whalesay
when: "{{inputs.parameters.should-print }} startsWith 'tests/'"

- name: whalesay
container:
image: docker/whalesay:latest
command: [sh, -c]
args: ["cowsay hello"]

下面是我运行工作流时出现的错误

WorkflowFailed 7s workflow-controller  Invalid 'when' expression 'tests/dev-or.yaml startsWith 'tests/'': Unable to access unexported field 'yaml' in token 'or.yaml'

在评估 when 条件时,它似乎不接受 -.yaml/

我的工作流程有什么错误吗?使用此条件的正确方法是什么?

最佳答案

tl;dr - 使用这个:when: "'{{inputs.parameters.should-print}}' =~ '^tests/'"

参数替换发生在 when 表达式被求值之前。所以 when 表达式实际上是 tests/dev-or.yaml startsWith 'tests/'。如您所见,第一个字符串需要引号。

但即使您有 when: "'{{inputs.parameters.should-print}}' startsWith 'tests/'"(添加了单引号),表达式也会失败并出现此错误: 无法将 token 类型从 STRING [tests/dev-or.yaml] 转换为 VARIABLE [startsWith]

Argo 工作流程 conditionals被评估为 govaluate表达式。评估does not have any built-in functions ,并且 Argo Workflows 没有增加任何功能。所以 startsWith 没有定义。

相反,您应该使用 govaluate 的 regex comparator .表达式将如下所示:when: "'{{inputs.parameters.should-print}}' =~ '^tests/'"

这是功能性工作流:

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: conditional-
spec:
entrypoint: conditional-example
arguments:
parameters:
- name: should-print
value: "tests/dev-or.yaml"
templates:
- name: conditional-example
inputs:
parameters:
- name: should-print
steps:
- - name: print-hello
template: whalesay
when: "'{{inputs.parameters.should-print}}' =~ '^tests/'"
- name: whalesay
container:
image: docker/whalesay:latest
command: [sh, -c]
args: ["cowsay hello"]

关于kubernetes - 子字符串匹配条件时的 Argo 工作流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70306572/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com