2016-12-08 7 views
2

쉘 스크립트 (script1)를 여러 개의 인수를 사용하여 여러 쉘 쉘을 사용하여 여러 번 실행하려고합니다. 그러나 명령이 실패하고 0 이외의 리턴 코드로 명령 중 하나가 실패하면 종료해야합니다. 이것은 지금까지 있습니다. 첫 번째는 내가 작업이 실패하고 with_items에 후속 항목을 실행하지 않고 종료 할 0이 아닌 리턴 코드 (rslt.rc)에 실패 할 경우Ansible에서 쉘 모듈을 여러 번 실행 중입니다.

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

이 작업은 항상 3 회에도 스크립트를 실행하는 경우 예를 들어, 첫 번째 항목 ("./script1 -f add1")이 실패하면 두 번째 및 세 번째 항목을 실행하지 않아야하며 가능한 작업이 실패해야합니다.

이 문제를 해결하는 방법에 대한 제안 사항에 크게 감사드립니다.

답변

0

1.9에 대한 권장 해결책은 개별 통화로 작업을 분리하는 것입니다.

Github에는 past discussion이 있습니다.

until 대신에 when 절을 사용하면 2.0 이상에서이를 수행 할 수 있습니다. 당신이 0이 아닌 리턴 코드 발견 후

이 나머지 작업을 건너 뜁니다 :

- 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

0이 아닌 리턴 코드. 이 버전이 안전한 버전과 관련이 있습니까? 나는 1.9의 책임이있다. – hmdb

+0

안녕하세요 @ hmdb, 그냥 1.9.4에서 실행하고 내 솔루션이 이전 버전에서 작동하지 않는지 확인할 수 있습니다. 1.9을 위해 뭔가를 할 수 있는지 보자. –

+0

Thanks @Rob Wagner – hmdb