undef 함수: 정의되지 않은 변수에 힌트 추가하기
undef 함수: 정의되지 않은 변수에 힌트 추가하기
2.12 버전에 새로 추가된 undef() Jinja2 함수는 jinja2.StrictUndefined에서 파생된 파이썬 AnsibleUndefined 객체를 돌려줘요. 우선순위가 낮은 변수를 '정의되지 않음'으로 되돌려서, 상위 스코프에서 내려온 값을 해당 블록에서 무시하고 싶을 때 써요.
예를 들어 호스트 변수를 작업 블록 하나에서 재정의하게 되면 그 블록 안에서는 기존 값을 쓰지 않고 {{ undef() }}로 정의를 해제할 수 있어요. 이때 undef()는 선택 인자를 하나 받아요. hint는 DEFAULT_UNDEFINED_VAR_BEHAVIOR가 에러를 내도록 설정돼 있을 때, 정의되지 않은 변수에 대한 맞춤 힌트를 주는 용도예요.
출처: 문서
본문
호스트 변수를 작업 블록에서 오버라이드하는 예시는 이렇게 생겼어요.
---
- hosts: localhost
gather_facts: no
module_defaults:
group/ns.col.auth: "{{ vaulted_credentials | default({}) }}"
tasks:
- ns.col.module1:
- ns.col.module2:
- name: override host variable
vars:
vaulted_credentials: "{{ undef() }}"
block:
- ns.col.module1:
여기서 undef()를 쓰면 vaulted_credentials 변수가 블록 안에서 다시 '정의 안 됨' 상태가 돼요. 그 덕분에 상위 스코프의 호스트 변수 값이 아니라, 이 블록에서만 별도로 정한 값(여기서는 없음)을 기준으로 동작하게 할 수 있어요. 우선순위가 낮은 변수를 일부러 해제해 블록 안에서만 동작을 바꾸고 싶을 때 유용한 패턴이에요.
더 알아보기 (Learn more)
변수 우선순위와 스코프에 대한 자세한 내용은 playbooks_variables 문서를 참고하세요. 매직 변수와 기본값 처리(default 필터)도 함께 보면 이해가 쉬워요.