From 4c91f67662171989f1297113db9cc131a3e05dc6 Mon Sep 17 00:00:00 2001 From: Michal Nasiadka Date: Wed, 16 May 2018 10:24:56 +0200 Subject: Fix image push for python3 Rework push_image function to use docker client push function with decode=True, to decode automatically to dict. Change-Id: I28d38e968c3809a1074347271e49dc07dc861f11 Closes-Bug: 1771514 --- kolla/image/build.py | 11 +++++------ kolla/tests/test_build.py | 5 +++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/kolla/image/build.py b/kolla/image/build.py index cd59aa260..db388b32b 100755 --- a/kolla/image/build.py +++ b/kolla/image/build.py @@ -338,7 +338,7 @@ class PushTask(DockerTask): self.success = False def push_image(self, image): - kwargs = dict(stream=True) + kwargs = dict(stream=True, decode=True) # Since docker 3.0.0, the argument of 'insecure_registry' is removed. # To be compatible, set 'insecure_registry=True' for old releases. @@ -347,12 +347,11 @@ class PushTask(DockerTask): kwargs['insecure_registry'] = True for response in self.dc.push(image.canonical_name, **kwargs): - stream = json.loads(response) - if 'stream' in stream: - self.logger.info(stream['stream']) - elif 'errorDetail' in stream: + if 'stream' in response: + self.logger.info(response['stream']) + elif 'errorDetail' in response: image.status = STATUS_ERROR - self.logger.error(stream['errorDetail']['message']) + self.logger.error(response['errorDetail']['message']) class BuildTask(DockerTask): diff --git a/kolla/tests/test_build.py b/kolla/tests/test_build.py index 9c3dc8abd..d5c7e77dc 100644 --- a/kolla/tests/test_build.py +++ b/kolla/tests/test_build.py @@ -65,7 +65,8 @@ class TasksTest(base.TestCase): pusher = build.PushTask(self.conf, self.image) pusher.run() mock_client().push.assert_called_once_with( - self.image.canonical_name, stream=True, insecure_registry=True) + self.image.canonical_name, decode=True, + stream=True, insecure_registry=True) @mock.patch('docker.version', '3.0.0') @mock.patch.dict(os.environ, clear=True) @@ -75,7 +76,7 @@ class TasksTest(base.TestCase): pusher = build.PushTask(self.conf, self.image) pusher.run() mock_client().push.assert_called_once_with( - self.image.canonical_name, stream=True) + self.image.canonical_name, decode=True, stream=True) @mock.patch.dict(os.environ, clear=True) @mock.patch('docker.APIClient') -- cgit v1.2.3