概要
Windows端末にWSLからVirtualboxのゲストOS(CentOS7)にansibleコマンドで疎通確認しようとしましたが、python3のエラーによりコマンドが失敗しました。
事象
WSLにてリモートホストに対してAnsibleコマンドを実行して疎通したところ、以下のエラーが出ました。
※例) 192.168.0.25はリモートホストのIPアドレスです。
oot@DESKTOP-0S2U0NI:/usr/bin# ansible 192.168.0.25 -m ping -k
SSH password:
[WARNING]: Skipping plugin (/usr/lib/python3/dist-packages/ansible/plugins/callback/osx_say.py) as it seems to be invalid: No module named 'distutils.spawn'
[WARNING]: Skipping plugin (/usr/lib/python3/dist-packages/ansible/plugins/callback/say.py) as it seems to be invalid: No module named 'distutils.spawn'
192.168.0.25 | FAILED! => {
"changed": false,
"module_stderr": "Shared connection to 192.168.0.25 closed.\r\n",
"module_stdout": "/bin/sh: /usr/bin/python3: No such file or directory\r\n",
"msg": "The module failed to execute correctly, you probably need to set the interpreter.\nSee stdout/stderr for the exact error",
"rc": 127
}
原因
リモートホストにpython3でAnsibleを実行しようとしましたが、リモートホストにpython3がインストールされていないのが原因のエラーでした。
リモートホストにてpython3をインストールする方法
原因はリモートホストにSSH接続するとpython3がインストールされていませんでした。
以下のpython3のバージョンを確認するコマンドを実行しましたが、何も表示されませんでした。
python3 --verion
python3をインストールしました。
yum install python3
[root@localhost ~]# yum install python3
Failed to set locale, defaulting to C
Loaded plugins: fastestmirror
Determining fastest mirrors
* base: ftp.tsukuba.wide.ad.jp
* extras: ftp.tsukuba.wide.ad.jp
* updates: ftp.tsukuba.wide.ad.jp
base | 3.6 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
Resolving Dependencies
--> Running transaction check
---> Package python3.x86_64 0:3.6.8-21.el7_9 will be installed
--> Processing Dependency: python3-libs(x86-64) = 3.6.8-21.el7_9 for package: python3-3.6.8-21.el7_9.x86_64
--> Processing Dependency: python3-setuptools for package: python3-3.6.8-21.el7_9.x86_64
--> Processing Dependency: python3-pip for package: python3-3.6.8-21.el7_9.x86_64
--> Processing Dependency: libpython3.6m.so.1.0()(64bit) for package: python3-3.6.8-21.el7_9.x86_64
--> Running transaction check
---> Package python3-libs.x86_64 0:3.6.8-21.el7_9 will be installed
--> Processing Dependency: libtirpc.so.1()(64bit) for package: python3-libs-3.6.8-21.el7_9.x86_64
---> Package python3-pip.noarch 0:9.0.3-8.el7 will be installed
---> Package python3-setuptools.noarch 0:39.2.0-10.el7 will be installed
--> Running transaction check
---> Package libtirpc.x86_64 0:0.2.4-0.16.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
========================================================================================================================
Package Arch Version Repository Size
========================================================================================================================
Installing:
python3 x86_64 3.6.8-21.el7_9 updates 71 k
Installing for dependencies:
libtirpc x86_64 0.2.4-0.16.el7 base 89 k
python3-libs x86_64 3.6.8-21.el7_9 updates 7.0 M
python3-pip noarch 9.0.3-8.el7 base 1.6 M
python3-setuptools noarch 39.2.0-10.el7 base 629 k
Transaction Summary
========================================================================================================================
Install 1 Package (+4 Dependent packages)
Total download size: 9.3 M
Installed size: 48 M
Is this ok [y/d/N]: y
Downloading packages:
(1/5): python3-3.6.8-21.el7_9.x86_64.rpm | 71 kB 00:00:00
(2/5): libtirpc-0.2.4-0.16.el7.x86_64.rpm | 89 kB 00:00:00
(3/5): python3-pip-9.0.3-8.el7.noarch.rpm | 1.6 MB 00:00:00
(4/5): python3-setuptools-39.2.0-10.el7.noarch.rpm | 629 kB 00:00:01
(5/5): python3-libs-3.6.8-21.el7_9.x86_64.rpm | 7.0 MB 00:00:02
------------------------------------------------------------------------------------------------------------------------
Total 4.0 MB/s | 9.3 MB 00:00:02
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : libtirpc-0.2.4-0.16.el7.x86_64 1/5
Installing : python3-setuptools-39.2.0-10.el7.noarch 2/5
Installing : python3-pip-9.0.3-8.el7.noarch 3/5
Installing : python3-3.6.8-21.el7_9.x86_64 4/5
Installing : python3-libs-3.6.8-21.el7_9.x86_64 5/5
Verifying : libtirpc-0.2.4-0.16.el7.x86_64 1/5
Verifying : python3-libs-3.6.8-21.el7_9.x86_64 2/5
Verifying : python3-3.6.8-21.el7_9.x86_64 3/5
Verifying : python3-setuptools-39.2.0-10.el7.noarch 4/5
Verifying : python3-pip-9.0.3-8.el7.noarch 5/5
Installed:
python3.x86_64 0:3.6.8-21.el7_9
Dependency Installed:
libtirpc.x86_64 0:0.2.4-0.16.el7 python3-libs.x86_64 0:3.6.8-21.el7_9 python3-pip.noarch 0:9.0.3-8.el7
python3-setuptools.noarch 0:39.2.0-10.el7
Complete!
[root@localhost ~]#
python3のインストールを確認しました。
[root@localhost ~]# python3 --version
Python 3.6.8
[root@localhost ~]#
再度ローカル端末からWSLを開き、リモートホストに対してansibleでpingを実行したら成功しました。
root@DESKTOP-0S2U0NI:/usr/bin# ansible 192.168.0.25 -m ping -k
SSH password:
[WARNING]: Skipping plugin (/usr/lib/python3/dist-packages/ansible/plugins/callback/osx_say.py) as it seems to be invalid: No module named 'distutils.spawn'
[WARNING]: Skipping plugin (/usr/lib/python3/dist-packages/ansible/plugins/callback/say.py) as it seems to be invalid: No module named 'distutils.spawn'
192.168.0.25 | SUCCESS => {
"changed": false,
"ping": "pong"
}
リモートホストにてpython2系でAnsible実行する方法
リモートホストにpython3のパッケージをインストール出来ない場合は、
python2でAnsible動作させる必要があります。
Windows端末のWSLにてpython2系のインストールをする
apt install python
例 python2.7を今回リンク先名「/usr/bin/python2」にリンクさせました。
in -snf 元のデータ リンク先名
ln -snf /usr/bin/python2.7 /usr/bin/python2
以下のインベントリファイルを開き、Ansible2で動作させる設定を入れました。
以下のサイトを参考にしました。
https://iret.media/32424
vi /etc/ansible/hosts
[group1]
192.168.0.25 ansible_python_interpreter=/usr/bin/python2
成功しました。
root@DESKTOP-0S2U0NI:/etc/ansible# ansible 192.168.0.25 -m ping -k
SSH password:
[WARNING]: Skipping plugin (/usr/lib/python3/dist-packages/ansible/plugins/callback/osx_say.py) as it seems to be
invalid: No module named 'distutils.spawn'
[WARNING]: Skipping plugin (/usr/lib/python3/dist-packages/ansible/plugins/callback/say.py) as it seems to be invalid:
No module named 'distutils.spawn'
192.168.0.25 | SUCCESS => {
"changed": false,
"ping": "pong"
}
[WARNING]: Skipping plugin (/usr/lib/python3/dist-packages/ansible/plugins/callback/osx_say.py) as it seems to be
invalid: No module named 'distutils.spawn'
[WARNING]: Skipping plugin (/usr/lib/python3/dist-packages/ansible/plugins/callback/say.py) as it seems to be invalid:
上記ワーニングは出ますが現在調査しています。ワーニングのため、動作には影響ないです。