Python 3 지원

Python 3 지원 (Python 3 Support)

Ansible은 2.5 버전부터 Python 3를 공식 지원해요. 그 이전에는 Python 3가 테크 프리뷰로만 취급됐었죠. 이 문서에서는 컨트롤 노드와 관리 노드를 Python 3로 맞추는 방법을 살펴봐요.

출처: 문서

본문

Ansible 2.5 이상은 Python 3에서 동작해요. 2.5 이전에는 Python 3 사용이 테크 프리뷰로 간주됐어요. 이 문서는 컨트롤 노드와 관리 노드에서 Python 3를 사용하도록 설정하는 방법을 다뤄요.

지원되는 구체적인 버전은 컨트롤 노드 요구 사항과 관리 노드 요구 사항 문서를 참고해요.

컨트롤 노드 쪽

Python 3에서 /usr/bin/ansible을 실행하는 가장 쉬운 방법은 Python 3용 pip로 설치하는 거예요. 그러면 기본 /usr/bin/ansible이 Python 3로 실행돼요.

$ pip3 install ansible
$ ansible --version | grep "python version"
  python version = 3.10.5 (main, Jun 9 2022, 00:00:00) [GCC 12.1.1 20220507 (Red Hat 12.1.1-1)] (/usr/bin/python)

클론에서 devel 브랜치를 실행 중이고 소스 체크아웃에서 Python 3를 쓰고 싶다면 python3으로 명령을 실행해요. 예를 들어 이렇게요.

$ source ./hacking/env-setup
$ python3 $(which ansible) localhost -m ping
$ python3 $(which ansible-playbook) sample-playbook.yml

참고: 리눅스 배포판마다 Python2용 또는 Python3용으로 패키지가 따로 준비되어 있을 수 있어요. 배포판 패키지로 실행하면 그 패키지가 설치된 Python 버전에서만 Ansible을 쓸 수 있어요. 일부 배포판은 여러 Python 버전용 설치 방법(별도 패키지 또는 설치 후 실행하는 명령)을 제공하기도 하니, 해당 배포판 문서를 확인해 보세요.

명령과 플레이북에서 관리 노드에 Python 3 사용하기

  • Ansible은 Python 3가 포함된 많은 플랫폼에서 자동으로 Python 3를 감지해 사용해요. Python 3 인터프리터를 명시적으로 설정하려면 ansible_python_interpreter 인벤토리 변수를 그룹·호스트 레벨에서 /usr/bin/python3 같은 Python 3 인터프리터 위치로 지정하세요. 기본 인터프리터 경로는 ansible.cfg에서도 설정할 수 있어요.

인터프리터 탐색(Interpreter Discovery) 문서를 참고하세요.

# localhost에 Python3를 쓰는 별칭을 만드는 인벤토리 예시
localhost-py3 ansible_host=localhost ansible_connection=local ansible_python_interpreter=/usr/bin/python3

# Python3를 쓰는 호스트 그룹을 설정하는 예시
[py3_hosts]
ubuntu16
fedora27

[py3_hosts:vars]
ansible_python_interpreter=/usr/bin/python3

인벤토리를 만드는 방법에 대한 자세한 내용은 인벤토리 구축 문서를 참고하세요.

  • 명령이나 플레이북을 실행해요.
$ ansible localhost-py3 -m ping
$ ansible-playbook sample-playbook.yml

명령을 실행할 때 -e 커맨드라인 옵션으로 Python 인터프리터를 직접 지정할 수도 있어요. 특정 모듈이나 플레이북이 Python 3에서 버그가 있는지 테스트하고 싶을 때 유용해요. 예를 들어 이렇게요.

$ ansible localhost -m ping -e 'ansible_python_interpreter=/usr/bin/python3'
$ ansible-playbook sample-playbook.yml -e 'ansible_python_interpreter=/usr/bin/python3'

비호환성이 발견되면 어떻게 할까

여러 릴리스에 걸쳐 버그를 없애고 새 테스트를 추가해서 Ansible의 핵심 기능 세트가 Python 2와 Python 3 양쪽에서 동작하게 했어요. 그래도 엣지 케이스에는 버그가 남아 있을 수 있고, Ansible에 포함된 많은 모듈은 커뮤니티가 관리하며 아직 전부 Python 3로 이식되지 않았을 수 있어요.

Python 3에서 동작하는 버그를 발견했다면 Ansible GitHub 프로젝트에 버그 리포트를 제출하세요. 적절한 담당자가 살펴볼 수 있게 버그 리포트에 Python3라고 꼭 적어 주세요.

코드를 고쳐 GitHub에 풀 리퀘스트를 보내고 싶다면, Ansible과 Python 3 문서에서 Ansible 코드베이스의 흔한 Python 3 호환성 문제를 고치는 방법을 확인할 수 있어요.

더 알아보기 (Learn more)

  • 인터프리터 탐색 동작과 ansible_python_interpreter 설정은 인터프리터 탐색 문서를 확인해요.
  • Ansible과 Python 3 호환성 이슈 수정 방법은 Ansible과 Python 3 문서를 참고해요.