dispatch 'unregister_cluster' to specified engine

We need to dispatch the request to specified engine to erase
the runtime, so that the health checking task could be stopped/removed
correctly.

Change-Id: I08a5c3332401e7101b892869639a0e045710bb5c
Closes-Bug: #1707871
This commit is contained in:
ruijie 2017-08-04 03:13:08 -07:00
parent 264a869f0d
commit a6991090c5
2 changed files with 56 additions and 5 deletions

View File

@ -496,14 +496,34 @@ def register(cluster_id, engine_id=None, **kwargs):
enabled=enabled)
def unregister(cluster_id, engine_id=None):
return notify(engine_id, 'unregister_cluster', cluster_id=cluster_id)
def unregister(cluster_id):
engine_id = get_manager_engine(cluster_id)
if engine_id:
return notify(engine_id, 'unregister_cluster', cluster_id=cluster_id)
return True
def enable(cluster_id, **kwargs):
return notify(None, 'enable_cluster', cluster_id=cluster_id, params=kwargs)
engine_id = get_manager_engine(cluster_id)
if engine_id:
return notify(engine_id, 'enable_cluster', cluster_id=cluster_id,
params=kwargs)
return False
def disable(cluster_id, **kwargs):
return notify(None, 'disable_cluster', cluster_id=cluster_id,
params=kwargs)
engine_id = get_manager_engine(cluster_id)
if engine_id:
return notify(engine_id, 'disable_cluster', cluster_id=cluster_id,
params=kwargs)
return False
def get_manager_engine(cluster_id):
ctx = context.get_admin_context()
registry = objects.HealthRegistry.get(ctx, cluster_id)
if not registry:
return None
return registry.engine_id

View File

@ -922,3 +922,34 @@ class TestHealthManager(base.SenlinTestCase):
self.assertIn({'cluster_id': 'FAKE_ID', 'enabled': False},
self.hm.rt['registries'])
mock_update.assert_called_once_with(ctx, 'FAKE_ID', {'enabled': False})
@mock.patch.object(context, 'get_admin_context')
@mock.patch.object(hr.HealthRegistry, 'get')
def test_get_manager_engine(self, mock_get, mock_ctx):
ctx = mock.Mock()
mock_ctx.return_value = ctx
registry = mock.Mock(engine_id='fake')
mock_get.return_value = registry
result = hm.get_manager_engine('CID')
self.assertEqual(result, 'fake')
mock_get.assert_called_once_with(ctx, 'CID')
self.assertTrue(mock_ctx.called)
@mock.patch.object(context, 'get_admin_context')
@mock.patch.object(hr.HealthRegistry, 'get')
def test_get_manager_engine_none(self, mock_get, mock_ctx):
ctx = mock.Mock()
mock_ctx.return_value = ctx
mock_get.return_value = None
result = hm.get_manager_engine('CID')
self.assertIsNone(result)
mock_get.assert_called_once_with(ctx, 'CID')
self.assertTrue(mock_ctx.called)