web-dev-qa-db-fra.com

Ansible ec2: "boto requis pour ce module"

Lorsque je lance ce simple playbook 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

Je cours avec 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

Alors évidemment, j'ai boto installé dans le venv que j'utilise ainsi que mon système par défaut Python:

➜  ansec2 venv/bin/pip list
Package         Version 
--------------- --------
ansible         2.2.1.0 
boto            2.45.0  
boto3           1.4.4   
botocore        1.5.4   
...

J'ai lu quelques articles similaires et je ne vois pas de solution de travail.

13
clay

La cause première de votre problème est le -i localhost, pirater. Vous n'avez plus besoin de l'utiliser dans Ansible.

Vous pouvez simplement exécuter:

ansible-playbook playbook.yml

Et avec connection: local dans le jeu Ansible utilisera l'exécutable Python défini par venv.


Lorsque vous utilisez le -i localhost, hack, Ansible appelle sa valeur par défaut /usr/bin/python.

Dans ce cas, vous pouvez toujours ajouter le ansible_python_interpreter paramètre pour indiquer à Ansible d'utiliser cet environnement spécifique:

ansible-playbook -i localhost, playbook.yml --extra-vars "ansible_python_interpreter=/Users/admin/temp/ansec2/venv/bin/python" 

Mais je pense que vous devriez l'éviter et utiliser la première méthode.

10
techraf