docker modules: make sure everything works with older docker-py versions (#55258)

* General test improvements.

* Adjust tests to older docker-py versions.

* docker_swarm_server_info: work around problems with older docker-py versions

* Bump minimal docker-py version for options network_filters and disk_usage.

* More general test improvements.

* Correct usage of docker_image.

* Put files into output directory.

* Speed up test.

* Remove old check.
This commit is contained in:
Felix Fontein
2019-04-17 19:50:57 +02:00
committed by ansibot
parent 24b44e1772
commit 12d26eceb1
20 changed files with 119 additions and 40 deletions

View File

@@ -6,7 +6,7 @@ import json
from time import sleep
try:
from docker.errors import APIError
from docker.errors import APIError, NotFound
except ImportError:
# missing Docker SDK for Python handled in ansible.module_utils.docker.common
pass
@@ -259,15 +259,16 @@ class AnsibleDockerSwarmClient(AnsibleDockerClient):
Single service information structure
"""
try:
service_info = self.inspect_service(service=service_id)
service_info = self.inspect_service(service_id)
except NotFound as exc:
if skip_missing is False:
self.fail("Error while reading from Swarm manager: %s" % to_native(exc))
else:
return None
except APIError as exc:
if exc.status_code == 503:
self.fail("Cannot inspect service: To inspect service execute module on Swarm Manager")
if exc.status_code == 404:
if skip_missing is False:
self.fail("Error while reading from Swarm manager: %s" % to_native(exc))
else:
return None
self.fail("Error inspecting swarm service: %s" % exc)
except Exception as exc:
self.fail("Error inspecting swarm service: %s" % exc)

View File

@@ -245,15 +245,18 @@ class DockerHostManager(DockerBaseClass):
header_images = ['Id', 'RepoTags', 'Created', 'Size']
header_networks = ['Id', 'Driver', 'Name', 'Scope']
filter_arg = dict()
if filters:
filter_arg['filters'] = filters
try:
if docker_object == 'containers':
items = self.client.containers(filters=filters)
items = self.client.containers(**filter_arg)
elif docker_object == 'networks':
items = self.client.networks(filters=filters)
items = self.client.networks(**filter_arg)
elif docker_object == 'images':
items = self.client.images(filters=filters)
items = self.client.images(**filter_arg)
elif docker_object == 'volumes':
items = self.client.volumes(filters=filters)
items = self.client.volumes(**filter_arg)
except APIError as exc:
self.client.fail("Error inspecting docker host for object '%s': %s" %
(docker_object, to_native(exc)))
@@ -301,11 +304,17 @@ def main():
verbose_output=dict(type='bool', default=False),
)
option_minimal_versions = dict(
network_filters=dict(docker_py_version='2.0.2'),
disk_usage=dict(docker_py_version='2.2.0'),
)
client = AnsibleDockerClient(
argument_spec=argument_spec,
supports_check_mode=True,
min_docker_version='1.10.0',
min_docker_api_version='1.21',
option_minimal_versions=option_minimal_versions,
fail_results=dict(
can_talk_to_docker=False,
),