Dynami c "Fan In" в Ar go Рабочие процессы - PullRequest
1 голос
/ 06 марта 2020

Ar go разрешает динамическое генерирование c параллельных шагов рабочего процесса на основе результатов предыдущих шагов.

Пример этого динамического c генерирования рабочего процесса представлен здесь: https://github.com/argoproj/argo/blob/master/examples/loops-param-result.yaml

Я пытаюсь создать аналогичный рабочий процесс с последним этапом «вкручивания», который будет считывать выходные данные динамически создаваемых параллельных шагов. Вот укол:

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: loops-param-result-
spec:
  entrypoint: loop-param-result-example
  templates:
  - name: loop-param-result-example
    steps:
    - - name: generate
        template: gen-number-list
    - - name: write
        template: output-number
        arguments:
          parameters:
          - name: number
            value: "{{item}}"
        withParam: "{{steps.generate.outputs.result}}"
    - - name: fan-in
        template: fan-in
        arguments:
          parameters:
          - name: numbers
            value: "{{steps.write.outputs.parameters.number}}"

  - name: gen-number-list
    script:
      image: python:alpine3.6
      command: [python]
      source: |
        import json
        import sys
        json.dump([i for i in range(20, 31)], sys.stdout)

  - name: output-number
    inputs:
      parameters:
      - name: number
    container:
      image: alpine:latest
      command: [sh, -c]
      args: ["echo {{inputs.parameters.number}} > /tmp/number.txt"]
    outputs:
      parameters:
        - name: number
          valueFrom:
            path: /tmp/number.txt

  - name: fan-in
    inputs:
      parameters:
        - name: numbers
    container:
      image: alpine:latest
      command: [sh, -c]
      args: ["echo received {{inputs.parameters.numbers}}"]

Я могу отправить этот рабочий процесс, и он успешно работает. К сожалению, результат последнего шага fan-in выглядит следующим образом:

fan-in: received {{steps.write.outputs.parameters.number}}

Значение для входного параметра numbers не интерполируется. Любые идеи о том, как заставить это работать?

1 Ответ

1 голос
/ 09 марта 2020

Параметры агрегированного шага доступны через steps.STEP-NAME.outputs.parameters. Невозможно получить доступ к агрегированному набору выходных данных для одного параметра по имени.

Это небольшое изменение в вашем рабочем процессе должно дать вам то, что вам нужно:

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: loops-param-result-
spec:
  entrypoint: loop-param-result-example
  templates:
  - name: loop-param-result-example
    steps:
    - - name: generate
        template: gen-number-list
    - - name: write
        template: output-number
        arguments:
          parameters:
          - name: number
            value: "{{item}}"
        withParam: "{{steps.generate.outputs.result}}"
    - - name: fan-in
        template: fan-in
        arguments:
          parameters:
          - name: numbers
            value: "{{steps.write.outputs.parameters}}"

  - name: gen-number-list
    script:
      image: python:alpine3.6
      command: [python]
      source: |
        import json
        import sys
        json.dump([i for i in range(20, 31)], sys.stdout)

  - name: output-number
    inputs:
      parameters:
      - name: number
    container:
      image: alpine:latest
      command: [sh, -c]
      args: ["echo {{inputs.parameters.number}} > /tmp/number.txt"]
    outputs:
      parameters:
        - name: number
          valueFrom:
            path: /tmp/number.txt

  - name: fan-in
    inputs:
      parameters:
        - name: numbers
    container:
      image: alpine:latest
      command: [sh, -c]
      args: ["echo received {{inputs.parameters.numbers}}"]

Единственное изменение состояло в том, чтобы удалить .number из {{steps.write.outputs.parameters.number}}.

Это новый вывод:

received [{number:20},{number:21},{number:22},{number:23},{number:24},{number:25},{number:26},{number:27},{number:28},{number:29},{number:30}]

Вот проблема GitHub, где обсуждалась / создавалась агрегация выходных параметров .

Я включил предложение по улучшению для доступа к агрегированным выходным параметрам по имени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...