Merge "Ensure floatingip information is retrieved"

This commit is contained in:
Zuul 2018-11-16 19:18:37 +00:00 committed by Gerrit Code Review
commit 3d845cecd0
2 changed files with 15 additions and 8 deletions

View File

@ -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:

View File

@ -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)