ansible-playbook example.yml --check
나는 내 플레이북에 문제가 있는 부분이 있는지 알려주는 이 명령에 대해 배웠습니다 (Ansible이 식별할 수 있는 범위 내에서).
나는 이 명령을 ansible-playbook example.yml
so와 결합하고 이전 테스트에서 오류가 들리지 않는 경우에만 내 플레이북을 실행해야 한다고 생각합니다.
이런 생각을 했는데 맞는지 모르겠습니다.
ansible-playbook example.yml --check && ansible-playbook example.yml
&&
나는 이렇게 하면 검사가 제대로 진행되는 경우에만(오류가 발견되지 않은 경우) 두 번째 명령(플레이북의 실제 실행)이 발생하도록 보장할 것이라고 생각합니다 .
그렇습니까? 그렇지 않다면 오류가 없는 경우에만 스크립트를 재생할 수 있도록 하는 올바른 방법은 무엇입니까?
답변1
내 테스트에서는 ansible-playbook --syntax-check
설정되었습니다.종료 코드스크립트의 문법 오류를 적절하게 기반으로 합니다. 좋은 예제 스크립트와 나쁜 예제 스크립트 모두 표시된 대로 동작한다는 내 말을 받아들일 수 있습니다.
좋은 문서:
$ ansible-playbook --syntax-check good-example.yaml
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match
'all'
playbook: good-example.yaml
$ echo $?
0
...그리고 손상된 파일:
$ ansible-playbook --syntax-check bad-example.yaml
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match
'all'
ERROR! 'xhosts' is not a valid attribute for a Play
The error appears to have been in '/.../bad-example.yaml': line 2, column 3, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
---
- xhosts: all
^ here
$ echo $?
4
따라서 제안한 방식으로 구문 검사를 수행할 수 있다고 생각합니다.
ansible-playbook --syntax-check example.yml && ansible-playbook example.yml
...구문 검사 섹션에서 출력을 제거하는 것이 더 조용할 수도 있지만:
ansible-playbook --syntax-check example.yml >/dev/null 2>&1 && ansible-playbook example.yml
노트:입력을 줄이기 위해 모든 것을 함수로 래핑할 수 있습니다.
safe-ansible() {
ansible-playbook --syntax-check "$@" > /dev/null 2>&1 &&
ansible-playbook "$@"
}