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,
|
context, instance, current_period, ignore_missing_network_data,
|
||||||
system_metadata, extra_usage_info)
|
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):
|
class API(object):
|
||||||
"""Conductor API that does updates via RPC to the ConductorManager."""
|
"""Conductor API that does updates via RPC to the ConductorManager."""
|
||||||
@@ -617,3 +625,12 @@ class API(object):
|
|||||||
return self.conductor_rpcapi.notify_usage_exists(
|
return self.conductor_rpcapi.notify_usage_exists(
|
||||||
context, instance, current_period, ignore_missing_network_data,
|
context, instance, current_period, ignore_missing_network_data,
|
||||||
system_metadata, extra_usage_info)
|
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."""
|
"""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.compute import utils as compute_utils
|
||||||
from nova import exception
|
from nova import exception
|
||||||
from nova import manager
|
from nova import manager
|
||||||
@@ -45,11 +46,12 @@ datetime_fields = ['launched_at', 'terminated_at']
|
|||||||
class ConductorManager(manager.SchedulerDependentManager):
|
class ConductorManager(manager.SchedulerDependentManager):
|
||||||
"""Mission: TBD."""
|
"""Mission: TBD."""
|
||||||
|
|
||||||
RPC_API_VERSION = '1.39'
|
RPC_API_VERSION = '1.40'
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super(ConductorManager, self).__init__(service_name='conductor',
|
super(ConductorManager, self).__init__(service_name='conductor',
|
||||||
*args, **kwargs)
|
*args, **kwargs)
|
||||||
|
self.security_group_api = compute_api.SecurityGroupAPI()
|
||||||
|
|
||||||
def ping(self, context, arg):
|
def ping(self, context, arg):
|
||||||
return jsonutils.to_primitive({'service': 'conductor', 'arg': 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,
|
compute_utils.notify_usage_exists(context, instance, current_period,
|
||||||
ignore_missing_network_data,
|
ignore_missing_network_data,
|
||||||
system_metadata, extra_usage_info)
|
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.37 - Added task_log_get, task_log_begin_task, task_log_end_task
|
||||||
1.38 - Added service name to instance_update
|
1.38 - Added service name to instance_update
|
||||||
1.39 - Added notify_usage_exists
|
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'
|
BASE_RPC_API_VERSION = '1.0'
|
||||||
@@ -375,3 +377,14 @@ class ConductorAPI(nova.openstack.common.rpc.proxy.RpcProxy):
|
|||||||
system_metadata=system_metadata_p,
|
system_metadata=system_metadata_p,
|
||||||
extra_usage_info=extra_usage_info_p)
|
extra_usage_info=extra_usage_info_p)
|
||||||
return self.call(context, msg, version='1.39')
|
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
|
# 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.db import base
|
||||||
from nova import exception
|
from nova import exception
|
||||||
from nova.network import api as network_api
|
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):
|
class API(base.Base):
|
||||||
"""API for interacting with the quantum 2.x API."""
|
"""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,
|
def setup_networks_on_host(self, context, instance, host=None,
|
||||||
teardown=False):
|
teardown=False):
|
||||||
@@ -364,27 +364,25 @@ class API(base.Base):
|
|||||||
instance_ref):
|
instance_ref):
|
||||||
admin_context = context.elevated()
|
admin_context = context.elevated()
|
||||||
for group in instance_ref['security_groups']:
|
for group in instance_ref['security_groups']:
|
||||||
self.security_group_api.trigger_handler(
|
self.conductor_api.security_groups_trigger_handler(context,
|
||||||
'instance_add_security_group', context, instance_ref,
|
'instance_add_security_group', instance_ref, group['name'])
|
||||||
group['name'])
|
|
||||||
|
|
||||||
def trigger_instance_remove_security_group_refresh(self, context,
|
def trigger_instance_remove_security_group_refresh(self, context,
|
||||||
instance_ref):
|
instance_ref):
|
||||||
admin_context = context.elevated()
|
admin_context = context.elevated()
|
||||||
for group in instance_ref['security_groups']:
|
for group in instance_ref['security_groups']:
|
||||||
self.security_group_api.trigger_handler(
|
self.conductor_api.security_groups_trigger_handler(context,
|
||||||
'instance_remove_security_group', context, instance_ref,
|
'instance_remove_security_group', instance_ref, group['name'])
|
||||||
group['name'])
|
|
||||||
|
|
||||||
def trigger_security_group_members_refresh(self, context, instance_ref):
|
def trigger_security_group_members_refresh(self, context, instance_ref):
|
||||||
|
|
||||||
admin_context = context.elevated()
|
admin_context = context.elevated()
|
||||||
group_ids = [group['id'] for group in instance_ref['security_groups']]
|
group_ids = [group['id'] for group in instance_ref['security_groups']]
|
||||||
|
|
||||||
self.security_group_api.trigger_members_refresh(admin_context,
|
self.conductor_api.security_groups_trigger_members_refresh(
|
||||||
group_ids)
|
admin_context, group_ids)
|
||||||
self.security_group_api.trigger_handler('security_group_members',
|
self.conductor_api.security_groups_trigger_handler(admin_context,
|
||||||
admin_context, group_ids)
|
'security_group_members', group_ids)
|
||||||
|
|
||||||
def _get_port_id_by_fixed_address(self, client,
|
def _get_port_id_by_fixed_address(self, client,
|
||||||
instance, address):
|
instance, address):
|
||||||
|
@@ -495,12 +495,22 @@ class _BaseTestCase(object):
|
|||||||
system_metadata={},
|
system_metadata={},
|
||||||
extra_usage_info=dict(extra='info'))
|
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):
|
class ConductorTestCase(_BaseTestCase, test.TestCase):
|
||||||
"""Conductor Manager Tests."""
|
"""Conductor Manager Tests."""
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(ConductorTestCase, self).setUp()
|
super(ConductorTestCase, self).setUp()
|
||||||
self.conductor = conductor_manager.ConductorManager()
|
self.conductor = conductor_manager.ConductorManager()
|
||||||
|
self.conductor_manager = self.conductor
|
||||||
self.stub_out_client_exceptions()
|
self.stub_out_client_exceptions()
|
||||||
|
|
||||||
def test_block_device_mapping_update_or_create(self):
|
def test_block_device_mapping_update_or_create(self):
|
||||||
@@ -613,6 +623,16 @@ class ConductorTestCase(_BaseTestCase, test.TestCase):
|
|||||||
('host', 'binary'),
|
('host', 'binary'),
|
||||||
dict(host='host', binary='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):
|
class ConductorRPCAPITestCase(_BaseTestCase, test.TestCase):
|
||||||
"""Conductor RPC API Tests."""
|
"""Conductor RPC API Tests."""
|
||||||
@@ -620,6 +640,7 @@ class ConductorRPCAPITestCase(_BaseTestCase, test.TestCase):
|
|||||||
super(ConductorRPCAPITestCase, self).setUp()
|
super(ConductorRPCAPITestCase, self).setUp()
|
||||||
self.conductor_service = self.start_service(
|
self.conductor_service = self.start_service(
|
||||||
'conductor', manager='nova.conductor.manager.ConductorManager')
|
'conductor', manager='nova.conductor.manager.ConductorManager')
|
||||||
|
self.conductor_manager = self.conductor_service.manager
|
||||||
self.conductor = conductor_rpcapi.ConductorAPI()
|
self.conductor = conductor_rpcapi.ConductorAPI()
|
||||||
|
|
||||||
def test_block_device_mapping_update_or_create(self):
|
def test_block_device_mapping_update_or_create(self):
|
||||||
@@ -709,6 +730,16 @@ class ConductorRPCAPITestCase(_BaseTestCase, test.TestCase):
|
|||||||
dict(topic='compute', host='host'),
|
dict(topic='compute', host='host'),
|
||||||
db_result_listified=True)
|
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):
|
class ConductorAPITestCase(_BaseTestCase, test.TestCase):
|
||||||
"""Conductor API Tests."""
|
"""Conductor API Tests."""
|
||||||
@@ -717,6 +748,7 @@ class ConductorAPITestCase(_BaseTestCase, test.TestCase):
|
|||||||
self.conductor_service = self.start_service(
|
self.conductor_service = self.start_service(
|
||||||
'conductor', manager='nova.conductor.manager.ConductorManager')
|
'conductor', manager='nova.conductor.manager.ConductorManager')
|
||||||
self.conductor = conductor_api.API()
|
self.conductor = conductor_api.API()
|
||||||
|
self.conductor_manager = self.conductor_service.manager
|
||||||
self.db = None
|
self.db = None
|
||||||
|
|
||||||
def _do_update(self, instance_uuid, **updates):
|
def _do_update(self, instance_uuid, **updates):
|
||||||
@@ -858,12 +890,23 @@ class ConductorAPITestCase(_BaseTestCase, test.TestCase):
|
|||||||
self.assertEqual(timeouts.count(10), 10)
|
self.assertEqual(timeouts.count(10), 10)
|
||||||
self.assertTrue(None in timeouts)
|
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):
|
class ConductorLocalAPITestCase(ConductorAPITestCase):
|
||||||
"""Conductor LocalAPI Tests."""
|
"""Conductor LocalAPI Tests."""
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(ConductorLocalAPITestCase, self).setUp()
|
super(ConductorLocalAPITestCase, self).setUp()
|
||||||
self.conductor = conductor_api.LocalAPI()
|
self.conductor = conductor_api.LocalAPI()
|
||||||
|
self.conductor_manager = self.conductor._manager._target
|
||||||
self.db = db
|
self.db = db
|
||||||
self.stub_out_client_exceptions()
|
self.stub_out_client_exceptions()
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user