自宅ではAnsibleを用いて各種作業の自動化を進めている。Ansibleのインストール手順は以下に記載している。
上記は、2022年7月にインストールした記事であり、Ansibleのバージョンが6.0.0とかなり古くなっていた。
Ansibleのバージョン情報は、以下URLから確認することができ、Ansible core 2.13に該当するAnsible 6.xはすでにUnmaintained (end of life)
となっている。
本記事では、RHEL系のOSに導入したAnsibleをバージョンアップする手順を記載する。
環境
コントロールノードとなるOSは、AlmaLinuxを用いる。Red Hat系のディストリビューションであるRHELやRocky Linuxなどでも同様の手順で作業ができるだろう。
- OS : AlmaLinux 8.5
- Python : 3.8 → 3.9
- Ansible : 6.0.0 → 8.1.0
- OS : AlmaLinux 8.10
- Python : 3.9 → 3.12
- Ansible : 8.3.0 → 10.4.0
Ansibleバージョンアップ手順
1. pipを最新バージョンに更新
Ansibleインストール前に、pip自体を最新化する。
# python3 -m pip install --upgrade pip
2. インストール可能なAnsibleのバージョンを確認
pipを使ってインストール可能なバージョンを確認してみる。pip install [インストールモジュール名]=='0'
のように存在しないバージョンを記載すると、インストール可能なバージョンの一覧が表示される。
以下の通り、Python 3.8の場合は、Ansible 6.xまでしか表示されない。そのため、以降の手順でPython 3.9のインストールを行うことにする。
# python3 -m pip install --upgrade ansible=='0'
~(中略)~
ansible== (from versions: (中略) 6.0.0, 6.1.0, 6.2.0,
6.3.0, 6.4.0, 6.5.0, 6.6.0, 6.7.0)
ERROR: No matching distribution found for ansible==0
3. Pythonをインストール
Ansibleを利用する場合、Pythonも対応するバージョンを使用する必要がある。例えば、最近のバージョンでは以下のバージョン制約がある。
Ansible | Python |
---|---|
10.x | 3.10-3.12 |
9.x | 3.10-3.12 |
8.x | 3.9-3.11 |
7.x | 3.9-3.11 |
6.x | 3.8-3.10 |
Ansibleのバージョン8.1.0の場合は、Python 3.9及びpipをインストールする。
# dnf install python39-pip -y
4. 通常使用するPythonの入れ替え
通常利用するPythonをPython変更するため、alternatives
を使って、以下の通り設定する。以下はPython 3.6をPython 3.9に変更する手順となる。
# ls -l /usr/bin/python3*
lrwxrwxrwx 1 root root 25 7月 1 2022 /usr/bin/python3 -> /etc/alternatives/python3
lrwxrwxrwx 1 root root 31 10月 10 2021 /usr/bin/python3.6 -> /usr/libexec/platform-python3.6
lrwxrwxrwx 1 root root 32 10月 10 2021 /usr/bin/python3.6m -> /usr/libexec/platform-python3.6m
-rwxr-xr-x 1 root root 7760 4月 21 2022 /usr/bin/python3.8
-rwxr-xr-x 1 root root 7768 4月 4 01:41 /usr/bin/python3.9
# alternatives --list
libnssckbi.so.x86_64 auto /usr/lib64/pkcs11/p11-kit-trust.so
python auto /usr/libexec/no-python
ifup auto /usr/libexec/nm-ifup
cifs-idmap-plugin auto /usr/lib64/cifs-utils/cifs_idmap_sss.so
python3 manual /usr/bin/python3.8
libwbclient.so.0.15-64 auto /usr/lib64/samba/wbclient/libwbclient.so.0.15
# alternatives --set python3 /usr/bin/python3.9
# alternatives --list
libnssckbi.so.x86_64 auto /usr/lib64/pkcs11/p11-kit-trust.so
python auto /usr/libexec/no-python
ifup auto /usr/libexec/nm-ifup
cifs-idmap-plugin auto /usr/lib64/cifs-utils/cifs_idmap_sss.so
python3 manual /usr/bin/python3.9
libwbclient.so.0.15-64 auto /usr/lib64/samba/wbclient/libwbclient.so.0.15
5. 再度、インストール可能なAnsibleのバージョンを確認
再度、pipを最新化したのち、インストール可能なAnsibleのバージョンを確認する。今度は、8.xのバージョンがインストール可能となっていることがわかる。
# python3 -m pip install --upgrade pip
# python3 -m pip install --upgrade ansible=='0'
~(中略)~
ansible== (from versions: (中略) 6.0.0, 6.1.0, 6.2.0,
6.3.0, 6.4.0, 6.5.0, 6.6.0, 6.7.0, 7.0.0a1, 7.0.0a2,
7.0.0b1, 7.0.0rc1, 7.0.0, 7.1.0, 7.2.0, 7.3.0, 7.4.0,
7.5.0, 7.6.0, 7.7.0, 8.0.0a1, 8.0.0a2, 8.0.0a3,
8.0.0b1, 8.0.0rc1, 8.0.0, 8.1.0)
ERROR: No matching distribution found for ansible==0
6. Ansibleバージョンアップ
Pythonをインストールしたら、インストール対象のAnsibleのバージョン(今回は8.1.0)を指定して、以下の通りAnsibleをインストールする。
# python3 -m pip install ansible=='8.1.0'
問題なくインストールされたことを以下コマンドで確認する。Ansible 8.1.0がインストールされ、ansible
コマンドの表示バージョンがansible core 2.15となっていることがわかる。
# pip3 list
Package Version
------------------- -------
ansible 8.1.0
ansible-core 2.15.1
cffi 1.15.1
cryptography 41.0.1
importlib-resources 5.0.7
Jinja2 3.1.2
MarkupSafe 2.1.3
packaging 23.1
pip 20.2.4
pycparser 2.21
PyYAML 6.0
resolvelib 1.0.1
setuptools 50.3.2
# ansible --version
ansible [core 2.15.1]
config file = /etc/ansible/ansible.cfg
configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/local/lib/python3.9/site-packages/ansible
ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
executable location = /usr/local/bin/ansible
python version = 3.9.16 (main, Apr 3 2023, 12:39:37) [GCC 8.5.0 20210514 (Red Hat 8.5.0-18)] (/usr/bin/python3)
jinja version = 3.1.2
libyaml = True
7. Ansible関連のPythonモジュールを追加
最後に、Ansibleを実行する際に必要となるPythonモジュールをインストールする。
私の環境の場合は以下をインストールした。
モジュール | 用途 |
---|---|
ansible-lint | Ansible Lint(構文チェックツール)本体。 |
jmespath | Ansible Lintの構文チェックで利用されるモジュール。 |
pywinrm | Windows操作用モジュール。 |
pyvmomi | vSphere操作用モジュール。 |
zabbix-api | Zabbix操作用モジュール。 |
passlib | パスワードハッシュ用モジュール。 |
# python3 -m pip install ansible-lint jmespath
# python3 -m pip install pywinrm pyvmomi zabbix-api passlib
以上で、RHEL系のOSに導入したAnsibleのバージョンアップ手順は完了となる。
Ansible 8.1.0へバージョンアップ後も、ほとんどのPlaybookはそのまま実行させることができたが、Zabbix操作のPlaybookは接続時の指定方法が変更となっており、そのままでは実行できなかった。Ansibleを用いたZabbixの操作方法の最新手順は、以下別記事に記載する。
更新履歴
- 2023/7/1 新規作成
- 2024/9/22 汎用的に使用できるよう、記載を修正
0 件のコメント:
コメントを投稿