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, inimport 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でした。