インフラエンジニアbacchiのわかったことまとめ

bacchi.me

set_factモジュールでpythonのバージョンを指定すると、後続のyumモジュールを使うタスクが失敗する可能性がある

前の記事で、pyenv で入れた python の pip で pip モジュールを入れる際に set_fact モジュールを使う playbook を紹介しましたが、後続のタスクで yum モジュールを使う場合、下記のようなエラーが発生する可能性があります。

TASK: [pgbouncer_yum | yum name={{ item }} state=present ***
failed: [ansible-test] => (item=kernel-devel,xmlto,libevent-devel) => {"failed": true, "item": "kernel-devel,xmlto,libevent-devel", "parsed": false}
SUDO-SUCCESS-allmfvfkogtinpiriglgvzfxsvzexnuw
Traceback (most recent call last):
  File "/home/ansible/.ansible/tmp/ansible-tmp-1501597851.95-167182670634805/yum", line 27, in 
  import yum
ImportError: No module named yum

このエラーが発生してしまう場合、pip モジュールのインストールタスクを下記のようにしてやればよいです。

- pip: name={{ item.name }} version={{ item.version }} executable=/root/.pyenv/shims/pip

公式ドキュメントでも複数バージョンの python が入っていて、特定のバージョンの pip を実行したい場合は、excutable オプションで実行ファイルのパスを指定しようと書いていました。

http://docs.ansible.com/ansible/latest/pip_module.html

The explicit executable or a pathname to the executable to be used to run pip for a specific version of Python installed in the system.
For example pip-3.3, if there are both Python 2.7 and 3.3 installations in the system and you want to run pip for the Python 3.3 installation.
It cannot be specified together with the 'virtualenv' parameter (added in 2.1).
By default, it will take the appropriate version for the python interpreter use by ansible, e.g. pip3 on python 3, and pip2 or pip on python 2.

  • B!