Improve exception handling. (#121)

This commit is contained in:
Felix Fontein 2021-04-08 08:00:01 +02:00 committed by GitHub
parent ff503d9bd7
commit a3b9648233
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
24 changed files with 168 additions and 98 deletions

View File

@ -0,0 +1,2 @@
bugfixes:
- "all modules - use ``to_native`` to convert exceptions to strings (https://github.com/ansible-collections/community.docker/pull/121)."

View File

@ -485,6 +485,8 @@ except ImportError as dummy:
HAS_COMPOSE_EXC = traceback.format_exc() HAS_COMPOSE_EXC = traceback.format_exc()
DEFAULT_TIMEOUT = 10 DEFAULT_TIMEOUT = 10
from ansible.module_utils._text import to_native
from ansible_collections.community.docker.plugins.module_utils.common import ( from ansible_collections.community.docker.plugins.module_utils.common import (
AnsibleDockerClient, AnsibleDockerClient,
DockerBaseClass, DockerBaseClass,
@ -632,7 +634,7 @@ class ContainerManager(DockerBaseClass):
if not HAS_COMPOSE: if not HAS_COMPOSE:
self.client.fail("Unable to load docker-compose. Try `pip install docker-compose`. Error: %s" % self.client.fail("Unable to load docker-compose. Try `pip install docker-compose`. Error: %s" %
HAS_COMPOSE_EXC) to_native(HAS_COMPOSE_EXC))
if LooseVersion(compose_version) < LooseVersion(MINIMUM_COMPOSE_VERSION): if LooseVersion(compose_version) < LooseVersion(MINIMUM_COMPOSE_VERSION):
self.client.fail("Found docker-compose version %s. Minimum required version is %s. " self.client.fail("Found docker-compose version %s. Minimum required version is %s. "
@ -647,7 +649,7 @@ class ContainerManager(DockerBaseClass):
if self.definition: if self.definition:
if not HAS_YAML: if not HAS_YAML:
self.client.fail("Unable to load yaml. Try `pip install PyYAML`. Error: %s" % HAS_YAML_EXC) self.client.fail("Unable to load yaml. Try `pip install PyYAML`. Error: %s" % to_native(HAS_YAML_EXC))
if not self.project_name: if not self.project_name:
self.client.fail("Parameter error - project_name required when providing definition.") self.client.fail("Parameter error - project_name required when providing definition.")
@ -660,7 +662,7 @@ class ContainerManager(DockerBaseClass):
with open(compose_file, 'w') as f: with open(compose_file, 'w') as f:
f.write(yaml.dump(self.definition, default_flow_style=False)) f.write(yaml.dump(self.definition, default_flow_style=False))
except Exception as exc: except Exception as exc:
self.client.fail("Error writing to %s - %s" % (compose_file, str(exc))) self.client.fail("Error writing to %s - %s" % (compose_file, to_native(exc)))
else: else:
if not self.project_src: if not self.project_src:
self.client.fail("Parameter error - project_src required.") self.client.fail("Parameter error - project_src required.")
@ -669,7 +671,7 @@ class ContainerManager(DockerBaseClass):
self.log("project_src: %s" % self.project_src) self.log("project_src: %s" % self.project_src)
self.project = project_from_options(self.project_src, self.options) self.project = project_from_options(self.project_src, self.options)
except Exception as exc: except Exception as exc:
self.client.fail("Configuration error - %s" % str(exc)) self.client.fail("Configuration error - %s" % to_native(exc))
def exec_module(self): def exec_module(self):
result = dict() result = dict()
@ -886,7 +888,7 @@ class ContainerManager(DockerBaseClass):
except NoSuchImageError: except NoSuchImageError:
pass pass
except Exception as exc: except Exception as exc:
self.client.fail("Error: service image lookup failed - %s" % str(exc)) self.client.fail("Error: service image lookup failed - %s" % to_native(exc))
out_redir_name, err_redir_name = make_redirection_tempfiles() out_redir_name, err_redir_name = make_redirection_tempfiles()
# pull the image # pull the image
@ -908,7 +910,7 @@ class ContainerManager(DockerBaseClass):
if image and image.get('Id'): if image and image.get('Id'):
new_image_id = image['Id'] new_image_id = image['Id']
except NoSuchImageError as exc: except NoSuchImageError as exc:
self.client.fail("Error: service image lookup failed after pull - %s" % str(exc)) self.client.fail("Error: service image lookup failed after pull - %s" % to_native(exc))
if new_image_id != old_image_id: if new_image_id != old_image_id:
# if a new image was pulled # if a new image was pulled
@ -940,7 +942,7 @@ class ContainerManager(DockerBaseClass):
except NoSuchImageError: except NoSuchImageError:
pass pass
except Exception as exc: except Exception as exc:
self.client.fail("Error: service image lookup failed - %s" % str(exc)) self.client.fail("Error: service image lookup failed - %s" % to_native(exc))
out_redir_name, err_redir_name = make_redirection_tempfiles() out_redir_name, err_redir_name = make_redirection_tempfiles()
# build the image # build the image
@ -1099,7 +1101,7 @@ class ContainerManager(DockerBaseClass):
return int(self.scale[service_name]) return int(self.scale[service_name])
except ValueError: except ValueError:
self.client.fail("Error scaling %s - expected int, got %s", self.client.fail("Error scaling %s - expected int, got %s",
service_name, str(type(self.scale[service_name]))) service_name, to_native(type(self.scale[service_name])))
def main(): def main():
@ -1142,9 +1144,11 @@ def main():
result = ContainerManager(client).exec_module() result = ContainerManager(client).exec_module()
client.module.exit_json(**result) client.module.exit_json(**result)
except DockerException as e: except DockerException as e:
client.fail('An unexpected docker error occurred: {0}'.format(e), exception=traceback.format_exc()) client.fail('An unexpected docker error occurred: {0}'.format(to_native(e)), exception=traceback.format_exc())
except RequestException as e: except RequestException as e:
client.fail('An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(e), exception=traceback.format_exc()) client.fail(
'An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(to_native(e)),
exception=traceback.format_exc())
if __name__ == '__main__': if __name__ == '__main__':

View File

@ -290,9 +290,11 @@ def main():
ConfigManager(client, results)() ConfigManager(client, results)()
client.module.exit_json(**results) client.module.exit_json(**results)
except DockerException as e: except DockerException as e:
client.fail('An unexpected docker error occurred: {0}'.format(e), exception=traceback.format_exc()) client.fail('An unexpected docker error occurred: {0}'.format(to_native(e)), exception=traceback.format_exc())
except RequestException as e: except RequestException as e:
client.fail('An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(e), exception=traceback.format_exc()) client.fail(
'An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(to_native(e)),
exception=traceback.format_exc())
if __name__ == '__main__': if __name__ == '__main__':

View File

@ -1416,7 +1416,7 @@ class TaskParameters(DockerBaseClass):
try: try:
setattr(self, param_name, human_to_bytes(client.module.params.get(param_name))) setattr(self, param_name, human_to_bytes(client.module.params.get(param_name)))
except ValueError as exc: except ValueError as exc:
self.fail("Failed to convert %s to bytes: %s" % (param_name, exc)) self.fail("Failed to convert %s to bytes: %s" % (param_name, to_native(exc)))
self.publish_all_ports = False self.publish_all_ports = False
self.published_ports = self._parse_publish_ports() self.published_ports = self._parse_publish_ports()
@ -1728,7 +1728,7 @@ class TaskParameters(DockerBaseClass):
break break
except NotFound as nfe: except NotFound as nfe:
self.client.fail( self.client.fail(
"Cannot inspect the network '{0}' to determine the default IP: {1}".format(net['name'], nfe), "Cannot inspect the network '{0}' to determine the default IP: {1}".format(net['name'], to_native(nfe)),
exception=traceback.format_exc() exception=traceback.format_exc()
) )
return ip return ip
@ -1898,7 +1898,7 @@ class TaskParameters(DockerBaseClass):
try: try:
results.append(Ulimit(**limits)) results.append(Ulimit(**limits))
except ValueError as exc: except ValueError as exc:
self.fail("Error parsing ulimits value %s - %s" % (limit, exc)) self.fail("Error parsing ulimits value %s - %s" % (limit, to_native(exc)))
return results return results
def _parse_sysctls(self): def _parse_sysctls(self):
@ -1935,7 +1935,7 @@ class TaskParameters(DockerBaseClass):
try: try:
return LogConfig(**options) return LogConfig(**options)
except ValueError as exc: except ValueError as exc:
self.fail('Error parsing logging options - %s' % (exc)) self.fail('Error parsing logging options - %s' % (to_native(exc), ))
def _parse_tmpfs(self): def _parse_tmpfs(self):
''' '''
@ -2019,7 +2019,7 @@ class TaskParameters(DockerBaseClass):
try: try:
mount_dict['tmpfs_size'] = human_to_bytes(mount_dict['tmpfs_size']) mount_dict['tmpfs_size'] = human_to_bytes(mount_dict['tmpfs_size'])
except ValueError as exc: except ValueError as exc:
self.fail('Failed to convert tmpfs_size of mount "{0}" to bytes: {1}'.format(target, exc)) self.fail('Failed to convert tmpfs_size of mount "{0}" to bytes: {1}'.format(target, to_native(exc)))
if mount_dict.get('tmpfs_mode') is not None: if mount_dict.get('tmpfs_mode') is not None:
try: try:
mount_dict['tmpfs_mode'] = int(mount_dict['tmpfs_mode'], 8) mount_dict['tmpfs_mode'] = int(mount_dict['tmpfs_mode'], 8)
@ -3164,7 +3164,7 @@ class ContainerManager(DockerBaseClass):
else: else:
response = self.client.kill(container_id) response = self.client.kill(container_id)
except Exception as exc: except Exception as exc:
self.fail("Error killing container %s: %s" % (container_id, exc)) self.fail("Error killing container %s: %s" % (container_id, to_native(exc)))
return response return response
def container_restart(self, container_id): def container_restart(self, container_id):
@ -3608,9 +3608,11 @@ def main():
cm = ContainerManager(client) cm = ContainerManager(client)
client.module.exit_json(**sanitize_result(cm.results)) client.module.exit_json(**sanitize_result(cm.results))
except DockerException as e: except DockerException as e:
client.fail('An unexpected docker error occurred: {0}'.format(e), exception=traceback.format_exc()) client.fail('An unexpected docker error occurred: {0}'.format(to_native(e)), exception=traceback.format_exc())
except RequestException as e: except RequestException as e:
client.fail('An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(e), exception=traceback.format_exc()) client.fail(
'An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(to_native(e)),
exception=traceback.format_exc())
if __name__ == '__main__': if __name__ == '__main__':

View File

@ -126,7 +126,7 @@ rc:
import shlex import shlex
import traceback import traceback
from ansible.module_utils._text import to_text, to_bytes from ansible.module_utils._text import to_text, to_bytes, to_native
from ansible_collections.community.docker.plugins.module_utils.common import ( from ansible_collections.community.docker.plugins.module_utils.common import (
AnsibleDockerClient, AnsibleDockerClient,
@ -244,12 +244,14 @@ def main():
client.fail('Could not find container "{0}"'.format(container)) client.fail('Could not find container "{0}"'.format(container))
except APIError as e: except APIError as e:
if e.response and e.response.status_code == 409: if e.response and e.response.status_code == 409:
client.fail('The container "{0}" has been paused ({1})'.format(container, e)) client.fail('The container "{0}" has been paused ({1})'.format(container, to_native(e)))
client.fail('An unexpected docker error occurred: {0}'.format(e), exception=traceback.format_exc()) client.fail('An unexpected docker error occurred: {0}'.format(to_native(e)), exception=traceback.format_exc())
except DockerException as e: except DockerException as e:
client.fail('An unexpected docker error occurred: {0}'.format(e), exception=traceback.format_exc()) client.fail('An unexpected docker error occurred: {0}'.format(to_native(e)), exception=traceback.format_exc())
except RequestException as e: except RequestException as e:
client.fail('An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(e), exception=traceback.format_exc()) client.fail(
'An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(to_native(e)),
exception=traceback.format_exc())
if __name__ == '__main__': if __name__ == '__main__':

View File

@ -104,6 +104,8 @@ container:
import traceback import traceback
from ansible.module_utils._text import to_native
try: try:
from docker.errors import DockerException from docker.errors import DockerException
except ImportError: except ImportError:
@ -136,9 +138,11 @@ def main():
container=container, container=container,
) )
except DockerException as e: except DockerException as e:
client.fail('An unexpected docker error occurred: {0}'.format(e), exception=traceback.format_exc()) client.fail('An unexpected docker error occurred: {0}'.format(to_native(e)), exception=traceback.format_exc())
except RequestException as e: except RequestException as e:
client.fail('An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(e), exception=traceback.format_exc()) client.fail(
'An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(to_native(e)),
exception=traceback.format_exc())
if __name__ == '__main__': if __name__ == '__main__':

View File

@ -334,9 +334,11 @@ def main():
DockerHostManager(client, results) DockerHostManager(client, results)
client.module.exit_json(**results) client.module.exit_json(**results)
except DockerException as e: except DockerException as e:
client.fail('An unexpected docker error occurred: {0}'.format(e), exception=traceback.format_exc()) client.fail('An unexpected docker error occurred: {0}'.format(to_native(e)), exception=traceback.format_exc())
except RequestException as e: except RequestException as e:
client.fail('An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(e), exception=traceback.format_exc()) client.fail(
'An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(to_native(e)),
exception=traceback.format_exc())
if __name__ == '__main__': if __name__ == '__main__':

View File

@ -501,7 +501,7 @@ class ImageManager(DockerBaseClass):
# If the image vanished while we were trying to remove it, don't fail # If the image vanished while we were trying to remove it, don't fail
pass pass
except Exception as exc: except Exception as exc:
self.fail("Error removing image %s - %s" % (name, str(exc))) self.fail("Error removing image %s - %s" % (name, to_native(exc)))
self.results['changed'] = True self.results['changed'] = True
self.results['actions'].append("Removed image %s" % (name)) self.results['actions'].append("Removed image %s" % (name))
@ -536,7 +536,7 @@ class ImageManager(DockerBaseClass):
try: try:
saved_image = self.client.get_image(image_name) saved_image = self.client.get_image(image_name)
except Exception as exc: except Exception as exc:
self.fail("Error getting image %s - %s" % (image_name, str(exc))) self.fail("Error getting image %s - %s" % (image_name, to_native(exc)))
try: try:
with open(self.archive_path, 'wb') as fd: with open(self.archive_path, 'wb') as fd:
@ -547,7 +547,7 @@ class ImageManager(DockerBaseClass):
for chunk in saved_image.stream(2048, decode_content=False): for chunk in saved_image.stream(2048, decode_content=False):
fd.write(chunk) fd.write(chunk)
except Exception as exc: except Exception as exc:
self.fail("Error writing image archive %s - %s" % (self.archive_path, str(exc))) self.fail("Error writing image archive %s - %s" % (self.archive_path, to_native(exc)))
if image: if image:
self.results['image'] = image self.results['image'] = image
@ -590,11 +590,11 @@ class ImageManager(DockerBaseClass):
if re.search('unauthorized', str(exc)): if re.search('unauthorized', str(exc)):
if re.search('authentication required', str(exc)): if re.search('authentication required', str(exc)):
self.fail("Error pushing image %s/%s:%s - %s. Try logging into %s first." % self.fail("Error pushing image %s/%s:%s - %s. Try logging into %s first." %
(registry, repo_name, tag, str(exc), registry)) (registry, repo_name, tag, to_native(exc), registry))
else: else:
self.fail("Error pushing image %s/%s:%s - %s. Does the repository exist?" % self.fail("Error pushing image %s/%s:%s - %s. Does the repository exist?" %
(registry, repo_name, tag, str(exc))) (registry, repo_name, tag, str(exc)))
self.fail("Error pushing image %s: %s" % (repository, str(exc))) self.fail("Error pushing image %s: %s" % (repository, to_native(exc)))
self.results['image'] = self.client.find_image(name=repository, tag=tag) self.results['image'] = self.client.find_image(name=repository, tag=tag)
if not self.results['image']: if not self.results['image']:
self.results['image'] = dict() self.results['image'] = dict()
@ -634,7 +634,7 @@ class ImageManager(DockerBaseClass):
if not tag_status: if not tag_status:
raise Exception("Tag operation failed.") raise Exception("Tag operation failed.")
except Exception as exc: except Exception as exc:
self.fail("Error: failed to tag image - %s" % str(exc)) self.fail("Error: failed to tag image - %s" % to_native(exc))
self.results['image'] = self.client.find_image(name=repo, tag=repo_tag) self.results['image'] = self.client.find_image(name=repo, tag=repo_tag)
if image and image['Id'] == self.results['image']['Id']: if image and image['Id'] == self.results['image']['Id']:
self.results['changed'] = False self.results['changed'] = False
@ -763,10 +763,10 @@ class ImageManager(DockerBaseClass):
) )
except EnvironmentError as exc: except EnvironmentError as exc:
if exc.errno == errno.ENOENT: if exc.errno == errno.ENOENT:
self.client.fail("Error opening image %s - %s" % (self.load_path, str(exc))) self.client.fail("Error opening image %s - %s" % (self.load_path, to_native(exc)))
self.client.fail("Error loading image %s - %s" % (self.name, str(exc)), stdout='\n'.join(load_output)) self.client.fail("Error loading image %s - %s" % (self.name, to_native(exc)), stdout='\n'.join(load_output))
except Exception as exc: except Exception as exc:
self.client.fail("Error loading image %s - %s" % (self.name, str(exc)), stdout='\n'.join(load_output)) self.client.fail("Error loading image %s - %s" % (self.name, to_native(exc)), stdout='\n'.join(load_output))
# Collect loaded images # Collect loaded images
if has_output: if has_output:
@ -908,9 +908,11 @@ def main():
ImageManager(client, results) ImageManager(client, results)
client.module.exit_json(**results) client.module.exit_json(**results)
except DockerException as e: except DockerException as e:
client.fail('An unexpected docker error occurred: {0}'.format(e), exception=traceback.format_exc()) client.fail('An unexpected docker error occurred: {0}'.format(to_native(e)), exception=traceback.format_exc())
except RequestException as e: except RequestException as e:
client.fail('An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(e), exception=traceback.format_exc()) client.fail(
'An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(to_native(e)),
exception=traceback.format_exc())
if __name__ == '__main__': if __name__ == '__main__':

View File

@ -165,6 +165,8 @@ images:
import traceback import traceback
from ansible.module_utils._text import to_native
try: try:
from docker import utils from docker import utils
from docker.errors import DockerException, NotFound from docker.errors import DockerException, NotFound
@ -235,7 +237,7 @@ class ImageManager(DockerBaseClass):
except NotFound: except NotFound:
pass pass
except Exception as exc: except Exception as exc:
self.fail("Error inspecting image %s - %s" % (image['Id'], str(exc))) self.fail("Error inspecting image %s - %s" % (image['Id'], to_native(exc)))
results.append(inspection) results.append(inspection)
return results return results
@ -260,9 +262,11 @@ def main():
ImageManager(client, results) ImageManager(client, results)
client.module.exit_json(**results) client.module.exit_json(**results)
except DockerException as e: except DockerException as e:
client.fail('An unexpected docker error occurred: {0}'.format(e), exception=traceback.format_exc()) client.fail('An unexpected docker error occurred: {0}'.format(to_native(e)), exception=traceback.format_exc())
except RequestException as e: except RequestException as e:
client.fail('An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(e), exception=traceback.format_exc()) client.fail(
'An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(to_native(e)),
exception=traceback.format_exc())
if __name__ == '__main__': if __name__ == '__main__':

View File

@ -73,6 +73,8 @@ images:
import errno import errno
import traceback import traceback
from ansible.module_utils._text import to_native
from ansible_collections.community.docker.plugins.module_utils.common import ( from ansible_collections.community.docker.plugins.module_utils.common import (
AnsibleDockerClient, AnsibleDockerClient,
DockerBaseClass, DockerBaseClass,
@ -126,10 +128,10 @@ class ImageManager(DockerBaseClass):
self._extract_output_line(line, load_output) self._extract_output_line(line, load_output)
except EnvironmentError as exc: except EnvironmentError as exc:
if exc.errno == errno.ENOENT: if exc.errno == errno.ENOENT:
self.client.fail("Error opening archive {0} - {1}".format(self.path, str(exc))) self.client.fail("Error opening archive {0} - {1}".format(self.path, to_native(exc)))
self.client.fail("Error loading archive {0} - {1}".format(self.path, str(exc)), stdout='\n'.join(load_output)) self.client.fail("Error loading archive {0} - {1}".format(self.path, to_native(exc)), stdout='\n'.join(load_output))
except Exception as exc: except Exception as exc:
self.client.fail("Error loading archive {0} - {1}".format(self.path, str(exc)), stdout='\n'.join(load_output)) self.client.fail("Error loading archive {0} - {1}".format(self.path, to_native(exc)), stdout='\n'.join(load_output))
# Collect loaded images # Collect loaded images
loaded_images = [] loaded_images = []
@ -177,10 +179,11 @@ def main():
ImageManager(client, results) ImageManager(client, results)
client.module.exit_json(**results) client.module.exit_json(**results)
except DockerException as e: except DockerException as e:
client.fail('An unexpected docker error occurred: {0}'.format(e), exception=traceback.format_exc()) client.fail('An unexpected docker error occurred: {0}'.format(to_native(e)), exception=traceback.format_exc())
except RequestException as e: except RequestException as e:
client.fail('An unexpected requests error occurred when docker-py tried to talk ' client.fail(
'to the docker daemon: {0}'.format(e), exception=traceback.format_exc()) 'An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(to_native(e)),
exception=traceback.format_exc())
if __name__ == '__main__': if __name__ == '__main__':

View File

@ -124,7 +124,8 @@ import json
import os import os
import re import re
import traceback import traceback
from ansible.module_utils._text import to_bytes, to_text
from ansible.module_utils._text import to_bytes, to_text, to_native
try: try:
from docker.errors import DockerException from docker.errors import DockerException
@ -333,7 +334,7 @@ class LoginManager(DockerBaseClass):
dockercfg_path=self.config_path dockercfg_path=self.config_path
) )
except Exception as exc: except Exception as exc:
self.fail("Logging into %s for user %s failed - %s" % (self.registry_url, self.username, str(exc))) self.fail("Logging into %s for user %s failed - %s" % (self.registry_url, self.username, to_native(exc)))
# If user is already logged in, then response contains password for user # If user is already logged in, then response contains password for user
if 'password' in response: if 'password' in response:
@ -351,7 +352,7 @@ class LoginManager(DockerBaseClass):
dockercfg_path=self.config_path dockercfg_path=self.config_path
) )
except Exception as exc: except Exception as exc:
self.fail("Logging into %s for user %s failed - %s" % (self.registry_url, self.username, str(exc))) self.fail("Logging into %s for user %s failed - %s" % (self.registry_url, self.username, to_native(exc)))
response.pop('password', None) response.pop('password', None)
self.results['login_result'] = response self.results['login_result'] = response
@ -477,9 +478,11 @@ def main():
del results['actions'] del results['actions']
client.module.exit_json(**results) client.module.exit_json(**results)
except DockerException as e: except DockerException as e:
client.fail('An unexpected docker error occurred: {0}'.format(e), exception=traceback.format_exc()) client.fail('An unexpected docker error occurred: {0}'.format(to_native(e)), exception=traceback.format_exc())
except RequestException as e: except RequestException as e:
client.fail('An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(e), exception=traceback.format_exc()) client.fail(
'An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(to_native(e)),
exception=traceback.format_exc())
if __name__ == '__main__': if __name__ == '__main__':

View File

@ -254,6 +254,8 @@ import traceback
from distutils.version import LooseVersion from distutils.version import LooseVersion
from ansible.module_utils._text import to_native
from ansible_collections.community.docker.plugins.module_utils.common import ( from ansible_collections.community.docker.plugins.module_utils.common import (
AnsibleDockerClient, AnsibleDockerClient,
DockerBaseClass, DockerBaseClass,
@ -370,7 +372,7 @@ class DockerNetworkManager(object):
for ipam_config in self.parameters.ipam_config: for ipam_config in self.parameters.ipam_config:
validate_cidr(ipam_config['subnet']) validate_cidr(ipam_config['subnet'])
except ValueError as e: except ValueError as e:
self.client.fail(str(e)) self.client.fail(to_native(e))
if self.parameters.driver_options: if self.parameters.driver_options:
self.parameters.driver_options = clean_dict_booleans_for_docker_api(self.parameters.driver_options) self.parameters.driver_options = clean_dict_booleans_for_docker_api(self.parameters.driver_options)
@ -663,9 +665,11 @@ def main():
cm = DockerNetworkManager(client) cm = DockerNetworkManager(client)
client.module.exit_json(**cm.results) client.module.exit_json(**cm.results)
except DockerException as e: except DockerException as e:
client.fail('An unexpected docker error occurred: {0}'.format(e), exception=traceback.format_exc()) client.fail('An unexpected docker error occurred: {0}'.format(to_native(e)), exception=traceback.format_exc())
except RequestException as e: except RequestException as e:
client.fail('An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(e), exception=traceback.format_exc()) client.fail(
'An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(to_native(e)),
exception=traceback.format_exc())
if __name__ == '__main__': if __name__ == '__main__':

View File

@ -100,6 +100,8 @@ network:
import traceback import traceback
from ansible.module_utils._text import to_native
try: try:
from docker.errors import DockerException from docker.errors import DockerException
except ImportError: except ImportError:
@ -132,9 +134,11 @@ def main():
network=network, network=network,
) )
except DockerException as e: except DockerException as e:
client.fail('An unexpected docker error occurred: {0}'.format(e), exception=traceback.format_exc()) client.fail('An unexpected docker error occurred: {0}'.format(to_native(e)), exception=traceback.format_exc())
except RequestException as e: except RequestException as e:
client.fail('An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(e), exception=traceback.format_exc()) client.fail(
'An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(to_native(e)),
exception=traceback.format_exc())
if __name__ == '__main__': if __name__ == '__main__':

View File

@ -285,9 +285,11 @@ def main():
SwarmNodeManager(client, results) SwarmNodeManager(client, results)
client.module.exit_json(**results) client.module.exit_json(**results)
except DockerException as e: except DockerException as e:
client.fail('An unexpected docker error occurred: {0}'.format(e), exception=traceback.format_exc()) client.fail('An unexpected docker error occurred: {0}'.format(to_native(e)), exception=traceback.format_exc())
except RequestException as e: except RequestException as e:
client.fail('An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(e), exception=traceback.format_exc()) client.fail(
'An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(to_native(e)),
exception=traceback.format_exc())
if __name__ == '__main__': if __name__ == '__main__':

View File

@ -87,6 +87,8 @@ nodes:
import traceback import traceback
from ansible.module_utils._text import to_native
from ansible_collections.community.docker.plugins.module_utils.common import ( from ansible_collections.community.docker.plugins.module_utils.common import (
RequestException, RequestException,
) )
@ -147,9 +149,11 @@ def main():
nodes=nodes, nodes=nodes,
) )
except DockerException as e: except DockerException as e:
client.fail('An unexpected docker error occurred: {0}'.format(e), exception=traceback.format_exc()) client.fail('An unexpected docker error occurred: {0}'.format(to_native(e)), exception=traceback.format_exc())
except RequestException as e: except RequestException as e:
client.fail('An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(e), exception=traceback.format_exc()) client.fail(
'An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(to_native(e)),
exception=traceback.format_exc())
if __name__ == '__main__': if __name__ == '__main__':

View File

@ -108,6 +108,8 @@ plugin:
import traceback import traceback
from ansible.module_utils._text import to_native
try: try:
from docker.errors import APIError, NotFound, DockerException from docker.errors import APIError, NotFound, DockerException
from docker import DockerClient from docker import DockerClient
@ -122,8 +124,6 @@ from ansible_collections.community.docker.plugins.module_utils.common import (
RequestException RequestException
) )
from ansible.module_utils.six import text_type
class TaskParameters(DockerBaseClass): class TaskParameters(DockerBaseClass):
def __init__(self, client): def __init__(self, client):
@ -189,7 +189,7 @@ class DockerPluginManager(object):
except NotFound: except NotFound:
return None return None
except APIError as e: except APIError as e:
self.client.fail(text_type(e)) self.client.fail(to_native(e))
if plugin is None: if plugin is None:
return None return None
@ -227,7 +227,7 @@ class DockerPluginManager(object):
try: try:
self.existing_plugin = self.dclient.plugins.install(self.parameters.plugin_name, None) self.existing_plugin = self.dclient.plugins.install(self.parameters.plugin_name, None)
except APIError as e: except APIError as e:
self.client.fail(text_type(e)) self.client.fail(to_native(e))
self.results['actions'].append("Installed plugin %s" % self.parameters.plugin_name) self.results['actions'].append("Installed plugin %s" % self.parameters.plugin_name)
self.results['changed'] = True self.results['changed'] = True
@ -239,7 +239,7 @@ class DockerPluginManager(object):
try: try:
self.existing_plugin.remove(force) self.existing_plugin.remove(force)
except APIError as e: except APIError as e:
self.client.fail(text_type(e)) self.client.fail(to_native(e))
self.results['actions'].append("Removed plugin %s" % self.parameters.plugin_name) self.results['actions'].append("Removed plugin %s" % self.parameters.plugin_name)
self.results['changed'] = True self.results['changed'] = True
@ -252,7 +252,7 @@ class DockerPluginManager(object):
try: try:
self.existing_plugin.configure(prepare_options(self.parameters.plugin_options)) self.existing_plugin.configure(prepare_options(self.parameters.plugin_options))
except APIError as e: except APIError as e:
self.client.fail(text_type(e)) self.client.fail(to_native(e))
self.results['actions'].append("Updated plugin %s settings" % self.parameters.plugin_name) self.results['actions'].append("Updated plugin %s settings" % self.parameters.plugin_name)
self.results['changed'] = True self.results['changed'] = True
else: else:
@ -287,7 +287,7 @@ class DockerPluginManager(object):
try: try:
self.existing_plugin.enable(timeout) self.existing_plugin.enable(timeout)
except APIError as e: except APIError as e:
self.client.fail(text_type(e)) self.client.fail(to_native(e))
self.results['actions'].append("Enabled plugin %s" % self.parameters.plugin_name) self.results['actions'].append("Enabled plugin %s" % self.parameters.plugin_name)
self.results['changed'] = True self.results['changed'] = True
else: else:
@ -296,7 +296,7 @@ class DockerPluginManager(object):
try: try:
self.existing_plugin.enable(timeout) self.existing_plugin.enable(timeout)
except APIError as e: except APIError as e:
self.client.fail(text_type(e)) self.client.fail(to_native(e))
self.results['actions'].append("Enabled plugin %s" % self.parameters.plugin_name) self.results['actions'].append("Enabled plugin %s" % self.parameters.plugin_name)
self.results['changed'] = True self.results['changed'] = True
@ -307,7 +307,7 @@ class DockerPluginManager(object):
try: try:
self.existing_plugin.disable() self.existing_plugin.disable()
except APIError as e: except APIError as e:
self.client.fail(text_type(e)) self.client.fail(to_native(e))
self.results['actions'].append("Disable plugin %s" % self.parameters.plugin_name) self.results['actions'].append("Disable plugin %s" % self.parameters.plugin_name)
self.results['changed'] = True self.results['changed'] = True
else: else:
@ -334,9 +334,11 @@ def main():
cm = DockerPluginManager(client) cm = DockerPluginManager(client)
client.module.exit_json(**cm.results) client.module.exit_json(**cm.results)
except DockerException as e: except DockerException as e:
client.fail('An unexpected docker error occurred: {0}'.format(e), exception=traceback.format_exc()) client.fail('An unexpected docker error occurred: {0}'.format(to_native(e)), exception=traceback.format_exc())
except RequestException as e: except RequestException as e:
client.fail('An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(e), exception=traceback.format_exc()) client.fail(
'An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(to_native(e)),
exception=traceback.format_exc())
if __name__ == '__main__': if __name__ == '__main__':

View File

@ -178,6 +178,8 @@ builder_cache_space_reclaimed:
import traceback import traceback
from ansible.module_utils._text import to_native
try: try:
from docker.errors import DockerException from docker.errors import DockerException
except ImportError: except ImportError:
@ -256,9 +258,11 @@ def main():
client.module.exit_json(**result) client.module.exit_json(**result)
except DockerException as e: except DockerException as e:
client.fail('An unexpected docker error occurred: {0}'.format(e), exception=traceback.format_exc()) client.fail('An unexpected docker error occurred: {0}'.format(to_native(e)), exception=traceback.format_exc())
except RequestException as e: except RequestException as e:
client.fail('An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(e), exception=traceback.format_exc()) client.fail(
'An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(to_native(e)),
exception=traceback.format_exc())
if __name__ == '__main__': if __name__ == '__main__':

View File

@ -293,9 +293,11 @@ def main():
SecretManager(client, results)() SecretManager(client, results)()
client.module.exit_json(**results) client.module.exit_json(**results)
except DockerException as e: except DockerException as e:
client.fail('An unexpected docker error occurred: {0}'.format(e), exception=traceback.format_exc()) client.fail('An unexpected docker error occurred: {0}'.format(to_native(e)), exception=traceback.format_exc())
except RequestException as e: except RequestException as e:
client.fail('An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(e), exception=traceback.format_exc()) client.fail(
'An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(to_native(e)),
exception=traceback.format_exc())
if __name__ == '__main__': if __name__ == '__main__':

View File

@ -663,9 +663,11 @@ def main():
SwarmManager(client, results)() SwarmManager(client, results)()
client.module.exit_json(**results) client.module.exit_json(**results)
except DockerException as e: except DockerException as e:
client.fail('An unexpected docker error occurred: {0}'.format(e), exception=traceback.format_exc()) client.fail('An unexpected docker error occurred: {0}'.format(to_native(e)), exception=traceback.format_exc())
except RequestException as e: except RequestException as e:
client.fail('An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(e), exception=traceback.format_exc()) client.fail(
'An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(to_native(e)),
exception=traceback.format_exc())
if __name__ == '__main__': if __name__ == '__main__':

View File

@ -375,9 +375,11 @@ def main():
results.update(client.fail_results) results.update(client.fail_results)
client.module.exit_json(**results) client.module.exit_json(**results)
except DockerException as e: except DockerException as e:
client.fail('An unexpected docker error occurred: {0}'.format(e), exception=traceback.format_exc()) client.fail('An unexpected docker error occurred: {0}'.format(to_native(e)), exception=traceback.format_exc())
except RequestException as e: except RequestException as e:
client.fail('An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(e), exception=traceback.format_exc()) client.fail(
'An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(to_native(e)),
exception=traceback.format_exc())
if __name__ == '__main__': if __name__ == '__main__':

View File

@ -934,7 +934,7 @@ from ansible_collections.community.docker.plugins.module_utils.common import (
from ansible.module_utils.basic import human_to_bytes from ansible.module_utils.basic import human_to_bytes
from ansible.module_utils.six import string_types from ansible.module_utils.six import string_types
from ansible.module_utils._text import to_text from ansible.module_utils._text import to_text, to_native
try: try:
from docker import types from docker import types
@ -2419,7 +2419,7 @@ class DockerServiceManager(object):
except DockerException as e: except DockerException as e:
self.client.fail( self.client.fail(
'Error looking for an image named %s: %s' 'Error looking for an image named %s: %s'
% (image, e) % (image, to_native(e))
) )
try: try:
@ -2427,7 +2427,7 @@ class DockerServiceManager(object):
except Exception as e: except Exception as e:
self.client.fail( self.client.fail(
'Error looking for service named %s: %s' 'Error looking for service named %s: %s'
% (module.params['name'], e) % (module.params['name'], to_native(e))
) )
try: try:
secret_ids = self.get_missing_secret_ids() secret_ids = self.get_missing_secret_ids()
@ -2445,7 +2445,7 @@ class DockerServiceManager(object):
) )
except Exception as e: except Exception as e:
return self.client.fail( return self.client.fail(
'Error parsing module parameters: %s' % e 'Error parsing module parameters: %s' % to_native(e)
) )
changed = False changed = False
@ -2822,9 +2822,11 @@ def main():
client.module.exit_json(**results) client.module.exit_json(**results)
except DockerException as e: except DockerException as e:
client.fail('An unexpected docker error occurred: {0}'.format(e), exception=traceback.format_exc()) client.fail('An unexpected docker error occurred: {0}'.format(to_native(e)), exception=traceback.format_exc())
except RequestException as e: except RequestException as e:
client.fail('An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(e), exception=traceback.format_exc()) client.fail(
'An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(to_native(e)),
exception=traceback.format_exc())
if __name__ == '__main__': if __name__ == '__main__':

View File

@ -62,6 +62,8 @@ service:
import traceback import traceback
from ansible.module_utils._text import to_native
try: try:
from docker.errors import DockerException from docker.errors import DockerException
except ImportError: except ImportError:
@ -106,9 +108,11 @@ def main():
exists=bool(service) exists=bool(service)
) )
except DockerException as e: except DockerException as e:
client.fail('An unexpected docker error occurred: {0}'.format(e), exception=traceback.format_exc()) client.fail('An unexpected docker error occurred: {0}'.format(to_native(e)), exception=traceback.format_exc())
except RequestException as e: except RequestException as e:
client.fail('An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(e), exception=traceback.format_exc()) client.fail(
'An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(to_native(e)),
exception=traceback.format_exc())
if __name__ == '__main__': if __name__ == '__main__':

View File

@ -109,6 +109,8 @@ volume:
import traceback import traceback
from ansible.module_utils._text import to_native
try: try:
from docker.errors import DockerException, APIError from docker.errors import DockerException, APIError
except ImportError: except ImportError:
@ -171,7 +173,7 @@ class DockerVolumeManager(object):
try: try:
volumes = self.client.volumes() volumes = self.client.volumes()
except APIError as e: except APIError as e:
self.client.fail(text_type(e)) self.client.fail(to_native(e))
if volumes[u'Volumes'] is None: if volumes[u'Volumes'] is None:
return None return None
@ -228,7 +230,7 @@ class DockerVolumeManager(object):
resp = self.client.create_volume(self.parameters.volume_name, **params) resp = self.client.create_volume(self.parameters.volume_name, **params)
self.existing_volume = self.client.inspect_volume(resp['Name']) self.existing_volume = self.client.inspect_volume(resp['Name'])
except APIError as e: except APIError as e:
self.client.fail(text_type(e)) self.client.fail(to_native(e))
self.results['actions'].append("Created volume %s with driver %s" % (self.parameters.volume_name, self.parameters.driver)) self.results['actions'].append("Created volume %s with driver %s" % (self.parameters.volume_name, self.parameters.driver))
self.results['changed'] = True self.results['changed'] = True
@ -239,7 +241,7 @@ class DockerVolumeManager(object):
try: try:
self.client.remove_volume(self.parameters.volume_name) self.client.remove_volume(self.parameters.volume_name)
except APIError as e: except APIError as e:
self.client.fail(text_type(e)) self.client.fail(to_native(e))
self.results['actions'].append("Removed volume %s" % self.parameters.volume_name) self.results['actions'].append("Removed volume %s" % self.parameters.volume_name)
self.results['changed'] = True self.results['changed'] = True
@ -299,9 +301,11 @@ def main():
cm = DockerVolumeManager(client) cm = DockerVolumeManager(client)
client.module.exit_json(**cm.results) client.module.exit_json(**cm.results)
except DockerException as e: except DockerException as e:
client.fail('An unexpected docker error occurred: {0}'.format(e), exception=traceback.format_exc()) client.fail('An unexpected docker error occurred: {0}'.format(to_native(e)), exception=traceback.format_exc())
except RequestException as e: except RequestException as e:
client.fail('An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(e), exception=traceback.format_exc()) client.fail(
'An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(to_native(e)),
exception=traceback.format_exc())
if __name__ == '__main__': if __name__ == '__main__':

View File

@ -77,6 +77,8 @@ volume:
import traceback import traceback
from ansible.module_utils._text import to_native
try: try:
from docker.errors import DockerException, NotFound from docker.errors import DockerException, NotFound
except ImportError: except ImportError:
@ -95,7 +97,7 @@ def get_existing_volume(client, volume_name):
except NotFound as dummy: except NotFound as dummy:
return None return None
except Exception as exc: except Exception as exc:
client.fail("Error inspecting volume: %s" % exc) client.fail("Error inspecting volume: %s" % to_native(exc))
def main(): def main():
@ -119,9 +121,11 @@ def main():
volume=volume, volume=volume,
) )
except DockerException as e: except DockerException as e:
client.fail('An unexpected docker error occurred: {0}'.format(e), exception=traceback.format_exc()) client.fail('An unexpected docker error occurred: {0}'.format(to_native(e)), exception=traceback.format_exc())
except RequestException as e: except RequestException as e:
client.fail('An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(e), exception=traceback.format_exc()) client.fail(
'An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}'.format(to_native(e)),
exception=traceback.format_exc())
if __name__ == '__main__': if __name__ == '__main__':