その場合はもちろんansibleのモジュール(例えばping
モジュール)もリモートサーバでは実行できないです。
ansible -i hosts all -m ping
x.x.x.1 | FAILED! => {
"changed": false,
"failed": true,
"module_stderr": "",
"module_stdout": "bash: /usr/bin/python: No such file or directory\r\n",
"msg": "MODULE FAILURE",
"parsed": false
}
x.x.x.2 | FAILED! => {
"changed": false,
"failed": true,
"module_stderr": "",
"module_stdout": "bash: /usr/bin/python: No such file or directory\r\n",
"msg": "MODULE FAILURE",
"parsed": false
}
ググってみたら下記のように、ansibleのraw
モジュールを使用して、test -e /usr/bin/python || (apt -y update && apt install -y python)
コマンドを実行すれば対象サーバにpython
パッケージがインストールされます:
ansible -i hosts all -m raw -a "test -e /usr/bin/python || (apt -y update && apt install -y python)"
実行終了後ping
モジュールが使えるようになります:
ansible -i hosts all -m ping
x.x.x.1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
x.x.x.2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
このコマンドはubuntu16.04を前提に書いています。他のLinuxも同じノリでいけるはずです。