diff options
author | Jenkins <jenkins@review.openstack.org> | 2012-04-02 00:13:49 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2012-04-02 00:13:49 +0000 |
commit | 33515f45bb3e0b203d0d5fd9263b9efe6358fc56 (patch) | |
tree | 7f518fe9c7a0ccfea48bfddb3f32c36698e4d6ee | |
parent | 78e5378b8bf9b087e20b01e08143d60a42d9a8ad (diff) | |
parent | 73fe1a6fa38fb85e66ab04f091fe623fc67e0b0b (diff) | |
download | nova-33515f45bb3e0b203d0d5fd9263b9efe6358fc56.tar.gz |
Merge "Ensure floating ips are recreated on reboot" into milestone-proposed
-rw-r--r-- | nova/network/manager.py | 12 | ||||
-rw-r--r-- | nova/tests/network/test_manager.py | 27 |
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) |