Merge "Move security_groups refreshes to conductor"
This commit is contained in:
@@ -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)
|
||||
|
@@ -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)
|
||||
|
@@ -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')
|
||||
|
@@ -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):
|
||||
|
@@ -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()
|
||||
|
||||
|
Reference in New Issue
Block a user