Как ссылаться на sys.stdout, созданный вне DAG, для использования внутри DAG с withParam?

Я работаю с рабочим процессом Арго.

В моем entrypoint есть шаг DAG, который следует за несколькими обычными шагами. На одном из этих шагов выполняется sys.stdout. Оказавшись внутри шага DAG, я хочу, чтобы некоторые задачи ссылались на результаты sys.stdout.

Я знаю, что если бы мы хотели сослаться на sys.stdout, когда рабочий процесс просто переходит от одного шага к другому (без DAG), мы можем сделать {{steps.step-name.outputs.result}}. Однако то же самое не работает внутри задачи DAG.

Как я могу сослаться на sys.stdout внутри задачи DAG, чтобы использовать его с withParam?

Изменить:

Рабочий процесс выглядит следующим образом:

  templates:
  - name: the-entrypoint
    steps:
    - - name: step01
        template: first-step
    - - name: step02
        template: second-step
    - - name: step03
        template: third-step
    - - name: step04-the-dag-step
        template: fourth-step

В общем, если third-step выполняет sys.stdout, мы можем ссылаться на него {{steps.step03.outputs.result}} в fourth-step. Однако в этом случае fourth-step является DAG, и если одна из задач DAG хочет использовать sys.stdout, вызов {{steps.step03.outputs.result}} в качестве аргумента / параметра внутри задач DAG вызывает ошибку.

Тогда возникает вопрос, как правильно ссылаться на sys.stdout, сгенерированные third-step внутри fourth-step задач DAG?


person Tim    schedule 05.03.2021    source источник
comment
Можете ли вы вставить пример рабочего процесса? Я не совсем понимаю, что вы подразумеваете под этапом DAG в своей точке входа, который следует за несколькими обычными шагами. Насколько я понимаю, в шаблоне может быть либо группа DAG, либо набор шагов, но не то и другое вместе.   -  person Michael Crenshaw    schedule 06.03.2021
comment
Оказывается, один (а может быть, несколько) шагов может быть DAG. В конце концов я решил обойти проблему, сделав sys.stdout аргументом для этапа DAG, а затем использовал этот аргумент в различных задачах DAG.   -  person Tim    schedule 06.03.2021


Ответы (1)


Немного предыстории о выводах шаблонов

Рабочие процессы Argo поддерживают ряд различных < em> типы шаблонов.

Каждый тип шаблона поддерживает разные типы ссылок внутри шаблона.

В шаблоне steps вы можете получить доступ к выходным параметрам других шагов с помощью steps.step-name.outputs.parameters.param-name (для именованных параметров) или steps.step-name.outputs.result (для стандартного вывода шаблона script или container).

Пример (см. Полный рабочий процесс):

  - name: output-parameter
    steps:
    - - name: generate-parameter
        template: whalesay
    - - name: consume-parameter
        template: print-message
        arguments:
          parameters:
          - name: message
            value: "{{steps.generate-parameter.outputs.parameters.hello-param}}"

В шаблоне dag вы можете получить доступ к выводам различных задач, используя аналогичный синтаксис, просто используя tasks. вместо steps..

Пример (см. Полный рабочий процесс) :

    - name: main
      dag:
        tasks:
          - name: flip-coin
            template: flip-coin
          - name: heads
            depends: flip-coin
            template: heads
            when: "{{tasks.flip-coin.outputs.result}} == heads"
          - name: tails
            depends: flip-coin
            template: tails
            when: "{{tasks.flip-coin.outputs.result}} == tails"

В шаблоне container или script вы можете получить доступ только к входам этого шаблона *. Вы не можете напрямую получить доступ к выходным данным шагов или задач из шаблонов шагов или задач из контейнера или шаблона сценария.

Ссылка на пошаговый вывод из группы DAG

Как упоминалось выше, шаблон DAG не может напрямую ссылаться на выходные данные шага из шаблона steps. Но шаг в steps шаблоне может передавать выходные данные шага в шаблон DAG.

В вашем примере это будет выглядеть примерно так:

  templates:
  - name: the-entrypoint
    steps:
    - - name: step01
        template: first-step
    - - name: step02
        template: second-step
    - - name: step03
        template: third-step
    - - name: step04-the-dag-step
        template: fourth-step
        arguments:
          parameters:
          - name: some-param
            value: "{{steps.step03.outputs.result}}"
  - name: fourth-step
    inputs:
      parameters:
      - name: some-param
    dag:
      tasks:
        # use the input parameter in the fourth-step template with "{{inputs.parameters.some-param}}"

tl;dr

Переменные steps. и tasks. предназначены для ссылки в одном шаблоне шагов или задач, но их можно явно передавать между шаблонами. Если вам нужно использовать выходные данные шага в группе обеспечения доступности баз данных, напрямую передайте эти выходные данные в качестве аргумента при вызове группы доступности баз данных.

В вашем случае шаблон DAG вызывается на последнем из четырех шагов, поэтому именно здесь вы передаете аргумент.

* Хорошо, у вас также есть доступ к различным другим переменным из script или container шаблона, но у вас нет доступа к переменным, которые определены как внутренние переменные в другом шаблоне.

person Michael Crenshaw    schedule 06.03.2021
comment
Спасибо, @ michael-crenshaw! То, что вы сказали, было тем, чем я закончил. Я не набирал это и не предлагал в качестве решения, потому что подумал, что может быть какой-то синтаксис, который позволяет получить доступ к переменным в разных шаблонах. Даже если нет, я рад, что не сделал этого, потому что вы объяснили это намного лучше, чем я когда-либо! Спасибо! - person Tim; 08.03.2021