最近になってようやくCentOS8のサーバーを構築し始め、ansibleで一発と思っていたら一発じゃなかったのでメモです。
Ansibleのバージョンを上げれば終わる話な気がしますが、上から「影響範囲が...」と言われたので、バージョンを上げずに対応しました。
環境
Ansibleサーバー
- Cnetos 7.3
- Ansible 2.3
構築先サーバー
- Centos 8.2
何が起こったか
EC2でCentOS8を起動し、ansible playbook
でプレイブックを実行したところこんな感じのエラーが発生しました
fatal: [サーバー名]: FAILED! => {
"changed": false, "failed": true,
"module_stderr": "Shared connection to [サーバー名] closed.\r\n",
"module_stdout": "/bin/sh: /usr/bin/python: No such file or directory\r\n",
"msg": "MODULE FAILURE",
"rc": 0
}
原因
ansible2.3は__python2__で動作しますが、CentOS8にはデフォルトでpython2系がインストール__されていません__
/usr/bin/pythonにインストールされているpython3のリンクを張っても、バージョンの差異から動作の保証はできません(やってないのでわかりません)
対策
最初に書いた通り、バージョン上げての対応はNGと言われたのでpython2をインストールして対応をします。
構築先のCentOS8サーバーにpython2.7をインストール
dnf install python2
インストール後、python2.7のシンボリックリンクを作成します
ln -s /usr/bin/python2.7 /usr/bin/python
こんな感じでpython -> /usr/bin/python2.7
のリンクが貼られていれば大丈夫です
[root@hoge:~]$ll /usr/bin | grep python | grep -e "^l"
lrwxrwxrwx 1 root root 18 Oct 1 16:17 python -> /usr/bin/python2.7
lrwxrwxrwx. 1 root root 9 Jun 5 12:38 python2 -> python2.7
lrwxrwxrwx. 1 root root 25 Oct 1 16:04 python3 -> /etc/alternatives/python3
lrwxrwxrwx. 1 root root 31 Nov 21 2019 python3.6 -> /usr/libexec/platform-python3.6
lrwxrwxrwx. 1 root root 32 Nov 21 2019 python3.6m -> /usr/libexec/platform-python3.6m
lrwxrwxrwx. 1 root root 24 Oct 1 16:10 unversioned-python -> /etc/alternatives/python
これで古いAnsibleからでもプレイブックを実行できるようになります。
ただ、この状態だと新しめのバージョンのAnsibleでエラーが発生します。
新しいバージョンのAnsibleのhostsファイルにansible_python_interpreter=/usr/bin/python3
を記載しておくと回避できます。
[hoge-sv]
hoge001.net ansible_python_interpreter=/usr/bin/python3
まとめ
python2系がデフォルトでインストールされていないCentOS8でも、python2をインストールすることでansibleを実行できるようになりました。
基本的にはバージョン上げて対応するのが良いと思います。