다른 상황에서 잘 작동하는이 문제에 대한 3 가지 가능한 해결책을 개인적으로 발견했습니다.
옵션 1- 기본적으로 설치된 ansible_python_interpreter: /usr/bin/python3
호스트 python3
에 설정
python3
기본적으로 설치 되었는지 여부에 따라 호스트를 그룹화하는 방법이 있다면 이것이 문제를 해결하기위한 최상의 방법이라고 생각합니다 . 내가 아는 python3
한 모든 우분투 릴리스 16.04 이상에서 사용할 수 있습니다.
- 모든 호스트에 확실히가 있다면
python3
변수를 group_vars/all.yml
(또는 동등한) 변수에 추가 할 수 있습니다 .
# group_vars/all.yml
ansible_python_interpreter: /usr/bin/python3
- 일부 호스트가없고
python3
동적 인벤토리를 사용할 때 태그를 지정할 수있는 방법이있는 경우 (예 :에 AWS 태깅 ec2.py
) 다음과 같이 특정 호스트에 변수를 적용 할 수 있습니다.
# group_vars/tag_OS_ubuntu1804.yml
ansible_python_interpreter: /usr/bin/python3
- 정적 인벤토리를 사용하고 호스트 여부에 따라 호스트를 그룹화
python3
할 수있는 경우 다음과 같이 할 수 있습니다.
# inventory/hosts
[python2_hosts]
centos7_server
[python3_hosts]
u1804_server
[python3_hosts:vars]
ansible_python_interpreter=/usr/bin/python3
모든 플레이 북에 추가해야하는 옵션 2 및 3과 달리 원격 호스트를 변경할 필요가없고 변수를 약간만 변경하기 때문에이 옵션이 가장 좋습니다.
옵션 2-다음을 사용하여 Python 2 설치 raw
이 옵션 gather_facts: false
을 사용 raw
하려면 설치 하는 데 사용 하는 모든 플레이 북의 맨 위에 플레이 해야합니다 python
.
- name: install python2 on all instances
hosts: "*"
gather_facts: false
tasks:
- name: run apt-get update and install python
raw: "{{ item }}"
loop:
- sudo apt-get update
- sudo apt-get -y install python
become: true
ignore_errors: true
ignore_errors: true
apt-get
설치 되지 않은 호스트 (예 : RHEL 기반) 에서 플레이를 실행하려는 경우 첫 번째 플레이에서 오류가 발생합니다.
이 솔루션은 작동하지만 몇 가지 이유로 내 목록에서 가장 낮습니다.
- 옵션 1과 달리 모든 플레이 북 의 상단에 있어야합니다.
apt
시스템에 있고 오류를 무시한다고 가정 합니다 (옵션 3과 반대)
apt-get
명령이 느립니다 (옵션 3과 반대)
옵션 3-Symlink를 /usr/bin/python -> /usr/bin/python3
사용하는raw
다른 사람이 제안한이 솔루션을 보지 못했습니다. 이상적이지는 않지만 옵션 2보다 많은 방법이 우수하다고 생각합니다. 내 제안은 시스템에 있고raw
쉘 이 아닌 /usr/bin/python -> /usr/bin/python3
경우 쉘 명령을 실행하여 symlink 하는 것 python3
입니다 . python
- name: symlink /usr/bin/python -> /usr/bin/python3
hosts: "*"
gather_facts: false
tasks:
- name: symlink /usr/bin/python -> /usr/bin/python3
raw: |
if [ -f /usr/bin/python3 ] && [ ! -f /usr/bin/python ]; then
ln --symbolic /usr/bin/python3 /usr/bin/python;
fi
become: true
이 솔루션은 모든 플레이 북의 맨 위에 배치해야한다는 점에서 옵션 2와 유사하지만 몇 가지면에서 우수하다고 생각합니다.
python3
존재하고 python
존재하지 않는 특정 경우에만 심볼릭 링크를 만듭니다. 파이썬 2가 이미 설치되어 있으면 재정의하지 않습니다.
apt
설치되어 있지 않습니다
- 특별한 오류 처리없이 모든 호스트에 대해 실행할 수 있습니다
- 무엇보다 초고속입니다
apt-get
에 Python 2를 설치 해야하는/usr/bin/python
경우이 솔루션은 필요 없으며 옵션 2가 더 좋습니다.
결론
- 가능 하다면 모든 경우에 옵션 1 을 사용하는 것이 좋습니다 .
- 내가 사용하는 것이 좋습니다 옵션 3을 인벤토리 정말 큰 / 복잡한 경우에 당신은에 쉽게 그룹 호스트에 방법이 없습니다
python3
만들기, 옵션 1을 훨씬 더 어렵고 오류가 발생하기 쉬운입니다.
- 에 Python 2를 설치 해야하는 경우 옵션 3 보다 옵션 2 만 제안 합니다.
/usr/bin/python
출처