Use more specific SecurityGroupHandler calls

Instead of calling trigger_security_group_members_refresh,
have NetworkManager and derived classes call more specific
methods when an instance is created or destroyed.

Methods such as the trigger_instance_add_security_group_refresh
and trigger_instance_remove_security_group_refresh,
instead of just having trigger_security_group_members_refresh
get called and forcing implementors to try and figure out if
it's an add or delete

blueprint trigger-specific-sgh-functions

Change-Id: Iefef9180972db3277ae6fc0c2c9abf518b00e2a4
This commit is contained in:
Sean M. Collins
2012-10-15 12:24:26 -04:00
parent d468507833
commit 3829bb17f5
2 changed files with 27 additions and 0 deletions

View File

@@ -970,6 +970,19 @@ class NetworkManager(manager.SchedulerDependentManager):
self.security_group_api.trigger_handler('security_group_members',
admin_context, group_ids)
def _do_trigger_security_group_handler(self, handler, instance_id):
admin_context = context.get_admin_context(read_deleted="yes")
if uuidutils.is_uuid_like(instance_id):
instance_ref = self.db.instance_get_by_uuid(admin_context,
instance_id)
else:
instance_ref = self.db.instance_get(admin_context,
instance_id)
for group_name in [group['name'] for group
in instance_ref['security_groups']]:
self.security_group_api.trigger_handler(handler, admin_context,
instance_ref, group_name)
def get_floating_ips_by_fixed_address(self, context, fixed_address):
# NOTE(jkoelker) This is just a stub function. Managers supporting
# floating ips MUST override this or use the Mixin
@@ -1355,6 +1368,8 @@ class NetworkManager(manager.SchedulerDependentManager):
instance_ref['uuid'])
self._do_trigger_security_group_members_refresh_for_instance(
instance_id)
self._do_trigger_security_group_handler(
'instance_add_security_group', instance_id)
get_vif = self.db.virtual_interface_get_by_instance_and_network
vif = get_vif(context, instance_ref['uuid'], network['id'])
values = {'allocated': True,
@@ -1384,6 +1399,8 @@ class NetworkManager(manager.SchedulerDependentManager):
self._do_trigger_security_group_members_refresh_for_instance(
instance['uuid'])
self._do_trigger_security_group_handler(
'instance_remove_security_group', instance['uuid'])
if self._validate_instance_zone_for_dns_domain(context, instance):
for n in self.instance_dns_manager.get_entries_by_address(address,

View File

@@ -296,6 +296,9 @@ class FlatNetworkTestCase(test.TestCase):
db.instance_get(mox.IgnoreArg(),
mox.IgnoreArg()).AndReturn({'security_groups':
[{'id': 0}]})
db.instance_get(mox.IgnoreArg(),
mox.IgnoreArg()).AndReturn({'security_groups':
[{'id':0, 'name':'test'}]})
db.fixed_ip_associate_pool(mox.IgnoreArg(),
mox.IgnoreArg(),
mox.IgnoreArg()).AndReturn('192.168.0.101')
@@ -328,6 +331,10 @@ class FlatNetworkTestCase(test.TestCase):
db.instance_get(mox.IgnoreArg(),
mox.IgnoreArg()).AndReturn({'security_groups':
[{'id': 0}]})
db.instance_get(mox.IgnoreArg(),
mox.IgnoreArg()).AndReturn({'security_groups':
[{'id':0, 'name':'test'}]})
db.fixed_ip_associate_pool(mox.IgnoreArg(),
mox.IgnoreArg(),
mox.IgnoreArg()).AndReturn('192.168.0.101')
@@ -394,6 +401,9 @@ class FlatNetworkTestCase(test.TestCase):
db.instance_get(mox.IgnoreArg(),
mox.IgnoreArg()).AndReturn({'security_groups':
[{'id': 0}]})
db.instance_get(mox.IgnoreArg(),
mox.IgnoreArg()).AndReturn({'security_groups':
[{'id':0, 'name':'test'}]})
db.fixed_ip_associate_pool(mox.IgnoreArg(),
mox.IgnoreArg(),