LabHub

Ansible 기초 · 인벤토리와 애드혹 · 실습

인벤토리 만들고 애드혹으로 두드리기

LabHub 에서 이어서 보기

목표

인벤토리에 자동화 대상을 정의하고, 플레이북 없이 애드혹 명령만으로 여러 서버를 한 번에 다룰 수 있게 됩니다.

왜 중요한가

자동화 도구를 배울 때 사람들은 "무엇을 실행할까"부터 궁금해하지만, 실제 사고는 거의 언제나 "누구에게 실행됐나"에서 납니다. 인벤토리는 그 대상을 파일로 못 박아 두는 장치입니다. 그룹은 단순한 별명이 아니라 변수가 흐르는 통로이기도 합니다 — [web:vars] 에 넣은 값은 web 그룹 호스트에만 닿고, 호스트 개별 변수는 그것을 다시 덮어씁니다. 이 우선순위를 모르면 "설정이 왜 안 먹지"라는 질문에 하루를 씁니다. 그리고 대상을 좁힐 때는 반드시 실행 옵션(--limit)을 쓰세요. 인벤토리를 임시로 고치는 습관은 그 파일이 커밋되는 순간 장기 장애로 바뀝니다.

단계

1. /root/ans/inventory/hosts.ini 를 만드세요. web 그룹에 web1, web2, db 그룹에 db1 을 넣고, 세 호스트 모두 ansible_host=127.0.0.1, ansible_port=2222 를 갖게 하세요.
2. 같은 파일에 [web:vars]app_port=8080 을, [all:vars]ansible_user=root 를 추가하세요. app_port 는 db1 에서는 보이면 안 됩니다.
3. [prod:children] 섹션을 만들어 webdb 두 그룹을 자식으로 넣으세요. prod 에 호스트를 직접 적지 마세요.
4. /root/ans/inventory/hosts.yml 에 같은 구조(호스트 3개, 그룹 web/db/prod, ansible_host 값)를 YAML 형식으로 표현하세요.
5. ansible -i hosts.ini all -m ping 을 실행하고 출력 전체를 /root/ans/out/ping.txt 로 저장하세요. 세 호스트 모두 SUCCESS 여야 합니다.
6. 애드혹 file 모듈로 /root/ans/artifacts/adhoc.d 디렉터리를 권한 0750 으로 만드세요.
7. web 그룹만 대상으로 애드혹을 한 번 더 실행하고 출력을 /root/ans/out/limit.txt 로 저장하세요. db1 이 결과에 나오면 안 됩니다.
8. /root/ans/out/report.txt 를 만드세요. prod 에 속한 모든 호스트를 그룹:호스트 형식으로 한 줄에 하나씩, 사전순으로 정렬해 담습니다 (db:db1, web:web1, web:web2 세 줄).

참고

단계 8개

  1. INI 인벤토리에 web·db 그룹 만들기
  2. 그룹 변수와 전역 변수 넣기
  3. 상위 그룹 prod 로 묶기
  4. 같은 구조를 YAML 로 다시 쓰기
  5. 세 호스트에 ping 모듈 던지기
  6. 애드혹으로 디렉터리 만들기
  7. 대상을 web 그룹으로 좁히기
  8. 그룹별 호스트 보고서 만들기