LabHub

Ansible 기초 · 플레이북 기본 · 실습

첫 플레이북 쓰고 점검 모드로 돌려 보기

LabHub 에서 이어서 보기

목표

플레이북으로 서버의 원하는 상태를 선언하고, 실행 전에 점검 모드로 영향 범위를 확인할 수 있게 됩니다.

왜 중요한가

셸 스크립트는 "무엇을 할지"를 적지만 플레이북은 "끝났을 때 어떤 상태여야 하는지"를 적습니다. 이 차이 때문에 같은 플레이북을 몇 번을 돌려도 결과가 같습니다. 그 성질을 만들어 내는 것은 문법이 아니라 모듈입니다 — file 모듈은 디렉터리가 이미 있으면 아무것도 하지 않고, 권한만 다르면 권한만 고칩니다. 반대로 command/shell 은 지금 상태를 모르기 때문에 항상 바꿨다고 보고합니다. 그래서 "전용 모듈이 있으면 셸을 쓰지 않는다"는 원칙이 스타일 취향이 아니라 정확성의 문제가 됩니다. 마지막으로 --check --diff 는 운영 서버에 처음 손대기 전 마지막 안전장치입니다.

단계

1. /root/ans/play/site.yml 을 만드세요. 플레이 하나이며 name 이 있고 hostsweb 입니다. ansible-playbook -i /root/ans/inventory/hosts.ini --syntax-check 를 통과해야 합니다.
2. file 모듈로 /root/ans/artifacts/app 디렉터리를 권한 0755 로 만드는 태스크를 추가하고 실행하세요.
3. copy 모듈로 /root/ans/artifacts/app/app.conf 를 만드세요. 내용에 listen_port=8080env=lab 두 줄이 각각 한 줄씩 들어가야 합니다. 이때 env 의 값은 하드코딩하지 말고 app_env 변수로 빼고 기본값을 lab 으로 두세요 (6번에서 이 값을 바꿔 봅니다).
4. 태스크를 3개 이상으로 만들고, 모든 태스크에 name 을 다세요.
5. 설정을 다루는 태스크에 config 태그를 달고 --tags config 로 실행한 출력을 /root/ans/out/tags.txt 로 저장하세요.
6. 플레이북을 --check --diff -e app_env=stage 로 실행하고 출력을 /root/ans/out/check.txt 로 저장하세요. 출력의 diff 에는 env=stage 가 보여야 하지만, 실제 /root/ans/artifacts/app/app.conf 는 여전히 env=lab 이어야 합니다. 이 단계에서는 절대 실제로 적용하지 마세요.
7. /opt/lab/fixtures/ansible/motd.seed/root/ans/artifacts/motd 로 복사한 뒤, lineinfileWelcome=labhubOwner=platform-team 이 되도록 고치세요. Banner=unset 줄은 그대로 둬야 하고, Welcome= 로 시작하는 줄은 하나만 남아야 합니다.
8. /opt/lab/fixtures/ansible/broken-play.yml/root/ans/play/fixed.yml 로 복사해 오류 네 군데를 고치고 실행하세요. 결과로 /root/ans/artifacts/fixed/report.txtfixed by student 가 들어가고, 핸들러 정의와 notify 가 살아 있어야 합니다.

참고

단계 8개

  1. 플레이북 뼈대 만들고 문법 검사 통과하기
  2. file 모듈로 디렉터리 만들기
  3. copy 모듈로 설정 파일 배치하기
  4. 모든 태스크에 이름 달기
  5. 태그 달고 일부만 실행하기
  6. 점검 모드로 미리 보기
  7. 기존 파일의 특정 줄만 바꾸기
  8. 고장난 플레이북 고치기