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.
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.