summaryrefslogtreecommitdiffstats
path: root/nova
diff options
context:
space:
mode:
authorSean M. Collins <sean@coreitpro.com>2012-10-15 12:24:26 -0400
committerSean M. Collins <sean@coreitpro.com>2012-11-21 11:08:50 -0500
commit3829bb17f59853e9c148ec352ca5652f17ab89ef (patch)
tree8fa15113813446dc56e745a1bc1260db51441793 /nova
parentd468507833fdbae23cb2747c43281332840a0067 (diff)
downloadnova-3829bb17f59853e9c148ec352ca5652f17ab89ef.tar.gz
nova-3829bb17f59853e9c148ec352ca5652f17ab89ef.tar.xz
nova-3829bb17f59853e9c148ec352ca5652f17ab89ef.zip
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
Diffstat (limited to 'nova')
-rw-r--r--nova/network/manager.py17
-rw-r--r--nova/tests/network/test_manager.py10
2 files changed, 27 insertions, 0 deletions
diff --git a/nova/network/manager.py b/nova/network/manager.py
index 17499cd7d..d56a75841 100644
--- a/nova/network/manager.py
+++ b/nova/network/manager.py
@@ -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,
diff --git a/nova/tests/network/test_manager.py b/nova/tests/network/test_manager.py
index 9c4b29049..bfc3ca6ef 100644
--- a/nova/tests/network/test_manager.py
+++ b/nova/tests/network/test_manager.py
@@ -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(),