summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-04-02 00:13:49 +0000
committerGerrit Code Review <review@openstack.org>2012-04-02 00:13:49 +0000
commit33515f45bb3e0b203d0d5fd9263b9efe6358fc56 (patch)
tree7f518fe9c7a0ccfea48bfddb3f32c36698e4d6ee
parent78e5378b8bf9b087e20b01e08143d60a42d9a8ad (diff)
parent73fe1a6fa38fb85e66ab04f091fe623fc67e0b0b (diff)
downloadnova-33515f45bb3e0b203d0d5fd9263b9efe6358fc56.tar.gz
Merge "Ensure floating ips are recreated on reboot" into milestone-proposed
-rw-r--r--nova/network/manager.py12
-rw-r--r--nova/tests/network/test_manager.py27
2 files changed, 37 insertions, 2 deletions
diff --git a/nova/network/manager.py b/nova/network/manager.py
index 8e18ba28eb..b0b84af9b5 100644
--- a/nova/network/manager.py
+++ b/nova/network/manager.py
@@ -282,8 +282,16 @@ class FloatingIP(object):
return
for floating_ip in floating_ips:
- if floating_ip.get('fixed_ip', None):
- fixed_address = floating_ip['fixed_ip']['address']
+ fixed_ip_id = floating_ip.get('fixed_ip_id')
+ if fixed_ip_id:
+ try:
+ fixed_ip_ref = self.db.fixed_ip_get(admin_context,
+ fixed_ip_id)
+ except exception.FixedIpNotFound:
+ msg = _('Fixed ip %(fixed_ip_id)s not found') % locals()
+ LOG.debug(msg)
+ continue
+ fixed_address = fixed_ip_ref['address']
interface = floating_ip['interface']
try:
self.l3driver.add_floating_ip(floating_ip['address'],
diff --git a/nova/tests/network/test_manager.py b/nova/tests/network/test_manager.py
index e8da5b3f81..6720be5843 100644
--- a/nova/tests/network/test_manager.py
+++ b/nova/tests/network/test_manager.py
@@ -692,6 +692,33 @@ class VlanNetworkTestCase(test.TestCase):
mox.IgnoreArg())
self.assertTrue(self.local)
+ def test_floating_ip_init_host(self):
+
+ def get_all_by_host(_context, _host):
+ return [{'interface': 'foo',
+ 'address': 'foo'},
+ {'interface': 'fakeiface',
+ 'address': 'fakefloat',
+ 'fixed_ip_id': 1},
+ {'interface': 'bar',
+ 'address': 'bar',
+ 'fixed_ip_id': 2}]
+ self.stubs.Set(self.network.db, 'floating_ip_get_all_by_host',
+ get_all_by_host)
+
+ def fixed_ip_get(_context, fixed_ip_id):
+ if fixed_ip_id == 1:
+ return {'address': 'fakefixed'}
+ raise exception.FixedIpNotFound()
+ self.stubs.Set(self.network.db, 'fixed_ip_get', fixed_ip_get)
+
+ self.mox.StubOutWithMock(self.network.l3driver, 'add_floating_ip')
+ self.network.l3driver.add_floating_ip('fakefloat',
+ 'fakefixed',
+ 'fakeiface')
+ self.mox.ReplayAll()
+ self.network.init_host_floating_ips()
+
def test_disassociate_floating_ip(self):
ctxt = context.RequestContext('testuser', 'testproject',
is_admin=False)