diff options
-rw-r--r-- | nova/network/manager.py | 12 | ||||
-rw-r--r-- | nova/tests/network/test_manager.py | 27 |
2 files changed, 36 insertions, 3 deletions
diff --git a/nova/network/manager.py b/nova/network/manager.py index d26145114..86a7a3b04 100644 --- a/nova/network/manager.py +++ b/nova/network/manager.py @@ -282,9 +282,15 @@ class FloatingIP(object): return for floating_ip in floating_ips: - if floating_ip.get('fixed_ip', None): - fixed_ip_id = floating_ip['fixed_ip_id'] - fixed_ip_ref = self.db.fixed_ip_get(admin_context, fixed_ip_id) + 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: diff --git a/nova/tests/network/test_manager.py b/nova/tests/network/test_manager.py index a6f653961..ef1e6b70c 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) |