LabHub

Ansible 실전 · 롤과 재사용 · 실습

재사용 가능한 롤 만들기

LabHub 에서 이어서 보기

목표

플레이북 조각을 롤로 접어 재사용 가능한 단위로 만들고, 같은 롤을 서로 다른 값으로 여러 번 호출할 수 있게 됩니다.

왜 중요한가

롤의 본질은 "코드를 나누는 것"이 아니라 "규약을 정해 두어 설정 없이 재사용되게 하는 것" 입니다. templates/ 에 둔 파일은 경로를 적지 않아도 찾히고, handlers/main.yml 의 핸들러는 등록 과정 없이 쓸 수 있습니다. 이 규약 덕분에 남이 만든 롤도 구조를 짐작할 수 있습니다. 재사용성을 실제로 결정하는 것은 defaultsvars 의 선택입니다 — 사용자가 바꿀 값을 vars 에 두면 우선순위가 높아 밖에서 덮어쓸 수 없고, 그 롤은 결국 복사·수정되어 다시 분기합니다. 그리고 변수 이름에 롤 이름을 접두어로 붙이는 습관은 롤이 두 개를 넘어가는 순간 값어치를 합니다.

단계

1. /root/ans/roles/roles/webapp 아래에 tasks, defaults, handlers, templates, meta 디렉터리와 tasks/main.yml 을 만드세요.
2. /root/ans/roles/roles/webapp/defaults/main.ymlwebapp_port: 8080webapp_root: /root/ans/roles/artifacts 를 정의하세요.
3. /root/ans/roles/roles/webapp/tasks/main.yml 에 이름이 붙은 태스크를 2개 이상 넣고, 실행하면 /root/ans/roles/artifacts 디렉터리가 생기게 하세요.
4. /root/ans/roles/roles/webapp/templates/webapp.conf.j2 를 만들어 /root/ans/roles/artifacts/webapp.conf 로 렌더링하세요. 결과에 port = 8080 줄이 있어야 하고, 템플릿은 webapp_port 변수를 참조해야 합니다.
5. /root/ans/roles/roles/webapp/handlers/main.ymlrestart webapp 핸들러를 정의하고 /root/ans/roles/roles/webapp/tasks/main.yml 의 태스크에서 notify 하세요. 핸들러는 /root/ans/roles/artifacts/restart.marker 를 만듭니다.
6. /root/ans/roles/roles/baseline 롤(진입점 /root/ans/roles/roles/baseline/tasks/main.yml)을 만들어 /root/ans/roles/artifacts/baseline.stamp 를 남기게 하고, /root/ans/roles/roles/webapp/meta/main.ymldependencies 에 선언하세요.
7. /root/ans/roles/site.yml 에서 webapp 롤을 두 번 호출하세요. 한 번은 기본값으로(webapp.conf, port 8080), 한 번은 webapp_port: 9443 으로 /root/ans/roles/artifacts/staging.conf 를 만들게. 롤 디렉터리를 복사하면 안 됩니다.
8. 플레이북을 두 번째로 실행한 출력을 /root/ans/roles/out/run2.txt 로, ansible-lint 결과를 /root/ans/roles/out/lint.txt 로 저장하세요. 두 번째 실행은 changed=0 이고 핸들러가 돌지 않아야 합니다.

참고

단계 8개

  1. 롤 뼈대 디렉터리 만들기
  2. 기본값 두 개 정의하기
  3. 롤 태스크 작성하고 실행하기
  4. 롤 템플릿으로 설정 파일 만들기
  5. 롤 핸들러 정의하고 발화시키기
  6. 의존 롤 걸어 먼저 실행되게 하기
  7. 같은 롤을 다른 값으로 두 번 호출하기
  8. 재실행 멱등성과 린트 통과하기