aboutsummaryrefslogtreecommitdiff
path: root/kolla
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2019-09-20 14:08:58 +0000
committerGerrit Code Review <review@openstack.org>2019-09-20 14:08:58 +0000
commit29e4cb118ae14f300717c0a80c82ddf37cffa385 (patch)
treec1e0e440ba3d1d7152a3fb94b1bcff5be5616dba /kolla
parent0d1a8cc4e1ba50e6292f646c7fd969e0cd0a32ee (diff)
parentf8ded663891f79c289156ee61d4e02197d80ce7a (diff)
downloadkolla-29e4cb118ae14f300717c0a80c82ddf37cffa385.tar.gz
kolla-29e4cb118ae14f300717c0a80c82ddf37cffa385.zip
Merge "Fix retries when pushing images"
Diffstat (limited to 'kolla')
-rwxr-xr-xkolla/image/build.py3
-rw-r--r--kolla/tests/test_build.py34
2 files changed, 37 insertions, 0 deletions
diff --git a/kolla/image/build.py b/kolla/image/build.py
index 20aa9d31a..44d160b54 100755
--- a/kolla/image/build.py
+++ b/kolla/image/build.py
@@ -373,6 +373,9 @@ class PushTask(DockerTask):
image.status = STATUS_ERROR
self.logger.error(response['errorDetail']['message'])
+ # Reset any previous errors.
+ image.status = STATUS_BUILT
+
class BuildTask(DockerTask):
"""Task that builds out an image."""
diff --git a/kolla/tests/test_build.py b/kolla/tests/test_build.py
index ef309613b..be78a6939 100644
--- a/kolla/tests/test_build.py
+++ b/kolla/tests/test_build.py
@@ -77,6 +77,40 @@ class TasksTest(base.TestCase):
pusher.run()
mock_client().push.assert_called_once_with(
self.image.canonical_name, decode=True, stream=True)
+ self.assertTrue(pusher.success)
+
+ @mock.patch('docker.version', '3.0.0')
+ @mock.patch.dict(os.environ, clear=True)
+ @mock.patch('docker.APIClient')
+ def test_push_image_failure(self, mock_client):
+ self.dc = mock_client
+ mock_client().push.side_effect = Exception
+ pusher = build.PushTask(self.conf, self.image)
+ pusher.run()
+ mock_client().push.assert_called_once_with(
+ self.image.canonical_name, decode=True, stream=True)
+ self.assertFalse(pusher.success)
+ self.assertEqual(build.STATUS_PUSH_ERROR, self.image.status)
+
+ @mock.patch('docker.version', '3.0.0')
+ @mock.patch.dict(os.environ, clear=True)
+ @mock.patch('docker.APIClient')
+ def test_push_image_failure_retry(self, mock_client):
+ self.dc = mock_client
+ mock_client().push.side_effect = [Exception, []]
+ pusher = build.PushTask(self.conf, self.image)
+ pusher.run()
+ mock_client().push.assert_called_once_with(
+ self.image.canonical_name, decode=True, stream=True)
+ self.assertFalse(pusher.success)
+ self.assertEqual(build.STATUS_PUSH_ERROR, self.image.status)
+
+ # Try again, this time without exception.
+ pusher.reset()
+ pusher.run()
+ self.assertEqual(2, mock_client().push.call_count)
+ self.assertTrue(pusher.success)
+ self.assertEqual(build.STATUS_BUILT, self.image.status)
@mock.patch.dict(os.environ, clear=True)
@mock.patch('docker.APIClient')