ansible jinja template list 유니코드 에러

# 문제
# ansible jinja template 파일에서 다음과 같이 리스트를 사용하는 경우
# default/main.yml
ysoftman_servers:
  service:
    - ysoftman1:9001
    - ysoftman2:9001

# templates/ysoftman.yml.j2
hosts : {{ ysoftman_servers[env] }}

# ansible 수행하면 다음과 같이 u(유니코드)문자가 붙어 설정 에러가 발생한다.
hosts: [u'ysoftman1:9001', u'ysoftman2:9001']

# 원인
# ansible 버전을 확인해 보면 python2 를 사용하고 있다.
# python2 에서는 유니코드를 표현하기 위해 u'글자' 형식으로 표현되는게 문제다.
ansible --version
ansible 2.8.5
  ... 생략 ...
  python version = 2.7.10 .. 생략

# 해결방법
# python3 기반의 ansible 을 새롭게 설치하자.
pip3 install ansible

# 또는 brew 삭제하고 재설지 설치
# 최근 brew 는 python3 이 기본이 되어 그냥 python 으로 표기된다.
# python2 는 python@2 로 표기해야 한다.
brew uninstall ansible
brew install ansible

# ansible with python3 으로 실행하면 u(유니코드) 표기를 사용하지 않는다.
ansible 2.8.5
  python version = 3.7.4

# 만약 python2 를 쓸수 밖에 없는 상황이라면 다음처럼 u를 제거할 수도 있다.
hosts: ["{{ ysoftman_servers[env].stdout_lines | list | join("\", \"") }}"]

comments:

댓글 쓰기