Ansible 실전 · 롤과 재사용 · 퀴즈
퀴즈: 롤과 재사용
문항 6개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
롤을 만들 때 사용자가 덮어쓸 값을 `vars/main.yml` 에 두면 생기는 문제는?
- 우선순위가 높아 밖에서 덮어쓰기 어려워지고, 결국 롤이 복사·수정된다
- 변수 이름이 전역으로 노출돼 다른 롤의 같은 이름과 충돌한다
- vars 를 쓰면 그 롤의 핸들러가 등록되지 않아 notify 가 먹히지 않는다
- defaults 가 비면 롤 자체가 로드되지 않아 실행이 그 자리에서 멈춘다
롤 안에서 `template` 모듈에 파일 이름만 적어도 동작하는 이유는?
- Ansible 이 제어 노드 전체를 검색해 같은 이름의 파일을 찾아내기 때문
- 롤을 로드할 때 템플릿이 미리 메모리에 올라가 이름으로 참조되기 때문
- 롤의 `templates/` 디렉터리가 규약으로 정해진 탐색 경로이기 때문
- 상대 경로가 명령을 실행한 현재 작업 디렉터리 기준으로 풀리기 때문
`meta/main.yml` 의 `dependencies` 에 대한 설명으로 옳은 것은?
- 의존 롤이 먼저 실행되며, 같은 롤이 여러 번 선언돼도 기본적으로 한 번만 실행된다
- 의존은 변수 상속만 담당하고 실행 순서에는 아무 영향을 주지 않는다
- 본 롤의 태스크가 먼저 돌고 의존 롤은 그 뒤에 이어서 실행된다
- 의존 롤은 `ansible-galaxy install` 로 먼저 내려받아야만 동작한다
롤 변수 이름에 롤 이름을 접두어로 붙이는 이유는?
- 여러 롤을 함께 쓸 때 같은 이름의 변수가 서로를 덮어쓰는 사고를 막기 위해
- 접두어가 붙은 변수만 `defaults/main.yml` 에서 자동으로 로드되기 때문
- 접두어의 사전 순서에 따라 롤이 적용되는 순서가 정해지기 때문
- Ansible 이 접두어 없는 롤 변수를 문법 오류로 거부하기 때문
같은 롤을 서로 다른 설정으로 두 번 적용하려 합니다. 올바른 방법은?
- 설정별로 플레이북을 두 개로 나눠 각각 다른 변수 파일로 실행한다
- roles 섹션에서 같은 롤을 두 번 호출하며 각각 다른 변수를 넘긴다
- 중간에 `set_fact` 로 defaults 값을 바꿔 롤을 다시 한 번 태운다
- 롤 디렉터리를 복사해 이름만 다른 두 벌을 만들어 각각 적용한다
롤로 옮긴 뒤에도 반드시 확인해야 할 성질은?
- 옮기기 전보다 실행 시간이 줄었는지
- 두 번째 실행에서 changed=0 인지
- 롤 디렉터리와 파일 수가 줄었는지
- 플레이북의 변수 개수가 줄었는지