10장. 복잡한 플레이북
이 작품은 AI를 사용하여 번역되었습니다. 여러분의 피드백과 의견을 환영합니다: translation-feedback@oreilly.com
이전 장에서는 메자닌 CMS를 배포하기 위한 모든 기능을 갖춘 Ansible 플레이북을 살펴봤습니다. 그 예에서는 몇 가지 일반적인 Ansible 기능을 사용했지만 모든 기능을 다루지는 않았습니다. 이 장에서는 이러한 다른 기능에 대해 다루기 때문에 다소 포괄적입니다.
잘못된 동작 명령 처리하기
7장에서 예제 10-1에 표시된 사용자 지정 createdb manage.py 명령을 호출하지 않은 이유는 호출이 무력화되지 않았기 때문입니다.
예 10-1. 전화 걸기 django manage.py createdb
- name: Initialize the database
django_manage:
command: createdb --noinput --nodata
app_path: "{{ proj_path }}"
virtualenv: "{{ venv_path }}"
우리는 이 문제를 해결하기 위해 createdb 과 동등한 기능을 하는 django manage.py 명령을 여러 개 호출하여 이 문제를 해결했습니다. 하지만 동등한 명령을 호출할 수 있는 모듈이 없다면 어떻게 해야 할까요? 정답은 changed_when 및 failed_when 절을 사용하여 작업의 상태가 변경되었거나 실패했음을 Ansible이 감지하는 방법을 변경하는 것입니다.
이 명령이 처음과 두 번째로 실행될 때 이 명령의 출력을 이해했는지 확인해 보겠습니다.
5장에서 실패한 작업의 출력을 캡처하려면 register 절을 추가하여 출력을 변수에 저장하고 failed_when: false 절을 추가하여 모듈이 실패를 반환하더라도 실행이 중지되지 않도록 합니다. 그런 다음 예제 10-2와 같이 변수를 출력하는 debug 태스크를 추가하고 마지막으로 플레이북 실행이 중지되도록 fail 절을 추가합니다.
예 10-2. 작업의 출력 보기
- name: Initialize the database
django_manage:
command: createdb --noinput --nodata
app_path: "{{ proj_path }}"
virtualenv: "{{ venv_path }}"
failed_when: false
register: result
- debug: var=result
- fail:
을 한 번 더 호출했을 때 플레이북의 출력은 예제 10-3에 나와 있습니다.
예제 10-3. 데이터베이스가 이미 생성된 경우 반환되는 값
TASK [debug] ******************************************************************* ok: [web] ==> { "result": { "changed": false, "cmd": "./manage.py createdb --noinput --nodata", "failed": false, "failed_when_result": ...