Ansible 기초 · 플레이북 기본 · 실습
첫 플레이북 쓰고 점검 모드로 돌려 보기
목표
플레이북으로 서버의 원하는 상태를 선언하고, 실행 전에 점검 모드로 영향 범위를 확인할 수 있게 됩니다.
왜 중요한가
셸 스크립트는 "무엇을 할지"를 적지만 플레이북은 "끝났을 때 어떤 상태여야 하는지"를 적습니다. 이 차이 때문에 같은 플레이북을 몇 번을 돌려도 결과가 같습니다. 그 성질을 만들어 내는 것은 문법이 아니라 모듈입니다 — file 모듈은 디렉터리가 이미 있으면 아무것도 하지 않고, 권한만 다르면 권한만 고칩니다. 반대로 command/shell 은 지금 상태를 모르기 때문에 항상 바꿨다고 보고합니다. 그래서 "전용 모듈이 있으면 셸을 쓰지 않는다"는 원칙이 스타일 취향이 아니라 정확성의 문제가 됩니다. 마지막으로 --check --diff 는 운영 서버에 처음 손대기 전 마지막 안전장치입니다.
단계
1. /root/ans/play/site.yml 을 만드세요. 플레이 하나이며 name 이 있고 hosts 는 web 입니다. 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=8080 과 env=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 로 복사한 뒤, lineinfile 로 Welcome=labhub 와 Owner=platform-team 이 되도록 고치세요. Banner=unset 줄은 그대로 둬야 하고, Welcome= 로 시작하는 줄은 하나만 남아야 합니다.
8. /opt/lab/fixtures/ansible/broken-play.yml 을 /root/ans/play/fixed.yml 로 복사해 오류 네 군데를 고치고 실행하세요. 결과로 /root/ans/artifacts/fixed/report.txt 에 fixed by student 가 들어가고, 핸들러 정의와 notify 가 살아 있어야 합니다.
참고
- 실습 파드는 실습마다 새로 뜹니다.
/root/ans/inventory/hosts.ini가 없으면 첫 실습에서 만든 것과 같은 인벤토리(web1·web2·db1,ansible_host=127.0.0.1,ansible_port=2222,ansible_user=root,[prod:children]에 web·db)를 먼저 다시 만드세요. 구조는/opt/lab/fixtures/ansible/inventory.sample.ini를 참고하면 됩니다. ansible-playbook -i 인벤토리 플레이북.yml이 기본 실행 형태입니다.-v를 늘릴수록 자세해집니다.- 태그로 실행하면 대상이 아닌 태스크는
skipping으로 표시됩니다. - 흔한 실수 1: 7번에서
lineinfile에regexp를 주지 않는 것. 그러면 같은 줄이 계속 추가됩니다. - 흔한 실수 2: 8번의 오류를 모두 YAML 문법 문제로 보는 것. 인자 이름과 값이 틀린 경우도 있으니 모듈 문서를 확인하세요.
단계 8개
- 플레이북 뼈대 만들고 문법 검사 통과하기
- file 모듈로 디렉터리 만들기
- copy 모듈로 설정 파일 배치하기
- 모든 태스크에 이름 달기
- 태그 달고 일부만 실행하기
- 점검 모드로 미리 보기
- 기존 파일의 특정 줄만 바꾸기
- 고장난 플레이북 고치기