From 965474841fe539e66063478c2e9eee34eabb91d8 Mon Sep 17 00:00:00 2001 From: Mads Jensen Date: Sun, 8 Dec 2019 14:36:33 +0100 Subject: [PATCH] Use a context manager in docker.ImageManager. (#65609) Co-Authored-By: Felix Fontein --- .../65609-docker-context-manager.yml | 2 ++ .../modules/cloud/docker/docker_image.py | 20 ++++++++----------- 2 files changed, 10 insertions(+), 12 deletions(-) create mode 100644 changelogs/fragments/65609-docker-context-manager.yml diff --git a/changelogs/fragments/65609-docker-context-manager.yml b/changelogs/fragments/65609-docker-context-manager.yml new file mode 100644 index 00000000000..2ba458b442c --- /dev/null +++ b/changelogs/fragments/65609-docker-context-manager.yml @@ -0,0 +1,2 @@ +bugfixes: + - docker_image - improve file handling when loading images from disk. diff --git a/lib/ansible/modules/cloud/docker/docker_image.py b/lib/ansible/modules/cloud/docker/docker_image.py index f8cfa6e8b2c..1cb42adc9cf 100644 --- a/lib/ansible/modules/cloud/docker/docker_image.py +++ b/lib/ansible/modules/cloud/docker/docker_image.py @@ -426,6 +426,7 @@ image: sample: {} ''' +import errno import os import re import traceback @@ -787,20 +788,15 @@ class ImageManager(DockerBaseClass): ''' try: self.log("Opening image %s" % self.load_path) - image_tar = open(self.load_path, 'rb') - except Exception as exc: - self.fail("Error opening image %s - %s" % (self.load_path, str(exc))) - - try: - self.log("Loading image from %s" % self.load_path) - self.client.load_image(image_tar) - except Exception as exc: + with open(self.load_path, 'rb') as image_tar: + self.log("Loading image from %s" % self.load_path) + self.client.load_image(image_tar) + except EnvironmentError as exc: + if exc.errno == errno.ENOENT: + self.fail("Error opening image %s - %s" % (self.load_path, str(exc))) self.fail("Error loading image %s - %s" % (self.name, str(exc))) - - try: - image_tar.close() except Exception as exc: - self.fail("Error closing image %s - %s" % (self.name, str(exc))) + self.fail("Error loading image %s - %s" % (self.name, str(exc))) return self.client.find_image(self.name, self.tag)