플레이북에 문제가 없는 경우에만 Ansible 플레이북을 실행하는 방법은 무엇입니까?

플레이북에 문제가 없는 경우에만 Ansible 플레이북을 실행하는 방법은 무엇입니까?

ansible-playbook example.yml --check나는 내 플레이북에 문제가 있는 부분이 있는지 알려주는 이 명령에 대해 배웠습니다 (Ansible이 식별할 수 있는 범위 내에서).

나는 이 명령을 ansible-playbook example.ymlso와 결합하고 이전 테스트에서 오류가 들리지 않는 경우에만 내 플레이북을 실행해야 한다고 생각합니다.

이런 생각을 했는데 맞는지 모르겠습니다.

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 "$@"
}

관련 정보