Ansible がPython3に対応していたという話

こんにちはKUJIRAです。前回Ansibleについて記事を書いたのですが、対応してましたね・・・。ドキュメントをちゃんと読めておりませんでした。詳しくはここに書いてあります。

Ubuntu16のLTSの最小構成インストール環境などpython3しか入っていない環境でエラーが出て実行できないので勝手にできないものと決めつけてました。(ホントよくない・・・)

さて、python3で実行できるということでやってみましたのその時のメモ。

まずは公式ドキュメントに書いてある通りpython3を頭につけて実行してみます。(Macで)

$ python3 /usr/local/bin/ansible -m ping localhost
Traceback (most recent call last):
  File "/usr/local/bin/ansible", line 43, in 
    import ansible.constants as C
ModuleNotFoundError: No module named 'ansible'
$

はい、エラーが出ましたぁ・・・w。なんか、色々とダメみたいです。とりあえずansibleというモジュールが見つからないと言っています。
ということで試行錯誤した結果以下python3コマンドをpythonで実行できるようにパスを通すという結論に至りました。

早速やってみます。

$ which python
/usr/local/bin/python
$ which python3
/usr/local/bin/python3
$ ls -l which python
lrwxr-xr-x  1 xxx  admin  34 12 24 22:05 /usr/local/bin/python -> ../Cellar/python/2.7.13/bin/python
$ rm -f /usr/local/bin/python
$ ln -s /usr/local/bin/python3 /usr/local/bin/python
$ python --version
Python 3.6.0
$

ではやってみます。

$ ansible -m ping localhost
 [WARNING]: Host file not found: /usr/local/etc/ansible/hosts

 [WARNING]: provided hosts list is empty, only localhost is available

localhost | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
$

はい、できました。インベントリファイルがないとか怒られておりますが、一応pingが打てました。

では次。今度はリモートでpython3を使用する方法です。
今はローカルでしか実行していませんが、リモートでpython3しか入っていない環境ではどうしたらいいのか。いちいち今回みたいにpython3コマンドをpythonで打てるように修正するのはナンセンスです。

ということであれこれ試行錯誤したのですが、結論から言うとインベントリファイルにpythonの実行パスを書くと言うことで解決しました。

[test hosts]
test1 ansible_host=192.168.1.xxx anbile_ssh_user=testuser ansible_ssh_pass=testuserpass ansible_python_interpreter=/usr/bin/python3

こうやって記事に書くとすぐなんですが、これを突き止めるのに丸1日かかった・・・。
公式ドキュメントはちゃんと読まないと行けないね! あと、英語ちゃんと勉強しよう! ということでKUJIRAでした。