diff options
-rw-r--r-- | nova/conductor/api.py | 17 | ||||
-rw-r--r-- | nova/conductor/manager.py | 10 | ||||
-rw-r--r-- | nova/conductor/rpcapi.py | 13 | ||||
-rw-r--r-- | nova/network/quantumv2/api.py | 22 | ||||
-rw-r--r-- | nova/tests/conductor/test_conductor.py | 43 |
5 files changed, 92 insertions, 13 deletions
diff --git a/nova/conductor/api.py b/nova/conductor/api.py index 2ad4b6d8e..9f526646c 100644 --- a/nova/conductor/api.py +++ b/nova/conductor/api.py @@ -320,6 +320,14 @@ class LocalAPI(object): context, instance, current_period, ignore_missing_network_data, system_metadata, extra_usage_info) + def security_groups_trigger_handler(self, context, event, *args): + return self._manager.security_groups_trigger_handler(context, + event, args) + + def security_groups_trigger_members_refresh(self, context, group_ids): + return self._manager.security_groups_trigger_members_refresh(context, + group_ids) + class API(object): """Conductor API that does updates via RPC to the ConductorManager.""" @@ -617,3 +625,12 @@ class API(object): return self.conductor_rpcapi.notify_usage_exists( context, instance, current_period, ignore_missing_network_data, system_metadata, extra_usage_info) + + def security_groups_trigger_handler(self, context, event, *args): + return self.conductor_rpcapi.security_groups_trigger_handler(context, + event, + args) + + def security_groups_trigger_members_refresh(self, context, group_ids): + return self.conductor_rpcapi.security_groups_trigger_members_refresh( + context, group_ids) diff --git a/nova/conductor/manager.py b/nova/conductor/manager.py index 8346a25d0..b53ab8fcc 100644 --- a/nova/conductor/manager.py +++ b/nova/conductor/manager.py @@ -14,6 +14,7 @@ """Handles database requests from other nova services.""" +from nova.compute import api as compute_api from nova.compute import utils as compute_utils from nova import exception from nova import manager @@ -45,11 +46,12 @@ datetime_fields = ['launched_at', 'terminated_at'] class ConductorManager(manager.SchedulerDependentManager): """Mission: TBD.""" - RPC_API_VERSION = '1.39' + RPC_API_VERSION = '1.40' def __init__(self, *args, **kwargs): super(ConductorManager, self).__init__(service_name='conductor', *args, **kwargs) + self.security_group_api = compute_api.SecurityGroupAPI() def ping(self, context, arg): return jsonutils.to_primitive({'service': 'conductor', 'arg': arg}) @@ -351,3 +353,9 @@ class ConductorManager(manager.SchedulerDependentManager): compute_utils.notify_usage_exists(context, instance, current_period, ignore_missing_network_data, system_metadata, extra_usage_info) + + def security_groups_trigger_handler(self, context, event, args): + self.security_group_api.trigger_handler(event, context, *args) + + def security_groups_trigger_members_refresh(self, context, group_ids): + self.security_group_api.trigger_members_refresh(context, group_ids) diff --git a/nova/conductor/rpcapi.py b/nova/conductor/rpcapi.py index 6587bc795..169da4ed7 100644 --- a/nova/conductor/rpcapi.py +++ b/nova/conductor/rpcapi.py @@ -72,6 +72,8 @@ class ConductorAPI(nova.openstack.common.rpc.proxy.RpcProxy): 1.37 - Added task_log_get, task_log_begin_task, task_log_end_task 1.38 - Added service name to instance_update 1.39 - Added notify_usage_exists + 1.40 - Added security_groups_trigger_handler and + security_groups_trigger_members_refresh """ BASE_RPC_API_VERSION = '1.0' @@ -375,3 +377,14 @@ class ConductorAPI(nova.openstack.common.rpc.proxy.RpcProxy): system_metadata=system_metadata_p, extra_usage_info=extra_usage_info_p) return self.call(context, msg, version='1.39') + + def security_groups_trigger_handler(self, context, event, args): + args_p = jsonutils.to_primitive(args) + msg = self.make_msg('security_groups_trigger_handler', event=event, + args=args_p) + return self.call(context, msg, version='1.40') + + def security_groups_trigger_members_refresh(self, context, group_ids): + msg = self.make_msg('security_groups_trigger_members_refresh', + group_ids=group_ids) + return self.call(context, msg, version='1.40') diff --git a/nova/network/quantumv2/api.py b/nova/network/quantumv2/api.py index ba8b9cb7d..d11ffe1b3 100644 --- a/nova/network/quantumv2/api.py +++ b/nova/network/quantumv2/api.py @@ -16,7 +16,7 @@ # # vim: tabstop=4 shiftwidth=4 softtabstop=4 -from nova.compute import api as compute_api +from nova import conductor from nova.db import base from nova import exception from nova.network import api as network_api @@ -72,7 +72,7 @@ update_instance_info_cache = network_api.update_instance_cache_with_nw_info class API(base.Base): """API for interacting with the quantum 2.x API.""" - security_group_api = compute_api.SecurityGroupAPI() + conductor_api = conductor.API() def setup_networks_on_host(self, context, instance, host=None, teardown=False): @@ -364,27 +364,25 @@ class API(base.Base): instance_ref): admin_context = context.elevated() for group in instance_ref['security_groups']: - self.security_group_api.trigger_handler( - 'instance_add_security_group', context, instance_ref, - group['name']) + self.conductor_api.security_groups_trigger_handler(context, + 'instance_add_security_group', instance_ref, group['name']) def trigger_instance_remove_security_group_refresh(self, context, instance_ref): admin_context = context.elevated() for group in instance_ref['security_groups']: - self.security_group_api.trigger_handler( - 'instance_remove_security_group', context, instance_ref, - group['name']) + self.conductor_api.security_groups_trigger_handler(context, + 'instance_remove_security_group', instance_ref, group['name']) def trigger_security_group_members_refresh(self, context, instance_ref): admin_context = context.elevated() group_ids = [group['id'] for group in instance_ref['security_groups']] - self.security_group_api.trigger_members_refresh(admin_context, - group_ids) - self.security_group_api.trigger_handler('security_group_members', - admin_context, group_ids) + self.conductor_api.security_groups_trigger_members_refresh( + admin_context, group_ids) + self.conductor_api.security_groups_trigger_handler(admin_context, + 'security_group_members', group_ids) def _get_port_id_by_fixed_address(self, client, instance, address): diff --git a/nova/tests/conductor/test_conductor.py b/nova/tests/conductor/test_conductor.py index d9d6f2db5..773b65d43 100644 --- a/nova/tests/conductor/test_conductor.py +++ b/nova/tests/conductor/test_conductor.py @@ -495,12 +495,22 @@ class _BaseTestCase(object): system_metadata={}, extra_usage_info=dict(extra='info')) + def test_security_groups_trigger_members_refresh(self): + self.mox.StubOutWithMock(self.conductor_manager.security_group_api, + 'trigger_members_refresh') + self.conductor_manager.security_group_api.trigger_members_refresh( + self.context, [1, 2, 3]) + self.mox.ReplayAll() + self.conductor.security_groups_trigger_members_refresh(self.context, + [1, 2, 3]) + class ConductorTestCase(_BaseTestCase, test.TestCase): """Conductor Manager Tests.""" def setUp(self): super(ConductorTestCase, self).setUp() self.conductor = conductor_manager.ConductorManager() + self.conductor_manager = self.conductor self.stub_out_client_exceptions() def test_block_device_mapping_update_or_create(self): @@ -613,6 +623,16 @@ class ConductorTestCase(_BaseTestCase, test.TestCase): ('host', 'binary'), dict(host='host', binary='binary')) + def test_security_groups_trigger_handler(self): + self.mox.StubOutWithMock(self.conductor_manager.security_group_api, + 'trigger_handler') + self.conductor_manager.security_group_api.trigger_handler('event', + self.context, + 'args') + self.mox.ReplayAll() + self.conductor.security_groups_trigger_handler(self.context, + 'event', ['args']) + class ConductorRPCAPITestCase(_BaseTestCase, test.TestCase): """Conductor RPC API Tests.""" @@ -620,6 +640,7 @@ class ConductorRPCAPITestCase(_BaseTestCase, test.TestCase): super(ConductorRPCAPITestCase, self).setUp() self.conductor_service = self.start_service( 'conductor', manager='nova.conductor.manager.ConductorManager') + self.conductor_manager = self.conductor_service.manager self.conductor = conductor_rpcapi.ConductorAPI() def test_block_device_mapping_update_or_create(self): @@ -709,6 +730,16 @@ class ConductorRPCAPITestCase(_BaseTestCase, test.TestCase): dict(topic='compute', host='host'), db_result_listified=True) + def test_security_groups_trigger_handler(self): + self.mox.StubOutWithMock(self.conductor_manager.security_group_api, + 'trigger_handler') + self.conductor_manager.security_group_api.trigger_handler('event', + self.context, + 'arg') + self.mox.ReplayAll() + self.conductor.security_groups_trigger_handler(self.context, + 'event', ['arg']) + class ConductorAPITestCase(_BaseTestCase, test.TestCase): """Conductor API Tests.""" @@ -717,6 +748,7 @@ class ConductorAPITestCase(_BaseTestCase, test.TestCase): self.conductor_service = self.start_service( 'conductor', manager='nova.conductor.manager.ConductorManager') self.conductor = conductor_api.API() + self.conductor_manager = self.conductor_service.manager self.db = None def _do_update(self, instance_uuid, **updates): @@ -858,12 +890,23 @@ class ConductorAPITestCase(_BaseTestCase, test.TestCase): self.assertEqual(timeouts.count(10), 10) self.assertTrue(None in timeouts) + def test_security_groups_trigger_handler(self): + self.mox.StubOutWithMock(self.conductor_manager.security_group_api, + 'trigger_handler') + self.conductor_manager.security_group_api.trigger_handler('event', + self.context, + 'arg') + self.mox.ReplayAll() + self.conductor.security_groups_trigger_handler(self.context, + 'event', 'arg') + class ConductorLocalAPITestCase(ConductorAPITestCase): """Conductor LocalAPI Tests.""" def setUp(self): super(ConductorLocalAPITestCase, self).setUp() self.conductor = conductor_api.LocalAPI() + self.conductor_manager = self.conductor._manager._target self.db = db self.stub_out_client_exceptions() |