2017年7月19日

Ubuntu 16.04でAnsibleを始める時にはまったこと(Pyhon3編)

Ubuntu16.04にAnsibleのインストールはできたけど、こんどはAnsibleを実行しようとしてはまったこと

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"
}

成功した

0 件のコメント:

コメントを投稿