LabHub

Ansible 실전 · 템플릿(Jinja2) · 실습

Jinja2 로 설정 파일 생성하기

LabHub 에서 이어서 보기

목표

환경마다 다른 설정 파일을 하나의 템플릿과 데이터로 분해하고, 렌더링 결과가 깔끔하고 검증된 상태로 배치되게 만듭니다.

왜 중요한가

설정 파일을 환경 수만큼 두면 그 파일들은 반드시 서로 달라집니다. 템플릿은 "틀은 하나, 데이터는 여럿"으로 그 분기를 없앱니다. 실무에서 템플릿을 망치는 것은 문법이 아니라 두 가지입니다. 하나는 공백 — 제어 구문이 남긴 빈 줄이 YAML 설정을 깨뜨립니다. 다른 하나는 매번 달라지는 렌더링 결과 — 타임스탬프 한 줄 때문에 파일이 매 실행마다 바뀌고, 핸들러가 매번 돌아 서비스가 매번 재시작됩니다. 마지막으로 validate 는 잘못된 설정이 서비스를 죽이는 경로를 막는 가장 싼 안전장치입니다. 자동 배포를 켜는 순간 이 옵션은 선택이 아닙니다.

단계

1. 이 실습의 플레이북은 /root/ans/tpl/site.yml 하나를 씁니다. /root/ans/tpl/templates/basic.j2/root/ans/tpl/out/basic.conf 를 만드세요. 결과에 service = checkout 줄이 있어야 합니다.
2. /root/ans/tpl/templates/filters.j2/root/ans/tpl/out/filters.conf 를 만드세요. UPPER=CHECKOUT, TIMEOUT=30(정의되지 않은 변수의 기본값), REPLICAS=3 세 줄이 나와야 합니다.
3. /root/ans/tpl/templates/upstream.j2/root/ans/tpl/out/upstream.conf 를 만드세요. 백엔드 3개가 server 10.0.0.11:8080; 형태로 각각 한 줄씩 나와야 합니다.
4. 같은 템플릿을 다른 변수로 렌더링해 /root/ans/tpl/out/prod.conf(tls = on, debug 없음)와 /root/ans/tpl/out/dev.conf(tls = off, debug 있음)를 만드세요.
5. upstream.conf 에 빈 줄이 하나도 없고 server 줄 앞에 불필요한 들여쓰기가 없게 공백을 제어하세요. {%- -%} 를 쓰거나 /root/ans/tpl/site.ymltemplate 태스크에 trim_blocks/lstrip_blocks 를 켜면 됩니다.
6. /root/ans/tpl/templates/node.j2/root/ans/tpl/out/node.conf 를 만드세요. hostname, arch 는 팩트에서, generated_forinventory_hostname(=web1)에서 옵니다.
7. /root/ans/tpl/site.ymltemplate 태스크에 validatebackup: true 를 붙여 /root/ans/tpl/out/validated.conf 를 만드세요. 내용은 key=value 한 줄입니다.
8. /root/ans/tpl/out/site.nginx 를 만드세요. upstream checkout_backend { 블록 안에 4칸 들여쓴 server 줄 3개, 그리고 listen 8080;server_name checkout.labhub.internal; 이 각각 4칸 들여쓰기로 들어갑니다. 빈 줄은 1줄 이하여야 합니다.

참고

단계 8개

  1. 변수를 넣은 기본 템플릿 렌더링
  2. upper 와 default 필터 쓰기
  3. 리스트를 도는 반복 넣기
  4. 환경에 따라 다른 설정 내보내기
  5. 공백 제어로 빈 줄 없애기
  6. 팩트와 inventory_hostname 쓰기
  7. validate 와 backup 붙이기
  8. 그룹 변수로 nginx 설정 통째로 만들기