てくなべ (tekunabe)

ansible / network automation / 学習メモ

[Ansible] CentOS 8 に Ansible をインストールする(Python 3 + venv + pip)

■ はじめに

CentOS 8 では、システムで利用する PythonPython 3 になったり、デフォルトでは python コマンドが利用できなかったりと、CentOS 7 とは Python 事情が異なります。そのため、Ansible を pip でインストールする場合も、CentOS 7 とは少し手順が異なります(楽になったと思います)。

この記事では、以下の方針で CentOS 8 に Ansible をインストールする手段をまとめます。

Ansible インストール方針

OSインストール方法によっては、パッケージの過不足があるかもしれません。

なお、私の試した限り sudo dnf install ansiblesudo yum install ansible では Ansible をインストールできませんでした。

コマンドまとめ

コピペしやすいように、先にコアなコマンドだけまとめます。手順の説明は次項から。

sudo dnf install python3 -y
python3 -m venv ansible-py3
source ansible-py3/bin/activate
pip3 install ansible 


■ 手順

Python 3 のインストール

システムが利用している /usr/libexec/platform-python とは別に、ユーザが利用する環境として別途 Python 3 をインストールします。

$ sudo dnf install python3 -y

...(略)...

Installed:
  python36-3.6.8-2.module_el8.0.0+33+0a10c0e1.x86_64            python3-pip-9.0.3-13.el8.noarch            python3-setuptools-39.2.0-4.el8.noarch           

Complete!
  • 確認
$ python3 --version
Python 3.6.8

python3 コマンドは /usr/bin/python3 です。 バージョンなしのコマンド python/usr/bin/python はありません。

venv の準備

Python 環境を分離したいため、専用 の venv を用意して有効にします。

$ python3 -m venv ansible-py3
$ source ansible-py3/bin/activate
(ansible-py3)$ 

venv を有効にした地点で、バージョンなしのコマンド python(venv)/bin/python として利用できるようになります。

Ansible のインストール

venv を有効にした状態で、pip で Ansible をインストールします。

(ansible-py3)$ pip3 install ansible 
Collecting ansible
  Downloading https://files.pythonhosted.org/packages/04/25/48fee5f8048360d9375e01846fcf395dda58242ed1f25a2106b6794452eb/ansible-2.8.5.tar.gz (14.4MB)
    100% |████████████████████████████████| 14.4MB 96kB/s 
...(略)...
  • 確認
(ansible-py3)$ ansible --version
ansible 2.8.5
  config file = None
  configured module search path = ['/home/ansible/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/ansible/ansible-py3/lib64/python3.6/site-packages/ansible
  executable location = /home/ansible/ansible-py3/bin/ansible
  python version = 3.6.8 (default, May 21 2019, 23:51:36) [GCC 8.2.1 20180905 (Red Hat 8.2.1-3)]

Ansible 動作確認

自分自身に local コネクションプラグインを使って ping モジュールを利用する、というかんたんな動作確認をします。

(ansible-py3)$ ansible -i localhost, all -m ping -c local
localhost | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}

discovered_interpreter_python とは?

上記の実行結果に discovered_interpreter_python の値が表示されているのは、Ansible 2.8 から導入された Python インタープリタを自動で探す機能によるものです。

特に ansible_python_interpreter 変数でパスを指定していない場合は、/usr/bin/python (バージョンなしコマンド)を利用しようとしますが、見つからない場合は一定の法則で探してきます。CentOS8/RHEL8の場合は、最初に /usr/libexec/platform-python を調べます。この記事の作業では、以下の条件により、インタープリタを自動で探しています。

  • /usr/bin/python3 はあるが /usr/bin/python はない
  • ansible_python_interpreter 変数は指定していない

なお、ansible_python_interpreter を明示的に指定するとこうなります。

$ ansible -i localhost, all -m ping -c local -e "ansible_python_interpreter=/home/ansible/ansible-py3/bin/python"
localhost | SUCCESS => {
    "changed": false,
    "ping": "pong"
}


■ まとめ

CentOS 8 に、Python 3 venv 環境に、Ansible を pip でインストールする方法をまとめました。

ふりかえると特に特別なことはしていませんが、CentOS 8 の Python 事情を意識しないと、ちょっとしたことでつまずいてしまうかもしれないので、残しておきます。