Merge "Move security_groups refreshes to conductor"

This commit is contained in:
Jenkins
2013-02-07 18:04:22 +00:00
committed by Gerrit Code Review
5 changed files with 92 additions and 13 deletions

View File

@@ -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)

View File

@@ -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)

View File

@@ -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')

View File

@@ -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):

View File

@@ -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()