Ansible 실전 · 템플릿(Jinja2) · 퀴즈
퀴즈: 템플릿
문항 6개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
`{{ timeout | default(30) }}` 이 하는 일은?
- timeout 이 30 보다 크면 상한인 30 으로 잘라서 쓴다
- timeout 의 평가를 30 초 뒤로 미뤘다가 그때 값을 읽는다
- timeout 이 정의되지 않았거나 비어 있을 때 30 을 쓴다
- timeout 에 값이 있든 없든 항상 30 으로 고정한다
렌더링 결과에 원치 않는 빈 줄이 남는 원인은?
- `{% ... %}` 제어 구문이 차지한 줄이 그대로 출력되기 때문
- 변수 값 끝에 줄바꿈 문자가 들어 있어 그대로 출력되기 때문
- 템플릿 파일의 줄 끝 문자가 CRLF 라 개행이 두 번 찍히기 때문
- template 모듈이 파일을 쓸 때 줄마다 개행을 하나씩 더 붙이기 때문
`template` 모듈의 `validate` 옵션을 쓰는 이유는?
- 렌더링 결과가 검사를 통과할 때만 대상 경로에 배치하기 위해
- 배치할 파일의 소유자와 권한을 원본과 자동으로 맞추기 위해
- 변경이 없는 템플릿을 건너뛰어 렌더링 속도를 높이기 위해
- 템플릿에서 참조하는 변수가 정의됐는지 미리 검사하기 위해
템플릿에 생성 시각 주석을 넣으면 생기는 문제는?
- 시각을 얻으려 팩트 수집이 매번 강제돼 실행 시간이 눈에 띄게 늘어난다
- `backup: yes` 를 켜도 주석만 바뀐 파일은 백업 대상에서 빠진다
- 주석 안의 시각 표현을 Jinja 가 해석하지 못해 렌더링이 실패한다
- 파일이 매 실행마다 바뀌어 changed 가 나고 핸들러가 매번 돌아 서비스가 재시작된다
템플릿 안에서 팩트를 쓸 때 주의할 점은?
- 특수 환경에서는 예상 밖 값이 나올 수 있으므로 기본값이나 분기를 준비한다
- 팩트는 모두 문자열로 들어오므로 숫자 비교 전에 `int` 로 변환해야 한다
- 팩트를 참조한 템플릿에서는 template 모듈의 backup 옵션이 무시된다
- 팩트는 태스크에서만 참조할 수 있어 템플릿 안에서는 쓸 수 없다
템플릿에 if 분기가 다섯 겹 쌓였습니다. 가장 나은 개선 방향은?
- 템플릿을 환경별로 복사해 각 파일에서 분기를 아예 없앤다
- 분기 계산을 변수 준비 단계로 끌어올려 템플릿을 단순하게 유지한다
- 각 분기마다 주석을 달아 어떤 조건인지 설명해 둔다
- 필터를 이어 붙여 다섯 겹 분기를 한 줄 표현으로 압축한다