From cd3d566b307d77dd3489cb091db263bad3745a90 Mon Sep 17 00:00:00 2001 From: yangyide Date: Fri, 7 Apr 2017 16:17:18 +0800 Subject: [PATCH] Improve node check for health_policy_poll Currently cluster bind health_policy_poll, when you delete vm, node cannot auto recover through this policy. Because check vm status need call server_get ,server_get will happen exception when vm was deleted, this moment should use server_list check vm whether exist. If vm exist do_check function return false, otherwise function raise exception. --- senlin/drivers/openstack/nova_v2.py | 4 ++++ senlin/profiles/os/nova/server.py | 10 +++++++--- senlin/tests/unit/drivers/test_nova_v2.py | 5 +++++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/senlin/drivers/openstack/nova_v2.py b/senlin/drivers/openstack/nova_v2.py index e974ffd..336958e 100644 --- a/senlin/drivers/openstack/nova_v2.py +++ b/senlin/drivers/openstack/nova_v2.py @@ -45,6 +45,10 @@ class NovaClient(base.DriverBase): return server_obj @sdk.translate_exception + def server_list(self, details=True, **query): + return self.conn.compute.servers(details=details, **query) + + @sdk.translate_exception def server_get(self, server): return self.conn.compute.get_server(server) diff --git a/senlin/profiles/os/nova/server.py b/senlin/profiles/os/nova/server.py index 2be7a81..2d145a9 100644 --- a/senlin/profiles/os/nova/server.py +++ b/senlin/profiles/os/nova/server.py @@ -1154,9 +1154,13 @@ class ServerProfile(base.Profile): try: server = self.compute(obj).server_get(obj.physical_id) except exc.InternalError as ex: - raise exc.EResourceOperation(op='checking', type='server', - id=obj.physical_id, - message=six.text_type(ex)) + try: + self.compute(obj).server_list(marker=obj.physical_id) + server = None + except: + raise exc.EResourceOperation(op='checking', type='server', + id=obj.physical_id, + message=six.text_type(ex)) if (server is None or server.status != 'ACTIVE'): return False diff --git a/senlin/tests/unit/drivers/test_nova_v2.py b/senlin/tests/unit/drivers/test_nova_v2.py index 5c173c0..fb3ff74 100644 --- a/senlin/tests/unit/drivers/test_nova_v2.py +++ b/senlin/tests/unit/drivers/test_nova_v2.py @@ -86,6 +86,11 @@ class TestNovaV2(base.SenlinTestCase): d.server_get('foo') self.compute.get_server.assert_called_once_with('foo') + def test_server_list(self): + d = nova_v2.NovaClient(self.conn_params) + d.server_list() + self.compute.servers.assert_called_once_with(details=True) + def test_server_update(self): d = nova_v2.NovaClient(self.conn_params) attrs = {'mem': 2} -- 2.7.2.windows.1