Rundeck - запускать шаги динамически на основе параметров ввода - PullRequest
0 голосов
/ 22 апреля 2020

Я хотел бы запустить число шагов на основе другого ввода Опции .

Например, у меня есть Работа который запускает ./script.sh с год в качестве входного параметра:

./script.sh <year>

идея состоит в том, чтобы установить список "лет" как Опции params (что-то вроде 2018, 2019, 2020) и запускайте script.sh для каждого года, и каждый script.sh <year> должен выполняться как отдельный Шаг .

  • step_1: ./script.sh 2018
  • step_2: ./script.sh 2019
  • step_3: ./script.sh 2020
  • step_n: ./script.sh n

Есть ли способ сделать это?

Спасибо.

ОБНОВЛЕНИЕ 2020-04-22

Ожидается в Rundeck, где каждая Команда имеет один год: enter image description here

1 Ответ

0 голосов
/ 22 апреля 2020

Я сделал этот пример, используя опцию, которая передает его встроенному сценарию, который выполняет итерацию с использованием @option.myoption@ (и ссылается на шаг «внешнего» сценария в качестве аргумента).

<joblist>
  <job>
    <context>
      <options preserveOrder='true'>
        <option name='theyear' value='2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020' />
      </options>
    </context>
    <defaultTab>nodes</defaultTab>
    <description></description>
    <executionEnabled>true</executionEnabled>
    <id>a72d4d32-d4fe-4774-b18c-723d18842c5e</id>
    <loglevel>INFO</loglevel>
    <name>WhatYearIs</name>
    <nodeFilterEditable>false</nodeFilterEditable>
    <plugins />
    <scheduleEnabled>true</scheduleEnabled>
    <sequence keepgoing='false' strategy='node-first'>
      <command>
        <fileExtension>.sh</fileExtension>
        <script><![CDATA[#!/bin/bash
DataList=" @option.theyear@ "
Field_Separator=$IFS

# set comma as internal field separator for the string list
IFS=,
for val in $DataList;
    do
        # echo $val
        bash /path/to/your/script/year.sh $val
    done

IFS=$Field_Separator]]></script>
        <scriptargs />
        <scriptinterpreter>/bin/bash</scriptinterpreter>
      </command>
    </sequence>
    <uuid>a72d4d32-d4fe-4774-b18c-723d18842c5e</uuid>
  </job>
</joblist>

bash сценарий для проверки:

#!/bin/bash
# print_args.sh
echo "Current year is:" "$@"

# You could pass all arguments to another program like this
# myProgram "$@"

ОБНОВЛЕНИЕ: Невозможно динамически добавлять шаги в задание во время выполнения задания, но другой способ сделать это, по сути, является изменение первого предложения, разница заключается в том, что мы вызываем другую работу с помощью инструмента rd-cli на встроенном скрипте, который вызывает (и передает год в качестве опции) для выполнения как отдельный шаг.

WhatYearIs Job (Как родительское задание).

<joblist>
  <job>
    <context>
      <options preserveOrder='true'>
        <option name='theyear' value='2018,2019,2020' />
      </options>
    </context>
    <defaultTab>nodes</defaultTab>
    <description></description>
    <executionEnabled>true</executionEnabled>
    <group>SO</group>
    <id>a72d4d32-d4fe-4774-b18c-723d18842c5e</id>
    <loglevel>INFO</loglevel>
    <name>WhatYearIs</name>
    <nodeFilterEditable>false</nodeFilterEditable>
    <plugins />
    <scheduleEnabled>true</scheduleEnabled>
    <sequence keepgoing='false' strategy='node-first'>
      <command>
        <script><![CDATA[#!/bin/bash
DataList=" @option.theyear@ "
Field_Separator=$IFS

# set comma as internal field separator for the string list
IFS=,
for val in $DataList;
    do
        # echo $val
        sleep 3
        rd run -p ProjectEXAMPLE -j WhatYearChild -- -childyear $val
    done

IFS=$Field_Separator]]></script>
        <scriptargs />
      </command>
    </sequence>
    <uuid>a72d4d32-d4fe-4774-b18c-723d18842c5e</uuid>
  </job>
</joblist>

WhatYearChild (как дочернее задание, выполняющее сценарий).

<joblist>
  <job>
    <context>
      <options preserveOrder='true'>
        <option name='childyear' />
      </options>
    </context>
    <defaultTab>nodes</defaultTab>
    <description></description>
    <executionEnabled>true</executionEnabled>
    <group>SO</group>
    <id>76c15c6d-be45-4540-8f44-8823ed2d2483</id>
    <loglevel>INFO</loglevel>
    <name>WhatYearChild</name>
    <nodeFilterEditable>false</nodeFilterEditable>
    <plugins />
    <scheduleEnabled>true</scheduleEnabled>
    <sequence keepgoing='false' strategy='node-first'>
      <command>
        <script><![CDATA[echo "Current year is: @option.childyear@"]]></script>
        <scriptargs />
      </command>
    </sequence>
    <uuid>76c15c6d-be45-4540-8f44-8823ed2d2483</uuid>
  </job>
</joblist>

с this результат (технически это отдельный шаг каждой итерации).

...