나는 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
.