概要
いよいよPython2.7のサポートが2020.1.1で終了します
このタイミングでAnsibleの実行環境も3.x系に移行いくことになりますので、その手順を残したいと思います
手順
- Python3.xをインストール
-
各プラットフォームにあわせてインストールしてください
例(Centos)> yum install -y python36 python36-pip python36-devel
-
pip3が使用できることを確認し、pipをアップグレードします
pip3ではなく、pip-3.x
しかない場合は、以下のupgradeコマンドを実行後にpip3
が使用できるようになります> pip-3.x install --upgrade pip
- Python3.xのAnsibleをインストール
-
すでにAnsible利用している場合は、まずはPython2.xのAnsibleを削除し、Python3.xのAnsibleをインストールします
> pip uninstall ansible > pip3 install ansible
-
新規でAnsibleを導入する場合
> pip3 install ansible
-
バージョン確認
下記のようにpython version = 3.x
になっていることを確認します> ansible --version ansible 2.8.5 config file = /root/.ansible.cfg configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /usr/local/lib/python3.6/site-packages/ansible executable location = /usr/local/bin/ansible python version = 3.6.8 (default, Aug 2 2019, 17:42:44) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]
-
Ansibleが使用するPythonを指定する
python3はwhereis python3
でpython3コマンドの所在で探しておきましょう
以下の3つの方法があります-
ansible.cfg
の[defaults]
セクションにinterpreter_python=/usr/bin/python3
を設定します - 変数
ansible_python_interpreter=/usr/bin/python3
を設定します - 環境変数
INTERPRETER_PYTHON=/usr/bin/python3
を設定します
-
以上の設定を行うとAnsibleが操作するホストもpython3が使用されるようになります
Ansibleの実行環境のみにPython3を適用したい場合は、host_varsもしくはgroup_varsにlocal.ymlを作成し、ansible_python_interpreter: /usr/bin/python3
を設定しましょう
トラブルシューティング
以下のエラーが発生した際の対処法を紹介します
また、下記にないエラー等がございましたら、共有して頂ければ追記します!
AttributeError: module 'enum' has no attribute 'IntFlag'
> pip3 uninstall enum34
Ansible TowerとAWX
Python3.x用の仮想環境を作成し、AnsibleやそのほかTower/AWXに必要なモジュールなどをインストールしなければならない
デフォルトのパスは/var/lib/awx/venv/xxx
公式手順と同様に操作していきます
AWX 6.1.0
AWX6.1.0では上記の公式手順ではうまく設定できなかった。。。
仮想環境のパスは/var/lib/awx/venv
で、/var/lib/awx/venv/ansible(python2.x)
、/var/lib/awx/venv/awx(python3.x)
がそれぞれ設定済みの状態。
AWXのデフォルトの設定では、/var/lib/awx/venv/ansible
を使用している。
設定画面のCustom virtual environment paths
に/var/lib/awx/venv
を設定したが、/var/lib/awx/venv/awx
(api/v2/config/custom_virtualenvsで確認できる)が検出されず、PATCHしても
/var/lib/awx/venv/awx is not a valid virtualenv in /var/lib/awx/venv
とエラーが返された。。。
おそらく/var/lib/awx/venv
以外でvenvを作らないと認識しないのかも?