2016-12-08 2 views
2

Я пытаюсь запустить сценарий оболочки (script1) несколько раз с различными аргументами, используя модуль-оболочку. Но задача должна выйти из строя и выйти, если какая-либо из команд завершится с кодом возврата, отличным от 0. Это я до сих пор.Запуск shell-модуля несколько раз в Ansible

- name: Run scripts 
    shell: "{{ item}}" 
    register: rslt 
    until: rslt.rc != 0 
    with_items: 
    - "./script1 -f add1" 
    - "./script1 -f add2" 
    - "./script1 -f add3" 

Эта задача всегда запускает сценарий 3 раза, даже если первый терпит неудачу с кодом возврата (rslt.rc), кроме 0. Я хочу, чтобы задача потерпеть неудачу и выйти без выполнения последующих элементов в with_items, если текущее выполнение скрипта возвращается с кодом возврата, отличным от 0. Например, если первый элемент (./script1 -f add1) не работает, я не хочу, чтобы выполнялись 2-й и 3-й пункты, и невозможность выполнить задачу.

Я высоко ценю любые предложения по решению этой проблемы.

ответ

0

К сожалению, рекомендуемое решение для 1.9 - это отделить задачи от индивидуальных вызовов.

В Github есть past discussion.

Вы можете достичь этого в версии 2.0+ с помощью предложения when, а не до.

Это пропустит оставшиеся задачи после того, как вы нашли ненулевой код возврата:

- name: Run scripts 
    shell: "{{ item }}" 
    register: rslt 
    when: rslt is undefined or rslt.rc == 0 
    with_items: 
    ... 

Пример вывод:

TASK [Run scripts] ************************************************************* 
changed: [localhost] => (item=exit 0) 
changed: [localhost] => (item=exit 0) 
failed: [localhost] (item=exit 1) => {"changed": true, "cmd": "exit 1", "delta": "0:00:00.004414", "end": "2016-12-08 13:14:06.365437", "failed": true, "item": "exit 1", "rc": 1, "start": "2016-12-08 13:14:06.361023", "stderr": "", "stdout": "", "stdout_lines": [], "warnings": []} 
skipping: [localhost] => (item=exit 0) 
skipping: [localhost] => (item=exit 0) 
+0

Я попытался «когда», но это не пропустить оставшиеся задачи после того, ненулевой код возврата. Имеет ли это какое-либо отношение к доступной версии? У меня есть 1.9. – hmdb

+0

Эй, @hmdb, просто запустил его на 1.9.4 и может проверить, что мое решение не работает для этой старой версии. Позвольте мне посмотреть, смогу ли я что-нибудь сделать для 1.9 –

+0

Спасибо @ Rob Wagner – hmdb

Смежные вопросы