Merge "Include proper log when Kuryr cannot reach Octavia API"

This commit is contained in:
Zuul 2021-04-21 14:49:42 +00:00 committed by Gerrit Code Review
commit e8abda8674
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