前の記事で、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.