Argo 工作流程:如何检查先前暂停步骤的输出是否已在后续步骤的“when”表达式内提供?

Sam*_*afa 5 argo argo-workflows

在 Argo 工作流程中,我有一个循环,如果尚未提供上一步的输出,我需要继续运行循环。到目前为止,我找不到任何方法来执行这个简单的空/空检查。以下“当”表达式:

当:“'{{steps.wait-completion.outputs.parameters.result}}'==''”

永远不会按预期计算,因为如果尚未提供值,Argo 将按原样返回标签名称(不被替换),然后我得到:

'{{steps.wait-completion.outputs.parameters.result}}' == ''' 评估为 false

这是一个错误还是一个功能?我有什么想法可以从“when”表达式中执行这样的检查吗?我还尝试使用“默认”标签来设置默认值,但它似乎被挂起步骤忽略(另一个错误或另一个功能?)

我真的很感激这里的一些想法。提前致谢!

我尝试过的:

当:“'{{steps.wait-completion.outputs.parameters.result}}'==''”

我所期望的:

如果尚未提供输出参数“result”,则上述表达式的计算结果为 true。

我得到了什么:

'{{steps.wait-completion.outputs.parameters.result}}' == ''' 评估为 false

bn0*_*bn0 1

下面是一个简单的示例,演示如何检查子句中when以及三元表达式中的空参数。

显然,由于该子句,该"blank"值永远不会显示在,中,但我想展示它是如何完成的,因为它在过去给我带来了悲伤。whalesaywhen

apiVersion: argoproj.io/v1alpha1
kind: WorkflowTemplate
metadata:
  generateName: example-
  namespace: <your_namespace>
spec:
  entrypoint: main
  serviceAccountName: <your_service_account>
  arguments:
    parameters:
      - name: name
        default: ""


  templates:
    - name: main
      inputs:
        parameters:
          - name: name
      steps:
        - - name: say
            arguments:
              parameters:
                - name: name
                  value: "{{inputs.parameters.name}}"
            template: whalesay
            when: >-
              {{= workflow.parameters.name != "" }}

    - name: whalesay
      inputs:
        parameters:
          - name: "name"
      container:
        image: docker/whalesay
        command: [cowsay]
        args:
          - >-
            {{= inputs.parameters.name == "" ? "blank" : inputs.parameters.name }}
Run Code Online (Sandbox Code Playgroud)