LabHub
배우기 러닝패스 코스

Ansible 실전 · 같은 이름을 심을 수 있는 자리가 스물두 개다 · 실습

변수 우선순위를 문서가 아니라 측정으로 세우기

LabHub 에서 이어서 보기

목표

같은 이름의 변수를 열두 자리에 한 자리씩 심어 가며 무엇이 이기는지 직접 재고, 그 결과를 팀이 읽을 수 있는 순위 표로 남길 수 있게 됩니다.

왜 중요한가

"분명히 group_vars 에 적었는데 다른 값이 뜬다" 는 신고는 오류로 나타나지 않습니다. 플레이북은 성공하고 파일은 만들어지고 내용만 다릅니다. 문법 검사도 린트도 이걸 못 잡습니다. 잡을 수 있는 것은 "지금 이 자리에서 이 이름이 무엇으로 풀리는가" 를 재 보는 일뿐입니다. 그래서 이 실습은 문서의 목록을 옮겨 적지 않고 측정합니다. 한 번 재 본 사람은 표를 외우지 않아도 다음에 무엇을 먼저 의심할지 압니다. 그리고 마지막에 도달할 결론은 표가 아닙니다 - 자리를 줄이는 설계가 표를 아는 것보다 강합니다.

단계

1. /root/ans/prec/inventory/hosts.ini 에 web1·web2 를 적고(ansible_host=127.0.0.1, ansible_port=2222, ansible_user=root), /root/ans/prec/roles/probe/ 에 측정용 롤을 만드세요. defaults/main.ymlsvc_tier: role-defaultsprobe_out 을 두고, tasks/main.ymlWINNER={{ svc_tier }} 를 debug 로 보여 준 뒤 같은 값을 probe_out 경로에 쓰는 두 태스크로 채우세요. /root/ans/prec/p01.yml 로 web1 에 이 롤을 돌려 /root/ans/prec/out/01.txt 를 남기세요.
2. /root/ans/prec/inv-vars/ 를 디렉터리 인벤토리로 만드세요. hosts.yml 에 web 그룹(web1·web2)과 db 그룹(db1)을 적고, group_vars/all.ymlinv-all, group_vars/web.ymlinv-web, host_vars/web2.ymlinv-hostsvc_tier 로 심으세요. /root/ans/prec/p02.yml 로 세 호스트 모두를 재어 /root/ans/prec/out/02-<호스트>.txt 를 남기세요.
3. /root/ans/prec/p03.yml 을 만들어 플레이 vars:svc_tier: play-vars 를 심고 web1 을 재세요. 인벤토리는 2단계의 inv-vars 를 쓰고 결과는 /root/ans/prec/out/03.txt 에 남기세요.
4. /root/ans/prec/vars/tier.ymlsvc_tier: vars-file 을 적고, /root/ans/prec/p04.yml 은 3단계와 똑같이 플레이 vars:play-vars 를 남겨 둔 채 vars_files: 로 그 파일을 읽게 하세요. 결과는 /root/ans/prec/out/04.txt 입니다.
5. /root/ans/prec/roles/probe_locked/ 에 두 번째 측정 롤을 만드세요. vars/main.ymlsvc_tier: role-vars 를 두고(defaults 에는 probe_out 만 둡니다), tasks/main.yml 은 probe 와 같게 씁니다. /root/ans/prec/p05.yml 은 4단계와 같은 두 자리를 그대로 둔 채 이 롤을 불러 /root/ans/prec/out/05.txt 를 남기세요.
6. /root/ans/prec/p06.yml 을 만드세요. 플레이는 vars_files: 로 tier.yml 을 읽고, 블록 하나에 vars: {svc_tier: block-vars} 를 붙입니다. 블록 안의 첫 태스크는 probe_locked 롤을 불러 /root/ans/prec/out/06-block.txt 를 남기고, 둘째 태스크는 자기 vars:svc_tier: task-vars 를 붙여 /root/ans/prec/out/06-task.txt 에 값을 쓰세요.
7. /root/ans/prec/p07.yml 을 만드세요. 먼저 set_factsvc_tier: set-fact 를 세운 뒤, 태스크 vars:task-vars 를 붙인 태스크가 값을 /root/ans/prec/out/07-setfact.txt 에 쓰게 하고, 마지막에 probe_locked 롤을 부르며 svc_tier: role-param 을 넘겨 /root/ans/prec/out/07-roleparam.txt 를 남기세요.
8. /root/ans/prec/vars/limits.ymlbase_limitssvc_limits{cpu: "1", memory: 1Gi} 로 두고, /root/ans/prec/p08.yml-e svc_tier=extra-vars 와 함께 돌 때 /root/ans/prec/out/08.txt 에 명령줄 값이 적히게 하세요. 같은 플레이북에서 태스크 vars:svc_limits: {memory: 2Gi} 를 준 결과와 combine 으로 합친 결과를 /root/ans/prec/out/08-hash.jsonreplaced·combined 두 키로 남기고, 열두 자리의 측정 결과를 /root/ans/prec/out/rank.md 에 표로 적으세요.

참고

단계 8개

  1. 바닥 자리 - 롤 기본값
  2. 인벤토리 안의 세 자리
  3. 플레이 vars 가 인벤토리를 덮는다
  4. 뜻밖의 자리 - vars_files
  5. 밖에서 덮기 어려운 자리 - 롤 vars
  6. 좁을수록 높다 - 블록과 태스크
  7. 실행 중에 생긴 값과 롤에 넘긴 인자
  8. 명령줄과 딕셔너리, 그리고 순위 표