Ansible: Échec de l'importation de docker-py pour le module docker_container

Créé le 20 janv. 2017  ·  64Commentaires  ·  Source: ansible/ansible

TYPE DE PROBLEME

  • Rapport d'erreur
NOM DU COMPOSANT


docker_container

VERSION ANSIBLE
- Collez la sortie textuelle de «ansible --version» entre guillemets ci-dessous
ansible 2.3.0 (devel 216e2c8813) last updated 2017/01/20 09:22:29 (GMT +000)
ansible 2.2.0.0 (detached HEAD cdec853e37) last updated 2017/01/20 09:25:31 (GMT +000)
CONFIGURATION

Rien n'a changé

OS / ENVIRONNEMENT


Machine Linux1 3.16.0-4-amd64 # 1 SMP Debian 3.16.36-1 + deb8u1 (03/09/2016) x86_64 GNU / Linux

liste de pip:

pip list
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
backports.ssl-match-hostname (3.5.0.1)
cached-property (1.3.0)
chardet (2.3.0)
colorama (0.3.7)
defusedxml (0.4.1)
docker (2.0.2)
docker-compose (1.10.0)
docker-py (1.10.6)
docker-pycreds (0.2.1)
dockerpty (0.4.1)
docopt (0.6.2)
docutils (0.12)
enum34 (1.1.6)
functools32 (3.2.3.post2)
iotop (0.6)
ipaddress (1.0.18)
jsonschema (2.5.1)
Pillow (2.6.1)
pip (9.0.1)
Pygments (2.0.1)
python-apt (0.9.3.12)
python-debian (0.1.27)
python-debianbts (1.11)
PyYAML (3.12)
reportbug (6.6.3)
requests (2.11.1)
roman (2.0.0)
setuptools (5.5.1)
six (1.10.0)
SOAPpy (0.12.22)
texttable (0.8.7)
websocket-client (0.40.0)
wstools (0.4.3)

python --version
Python 2.7.9

infos docker

Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 1.12.3
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 0
 Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge null overlay host
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Security Options:
Kernel Version: 3.16.0-4-amd64
Operating System: Debian GNU/Linux 8 (jessie)
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 1.963 GiB
Name: machine1
ID: PD6F:VQDI:VAK4:O3YU:PWDT:HFAG:T3Z4:FNP5:QLT7:C3TO:7OKS:OODH
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
WARNING: No memory limit support
WARNING: No swap limit support
WARNING: No kernel memory limit support
WARNING: No oom kill disable support
WARNING: No cpu cfs quota support
WARNING: No cpu cfs period support
Insecure Registries:
 127.0.0.0/8
SOMMAIRE

Lorsque le module docker_container est utilisé, il échoue à chaque fois avec

"Failed to import docker-py - cannot import name Client. Try `pip install docker-py`"
ÉTAPES POUR REPRODUIRE
- Pour les bogues, montrez exactement comment reproduire le problème, en utilisant un cas de test minimal. Pour les nouvelles fonctionnalités, montrez comment la fonctionnalité serait utilisée.

  - docker_container:
      image: hello-world
      name: hello
- Vous pouvez également coller des liens gist.github.com pour des fichiers plus volumineux
RÉSULTATS ATTENDUS

L'image est exécutée.

RÉSULTATS ACTUELS
- Que s'est-il réellement passé? Si possible, exécutez avec une verbosité supplémentaire (-vvvv)

TASK [docker-registry : docker_container] **************************************
task path: /vagrant/service-playbooks/roles/docker-registry/tasks/registry-server.yml:56
Using module file /home/vagrant/ansible/lib/ansible/modules/core/cloud/docker/docker_container.py
<192.168.77.201> ESTABLISH SSH CONNECTION FOR USER: deploy
<192.168.77.201> SSH: EXEC ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=deploy -o ConnectTimeout=10 -o ControlPath=/home/vagrant/.ansible/cp/ansible-ssh-%h-%p-%r 192.168.77.201 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo $HOME/.ansible/tmp/ansible-tmp-1484904632.51-163570270155817 `" && echo ansible-tmp-1484904632.51-163570270155817="` echo $HOME/.ansible/tmp/ansible-tmp-1484904632.51-163570270155817 `" ) && sleep 0'"'"''
<192.168.77.201> PUT /tmp/tmpeXfDvf TO /home/deploy/.ansible/tmp/ansible-tmp-1484904632.51-163570270155817/docker_container.py
<192.168.77.201> SSH: EXEC sftp -b - -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=deploy -o ConnectTimeout=10 -o ControlPath=/home/vagrant/.ansible/cp/ansible-ssh-%h-%p-%r '[192.168.77.201]'
<192.168.77.201> ESTABLISH SSH CONNECTION FOR USER: deploy
<192.168.77.201> SSH: EXEC ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=deploy -o ConnectTimeout=10 -o ControlPath=/home/vagrant/.ansible/cp/ansible-ssh-%h-%p-%r 192.168.77.201 '/bin/sh -c '"'"'chmod u+x /home/deploy/.ansible/tmp/ansible-tmp-1484904632.51-163570270155817/ /home/deploy/.ansible/tmp/ansible-tmp-1484904632.51-163570270155817/docker_container.py && sleep 0'"'"''
<192.168.77.201> ESTABLISH SSH CONNECTION FOR USER: deploy
<192.168.77.201> SSH: EXEC ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=deploy -o ConnectTimeout=10 -o ControlPath=/home/vagrant/.ansible/cp/ansible-ssh-%h-%p-%r -tt 192.168.77.201 '/bin/sh -c '"'"'/usr/bin/python /home/deploy/.ansible/tmp/ansible-tmp-1484904632.51-163570270155817/docker_container.py; rm -rf "/home/deploy/.ansible/tmp/ansible-tmp-1484904632.51-163570270155817/" > /dev/null 2>&1 && sleep 0'"'"''
fatal: [machine_1]: FAILED! => {
    "changed": false,
    "failed": true,
    "invocation": {
        "module_args": {
            "api_version": null,
            "blkio_weight": null,
            "cacert_path": null,
            "capabilities": null,
            "cert_path": null,
            "cleanup": false,
            "command": null,
            "cpu_period": null,
            "cpu_quota": null,
            "cpu_shares": null,
            "cpuset_cpus": null,
            "cpuset_mems": null,
            "debug": false,
            "detach": true,
            "devices": null,
            "dns_opts": null,
            "dns_search_domains": null,
            "dns_servers": null,
            "docker_host": null,
            "entrypoint": null,
            "env": null,
            "env_file": null,
            "etc_hosts": null,
            "exposed_ports": null,
            "filter_logger": false,
            "force_kill": false,
            "groups": null,
            "hostname": null,
            "ignore_image": false,
            "image": "hello-world",
            "interactive": false,
            "ipc_mode": null,
            "keep_volumes": true,
            "kernel_memory": null,
            "key_path": null,
            "kill_signal": null,
            "labels": null,
            "links": null,
            "log_driver": null,
            "log_options": null,
            "mac_address": null,
            "memory": "0",
            "memory_reservation": null,
            "memory_swap": null,
            "memory_swappiness": null,
            "name": "hello",
            "network_mode": null,
            "networks": null,
            "oom_killer": null,
            "oom_score_adj": null,
            "paused": false,
            "pid_mode": null,
            "privileged": false,
            "published_ports": null,
            "pull": false,
            "purge_networks": false,
            "read_only": false,
            "recreate": false,
            "restart": false,
            "restart_policy": null,
            "restart_retries": null,
            "security_opts": null,
            "shm_size": null,
            "ssl_version": null,
            "state": "started",
            "stop_signal": null,
            "stop_timeout": null,
            "timeout": null,
            "tls": null,
            "tls_hostname": null,
            "tls_verify": null,
            "trust_image_content": false,
            "tty": false,
            "ulimits": null,
            "user": null,
            "uts": null,
            "volume_driver": null,
            "volumes": null,
            "volumes_from": null
        },
        "module_name": "docker_container"
    },
    "msg": "Failed to import docker-py - cannot import name Client. Try `pip install docker-py`"
}
    to retry, use: --limit @/vagrant/service-playbooks/microservice-infrastructure-no-elastic.retry
affects_2.2 bug cloud docker module

Commentaire le plus utile

docker-py est juste le nom du projet. Il installe un package python nommé docker. Vous devriez donc exécuter:

# python
Python 2.7.6 (default, Oct 26 2016, 20:30:19) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import docker
>>> print(docker.version)
1.10.6
>>>

La rétrogradation de docker-compose ne supprimera pas le package docker du projet docker qui est installé sur votre serveur en fonction de votre sortie pip.
Ce qui suit devrait résoudre votre problème:

pip uninstall docker
pip uninstall docker-py
pip uninstall docker-compose
pip install docker-compose==1.9.0

Tous les 64 commentaires

@guenhter Il semble que la tâche soit ssh'ing à 192.168.77.201 en tant qu'utilisateur "deploy". La sortie "pip list" dans la description a-t-elle été collectée comme cet utilisateur sur cet hôte?

ssh [email protected] 'python -c "import docker-py"'

besoins_info

@guenhter
Cela est dû à votre version de docker-compose.
Le package docker-py a été renommé en docker dans la version 2.0 (https://github.com/docker/docker-py/releases/tag/2.0.0). Et dans cette version, Docker.Client a été renommé en docker.APIClient.
Docker-compose 1.10+ nécessite désormais docker au lieu de docker-py. Et en raison de son nom, le package docker est avant celui docker-py dans PYTHONPATH, ce qui entraîne l'erreur d'importation.
Une solution de contournement consiste à rétrograder votre version de docker-compose à 1.9.0 au moment où le module Ansible docker_container met à jour ses dépendances de docker-py vers docker.

@jctanner
La sortie de la liste pip provenait de cet hôte. Voir quelques autres commandes ci-dessous:

ssh [email protected] 'python --version'
--> Python 2.7.9

ssh [email protected] 'python -c "import docker-py"'

--> File "<string>", line 1
    import docker-py
                 ^
SyntaxError: invalid syntax



ssh [email protected] 'pip list'
-->DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
backports.ssl-match-hostname (3.5.0.1)
cached-property (1.3.0)
chardet (2.3.0)
colorama (0.3.7)
defusedxml (0.4.1)
docker (2.0.2)
docker-compose (1.10.0)
docker-py (1.10.6)
docker-pycreds (0.2.1)
dockerpty (0.4.1)
docopt (0.6.2)
docutils (0.12)
enum34 (1.1.6)
functools32 (3.2.3.post2)
iotop (0.6)
ipaddress (1.0.18)
jsonschema (2.5.1)
Pillow (2.6.1)
pip (9.0.1)
Pygments (2.0.1)
python-apt (0.9.3.12)
python-debian (0.1.27)
python-debianbts (1.11)
PyYAML (3.12)
reportbug (6.6.3)
requests (2.11.1)
roman (2.0.0)
setuptools (5.5.1)
six (1.10.0)
SOAPpy (0.12.22)
texttable (0.8.7)
websocket-client (0.40.0)
wstools (0.4.3)

@jpiron
J'ai essayé de rétrograder docker-compse -> même erreur
La désinstallation n'a pas non plus aidé.

docker-py est juste le nom du projet. Il installe un package python nommé docker. Vous devriez donc exécuter:

# python
Python 2.7.6 (default, Oct 26 2016, 20:30:19) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import docker
>>> print(docker.version)
1.10.6
>>>

La rétrogradation de docker-compose ne supprimera pas le package docker du projet docker qui est installé sur votre serveur en fonction de votre sortie pip.
Ce qui suit devrait résoudre votre problème:

pip uninstall docker
pip uninstall docker-py
pip uninstall docker-compose
pip install docker-compose==1.9.0

@jpiron
Cela fonctionne parfaitement bien. Merci!

Mais l'OMI, ce n'est qu'une solution de contournement pour que les choses continuent de fonctionner.
Néanmoins, cela devrait-il être corrigé pour éviter de rétrograder docker-compose.

des nouvelles à ce sujet?

J'obtiens la même erreur en essayant d'utiliser docker_image. Dois-je ouvrir un nouveau numéro ou s'agit-il exactement du même problème?


- name: Test docker install by pulling hello world image
      docker_image:
        name: hello-world

fatal: [devhost]: FAILED! => {"changed": false, "failed": true, "msg": "Failed to import docker-py - cannot import name Client. Try `pip install docker-py`"}

pip list | grep docker

docker (2.0.2)
docker-compose (1.9.0)
docker-py (1.10.6)
docker-pycreds (0.2.1)
dockerpty (0.4.1)

Cela ne fonctionnera pas avec docker et docker-py installés. vous devez supprimer docker et réinstaller docker-py:

pip uninstall docker
pip install --ignore-installed docker-py

Cela devrait résoudre votre problème.

Ce commit e2a1ce2916e9b87fe1ad4a1011c04ef8d2faf046 devrait résoudre le problème. Jusqu'à sa sortie, je suppose que nous nous en tenons à docker-compose <= 1.9.0.

Nous avons dû supprimer docker-compose 1.10 (pip-version), et toutes ses dépendances (principalement module docker). Nous avons fait une différence entre un état propre et un état "pollué" (avec docker-compose 1.10 dans pip installé): pour revenir en arrière, nous avons fait:
for pipPackage in cached-property colorama docker docker-compose dockerpty docopt functools32 jsonschema texttable docker-py ; do sudo pip uninstall -y ${pipPackage} 2>&1 | logger -i -t TestRemove ; done
Ensuite, nous avons installé docker-compose 1.10 avec la méthode curl (voir doc officiel). Aucun problème avec la ressource docker_container. Il y a un problème avec docker_service, car il a besoin de docker-compose en python à la place. Mais nous n'utilisons plus docker_service. Les dépendances de pip sont un enfer que nous voulons éviter à partir de maintenant !! C'est la meilleure solution que nous ayons pour le moment.

Ce commit e2a1ce2 devrait résoudre le problème.

Ce patch n'est pas présent dans Ansible 2.2.1.0 .

J'ai essayé ça aujourd'hui avec tags/v2.2.2.0-0.2.rc2
mais j'ai toujours le problème:

deploy<strong i="8">@machine1</strong>:/home/vagrant$ pip list
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
backports.ssl-match-hostname (3.5.0.1)
cached-property (1.3.0)
chardet (2.3.0)
colorama (0.3.7)
defusedxml (0.4.1)
docker (2.1.0)
docker-compose (1.11.2)
docker-py (1.10.6)
docker-pycreds (0.2.1)
dockerpty (0.4.1)
docopt (0.6.2)
docutils (0.12)
enum34 (1.1.6)
functools32 (3.2.3.post2)
iotop (0.6)
ipaddress (1.0.18)
jsonschema (2.6.0)
Pillow (2.6.1)
pip (9.0.1)
Pygments (2.0.1)
python-apt (0.9.3.12)
python-debian (0.1.27)
python-debianbts (1.11)
PyYAML (3.12)
reportbug (6.6.3)
requests (2.13.0)
roman (2.0.0)
setuptools (5.5.1)
six (1.10.0)
SOAPpy (0.12.22)
texttable (0.8.7)
websocket-client (0.40.0)
wstools (0.4.3)

deploy<strong i="9">@machine1</strong>:/home/vagrant$ docker-compose
ERROR: Dependency conflict: an older version of the 'docker-py' package is polluting the namespace. Run the following command to remedy the issue:
pip uninstall docker docker-py; pip install docker

En revanche, lorsque docker-py n'est pas installé ( pip uninstall docker-py ), Anible se plaint:

Failed to import docker-py - No module named docker. Try `pip install docker-py`

@guenhter ,
Installez Ansible 2.3.0 (devel): pip install git+git://github.com/ansible/ansible.git@devel
Il inclut désormais e2a1ce2916e9b87fe1ad4a1011c04ef8d2faf046 qui corrige le problème de compatibilité.

Quand cela sera-t-il disponible dans une version?

des nouvelles à ce sujet?

Comme @viossat l'a dit, e2a1ce2916e9b87fe1ad4a1011c04ef8d2faf046 est inclus dans la version 2.3.0.
Cela résout le problème même avec docker et les anciens packages docker-py installés. Vous pouvez l'essayer:

virtualenv -p /usr/bin/python2.7 /tmp/venv
source /tmp/venv/bin/activate
pip install https://github.com/ansible/ansible/archive/v2.3.0.0-0.1.rc1.zip
pip install docker docker-py
ansible localhost -m docker_container -a "name=foo image=busybox"

La prise en charge des nouvelles bibliothèques de docker est incluse dans la version Ansible 2.3. Puisqu'il s'agit (IMO) d'une fonctionnalité pour ajouter une nouvelle prise en charge de docker-py v2, je ne pense pas que cela rentre dans notre politique de backport.

Fonctionne très bien avec ansible 2.3
Je devais juste m'assurer que docker-py n'est plus installé mais que docker est disponible (via pip).

Merci beaucoup!

Comme le dit @guenhter . Cela fonctionne avec Ansible 2.3 si vous supprimez l'ancien module docker-py

- name: remove docker-py
  pip:
    name: docker-py
    state: absent

- name: Install docker python module
  pip:
    name: "docker-compose==1.12.0"

@martonsz Bonjour j'ai Ansible 2.3 mais

 - name: Test docker install by pulling hello world image
   docker_container:
     name: hello-world

ne fonctionne pas pour moi.

liste de pip:

backports.ssl-match-hostname (3.5.0.1)
cached-property (1.3.0)
cffi (1.5.2)
chardet (2.3.0)
click (6.7)
colorama (0.3.7)
configobj (5.0.6)
Django (1.9.4)
django-debug-toolbar (1.4)
docker (2.2.1)
docker-compose (1.12.0)
docker-pycreds (0.2.1)
dockerpty (0.4.1)
docopt (0.6.2)
html5lib (0.999)
jsonschema (2.6.0)
misaka (2.0.0)
mycli (1.8.1)
mysqlclient (1.3.7)
okapi2 (0.0.1)
pip (8.1.1)
prompt-toolkit (1.0.13)
pycparser (2.14)
pycrypto (2.6.1)
Pygments (2.2.0)
pygobject (3.14.0)
PyMySQL (0.7.10)
python-apt (0.9.3.12)
PyYAML (3.12)
requests (2.11.1)
setuptools (5.5.1)
six (1.8.0)
sqlparse (0.2.1)
texttable (0.8.8)
unattended-upgrades (0.1)
urllib3 (1.9.1)
uWSGI (2.0.12)
virtualenv (15.0.1)
wcwidth (0.1.7)
websocket-client (0.40.0)

Erreur:

TASK [confluence : Test docker install by pulling hello world image] *************************************
fatal: [web1-vultr]: FAILED! => {"changed": false, "failed": true, "msg": "Failed to import docker-py - No module named docker. Try `pip install docker-py`"}
        to retry, use: --limit @/home/martin/Work/ansible/site.retry

ansible --version:

ansible 2.3.0.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = Default w/o overrides
  python version = 2.7.12 (default, Nov 19 2016, 06:48:10) [GCC 5.4.0 20160609]

@Applemann J'avais installé "docker-py" auparavant - je devais pip uninstall docker; pip install docker et puis ça a commencé à fonctionner ... aucune idée de ce qui s'est passé.

@matti Je l'ai résolu en ajoutant le paramètre -e 'ansible_python_interpreter=/usr/bin/python3' quand je lance ansible-playbook.
Parce que sur le serveur utilise python3, mais sur mon hôte local était python 2.7 par défaut

J'ai toujours ce problème avec 2.3.0.0.

Ont documenté sur Stack Overflow ici: http://stackoverflow.com/a/43975079/1064619

Étapes à suivre pour reproduire:

J'ai créé un nouveau VirtualEnv:

zoidberg:foley chris$ virtualenv ansible-test
New python executable in /Users/chris/src/hc/foley/ansible-test/bin/python2.7
Also creating executable in /Users/chris/src/hc/foley/ansible-test/bin/python
Installing setuptools, pip, wheel...done.

Installé Ansible:

(ansible-test) zoidberg:foley chris$ pip install ansible
Collecting ansible
Collecting pycrypto>=2.6 (from ansible)
Collecting paramiko (from ansible)
  Using cached paramiko-2.1.2-py2.py3-none-any.whl
Collecting jinja2 (from ansible)
  Using cached Jinja2-2.9.6-py2.py3-none-any.whl
Requirement already satisfied: setuptools in ./ansible-test/lib/python2.7/site-packages (from ansible)
Collecting PyYAML (from ansible)
Collecting cryptography>=1.1 (from paramiko->ansible)
  Using cached cryptography-1.8.1-cp27-cp27m-macosx_10_10_intel.whl
Collecting pyasn1>=0.1.7 (from paramiko->ansible)
  Using cached pyasn1-0.2.3-py2.py3-none-any.whl
Collecting MarkupSafe>=0.23 (from jinja2->ansible)
Requirement already satisfied: six>=1.6.0 in ./ansible-test/lib/python2.7/site-packages (from setuptools->ansible)
Requirement already satisfied: packaging>=16.8 in ./ansible-test/lib/python2.7/site-packages (from setuptools->ansible)
Requirement already satisfied: appdirs>=1.4.0 in ./ansible-test/lib/python2.7/site-packages (from setuptools->ansible)
Collecting idna>=2.1 (from cryptography>=1.1->paramiko->ansible)
  Using cached idna-2.5-py2.py3-none-any.whl
Collecting enum34 (from cryptography>=1.1->paramiko->ansible)
  Using cached enum34-1.1.6-py2-none-any.whl
Collecting ipaddress (from cryptography>=1.1->paramiko->ansible)
  Using cached ipaddress-1.0.18-py2-none-any.whl
Collecting cffi>=1.4.1 (from cryptography>=1.1->paramiko->ansible)
  Using cached cffi-1.10.0-cp27-cp27m-macosx_10_6_intel.whl
Collecting asn1crypto>=0.21.0 (from cryptography>=1.1->paramiko->ansible)
  Using cached asn1crypto-0.22.0-py2.py3-none-any.whl
Requirement already satisfied: pyparsing in ./ansible-test/lib/python2.7/site-packages (from packaging>=16.8->setuptools->ansible)
Collecting pycparser (from cffi>=1.4.1->cryptography>=1.1->paramiko->ansible)
Installing collected packages: pycrypto, idna, enum34, ipaddress, pycparser, cffi, asn1crypto, cryptography, pyasn1, paramiko, MarkupSafe, jinja2, PyYAML, ansible
Successfully installed MarkupSafe-1.0 PyYAML-3.12 ansible-2.3.0.0 asn1crypto-0.22.0 cffi-1.10.0 cryptography-1.8.1 enum34-1.1.6 idna-2.5 ipaddress-1.0.18 jinja2-2.9.6 paramiko-2.1.2 pyasn1-0.2.3 pycparser-2.17 pycrypto-2.6.1

Vérifié la version:

(ansible-test) zoidberg:foley chris$ ansible --version
ansible 2.3.0.0
  config file =
  configured module search path = Default w/o overrides
  python version = 2.7.13 (default, May 14 2017, 22:38:03) [GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)]

Docker et docker-py installés:

(ansible-test) zoidberg:foley chris$ pip list | grep docker
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
docker (2.0.0)
docker-py (1.10.6)
docker-pycreds (0.2.1)

Mais j'obtiens toujours la même erreur:

(ansible-test) zoidberg:foley chris$ ansible-playbook -i inventory/local build.yml -vvvv
No config file found; using defaults
Loading callback plugin default of type stdout, v2.0 from /Users/chris/src/hc/foley/ansible-test/lib/python2.7/site-packages/ansible/plugins/callback/__init__.pyc

PLAYBOOK: build.yml **********************************************************************************************************************************************************
1 plays in build.yml

PLAY [Build foley docker images] *********************************************************************************************************************************************
META: ran handlers

TASK [docker_image] **********************************************************************************************************************************************************
task path: /Users/chris/src/hc/foley/build.yml:12
Using module file /Users/chris/src/hc/foley/ansible-test/lib/python2.7/site-packages/ansible/modules/cloud/docker/docker_image.py
<localhost> ESTABLISH LOCAL CONNECTION FOR USER: chris
<localhost> EXEC /bin/sh -c 'echo ~ && sleep 0'
<localhost> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /Users/chris/.ansible/tmp/ansible-tmp-1494837576.9-236428678313889 `" && echo ansible-tmp-1494837576.9-236428678313889="` echo /Users/chris/.ansible/tmp/ansible-tmp-1494837576.9-236428678313889 `" ) && sleep 0'
<localhost> PUT /var/folders/zn/cfj4ng250293z1g5s19w3zdh0000gn/T/tmp_SRwg6 TO /Users/chris/.ansible/tmp/ansible-tmp-1494837576.9-236428678313889/docker_image.py
<localhost> EXEC /bin/sh -c 'chmod u+x /Users/chris/.ansible/tmp/ansible-tmp-1494837576.9-236428678313889/ /Users/chris/.ansible/tmp/ansible-tmp-1494837576.9-236428678313889/docker_image.py && sleep 0'
<localhost> EXEC /bin/sh -c '/usr/bin/python /Users/chris/.ansible/tmp/ansible-tmp-1494837576.9-236428678313889/docker_image.py; rm -rf "/Users/chris/.ansible/tmp/ansible-tmp-1494837576.9-236428678313889/" > /dev/null 2>&1 && sleep 0'
fatal: [127.0.0.1 -> localhost]: FAILED! => {
    "changed": false,
    "failed": true,
    "invocation": {
        "module_args": {
            "api_version": null,
            "archive_path": null,
            "buildargs": {
                "PRIVATE_REPO_PASSWORD": "6c50ef3a91e9b5cd47251f921f3fb53d1e53afa5",
                "PRIVATE_REPO_USERNAME": "hexagonalwax"
            },
            "cacert_path": null,
            "cert_path": null,
            "container_limits": null,
            "debug": false,
            "docker_host": null,
            "dockerfile": null,
            "filter_logger": false,
            "force": false,
            "http_timeout": null,
            "key_path": null,
            "load_path": null,
            "name": "honeycomb/foley",
            "nocache": "False",
            "path": ".",
            "pull": true,
            "push": false,
            "repository": null,
            "rm": true,
            "ssl_version": null,
            "state": "present",
            "tag": "latest",
            "timeout": null,
            "tls": null,
            "tls_hostname": null,
            "tls_verify": null,
            "use_tls": "no"
        }
    },
    "msg": "Failed to import docker-py - No module named docker. Try `pip install docker-py`"
}
  to retry, use: --limit @/Users/chris/src/hc/foley/build.retry

PLAY RECAP *******************************************************************************************************************************************************************
127.0.0.1                  : ok=0    changed=0    unreachable=0    failed=1

Voici mon playbook:

(ansible-test) zoidberg:foley chris$ cat build.yml
---
- name: Build foley docker images
  hosts: 127.0.0.1
  connection: local
  gather_facts: false

  vars_files:
    - "ansible/vars/build_secrets.yml"

  tasks:

    - docker_image:
         path: .
         name: worldofchris/foley
         buildargs:
           PRIVATE_REPO_USERNAME: "{{ PRIVATE_REPO_USERNAME }}"
           PRIVATE_REPO_PASSWORD: "{{ PRIVATE_REPO_PASSWORD }}"
      delegate_to: localhost

Et mon inventaire:

(ansible-test) zoidberg:foley chris$ cat inventory/local
[localhost]
127.0.0.1 ansible_connection=local

Une idée de ce que je fais mal?

Merci

@worldofchris docker-py est un module plus ancien, dans ansible 2.3.0.0 essayez d'installer uniquement docker sans docker-py:

pip uninstall docker
pip uninstall docker-py
pip install docker

et exécutez votre playbook.

Si une installation est possible à partir de zéro dans un environnement centos propre, Ansible n'est-il pas censé apporter la version correcte de docker py ou devons-nous toujours exécuter pip uninstall docker-py la première fois?

@Applemann merci pour cela. J'ai essayé votre suggestion mais obtenez le même résultat:

(ansible-test) zoidberg:foley chris$ pip uninstall docker
    Uninstalling docker-2.0.0:
    ...
      Successfully uninstalled docker-2.0.0
    (ansible-test) zoidberg:foley chris$ pip uninstall docker-py
    Uninstalling docker-py-1.10.6:
    ...
      Successfully uninstalled docker-py-1.10.6
    (ansible-test) zoidberg:foley chris$ pip list | grep docker
    DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
    docker-pycreds (0.2.1)
    (ansible-test) zoidberg:foley chris$ pip install docker
    Collecting docker
      Using cached docker-2.2.1-py2.py3-none-any.whl
    Requirement already satisfied: backports.ssl-match-hostname>=3.5; python_version < "3.5" in ./ansible-test/lib/python2.7/site-packages (from docker)
    Requirement already satisfied: ipaddress>=1.0.16; python_version < "3.3" in ./ansible-test/lib/python2.7/site-packages (from docker)
    Requirement already satisfied: docker-pycreds>=0.2.1 in ./ansible-test/lib/python2.7/site-packages (from docker)
    Requirement already satisfied: requests!=2.11.0,!=2.12.2,>=2.5.2 in ./ansible-test/lib/python2.7/site-packages (from docker)
    Requirement already satisfied: websocket-client>=0.32.0 in ./ansible-test/lib/python2.7/site-packages (from docker)
    Requirement already satisfied: six>=1.4.0 in ./ansible-test/lib/python2.7/site-packages (from docker)
    Installing collected packages: docker
    Successfully installed docker-2.2.1
    (ansible-test) zoidberg:foley chris$ pip list | grep docker
    DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
    docker (2.2.1)
    docker-pycreds (0.2.1)
    (ansible-test) zoidberg:foley chris$ ansible-playbook -i inventory/local build.yml -vvvv
    No config file found; using defaults
    Loading callback plugin default of type stdout, v2.0 from /Users/chris/src/hc/foley/ansible-test/lib/python2.7/site-packages/ansible/plugins/callback/__init__.pyc

    PLAYBOOK: build.yml **********************************************************************************************************************************************************
    1 plays in build.yml

    PLAY [Build foley docker images] *********************************************************************************************************************************************
    META: ran handlers

    TASK [docker_image] **********************************************************************************************************************************************************
    task path: /Users/chris/src/hc/foley/build.yml:12
    Using module file /Users/chris/src/hc/foley/ansible-test/lib/python2.7/site-packages/ansible/modules/cloud/docker/docker_image.py
    <localhost> ESTABLISH LOCAL CONNECTION FOR USER: chris
    <localhost> EXEC /bin/sh -c 'echo ~ && sleep 0'
    <localhost> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /Users/chris/.ansible/tmp/ansible-tmp-1494842343.37-265680192802324 `" && echo ansible-tmp-1494842343.37-265680192802324="` echo /Users/chris/.ansible/tmp/ansible-tmp-1494842343.37-265680192802324 `" ) && sleep 0'
    <localhost> PUT /var/folders/zn/cfj4ng250293z1g5s19w3zdh0000gn/T/tmph0iFSY TO /Users/chris/.ansible/tmp/ansible-tmp-1494842343.37-265680192802324/docker_image.py
    <localhost> EXEC /bin/sh -c 'chmod u+x /Users/chris/.ansible/tmp/ansible-tmp-1494842343.37-265680192802324/ /Users/chris/.ansible/tmp/ansible-tmp-1494842343.37-265680192802324/docker_image.py && sleep 0'
    <localhost> EXEC /bin/sh -c '/usr/bin/python /Users/chris/.ansible/tmp/ansible-tmp-1494842343.37-265680192802324/docker_image.py; rm -rf "/Users/chris/.ansible/tmp/ansible-tmp-1494842343.37-265680192802324/" > /dev/null 2>&1 && sleep 0'
    fatal: [127.0.0.1 -> localhost]: FAILED! => {
        "changed": false,
        "failed": true,
        "invocation": {
            "module_args": {
                "api_version": null,
                "archive_path": null,
                "buildargs": {
                    "PRIVATE_REPO_PASSWORD": "6c50ef3a91e9b5cd47251f921f3fb53d1e53afa5",
                    "PRIVATE_REPO_USERNAME": "hexagonalwax"
                },
                "cacert_path": null,
                "cert_path": null,
                "container_limits": null,
                "debug": false,
                "docker_host": null,
                "dockerfile": null,
                "filter_logger": false,
                "force": false,
                "http_timeout": null,
                "key_path": null,
                "load_path": null,
                "name": "honeycomb/foley",
                "nocache": "False",
                "path": ".",
                "pull": true,
                "push": false,
                "repository": null,
                "rm": true,
                "ssl_version": null,
                "state": "present",
                "tag": "latest",
                "timeout": null,
                "tls": null,
                "tls_hostname": null,
                "tls_verify": null,
                "use_tls": "no"
            }
        },
        "msg": "Failed to import docker-py - No module named docker. Try `pip install docker-py`"
    }
      to retry, use: --limit @/Users/chris/src/hc/foley/build.retry

    PLAY RECAP *******************************************************************************************************************************************************************
    127.0.0.1                  : ok=0    changed=0    unreachable=0    failed=1

Ai-je bien suivi vos instructions?

À votre santé

Chris

@worldofchris, vous pouvez également essayer de l'exécuter avec l'interpréteur python3 au lieu de python 2.7
Parce que j'avais le même problème ici: https://github.com/ansible/ansible/issues/20492#issuecomment -293644891
Et je l'ai résolu en exécutant playbook sous python3.

Merci @Applemann est passé à Python 3 et cela a fonctionné. J'avais besoin d'une raison pour passer à Python 3, donc c'est une bonne raison.

À votre santé!

Merci @Applemann de passer à python3 et de pointer vers l'interpréteur python dans virtualenv a également fonctionné.

ansible-playbook docker-test.yml \
       -e 'ansible_python_interpreter=/data/python/envs/ansible/bin/python3'

J'ai également rencontré ce problème avec

''
Python 2.7.13
pip 9.0.1 de /usr/lib/python2.7/dist-packages (python 2.7)
ansible 2.3.0.0 (sur la machine locale)

Client:
La dernière version: 1.12.6
Version de l'API: 1.24
Version Go: go1.7.4
Commit Git: 78d1802
Construit: Tue Mar 14 09:47:15 2017
OS / Arch: linux / amd64

Serveur:
La dernière version: 1.12.6
Version de l'API: 1.24
Version Go: go1.7.4
Commit Git: 78d1802
Construit: Tue Mar 14 09:47:15 2017
OS / Arch: linux / amd64
`` ``

Définir python3 comme exécutable n'a pas résolu ce problème pour moi. J'ai réussi à le faire fonctionner en faisant un pip install docker docker-compose (pas de docker-py présent) comme suggéré. Sans docker-compose via pip, le module docker_container ansible fonctionnait, docker_service ne fonctionnait pas.

Cela n'a rien à voir avec ce problème. Ansible a toujours requis docker-compose pour le module docker_service.

De plus, docker et docker-py ne sont pas co-installables pour le moment, donc avoir les deux installés causera probablement des problèmes.

Il est maintenant corrigé dans la version 2.3.0. Vous avez juste besoin d'installer le dernier docker-compose via pip sur la télécommande, puis essayez de l'exécuter et il vous indiquera quels anciens paquets vous devez supprimer.

Pourquoi ce problème est toujours ouvert?

Vous voyez toujours ce problème sur Ansible 2.3.0:

$ ansible --version                                                        
ansible 2.3.0.0              
  config file = /vagrant/ansible/ansible.cfg       
  configured module search path = [u'./library']
  python version = 2.7.6 (default, Oct 26 2016, 20:30:19) [GCC 4.8.4]      
$ pip freeze | grep docker                                                        
docker==2.3.0                                       
docker-compose==1.14.0
docker-pycreds==0.2.1
dockerpty==0.4.1  

Erreur de Playbook avec le module docker_container :

ÉCHOUÉ! => {"changed": false, "failed": true, "msg": "Impossible d'importer docker-py - Aucun module nommé docker. Essayez pip install docker-py "

OS: Ubuntu 14.04.5 avec 3.13.0-121-generic x86_64 (vagrant box)
Version Python: 2.7.6

EDIT: Ceci est résolu en s'assurant que la boîte TARGET a ces modules pip installés, pas seulement la boîte en cours d'exécution ansible:

- name: Ensure old module not present
  pip:
    name: docker-py
    state: absent
- name: Install pip modules on target box
  pip:
    name: "{{ item }}"
    state: present
  with_items:
    - docker
    - docker-compose

Cela m'arrive encore sur ansible 2.3.1.0:

$ ansible --version
ansible 2.3.1.0
  config file = /home/reegnz/demo/ansible.cfg
  configured module search path = Default w/o overrides
  python version = 2.7.5 (default, Aug  2 2016, 04:20:16) [GCC 4.8.5 20150623 (Red Hat 4.8.5-4)]

Je prépare un virtualenv contenant uniquement docker-compose, il extrait docker en tant que dépendance transitive.

$ virtualenv venv
$ source venv/bin/activate
(venv) $ pip install --upgrade pip
Downloading/unpacking pip from https://pypi.python.org/packages/11/b6/abcb525026a4be042b486df43905d6893fb04f05aac21c32c638e939e447/pip-9.0.1.tar.gz#md5=35f01da33009719497f01a4ba69d63c9
  Downloading pip-9.0.1.tar.gz (1.2MB): 1.2MB downloaded
  Running setup.py egg_info for package pip
    /usr/lib64/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'python_requires'
      warnings.warn(msg)

    warning: no previously-included files found matching '.coveragerc'
    warning: no previously-included files found matching '.mailmap'
    warning: no previously-included files found matching '.travis.yml'
    warning: no previously-included files found matching '.landscape.yml'
    warning: no previously-included files found matching 'pip/_vendor/Makefile'
    warning: no previously-included files found matching 'tox.ini'
    warning: no previously-included files found matching 'dev-requirements.txt'
    warning: no previously-included files found matching 'appveyor.yml'
    no previously-included directories found matching '.github'
    no previously-included directories found matching '.travis'
    no previously-included directories found matching 'docs/_build'
    no previously-included directories found matching 'contrib'
    no previously-included directories found matching 'tasks'
    no previously-included directories found matching 'tests'
Installing collected packages: pip
  Found existing installation: pip 1.4.1
    Uninstalling pip:
      Successfully uninstalled pip
  Running setup.py install for pip
    /usr/lib64/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'python_requires'
      warnings.warn(msg)

    warning: no previously-included files found matching '.coveragerc'
    warning: no previously-included files found matching '.mailmap'
    warning: no previously-included files found matching '.travis.yml'
    warning: no previously-included files found matching '.landscape.yml'
    warning: no previously-included files found matching 'pip/_vendor/Makefile'
    warning: no previously-included files found matching 'tox.ini'
    warning: no previously-included files found matching 'dev-requirements.txt'
    warning: no previously-included files found matching 'appveyor.yml'
    no previously-included directories found matching '.github'
    no previously-included directories found matching '.travis'
    no previously-included directories found matching 'docs/_build'
    no previously-included directories found matching 'contrib'
    no previously-included directories found matching 'tasks'
    no previously-included directories found matching 'tests'
    Installing pip script to /home/reegnz/test/venv/bin
    Installing pip2.7 script to /home/test/venv/bin
    Installing pip2 script to /home/test/venv/bin
Successfully installed pip
Cleaning up...
(venv) $ pip install docker-compose
Collecting docker-compose
  Using cached docker_compose-1.14.0-py2.py3-none-any.whl
Collecting cached-property<2,>=1.2.0 (from docker-compose)
  Using cached cached_property-1.3.0-py2.py3-none-any.whl
Collecting backports.ssl-match-hostname>=3.5; python_version < "3.5" (from docker-compose)
Collecting ipaddress>=1.0.16; python_version < "3.3" (from docker-compose)
  Using cached ipaddress-1.0.18-py2-none-any.whl
Collecting jsonschema<3,>=2.5.1 (from docker-compose)
  Using cached jsonschema-2.6.0-py2.py3-none-any.whl
Collecting texttable<0.9,>=0.8.1 (from docker-compose)
Collecting six<2,>=1.3.0 (from docker-compose)
  Using cached six-1.10.0-py2.py3-none-any.whl
Collecting docker<3.0,>=2.3.0 (from docker-compose)
  Using cached docker-2.4.0-py2.py3-none-any.whl
Collecting enum34<2,>=1.0.4; python_version < "3.4" (from docker-compose)
  Using cached enum34-1.1.6-py2-none-any.whl
Collecting websocket-client<1.0,>=0.32.0 (from docker-compose)
  Using cached websocket_client-0.44.0-py2.py3-none-any.whl
Collecting PyYAML<4,>=3.10 (from docker-compose)
Collecting colorama<0.4,>=0.3.7 (from docker-compose)
  Using cached colorama-0.3.9-py2.py3-none-any.whl
Collecting requests!=2.11.0,<2.12,>=2.6.1 (from docker-compose)
  Using cached requests-2.11.1-py2.py3-none-any.whl
Collecting docopt<0.7,>=0.6.1 (from docker-compose)
Collecting dockerpty<0.5,>=0.4.1 (from docker-compose)
Collecting functools32; python_version == "2.7" (from jsonschema<3,>=2.5.1->docker-compose)
Collecting docker-pycreds>=0.2.1 (from docker<3.0,>=2.3.0->docker-compose)
  Using cached docker_pycreds-0.2.1-py2.py3-none-any.whl
Installing collected packages: cached-property, backports.ssl-match-hostname, ipaddress, functools32, jsonschema, texttable, six, websocket-client, docker-pycreds, requests, docker, enum34, PyYAML, colorama, docopt, dockerpty, docker-compose
Successfully installed PyYAML-3.12 backports.ssl-match-hostname-3.5.0.1 cached-property-1.3.0 colorama-0.3.9 docker-2.4.0 docker-compose-1.14.0 docker-pycreds-0.2.1 dockerpty-0.4.1 docopt-0.6.2 enum34-1.1.6 functools32-3.2.3.post2 ipaddress-1.0.18 jsonschema-2.6.0 requests-2.11.1 six-1.10.0 texttable-0.8.8 websocket-client-0.44.0

(venv) $ pip freeze > venv-requirements.txt

Le fichier venv-requirements.txt ressemble à ceci:

( venv) $ cat venv-requirements.txt
backports.ssl-match-hostname==3.5.0.1
cached-property==1.3.0
colorama==0.3.9
docker==2.4.0
docker-compose==1.14.0
docker-pycreds==0.2.1
dockerpty==0.4.1
docopt==0.6.2
enum34==1.1.6
functools32==3.2.3.post2
ipaddress==1.0.18
jsonschema==2.6.0
PyYAML==3.12
requests==2.11.1
six==1.10.0
texttable==0.8.8
websocket-client==0.44.0

J'installe un virtualenv sur ma machine distante dans / opt / ansible / venv avec le fichier d'exigences pip ci-dessus, et je remplace ansible_python_interpreter avec le script suivant / opt / ansible / python-venv:

#!/bin/bash
source /opt/ansible/venv/bin/activate
python "$@"

J'obtiens toujours l'erreur suivante de ansible-playbook:

fatal: [localhost]: FAILED! => {
    "changed": false,
    "failed": true,
    "invocation": {
        "module_args": {
            "api_version": null,
            "build": false,
            "cacert_path": null,
            "cert_path": null,
            "debug": false,
            "definition": null,
            "dependencies": true,
            "docker_host": null,
            "files": null,
            "filter_logger": false,
            "hostname_check": false,
            "key_path": null,
            "nocache": false,
            "project_name": null,
            "project_src": "/opt/test",
            "pull": true,
            "recreate": "smart",
            "remove_images": null,
            "remove_orphans": false,
            "remove_volumes": false,
            "restarted": false,
            "scale": null,
            "services": null,
            "ssl_version": null,
            "state": "present",
            "stopped": false,
            "timeout": 10,
            "tls": null,
            "tls_hostname": null,
            "tls_verify": null
        }
    },
    "msg": "Failed to import docker-py - No module named docker. Try `pip install docker-py`"
}

J'ai également essayé d'installer les packages docker-compose et docker-py en vain. J'obtiens toujours le même message d'erreur alors.

Il s'avère que mon script python-venv cité était erroné et qu'il fonctionne.
C'était mon scénario, pas celui que j'ai cité ...

#!/bin/bash
source /opt/ansible/bin/activate
python "$@"

Remarquez "venv" manquant dans le chemin.

Le message d'erreur n'était pas tout à fait clair, c'est pourquoi il m'a fallu un certain temps pour déboguer. Json ne contient pas le message d'erreur python.
Désolé pour le dérangement.

ansible 2.3.0.0
version python = 2.7.13

$ pip list | grep docker
DÉPRÉCIATION: Le format par défaut passera aux colonnes à l'avenir. Vous pouvez utiliser --format = (legacy | columns) (ou définir un format = (legacy | columns) dans votre pip.conf sous la section [list]) pour désactiver cet avertissement.
docker (2.4.2)
docker-compose (1.14.0)
pycreds docker (0.2.1)
dockerpty (0.4.1)

Erreur: FAILED! => {"changed": false, "failed": true, "msg": "Impossible d'importer docker-py - Aucun module nommé docker. Essayez pip install docker-py "}

Veuillez suggérer une solution pour cela. Je ne l'ai pas encore essayé sur virtualenv, mentionné dans le commentaire de reegnz.

Pour les gens paresseux de lire chaque article ici:
Depuis ansible 2.3, le problème de dépendance docker-py est corrigé:

  • si vous utilisez le python 2.7 par défaut, le module docker a besoin de docker-py

  • si vous utilisez python 3 ( -e 'ansible_python_interpreter=/usr/bin/python3' ), il a besoin de docker au lieu de docker-py
    dans tous les cas, nettoyez par pip uninstall docker docker-py docker-compose
    réinstaller
    pip install docker-compose

python 3 n'est pas présent dans les grandes distributions comme CentOS / RHEL.

J'ajouterais, en plus de @antoinetran , qu'avec python 2.7, on ne peut pas avoir les deux: ansible et docker-compose happy.
-> Les modules ansibles tels que docker et docker-login nécessitent docker-py
-> docker-compose nécessite docker (et ne fonctionne pas si docker et docker-py sont installés):

docker-compose
WARNING: Dependency conflict: an older version of the 'docker-py' package may be polluting the namespace. If you're experiencing crashes, run the following command to remedy the issue:
pip uninstall docker-py; pip uninstall docker; pip install docker

Donc, c'est soit un travail ansible, soit un docker-compose. C'est désordonné.
Je ne sais pas pourquoi ce problème est fermé, car il semble qu'il soit possible de mettre à jour les modules pour qu'ils fonctionnent avec docker au lieu de docker-py, même pour 2.7, comme l'a fait docker-compose.

Edit - working - user error: Dans mon cas, ce n'était pas un bug. Pour toute autre personne expérimentée, essayez d'exécuter ansible avec -vvvv. J'ai vu que ansible utilisait /usr/bin/python . J'ai dû définir ansible_python_interpreter sur l'exécutable python sur ma machine hôte dans virtualenv où pip installait des choses. Cela a changé l'erreur en fichier introuvable, ce qui m'a fait réaliser que toute l'erreur provenait de la machine cible. J'ai donc changé ansible_python_interpreter pour être l'exécutable python de la machine cible, installé docker-py sur la machine cible et obtenu une erreur différente concernant une autre dépendance liée (websockets ou requêtes ou quelque chose) qui n'était pas installée. Ensuite, j'ai désinstallé docker / docker-py sur la machine cible et installé docker-compose. Ensuite, tout a fonctionné.


Texte original - pré-édition:

Juste une mise à jour avec quelques informations supplémentaires sur un système défaillant.

Mac 10.12.6
Version de Docker 17.09.0-ce-mac35 (19611)
ansible 2.4.0.0
pip désinstaller docker docker-py docker-compose
pip installer docker-compose

docker_image

FAILED! => {"changed": false, "failed": true, "msg": "Failed to import docker-py - No module named requests.exceptions. Try `pip install docker-py`"}
ansible localhost -m shell -a "python -c 'import requests.exceptions'"
localhost | SUCCESS | rc=0 >>

J'ai eu le problème de l'échantillon,
fatal: [localhost -> localhost]: FAILED! => {"changed": false, "msg": "Failed to import docker-py - No module named requests.exceptions. Try 'pip install docker-py'"}

Rien de mentionné dans ce fil n'a aidé. J'ai rétrogradé ansible et tout a fonctionné.
pip install ansible==2.3.3.0

Les utilisateurs continuent à rencontrer ce problème depuis un an. Pourquoi ce ticket est-il fermé?

Timo Soini

Même problème, "Controller" sur Mac, "Managed-Host" sur RPi, ont du mal avec cela depuis 3 semaines. J'ai enregistré mon propre problème, ils l'ont fermé, alors où allons-nous à partir d'ici?

Voici ce que j'ai ouvert et fermé rapidement. https://github.com/ansible/ansible/issues/34851

"Ce n'est pas un problème avec ansible, mais plutôt un problème potentiel avec docker-py / docker en amont: docker / docker-py # 1353

Mais pas de réponse au lien ci-dessus non plus.

J'obtenais l'erreur et j'exécutais "pip install docker-py" pour le corriger, comme le disait le message d'erreur. Ansible 2.4.2.0.

Pourquoi ce problème est-il clos? Nous avons installé la dernière version 2.4.2.0 d'ansible dans la dernière RedHat 7.4, qui est une machine propre à partir de zéro. Il nécessite docker-py et python3 n'est pas installé. Ansible RPM fournit docker.py et NON docker-py. Il est incohérent de Ansible d'installer docker.py et d'utiliser docker-py.py.

Je suis confronté au problème dans ansible==2.5.0 . Toute aide est grandement appréciée.

Veuillez essayer la résolution mentionnée ici https://github.com/ansible/ansible/issues/20492#issuecomment -361724244 - Ansible inclut un module docker, mais N'INCLUT PAS le SDK docker (nécessaire pour communiquer avec le démon docker). Cela doit être installé si vous souhaitez utiliser le module.

@ryansb Je suis en mesure de reproduire le problème avec Ansible 2.5.0 sur python3.

fatal: [db01]: FAILED! => {"changed": false, "msg": "Failed to import docker-py - No module named requests.exceptions. Try `pip install docker-py`"}

Malgré:

$ pip3 freeze |grep docker
docker-py==1.10.6
docker-pycreds==0.2.2

La mise à niveau vers Ansible 2.4.3.0 ne résout pas le problème.
Je soupçonne que cela pourrait avoir à voir avec py2 vs py3 mais je n'ai pas le temps de me reproduire sur py2 pour le moment.

FWIW Je vois cela à la fois sur Ubuntu et Fedora en tant que nœud de contrôle.

J'ai commencé à installer ansible avec le gestionnaire de paquets nix pour m'assurer qu'il soit toujours
a les dépendances correctes et aucune bibliothèque python supplémentaire dans le python
chemin. Je suis d'accord que ce n'est pas un problème résolu, c'est une bibliothèque en amont
problème, mais si l'état de votre système empêche ansible de fonctionner, nix
résout le problème très proprement.

Le lun.2 avril 2018, 18:31 David Moreau Simard [email protected]
a écrit:

@ryansb https://github.com/ryansb Je suis en mesure de reproduire le problème avec
Ansible 2.5.0 sur python3.

fatal: [db01]: ECHEC! => {"changed": false, "msg": "Impossible d'importer docker-py - Aucun module nommé requests.exceptions. Essayez pip install docker-py "}

Malgré:

$ pip3 freeze | grep docker
docker-py == 1.10.6
docker-pycreds == 0.2.2

La mise à niveau vers Ansible 2.4.3.0 ne résout pas le problème.
Je soupçonne que cela pourrait avoir à voir avec py2 vs py3 mais je ne le fais pas
avoir le temps de se reproduire sur py2 dès maintenant.

FWIW Je vois cela à la fois sur Ubuntu et Fedora en tant que nœud de contrôle.

-
Vous recevez ceci parce que vous êtes abonné à ce fil.
Répondez directement à cet e-mail, affichez-le sur GitHub
https://github.com/ansible/ansible/issues/20492#issuecomment-378067072 ,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/AAnvxX5ctoUwDA-3VUVyTjh_k3vyMIa8ks5tkqbRgaJpZM4LpGqv
.

@ryansb Merci pour votre aide. Mais malheureusement, cela n'a pas résolu le problème.

rien

> nix-env -qa|grep sible
python2.7-ansible-2.1.4.0
python2.7-ansible-2.2.1.0
python2.7-ansible-2.3.2.0
python2.7-ansible-2.4.2.0
python2.7-ansible-lint-3.4.20
vimplugin-sensible-2018-01-22
> nix-env -i python2.7-ansible-2.4.2.0

Veuillez rouvrir ce numéro.

@jpiron avez-vous un statut mis à jour à ce sujet?

Je suis allé à travers toutes les solutions de thread, aucune n'a fonctionné.

fatal: [172.16.101.44]: FAILED! => {"changed": false, "msg": "Failed to import docker-py - No module named 'docker'. Try `pip install docker-py`"}

@lifenautjoe avez-vous essayé https://github.com/ansible/ansible/issues/20492#issuecomment -307642085

Si vous avez installé le module docker-py et que vous rencontrez toujours ce problème, c'est que vous n'utilisez pas le bon interpréteur Python avec Ansible. Si, par exemple, Python 2 et 3 sont installés et installés avec pip3 install docker-py mais qu'Ansible utilise Python 2, il ne verra pas le module car il est installé dans le répertoire site-packages de Python3.

Dans ce cas, vous devrez définir ansible_python_interpreter sur l'hôte de votre inventaire. Voir http://docs.ansible.com/ansible/latest/reference_appendices/python_3_support.html pour plus d'informations sur ansible_python_interpreter .

Ce n'est pas un bogue Ansible, c'est un problème dans l'environnement système Python.

Salut @antoinetran , je l'ai fait. En fait, j'ai commencé avec python3 et je suis passé à python2 maintenant. Encore des erreurs mais maintenant liées au package de requêtes (son installation ne le résout pas non plus) ☹️

@lifenautjoe cela semble être un problème avec votre système. Si vous avez besoin d'aide, rendez-vous sur Google Groupes ou sur la chaîne #ansible sur Freenode pour demander conseil à la communauté. https://docs.ansible.com/ansible/latest/community/communication.html

tldr; effectuez les installations un / ci-dessus sur l'hôte cible .

Je rencontrais cette erreur en utilisant les modules ansible docker_service et docker_container. J'ai tout essayé ci-dessus mais aucun n'a fonctionné. J'ai passé un temps embarrassant à essayer de comprendre ce qui se passait jusqu'à ce que je réalise que l'erreur venait de ma cible distante ... Tout ce que j'avais à faire était de suivre le commentaire @jpiron pour installer docker-compose 1.9.0 sur la télécommande cible au lieu de mon venv local où mes playbooks existent et tout a fonctionné.

J'espère que cela résout certains mystères.

Comme d'autres, je recevais la même erreur. Impossible d'importer docker-py via une build Terraform.

pip install --user --upgrade pip

cassait des choses pour moi. Voici mon environnement de travail:

Ubuntu 16.04
- python 2.7.12
- pip 8.1.1
- ansible 2.5.1
- docker 18.03.0-ce
- docker-compose 1.21.0

J'espère que ça t'as aidé.

Toujours confronté à des problèmes concernant ce paquet en 2.5.3. Lorsque docker-py installé dans Python2.7, le module docker-container fonctionne très bien, mais pas le docker-service car il nécessite l'installation de Docker compose.

En suivant les instructions d'installation fournies par Ansible pip install docker-compose , il installe également la version Python 3 du package docker , qui rompt le module docker-container . La suppression manuelle de docker n'aide pas non plus et échoue toujours avec un message _Failed to import docker-py_.

Il est très difficile de savoir comment continuer et faire fonctionner les deux modules en même temps.

À ce stade, il peut être préférable d'ouvrir un nouveau problème, car celui-ci est fermé et peut-être que les développeurs Ansible ne le regardent plus.

Cette page vous a été utile?
0 / 5 - 0 notes