Set status_reason when container creation fails
If Container creation fails, this patch updates the status_reason field so that operator can know the reason of container creation failure. Closes-Bug: #1614398 Change-Id: I5571517c909b3fe4f45947fc89676de5352584de
This commit is contained in:
parent
0aa3b3496b
commit
694ea48d0d
@ -46,8 +46,9 @@ class Manager(object):
|
||||
super(Manager, self).__init__()
|
||||
self.driver = driver.load_container_driver(container_driver)
|
||||
|
||||
def _fail_container(self, container):
|
||||
def _fail_container(self, container, error):
|
||||
container.status = fields.ContainerStatus.ERROR
|
||||
container.status_reason = error
|
||||
container.task_state = None
|
||||
container.save()
|
||||
|
||||
@ -72,11 +73,11 @@ class Manager(object):
|
||||
except exception.DockerError as e:
|
||||
LOG.error(_LE("Error occured while calling docker API: %s"),
|
||||
six.text_type(e))
|
||||
self._fail_container(container)
|
||||
self._fail_container(container, six.text_type(e))
|
||||
return
|
||||
except Exception as e:
|
||||
LOG.exception(_LE("Unexpected exception: %s"), six.text_type(e))
|
||||
self._fail_container(container)
|
||||
self._fail_container(container, six.text_type(e))
|
||||
return
|
||||
|
||||
container.task_state = fields.TaskState.CONTAINER_CREATING
|
||||
@ -86,10 +87,10 @@ class Manager(object):
|
||||
except exception.DockerError as e:
|
||||
LOG.error(_LE("Error occured while calling docker API: %s"),
|
||||
six.text_type(e))
|
||||
self._fail_container(container)
|
||||
self._fail_container(container, six.text_type(e))
|
||||
except Exception as e:
|
||||
LOG.exception(_LE("Unexpected exception: %s"), six.text_type(e))
|
||||
self._fail_container(container)
|
||||
self._fail_container(container, six.text_type(e))
|
||||
finally:
|
||||
container.task_state = None
|
||||
container.save()
|
||||
|
@ -37,8 +37,9 @@ class TestManager(base.TestCase):
|
||||
@mock.patch.object(Container, 'save')
|
||||
def test_fail_container(self, mock_save):
|
||||
container = Container(self.context, **utils.get_test_container())
|
||||
self.compute_manager._fail_container(container)
|
||||
self.compute_manager._fail_container(container, "Creation Failed")
|
||||
self.assertEqual(fields.ContainerStatus.ERROR, container.status)
|
||||
self.assertEqual("Creation Failed", container.status_reason)
|
||||
self.assertIsNone(container.task_state)
|
||||
|
||||
def test_validate_container_state(self):
|
||||
@ -75,19 +76,21 @@ class TestManager(base.TestCase):
|
||||
def test_container_create_pull_image_failed(self, mock_fail,
|
||||
mock_pull, mock_save):
|
||||
container = Container(self.context, **utils.get_test_container())
|
||||
mock_pull.side_effect = exception.DockerError
|
||||
mock_pull.side_effect = exception.DockerError("Pull Failed")
|
||||
self.compute_manager._do_container_create(self.context, container)
|
||||
mock_fail.assert_called_once_with(container)
|
||||
mock_fail.assert_called_once_with(container, "Pull Failed")
|
||||
|
||||
@mock.patch.object(Container, 'save')
|
||||
@mock.patch('zun.image.driver.pull_image')
|
||||
@mock.patch.object(fake_driver, 'create')
|
||||
@mock.patch.object(manager.Manager, '_fail_container')
|
||||
def test_container_create_docker_create_failed(self, mock_fail,
|
||||
mock_create, mock_save):
|
||||
mock_create, mock_pull,
|
||||
mock_save):
|
||||
container = Container(self.context, **utils.get_test_container())
|
||||
mock_create.side_effect = exception.DockerError
|
||||
mock_create.side_effect = exception.DockerError("Creation Failed")
|
||||
self.compute_manager._do_container_create(self.context, container)
|
||||
mock_fail.assert_called_once_with(container)
|
||||
mock_fail.assert_called_once_with(container, "Creation Failed")
|
||||
|
||||
@mock.patch.object(manager.Manager, '_validate_container_state')
|
||||
@mock.patch.object(fake_driver, 'delete')
|
||||
|
Loading…
x
Reference in New Issue
Block a user