summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-09-05 21:18:19 +0000
committerGerrit Code Review <review@openstack.org>2012-09-05 21:18:19 +0000
commit04fe82e286d07356ce7d181b6d7148d6adef7675 (patch)
treed06a54e688d7c5acdad5279d4db8eda047dc6f52
parent936d0a49594e04e3ec08c7a2115784d072e61dee (diff)
parentc44ce398eacbd95331fb8990390a662cf4ce8f24 (diff)
downloadnova-04fe82e286d07356ce7d181b6d7148d6adef7675.tar.gz
nova-04fe82e286d07356ce7d181b6d7148d6adef7675.tar.xz
nova-04fe82e286d07356ce7d181b6d7148d6adef7675.zip
Merge "Allow admins to de-allocate any floating IPs"
-rw-r--r--nova/network/manager.py3
-rw-r--r--nova/tests/network/test_manager.py13
2 files changed, 16 insertions, 0 deletions
diff --git a/nova/network/manager.py b/nova/network/manager.py
index f2af017df..d908b7a4c 100644
--- a/nova/network/manager.py
+++ b/nova/network/manager.py
@@ -388,6 +388,9 @@ class FloatingIP(object):
def _floating_ip_owned_by_project(self, context, floating_ip):
"""Raises if floating ip does not belong to project"""
+ if context.is_admin:
+ return
+
if floating_ip['project_id'] != context.project_id:
if floating_ip['project_id'] is None:
LOG.warn(_('Address |%(address)s| is not allocated'),
diff --git a/nova/tests/network/test_manager.py b/nova/tests/network/test_manager.py
index bfe8d7a3b..31b600b16 100644
--- a/nova/tests/network/test_manager.py
+++ b/nova/tests/network/test_manager.py
@@ -581,6 +581,19 @@ class VlanNetworkTestCase(test.TestCase):
'project_id': ctxt.project_id}
self.network._floating_ip_owned_by_project(ctxt, floating_ip)
+ ctxt = context.RequestContext(None, None,
+ is_admin=True)
+
+ # does not raise (ctxt is admin)
+ floating_ip = {'address': '10.0.0.1',
+ 'project_id': None}
+ self.network._floating_ip_owned_by_project(ctxt, floating_ip)
+
+ # does not raise (ctxt is admin)
+ floating_ip = {'address': '10.0.0.1',
+ 'project_id': 'testproject'}
+ self.network._floating_ip_owned_by_project(ctxt, floating_ip)
+
def test_allocate_floating_ip(self):
ctxt = context.RequestContext('testuser', 'testproject',
is_admin=False)