Ansible: 이전 작업의 상태 반환

Ansible: 이전 작업의 상태 반환

나는 ansible의 작업에서 복귀하기 위해 이 명령을 사용하고 있습니다.

성공하는지 확인하세요.

다음은 플레이북에 있는 코드의 예입니다.

- name: Install JDK8
  shell: cd /tmp/install/ && tar -zxvf jdk-8u51-linux-x64.tar.gz

- name: Echo Install JDK8
  shell: echo $?

터미널에서 플레이북을 실행하면 어떤 반환 값도 얻지 못합니다.

echo 명령을 사용하여 반환 값을 얻을 수 있나요?

답변1

$를 얻으려고 하시나요? 보여주신 Ansible 컨텍스트에서는 Ansible이 원격으로 실행한 마지막 명령을 성공적인 상태로 두는 것이 작동하지 않습니다.

달러? 현재 셸에서 실행된 마지막 명령의 상태를 반환하는 데 사용되는 변수입니다.

우리에게 보여준 설정에서는 마지막 명령 실행이 Ansible에 표시된 명령인지, 동일한 셸인지 보장할 수 없으며, SSH 클라이언트 구성에 따라 동일한 SSH 세션이 아닐 수도 있습니다.

Ansible 공식 가이드의 예에 따르면 마지막으로 실행된 작업/명령이 성공했는지 여부에 따라 다른 작업을 수행하려면 다음을 수행할 수 있습니다.

tasks:
  - command: /bin/false
    register: result
    ignore_errors: True

  - command: /bin/something
    when: result is failed

  - command: /bin/something_else
   when: result is succeeded

자세한 내용은 다음을 참조하세요.문서->Ansible->조건

답변2

코드에 있는 두 개의 쉘 명령은 서로 다른 쉘에서 실행됩니다. 이는 ansible이 첫 번째 쉘을 종료하고 두 번째 명령에 대해 새 쉘을 시작한다는 것을 의미합니다.

쉘 명령의 반환 값이 필요한 경우 다음 위치에 저장됩니다 result.rc.

- name: Install JDK8
  shell: cd /tmp/install/ && tar -zxvf jdk-8u51-linux-x64.tar.gz
  register: result
  ignore_errors: true
- debug:
    msg: "The return value was: {{ result.rc }}"

shell작업은 멱등성을 선호하지 않습니다. 예를 들어 이 모듈을 사용해 볼 수 있습니다 package.

관련 정보