Quiz: Running only part of a big playbook
한국어 원문으로 표시합니다.
include_tasks 문에 tags: [deploy] 를 달고 --tags deploy 로 돌렸다. 무슨 일이 일어나는가?
- include 문은 실행되지만 끌어온 태스크들은 그 태그가 없어 전부 걸러진다
- include 문과 끌어온 태스크가 모두 실행된다. 태그는 언제나 아래로 상속된다
- include 문 자체가 걸러져 아무 태스크도 끼어들지 않는다
- 태그가 붙은 동적 include 는 오류로 거부되어 플레이북이 시작되지 않는다
never 태그를 붙인 태스크는 언제 실행되는가?
--tags all을 명시적으로 주면 실행된다. never 는 기본 선택에서만 빠진다- 그 태스크에 함께 붙은 다른 태그나
never자체를--tags로 직접 부를 때만 실행된다 - 점검 모드가 아닐 때만 실행되고
--check에서는 언제나 건너뛰어진다 - 같은 플레이의 다른 태스크가 실패했을 때 복구용으로 자동 실행된다
플레이에 tags: [web] 을 걸어 둔 플레이북에서 --tags untagged 는 무엇을 고르는가?
- 태스크 자신에게 태그가 없는 것들만 고른다. 플레이 태그는 선택에 영향을 주지 않는다
- 플레이 태그와 태스크 태그가 모두 없는 태스크만 고르므로 결과가 비어 있다
- 플레이 태그가 모든 태스크에 상속되어 '태그 없는 태스크' 가 사라지므로 always 가 붙은 것만 남는다
- 플레이 태그가 붙은 플레이 전체를 고르므로 결국 모든 태스크가 실행된다
--start-at-task 로 긴 플레이북을 중간부터 되살렸고 failed=0 으로 끝났다. 옳은 판단은?
- 앞 태스크는 이미 지난번 실행에서 끝났으므로 시스템은 플레이북이 약속한 상태다
--start-at-task는 앞 태스크를 점검 모드로 한 번씩 돌려 주므로 상태가 보장된다- 핸들러는 플레이 끝에 무조건 한 번씩 실행되므로 서비스 반영까지는 끝난 것이다
- 앞 태스크의 산출물도 notify 도 없는 채 시작했으므로, 전체를 한 번 더 돌려 changed=0 을 봐야 끝이다
돌리기 전에 --tags config 선택으로 무엇이 실행될지 확인하는 가장 안전한 방법은?
--syntax-check --tags config로 돌린다. 문법 검사 단계에서 선택이 반영된다--check --tags config로 돌린다. 점검 모드만이 태그 선택을 정확히 반영한다--list-tasks --tags config로 돌린다. 선택이 반영된 목록을 내면서 대상에 붙지 않는다--list-tags로 돌린다. 이 플레이북의 태그별 태스크 목록이 함께 나온다
설정 파일을 바꾸는 태스크가 핸들러를 notify 한다. --skip-tags config 로 그 태스크를 뺐을 때 핸들러는?
- notify 를 보낼 태스크가 실행되지 않았으므로 핸들러도 조용히 넘어간다
- 핸들러에 태그가 없으므로 선택과 무관하게 플레이 끝에 한 번 실행된다
- notify 가 예약된 상태로 다음 실행까지 남아 있다가 그때 실행된다
- 핸들러를 부를 태스크가 없으면 Ansible 이 경고 없이 플레이를 실패로 끝낸다