diff --git a/hooks/cinder_hooks.py b/hooks/cinder_hooks.py index f4de184..9f44857 100755 --- a/hooks/cinder_hooks.py +++ b/hooks/cinder_hooks.py @@ -371,6 +371,9 @@ def assess_status(): bluestore_compression.validate() except ValueError as e: status_set('blocked', 'Invalid configuration: {}'.format(str(e))) + return + if not is_request_complete(get_ceph_request()): + status_set('waiting', 'Ceph broker request incomplete') if __name__ == '__main__': diff --git a/unit_tests/test_cinder_hooks.py b/unit_tests/test_cinder_hooks.py index ecdd270..f716128 100644 --- a/unit_tests/test_cinder_hooks.py +++ b/unit_tests/test_cinder_hooks.py @@ -406,11 +406,16 @@ class TestCinderHooks(CharmTestCase): self.leader_get.assert_called_once_with('secret-uuid') self.leader_set.assert_called_once_with({'secret-uuid': '42'}) + @patch.object(hooks, 'get_ceph_request') + @patch.object(hooks, 'is_request_complete') @patch.object(hooks, 'CephBlueStoreCompressionContext') @patch.object(hooks, 'set_os_workload_status') def test_assess_status(self, mock_set_os_workload_status, - mock_bluestore_compression): + mock_bluestore_compression, + is_request_complete, + get_ceph_request): + is_request_complete.return_value = True hooks.assess_status() self.os_application_version_set.assert_called_once_with( hooks.VERSION_PACKAGE) @@ -418,7 +423,15 @@ class TestCinderHooks(CharmTestCase): ANY, hooks.REQUIRED_INTERFACES) mock_bluestore_compression().validate.assert_called_once_with() self.assertFalse(self.status_set.called) + # confirm incomplete request is caught + self.status_set.reset_mock() + is_request_complete.return_value = False + hooks.assess_status() + self.status_set.assert_called_once_with( + 'waiting', 'Ceph broker request incomplete') # confirm operation when user have provided invalid configuration + is_request_complete.return_value = True + self.status_set.reset_mock() mock_bluestore_compression().validate.side_effect = ValueError( 'fake message') hooks.assess_status()