LabHub

Ansible 기초 · 변수와 팩트 · 실습

변수 우선순위와 팩트 다루기

LabHub 에서 이어서 보기

목표

값을 코드에서 분리해 여러 자리에 배치하고, 그중 무엇이 이기는지 직접 확인합니다. 팩트와 register 로 실행 중에 얻은 값도 다룹니다.

왜 중요한가

"변수를 바꿨는데 반영이 안 된다"는 질문의 답은 거의 언제나 우선순위입니다. Ansible 은 같은 이름의 변수를 여러 자리에서 받아들이고, 충돌해도 오류를 내지 않고 조용히 더 센 쪽을 씁니다. 이 성질은 편리하지만 디버깅을 어렵게 만듭니다. 그래서 덮어써도 되는 값은 약한 자리(롤의 defaults)에, 반드시 지켜야 할 값은 강한 자리에 두는 설계 감각이 필요합니다. 명령줄 -e 는 무엇이든 이기지만 어디에도 기록되지 않으므로, 장애 대응에서 썼다면 반드시 코드로 되돌려 놔야 합니다. 그러지 않으면 다음 배포가 조용히 그 값을 지웁니다.

단계

1. /root/ans/vars/site.yml 을 만들고 플레이 vars:app_name: checkout 을 정의하세요. 그 값을 /root/ans/vars/out/app_name.txt 에 쓰세요.
2. /root/ans/vars/vars/common.ymlapp_port: 9090 을 두고 vars_files 로 읽어 들이세요. 값을 /root/ans/vars/out/app_port.txt 에 쓰세요.
3. /root/ans/inventory/group_vars/web.ymlnode_role: frontend 를, /root/ans/inventory/host_vars/web1.ymlnode_role: canary 를 두세요. 두 디렉터리는 첫 실습에서 만든 /root/ans/inventory/hosts.ini 와 같은 자리에 있어야 자동으로 읽힙니다. web2 에서는 frontend 로, web1 에서는 canary 로 보여야 합니다.
4. 명령을 실행하고 register 로 결과를 받은 뒤, 표준 출력만 /root/ans/vars/out/uptime.txt 에 저장하세요.
5. gather_facts 를 켜고 수집된 팩트 중 호스트 이름·아키텍처·시스템을 담은 JSON 을 /root/ans/vars/out/facts.json 으로 저장하세요.
6. -e app_port=9999 로 실행해 그 값을 /root/ans/vars/out/precedence.txt 에 저장하세요. 2번에서 만든 app_port.txt 는 9090 그대로여야 합니다.
7. set_factapp_nameapp_port 를 이어 붙인 값을 만들어 /root/ans/vars/out/endpoint.txtcheckout:9090 형태로 저장하세요.
8. /root/ans/vars/out/summary.json 을 만드세요. app(=checkout), port(=9090), role(web1 의 호스트 변수 값), host(수집한 팩트의 호스트 이름) 네 키를 가져야 합니다.

참고

단계 8개

  1. 플레이 변수 정의하고 쓰기
  2. 변수 파일 분리하기
  3. 그룹 변수와 호스트 변수 만들기
  4. 명령 결과를 변수에 담기
  5. 팩트 수집해 JSON 으로 남기기
  6. 명령줄 변수로 덮어쓰기
  7. set_fact 로 값 조합하기
  8. 변수·팩트·호스트 변수를 합친 요약 만들기