LoginSignup
27
31

More than 3 years have passed since last update.

AnsibleをPython2.xからPython3.xに対応させる手順とトラブルシューティング

Last updated at Posted at 2019-10-15

概要

いよいよPython2.7のサポートが2020.1.1で終了します
このタイミングでAnsibleの実行環境も3.x系に移行いくことになりますので、その手順を残したいと思います

手順

  1. 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
    
  2. Python3.xのAnsibleをインストール

    • すでにAnsible利用している場合は、まずはPython2.xのAnsibleを削除し、Python3.xのAnsibleをインストールします
    > pip uninstall ansible
    > pip3 install ansible
    
    • 新規でAnsibleを導入する場合
    > pip3 install ansible
    
  3. バージョン確認
    下記のように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)]
    
  4. 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を作らないと認識しないのかも?

参考

27
31
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
31