このシンプルなAnsibleプレイブックを実行すると:
- name: EC2 Test Example
hosts: localhost
connection: local
gather_facts: False
tasks:
- name: EC2 Instance
ec2:
# Amazon EC2 key pair name
key_name: my-key-pair
# Amazon EC2 Security Group
group: my-security-group
instance_type: t2.micro
# Latest from https://wiki.debian.org/Cloud/AmazonEC2Image/Jessie
image: AMI-221ea342
wait: yes
register: ec2
venv/bin/ansible-playbook -i localhost, playbook.yml
:
PLAY [EC2 Test Example] ********************************************************
TASK [EC2 Instance] ************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "failed": true, "msg": "boto required for this module"}
to retry, use: --limit @/Users/admin/temp/ansec2/playbook.retry
PLAY RECAP *********************************************************************
localhost : ok=0 changed=0 unreachable=0 failed=1
したがって、明らかに、私が使用しているvenvとデフォルトのシステムPythonにbotoがインストールされています。
➜ ansec2 venv/bin/pip list
Package Version
--------------- --------
ansible 2.2.1.0
boto 2.45.0
boto3 1.4.4
botocore 1.5.4
...
私はいくつかの同様の投稿を読みましたが、有効な解決策が見当たりません。
問題の根本的な原因は-i localhost,
ハックです。 Ansibleではもう使用する必要はありません。
あなたはただ走ることができます:
ansible-playbook playbook.yml
そして、プレイでconnection: local
を使用すると、Ansibleはvenvによって設定されたPython実行可能ファイルを使用します。
-i localhost,
ハックを使用すると、Ansibleはデフォルトの/usr/bin/python
を呼び出します。
この場合でも、ansible_python_interpreter
パラメーターを追加して、Ansibleにこの特定の環境を使用するように指示できます。
ansible-playbook -i localhost, playbook.yml --extra-vars "ansible_python_interpreter=/Users/admin/temp/ansec2/venv/bin/python"
しかし、それは避けて、最初の方法を使用する必要があると思います。