web-dev-qa-db-ja.com

Ansible ec2:「このモジュールにはbotoが必要です」

このシンプルな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   
...

私はいくつかの同様の投稿を読みましたが、有効な解決策が見当たりません。

13
clay

問題の根本的な原因は-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" 

しかし、それは避けて、最初の方法を使用する必要があると思います。

10
techraf