diff options
| author | Marcin Juszkiewicz <marcin.juszkiewicz+kolla@linaro.org> | 2022-10-05 17:18:21 +0200 |
|---|---|---|
| committer | Marcin Juszkiewicz <marcin.juszkiewicz+kolla@linaro.org> | 2022-10-06 13:14:07 +0200 |
| commit | aee19bd1c4b45807d7d246b3d06710cca93f137a (patch) | |
| tree | e2fe5a56f85ca69858bb089b7ba27f4bd162d825 /kolla | |
| parent | 8dd52300c0e6bac8eee2f8c842ea2e665547e989 (diff) | |
| download | kolla-aee19bd1c4b45807d7d246b3d06710cca93f137a.tar.gz kolla-aee19bd1c4b45807d7d246b3d06710cca93f137a.zip | |
Move status and log related things to separate file
As part of kolla/image/ refactoring we move status enums/consts into
own file.
Based on patch by Konstantin Yarovoy <konstantin.yarovoy@tietoevry.com>
Change-Id: I940816c7e487f6d5c7abc4446226e2992cf9e63d
Diffstat (limited to 'kolla')
| -rwxr-xr-x | kolla/image/build.py | 25 | ||||
| -rw-r--r-- | kolla/image/utils.py | 35 | ||||
| -rw-r--r-- | kolla/tests/test_build.py | 75 |
3 files changed, 76 insertions, 59 deletions
diff --git a/kolla/image/build.py b/kolla/image/build.py index a482800e9..ff045bbc6 100755 --- a/kolla/image/build.py +++ b/kolla/image/build.py @@ -29,7 +29,6 @@ import threading import time import docker -from enum import Enum import git import jinja2 from oslo_config import cfg @@ -48,33 +47,15 @@ from kolla.common import config as common_config # noqa from kolla.common import task # noqa from kolla.common import utils # noqa from kolla.image.unbuildable import UNBUILDABLE_IMAGES # noqa +from kolla.image.utils import LOG # noqa +from kolla.image.utils import Status # noqa +from kolla.image.utils import STATUS_ERRORS # noqa from kolla import exception # noqa from kolla.template import filters as jinja_filters # noqa from kolla.template import methods as jinja_methods # noqa from kolla import version # noqa -class Status(Enum): - CONNECTION_ERROR = 'connection_error' - PUSH_ERROR = 'push_error' - ERROR = 'error' - PARENT_ERROR = 'parent_error' - BUILT = 'built' - BUILDING = 'building' - UNMATCHED = 'unmatched' - MATCHED = 'matched' - UNPROCESSED = 'unprocessed' - SKIPPED = 'skipped' - UNBUILDABLE = 'unbuildable' - - -# All error status constants. -STATUS_ERRORS = (Status.CONNECTION_ERROR, Status.PUSH_ERROR, - Status.ERROR, Status.PARENT_ERROR) - -LOG = utils.make_a_logger() - - class ArchivingError(Exception): pass diff --git a/kolla/image/utils.py b/kolla/image/utils.py new file mode 100644 index 000000000..0097d0549 --- /dev/null +++ b/kolla/image/utils.py @@ -0,0 +1,35 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from enum import Enum +from kolla.common import utils # noqa + + +class Status(Enum): + CONNECTION_ERROR = 'connection_error' + PUSH_ERROR = 'push_error' + ERROR = 'error' + PARENT_ERROR = 'parent_error' + BUILT = 'built' + BUILDING = 'building' + UNMATCHED = 'unmatched' + MATCHED = 'matched' + UNPROCESSED = 'unprocessed' + SKIPPED = 'skipped' + UNBUILDABLE = 'unbuildable' + + +# All error status constants. +STATUS_ERRORS = (Status.CONNECTION_ERROR, Status.PUSH_ERROR, + Status.ERROR, Status.PARENT_ERROR) + +LOG = utils.make_a_logger() diff --git a/kolla/tests/test_build.py b/kolla/tests/test_build.py index bf9896465..89c406503 100644 --- a/kolla/tests/test_build.py +++ b/kolla/tests/test_build.py @@ -18,33 +18,34 @@ from unittest import mock from kolla.cmd import build as build_cmd from kolla.image import build +from kolla.image import utils from kolla.tests import base FAKE_IMAGE = build.Image( 'image-base', 'image-base:latest', '/fake/path', parent_name=None, - parent=None, status=build.Status.MATCHED) + parent=None, status=utils.Status.MATCHED) FAKE_IMAGE_CHILD = build.Image( 'image-child', 'image-child:latest', '/fake/path2', parent_name='image-base', - parent=FAKE_IMAGE, status=build.Status.MATCHED) + parent=FAKE_IMAGE, status=utils.Status.MATCHED) FAKE_IMAGE_CHILD_UNMATCHED = build.Image( 'image-child-unmatched', 'image-child-unmatched:latest', '/fake/path3', parent_name='image-base', - parent=FAKE_IMAGE, status=build.Status.UNMATCHED) + parent=FAKE_IMAGE, status=utils.Status.UNMATCHED) FAKE_IMAGE_CHILD_ERROR = build.Image( 'image-child-error', 'image-child-error:latest', '/fake/path4', parent_name='image-base', - parent=FAKE_IMAGE, status=build.Status.ERROR) + parent=FAKE_IMAGE, status=utils.Status.ERROR) FAKE_IMAGE_CHILD_BUILT = build.Image( 'image-child-built', 'image-child-built:latest', '/fake/path5', parent_name='image-base', - parent=FAKE_IMAGE, status=build.Status.BUILT) + parent=FAKE_IMAGE, status=utils.Status.BUILT) FAKE_IMAGE_GRANDCHILD = build.Image( 'image-grandchild', 'image-grandchild:latest', '/fake/path6', parent_name='image-child', - parent=FAKE_IMAGE_CHILD, status=build.Status.MATCHED) + parent=FAKE_IMAGE_CHILD, status=utils.Status.MATCHED) class TasksTest(base.TestCase): @@ -80,7 +81,7 @@ class TasksTest(base.TestCase): 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) + self.assertEqual(utils.Status.PUSH_ERROR, self.image.status) @mock.patch.dict(os.environ, clear=True) @mock.patch('docker.APIClient') @@ -93,14 +94,14 @@ class TasksTest(base.TestCase): 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) + self.assertEqual(utils.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) + self.assertEqual(utils.Status.BUILT, self.image.status) @mock.patch.dict(os.environ, clear=True) @mock.patch('docker.APIClient') @@ -114,7 +115,7 @@ class TasksTest(base.TestCase): 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) + self.assertEqual(utils.Status.PUSH_ERROR, self.image.status) @mock.patch.dict(os.environ, clear=True) @mock.patch('docker.APIClient') @@ -128,7 +129,7 @@ class TasksTest(base.TestCase): 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) + self.assertEqual(utils.Status.PUSH_ERROR, self.image.status) # Try again, this time without exception. mock_client().push.return_value = [{'stream': 'mock push passes'}] @@ -136,7 +137,7 @@ class TasksTest(base.TestCase): pusher.run() self.assertEqual(2, mock_client().push.call_count) self.assertTrue(pusher.success) - self.assertEqual(build.Status.BUILT, self.image.status) + self.assertEqual(utils.Status.BUILT, self.image.status) @mock.patch.dict(os.environ, clear=True) @mock.patch('docker.APIClient') @@ -246,7 +247,7 @@ class TasksTest(base.TestCase): get_result = builder.process_source(self.image, self.image.source) self.assertIsNone(get_result) - self.assertEqual(self.image.status, build.Status.ERROR) + self.assertEqual(self.image.status, utils.Status.ERROR) mock_get.assert_called_once_with(self.image.source['source'], timeout=120) @@ -279,7 +280,7 @@ class TasksTest(base.TestCase): push_queue = mock.Mock() builder = build.BuildTask(self.conf, self.image, push_queue) get_result = builder.process_source(self.image, self.image.source) - self.assertEqual(self.image.status, build.Status.ERROR) + self.assertEqual(self.image.status, utils.Status.ERROR) self.assertFalse(builder.success) if source['type'] != 'local': self.assertIsNone(get_result) @@ -305,7 +306,7 @@ class TasksTest(base.TestCase): mock_rmtree.assert_called_with( "fake_image_path/fake-image1-archive-fake-reference1") - self.assertEqual(self.image.status, build.Status.ERROR) + self.assertEqual(self.image.status, utils.Status.ERROR) self.assertFalse(builder.success) self.assertIsNone(get_result) @@ -426,20 +427,20 @@ class KollaWorkerTest(base.TestCase): def _get_matched_images(self, images): return [image for image in images - if image.status == build.Status.MATCHED] + if image.status == utils.Status.MATCHED] def test_skip_parents(self): self.conf.set_override('skip_parents', True) kolla = build.KollaWorker(self.conf) kolla.images = self.images[:2] for i in kolla.images: - i.status = build.Status.UNPROCESSED + i.status = utils.Status.UNPROCESSED if i.parent: i.parent.children.append(i) kolla.filter_images() - self.assertEqual(build.Status.MATCHED, kolla.images[1].status) - self.assertEqual(build.Status.SKIPPED, kolla.images[1].parent.status) + self.assertEqual(utils.Status.MATCHED, kolla.images[1].status) + self.assertEqual(utils.Status.SKIPPED, kolla.images[1].parent.status) def test_skip_parents_regex(self): self.conf.set_override('regex', ['image-child']) @@ -447,13 +448,13 @@ class KollaWorkerTest(base.TestCase): kolla = build.KollaWorker(self.conf) kolla.images = self.images[:2] for i in kolla.images: - i.status = build.Status.UNPROCESSED + i.status = utils.Status.UNPROCESSED if i.parent: i.parent.children.append(i) kolla.filter_images() - self.assertEqual(build.Status.MATCHED, kolla.images[1].status) - self.assertEqual(build.Status.SKIPPED, kolla.images[1].parent.status) + self.assertEqual(utils.Status.MATCHED, kolla.images[1].status) + self.assertEqual(utils.Status.SKIPPED, kolla.images[1].parent.status) def test_skip_parents_match_grandchildren(self): self.conf.set_override('skip_parents', True) @@ -463,14 +464,14 @@ class KollaWorkerTest(base.TestCase): self.images[1].children.append(image_grandchild) kolla.images = self.images[:2] + [image_grandchild] for i in kolla.images: - i.status = build.Status.UNPROCESSED + i.status = utils.Status.UNPROCESSED if i.parent: i.parent.children.append(i) kolla.filter_images() - self.assertEqual(build.Status.MATCHED, kolla.images[2].status) - self.assertEqual(build.Status.SKIPPED, kolla.images[2].parent.status) - self.assertEqual(build.Status.SKIPPED, kolla.images[1].parent.status) + self.assertEqual(utils.Status.MATCHED, kolla.images[2].status) + self.assertEqual(utils.Status.SKIPPED, kolla.images[2].parent.status) + self.assertEqual(utils.Status.SKIPPED, kolla.images[1].parent.status) def test_skip_parents_match_grandchildren_regex(self): self.conf.set_override('regex', ['image-grandchild']) @@ -481,14 +482,14 @@ class KollaWorkerTest(base.TestCase): self.images[1].children.append(image_grandchild) kolla.images = self.images[:2] + [image_grandchild] for i in kolla.images: - i.status = build.Status.UNPROCESSED + i.status = utils.Status.UNPROCESSED if i.parent: i.parent.children.append(i) kolla.filter_images() - self.assertEqual(build.Status.MATCHED, kolla.images[2].status) - self.assertEqual(build.Status.SKIPPED, kolla.images[2].parent.status) - self.assertEqual(build.Status.SKIPPED, kolla.images[1].parent.status) + self.assertEqual(utils.Status.MATCHED, kolla.images[2].status) + self.assertEqual(utils.Status.SKIPPED, kolla.images[2].parent.status) + self.assertEqual(utils.Status.SKIPPED, kolla.images[1].parent.status) @mock.patch.object(build.Image, 'in_docker_cache') def test_skip_existing(self, mock_in_cache): @@ -497,11 +498,11 @@ class KollaWorkerTest(base.TestCase): kolla = build.KollaWorker(self.conf) kolla.images = self.images[:2] for i in kolla.images: - i.status = build.Status.UNPROCESSED + i.status = utils.Status.UNPROCESSED kolla.filter_images() - self.assertEqual(build.Status.SKIPPED, kolla.images[0].status) - self.assertEqual(build.Status.MATCHED, kolla.images[1].status) + self.assertEqual(utils.Status.SKIPPED, kolla.images[0].status) + self.assertEqual(utils.Status.MATCHED, kolla.images[1].status) def test_without_profile(self): kolla = build.KollaWorker(self.conf) @@ -602,10 +603,10 @@ class KollaWorkerTest(base.TestCase): def test_summary(self): kolla = build.KollaWorker(self.conf) kolla.images = self.images - kolla.image_statuses_good['good'] = build.Status.BUILT - kolla.image_statuses_bad['bad'] = build.Status.ERROR - kolla.image_statuses_allowed_to_fail['bad2'] = build.Status.ERROR - kolla.image_statuses_unmatched['unmatched'] = build.Status.UNMATCHED + kolla.image_statuses_good['good'] = utils.Status.BUILT + kolla.image_statuses_bad['bad'] = utils.Status.ERROR + kolla.image_statuses_allowed_to_fail['bad2'] = utils.Status.ERROR + kolla.image_statuses_unmatched['unmatched'] = utils.Status.UNMATCHED results = kolla.summary() self.assertEqual('error', results['failed'][0]['status']) # bad self.assertEqual('error', results['failed'][1]['status']) # bad2 |
