Task 리스트로서의 서버 설정
Ansible playbook 은 play 를 YAML 로 죽 늘어놓은 거야. play 하나는 host 를 정하고 그 위에서 돌릴 task 들을 담아. 런타임이 host 마다 SSH 로 들어가서 task 를 순서대로 돌리는데, 몇 번을 돌려도 결과가 같아. 이미 설정이 끝난 host 에 playbook 을 다시 돌리면 바꿀 게 없는 task 는 그냥 넘어가.
다섯 핵심 섹션
hosts:— inventory 의 어느 그룹을 대상으로 삼을지 정해.vars:— 이 playbook 범위의 변수야.vars/파일에서 끌어와도 돼.tasks:— 순서대로 도는 작업들이야. 하나하나가 module 호출 (apt:,copy:,systemd:) 에 파라미터를 붙인 형태고.handlers:— task 의notify:가 부르면 깨어나. 여러 번 불려도 play 가 끝날 때 한 번만 돌아.roles:— task 와 변수, 파일, template 을 한 덩어리로 묶어 재사용하는 단위야.
Inventory — host 파일
Inventory 는 YAML 로도 INI 로도 쓸 수 있고, 클라우드 API 플러그인으로 동적으로 만들 수도 있어. YAML inventory 는 host 를 그룹으로 묶으면서 변수까지 같이 얹어줘.
원칙: Ansible 의 값어치는 몇 번을 돌려도 결과가 같다는 데 있어. 잘 쓴 task 는 '이 명령을 실행해라' 가 아니라 '이런 상태였으면 좋겠다' 를 적어.
shell: 이나 command: 로 내려가기 전에 전용 module (apt:, file:, systemd:) 부터 찾아. 전용 module 은 '이미 그렇게 돼 있네' 를 알아보고 건너뛸 줄 알거든.