CentOS8のサーバーに古いAnsibleでつないだ話


最近になってようやく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を実行できるようになりました。
基本的にはバージョン上げて対応するのが良いと思います。