[docker] Add compatibility with docker-py v2.0

pull/4420/head
dariko 2016-12-20 14:55:03 +01:00 committed by Ryan S. Brown
parent 339312a6b4
commit e2a1ce2916
4 changed files with 36 additions and 13 deletions

View File

@ -27,17 +27,24 @@ from urlparse import urlparse
from ansible.module_utils.basic import * from ansible.module_utils.basic import *
HAS_DOCKER_PY = True HAS_DOCKER_PY = True
HAS_DOCKER_PY_2 = False
HAS_DOCKER_ERROR = None HAS_DOCKER_ERROR = None
try: try:
from requests.exceptions import SSLError from requests.exceptions import SSLError
from docker import Client
from docker import __version__ as docker_version from docker import __version__ as docker_version
from docker.errors import APIError, TLSParameterError, NotFound from docker.errors import APIError, TLSParameterError, NotFound
from docker.tls import TLSConfig from docker.tls import TLSConfig
from docker.constants import DEFAULT_TIMEOUT_SECONDS, DEFAULT_DOCKER_API_VERSION from docker.constants import DEFAULT_TIMEOUT_SECONDS, DEFAULT_DOCKER_API_VERSION
from docker.utils.types import Ulimit, LogConfig
from docker import auth from docker import auth
if LooseVersion(docker_version) >= LooseVersion('2.0.0'):
HAS_DOCKER_PY_2 = True
from docker import APIClient as Client
from docker.types import Ulimit, LogConfig
else:
from docker import Client
from docker.utils.types import Ulimit, LogConfig
except ImportError as exc: except ImportError as exc:
HAS_DOCKER_ERROR = str(exc) HAS_DOCKER_ERROR = str(exc)
HAS_DOCKER_PY = False HAS_DOCKER_PY = False

View File

@ -656,6 +656,9 @@ from ansible.module_utils.docker_common import *
try: try:
from docker import utils from docker import utils
if HAS_DOCKER_PY_2:
from docker.types import Ulimit
else:
from docker.utils.types import Ulimit from docker.utils.types import Ulimit
except: except:
# missing docker-py handled in ansible.module_utils.docker # missing docker-py handled in ansible.module_utils.docker

View File

@ -250,6 +250,9 @@ image:
from ansible.module_utils.docker_common import * from ansible.module_utils.docker_common import *
try: try:
if HAS_DOCKER_PY_2:
from docker.auth import resolve_repository_name
else:
from docker.auth.auth import resolve_repository_name from docker.auth.auth import resolve_repository_name
from docker.utils.utils import parse_repository_tag from docker.utils.utils import parse_repository_tag
except ImportError: except ImportError:

View File

@ -164,6 +164,9 @@ from ansible.module_utils.docker_common import *
try: try:
from docker import utils from docker import utils
if HAS_DOCKER_PY_2:
from docker.types import Ulimit, IPAMPool, IPAMConfig
else:
from docker.utils.types import Ulimit from docker.utils.types import Ulimit
except: except:
# missing docker-py handled in ansible.module_utils.docker # missing docker-py handled in ansible.module_utils.docker
@ -275,8 +278,15 @@ class DockerNetworkManager(object):
if not self.existing_network: if not self.existing_network:
ipam_pools = [] ipam_pools = []
if self.parameters.ipam_options: if self.parameters.ipam_options:
if HAS_DOCKER_PY_2:
ipam_pools.append(IPAMPool(**self.parameters.ipam_options))
else:
ipam_pools.append(utils.create_ipam_pool(**self.parameters.ipam_options)) ipam_pools.append(utils.create_ipam_pool(**self.parameters.ipam_options))
if HAS_DOCKER_PY_2:
ipam_config = IPAMConfig(driver=self.parameters.ipam_driver,
pool_configs=ipam_pools)
else:
ipam_config = utils.create_ipam_config(driver=self.parameters.ipam_driver, ipam_config = utils.create_ipam_config(driver=self.parameters.ipam_driver,
pool_configs=ipam_pools) pool_configs=ipam_pools)