diff options
| author | Sean M. Collins <sean@coreitpro.com> | 2012-10-15 12:24:26 -0400 |
|---|---|---|
| committer | Sean M. Collins <sean@coreitpro.com> | 2012-11-21 11:08:50 -0500 |
| commit | 3829bb17f59853e9c148ec352ca5652f17ab89ef (patch) | |
| tree | 8fa15113813446dc56e745a1bc1260db51441793 | |
| parent | d468507833fdbae23cb2747c43281332840a0067 (diff) | |
| download | nova-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
| -rw-r--r-- | nova/network/manager.py | 17 | ||||
| -rw-r--r-- | nova/tests/network/test_manager.py | 10 |
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(), |
