Include proper log when Kuryr cannot reach Octavia API

This is not the proper way of informing user that Octavia returns 503,
we should have a nice message or we'll start getting bug reports on us

Closes-bug: 1918708

Change-Id: I871c3998edb5b1d594067b60e908c453ad122dde
This commit is contained in:
Sunday Mgbogu 2021-04-09 21:56:59 +01:00
parent 1260af7022
commit d0331abc38
3 changed files with 36 additions and 1 deletions

View File

@ -29,6 +29,7 @@ from kuryr_kubernetes.controller.drivers import base
from kuryr_kubernetes import exceptions as k_exc
from kuryr_kubernetes import utils
CONF = cfg.CONF
LOG = logging.getLogger(__name__)
@ -118,7 +119,10 @@ class LBaaSv2Driver(base.LBaaSDriver):
# won't assume this dict is sorted.
max_ver = 0, 0
for version in versions:
v_tuple = versionutils.convert_version_to_tuple(version['version'])
if version.get('version') is None:
raise k_exc.UnreachableOctavia('Unable to reach Octavia API')
v_tuple = versionutils.convert_version_to_tuple(
version['version'])
if v_tuple > max_ver:
max_ver = v_tuple

View File

@ -116,3 +116,14 @@ class CNIBindingFailure(Exception):
"""Exception indicates a binding/unbinding VIF failure in CNI"""
def __init__(self, message):
super(CNIBindingFailure, self).__init__(message)
class UnreachableOctavia(Exception):
"""Exception indicates Octavia API failure and can not be reached
This exception is raised when Kuryr can not reach Octavia. The Octavia
API call returns 'None' on the version field and we need to properly log
a message informing the user
"""
def __init__(self, message):
super(UnreachableOctavia, self).__init__(message)

View File

@ -57,6 +57,20 @@ OCTAVIA_VERSIONS = {
},
}
BAD_OCTAVIA_VERSIONS = {
'regionOne': {
'public': {
'load-balancer': [
{
'status': 'CURRENT',
'version': None,
'raw_status': u'CURRENT',
},
],
},
},
}
class TestLBaaSv2Driver(test_base.TestCase):
@mock.patch('kuryr_kubernetes.controller.drivers.lbaasv2.LBaaSv2Driver.'
@ -110,6 +124,12 @@ class TestLBaaSv2Driver(test_base.TestCase):
self.assertEqual((2, 2),
d_lbaasv2.LBaaSv2Driver.get_octavia_version(None))
def test_get_octavia_version_is_none(self):
lbaas = self.useFixture(k_fix.MockLBaaSClient()).client
lbaas.get_all_version_data.return_value = BAD_OCTAVIA_VERSIONS
self.assertRaises(k_exc.UnreachableOctavia,
d_lbaasv2.LBaaSv2Driver.get_octavia_version, None)
def test_ensure_loadbalancer(self):
os_net = self.useFixture(k_fix.MockNetworkClient()).client
cls = d_lbaasv2.LBaaSv2Driver