J'ai vérifié ce post et suivi le correctif dans les deux réponses et aucune n'a fonctionné. J'ouvre un nouveau poste en partie à cause de cela et en partie parce que j'obtiens une erreur légèrement différente alors que le problème est peut-être le même.
Ansible Host:
$ ansible --version
ansible 2.1.0.0
config file = /etc/ansible/ansible.cfg
configured module search path = Default w/o overrides
Mon serveur de destination:
$ pip list | egrep 'six|docker|websocket_client'
docker-py (1.2.3)
six (1.10.0)
test.yml:
---
- hosts: myserver
remote_user: root
tasks:
- name: stop any running docker registries
docker_container:
name: registry
state: stopped
...
Serveur Ansible (ansible-playbook alias to ap):
$ ap -vvvv test.yml
Le résultat:
(sortie probablement étrangère, coupée):
fatal: [myserver]: FAILED! => {
"changed": false,
"failed": true,
"invocation": {
"module_args": {
"api_version": null,
"blkio_weight": null,
"cacert_path": null,
"capabilities": null,
"cert_path": null,
"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,
"etc_hosts": null,
"exposed_ports": null,
"filter_logger": false,
"force_kill": false,
"groups": null,
"hostname": null,
"image": null,
"interactive": false,
"ipc_mode": null,
"keep_volumes": true,
"kernel_memory": null,
"key_path": null,
"kill_signal": null,
"labels": null,
"links": null,
"log_driver":
"json-file",
"log_options": null,
"mac_address": null,
"memory": "0",
"memory_reservation": null,
"memory_swap": null,
"memory_swappiness": null,
"name": "registry",
"network_mode": null,
"networks": null,
"oom_killer": null,
"paused": false,
"pid_mode": null,
"privileged": false,
"published_ports": null,
"pull": false,
"read_only": false,
"recreate": false,
"restart": false,
"restart_policy": null,
"restart_retries": 0,
"security_opts": null,
"shm_size": null,
"ssl_version": null,
"state": "stopped",
"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":
(l'erreur pertinente):
"Failed to import docker-py - cannot import name NotFound. Try pip install docker-py"}
Je reçois la même erreur lorsque je rétrograde le module docker-py à la version 1.1.0 conformément à la première réponse du message référencé. J'ai aussi essayé de modifier les répertoires et cela n'a fait aucune différence:
(/usr/lib/python2.7/site-packages) myserver$ ls -lad docker*
drwxr-xr-x. 6 root root 4096 Jul 4 10:57 docker/
drwxr-xr-x. 2 root root 4096 Jul 4 10:57 docker_py-1.2.3-py2.7.Egg-info/
à partir de chmod -R go+rx docker*
.
Quelqu'un a-t-il déjà vu cela avant? J'ai essayé d'utiliser le module pip ansible pour installer les modules puis, après les avoir retirés manuellement, je les ai réinstallés manuellement comme indiqué dans le message référencé. J'utilise aussi 2.1.0.0. comme vous pouvez le voir, ce qui était supposé résoudre ce problème.
En effet, les nouvelles versions des modules python docker
et docker-py
utilisées par ansible sont incompatibles. J'ai dû revenir en arrière et spécifier explicitement les versions suivantes des packages PIP:
Exemple de tâche de livre de lecture pour ceux-ci:
- name: install certain python modules for docker
pip:
name: "{{ item.name }}"
version: "{{ item.version }}"
state: present
with_items:
- { name: docker, version: 2.0.0 }
- { name: docker-py, version: 1.10.6 }
Tous mes livres de jeu fonctionnent bien depuis lors.
Pour moi, spécifier le chemin d'accès à docker-py
a fonctionné.
- hosts: <Host>
environment:
PYTHONPATH: "/home/path/.local/lib/python2.7/site-packages"
En gros, Ansible cherchait dans le mauvais répertoire.
Un grand merci à Clay Graham pour son excellent article sur le sujet:
https://medium.com/dronzebot/ansible-and-docker-py-path-issues-and-resolving-them-e3834d5bb79a
La configuration requise pour le module docker-py dans la documentation ansible relative aux modules docker * n'est pas vraiment à jour, mais voici généralement quelques paires anible - docker-py qui devraient fonctionner:
Ansible 2.1.0.0 nécessite au moins la version 1.7.0 de docker-py, qui à son tour requiert au moins docker 1.9 installé sur le client.
Si vous devez utiliser une version antérieure de docker, vous pouvez utiliser docker 1.7 avec ansible 2.0.1.0 et docker-py 1.4.0.
Si vous avez besoin d'une version encore plus ancienne de docker, telle que 1.6, vous êtes coincé avec ansible 1.9