diff --git a/kuryr_kubernetes/controller/drivers/public_ip.py b/kuryr_kubernetes/controller/drivers/public_ip.py index ec483e685..bbbb59018 100644 --- a/kuryr_kubernetes/controller/drivers/public_ip.py +++ b/kuryr_kubernetes/controller/drivers/public_ip.py @@ -141,11 +141,13 @@ class FipPubIpDriver(BasePubIpDriver): except n_exc.Conflict: LOG.warning("Conflict when assigning floating IP with id %s. " "Checking if it's already assigned correctly.", res_id) - fip = neutron.show_floatingip(res_id) - used_port_id = fip['port_id'] - if used_port_id != vip_port_id: - LOG.exception("Floating IP already used by port %s.", - used_port_id) + fip = neutron.show_floatingip(res_id).get('floatingip') + if fip is not None and fip.get('port_id') == vip_port_id: + LOG.debug('FIP %s already assigned to %s', res_id, + vip_port_id) + else: + LOG.exception('Failed to assign FIP %s to VIP port %s. It is ' + 'probably already bound', res_id, vip_port_id) raise except n_exc.NeutronClientException: diff --git a/kuryr_kubernetes/tests/unit/controller/drivers/test_public_ip.py b/kuryr_kubernetes/tests/unit/controller/drivers/test_public_ip.py index 854665d73..330839e5e 100644 --- a/kuryr_kubernetes/tests/unit/controller/drivers/test_public_ip.py +++ b/kuryr_kubernetes/tests/unit/controller/drivers/test_public_ip.py @@ -128,8 +128,10 @@ class TestFipPubIpDriver(test_base.TestCase): neutron = self.useFixture(k_fix.MockNeutronClient()).client neutron.update_floatingip.side_effect = n_exc.Conflict - neutron.show_floatingip.return_value = {'id': res_id, - 'port_id': vip_port_id} + neutron.show_floatingip.return_value = { + 'floatingip': { + 'id': res_id, + 'port_id': vip_port_id}} self.assertIsNone(driver.associate(res_id, vip_port_id)) def test_associate_conflict_incorrect(self): @@ -139,7 +141,10 @@ class TestFipPubIpDriver(test_base.TestCase): neutron = self.useFixture(k_fix.MockNeutronClient()).client neutron.update_floatingip.side_effect = n_exc.Conflict - neutron.show_floatingip.return_value = {'id': res_id, 'port_id': 'foo'} + neutron.show_floatingip.return_value = { + 'floatingip': { + 'id': res_id, + 'port_id': 'foo'}} self.assertRaises(n_exc.Conflict, driver.associate, res_id, vip_port_id)