Ubuntu16.04にAnsibleのインストールはできたけど、こんどはAnsibleを実行しようとしてはまったこと
1. インベントリファイルを作成
hostsというファイル名を作成して、「node1」というエイリアス名で制御対象のマシン情報を定義する(実際には\は記入しないで1行で書いておくべきとのこと)。
2. ansibleコマンドでnode1に接続できるか確認する
手順1で作成したhostsファイルを-iオプションで指定して、pingモジュールを実行する
すると結果は以下エラーとなった
「/usr/bin/python: not found」とある。Pythonが見つからないと言っている。そんな馬鹿な。
試しにSSHで接続して/usr/bin/pythonを実行してみる。
ほんまや
調べてみると、Ubuntuは16.04からPython3をデフォルトとなりPython2.7はインストールされていない。ただし/usr/bin/pythonがPython3となるわけではなく、/usr/bin/python3で起動する。よってインストールした段階では/usr/bin/pythonは存在しない、ということらしい。で、AnsibleはPythonで実装されているので、おそらく内部ではPythonスクリプトを対象マシン上で実行するのだろう。その時/usr/bin/pythonを指定しているようだ。
参照:LinuxディストリビューションにおけるPython 3デフォルト化の流れ [http://orangain.hatenablog.com/entry/python3-as-default]
node1にPython2.7をインストールすれば動くんだけど、それは負けな気がする。
ドキュメントのPython 3 Supportを眺めていると「ansible_python_interpreter」という設定があることを発見。手順1で作成したhostsファイルに以下を追加
そして再度pingモジュールを実行してみる
成功した
1. インベントリファイルを作成
hostsというファイル名を作成して、「node1」というエイリアス名で制御対象のマシン情報を定義する(実際には\は記入しないで1行で書いておくべきとのこと)。
node1 \ ansible_ssh_host=[対象のホスト名かIPアドレス]\ ansible_ssh_port=22\ ansible_ssh_user=[制御対象のログインユーザー名]\ ansible_ssh_private_key_file=[SSH秘密鍵]
2. ansibleコマンドでnode1に接続できるか確認する
手順1で作成したhostsファイルを-iオプションで指定して、pingモジュールを実行する
> ansible node1 -i hosts -m ping
すると結果は以下エラーとなった
node1 | FAILED! => {
"changed": false,
"failed": true,
"module_stderr": "Shared connection to 192.168.56.110 closed.\r\n",
"module_stdout": "/bin/sh: 1: /usr/bin/python: not found\r\n",
"msg": "MODULE FAILURE",
"rc": 0
}
「/usr/bin/python: not found」とある。Pythonが見つからないと言っている。そんな馬鹿な。
試しにSSHで接続して/usr/bin/pythonを実行してみる。
-bash: /usr/bin/python: そのようなファイルやディレクトリはありません
ほんまや
調べてみると、Ubuntuは16.04からPython3をデフォルトとなりPython2.7はインストールされていない。ただし/usr/bin/pythonがPython3となるわけではなく、/usr/bin/python3で起動する。よってインストールした段階では/usr/bin/pythonは存在しない、ということらしい。で、AnsibleはPythonで実装されているので、おそらく内部ではPythonスクリプトを対象マシン上で実行するのだろう。その時/usr/bin/pythonを指定しているようだ。
参照:LinuxディストリビューションにおけるPython 3デフォルト化の流れ [http://orangain.hatenablog.com/entry/python3-as-default]
node1にPython2.7をインストールすれば動くんだけど、それは負けな気がする。
ドキュメントのPython 3 Supportを眺めていると「ansible_python_interpreter」という設定があることを発見。手順1で作成したhostsファイルに以下を追加
node1 \
ansible_ssh_host=[対象のホスト名かIPアドレス]\
ansible_ssh_port=22\
ansible_ssh_user=[制御対象のログインユーザー名]\
ansible_ssh_private_key_file=[SSH秘密鍵]\
ansible_python_interpreter=/usr/bin/python3
そして再度pingモジュールを実行してみる
> ansible node1 -i hosts -m ping
node1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
成功した
コメント
コメントを投稿