OCP-Router - Fix Ingress controller LB listener creation
After the changes done at LBaaS driver to support namespace network isolation Ingress controller fails to create/ensure Listener for the L7 Router LB. This patch fixes this issue, and also update ingress controller code to retrieve L7 router's LB details in the context of the working thread. Closes-Bug: 1787883 Change-Id: Ia63785bdc9018f8ecd3ad820bb484f34c48e9569
This commit is contained in:
@@ -12,7 +12,6 @@
|
|||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
import eventlet
|
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
|
||||||
@@ -68,7 +67,11 @@ class L7Router(object):
|
|||||||
# create/verify listeners
|
# create/verify listeners
|
||||||
self._l7_router_listeners = {}
|
self._l7_router_listeners = {}
|
||||||
listener = self._drv_l7_router.ensure_listener(
|
listener = self._drv_l7_router.ensure_listener(
|
||||||
self._router_lb, 'HTTP', k_const.KURYR_L7_ROUTER_HTTP_PORT)
|
self._router_lb, 'HTTP', k_const.KURYR_L7_ROUTER_HTTP_PORT,
|
||||||
|
service_type=None)
|
||||||
|
LOG.info("Ingress controller - "
|
||||||
|
"retrieve HTTP listener details '%s'", listener)
|
||||||
|
|
||||||
self._l7_router_listeners[k_const.KURYR_L7_ROUTER_HTTP_PORT] = listener
|
self._l7_router_listeners[k_const.KURYR_L7_ROUTER_HTTP_PORT] = listener
|
||||||
|
|
||||||
def get_router(self):
|
def get_router(self):
|
||||||
@@ -107,9 +110,9 @@ class IngressCtrlr(object):
|
|||||||
try:
|
try:
|
||||||
self._status = 'IN_PROGRESS'
|
self._status = 'IN_PROGRESS'
|
||||||
self._l7_router.ensure_router()
|
self._l7_router.ensure_router()
|
||||||
except Exception:
|
except Exception as e:
|
||||||
self._status = 'DOWN'
|
self._status = 'DOWN'
|
||||||
LOG.error("Ingress controller - failed to get L7 router")
|
LOG.error("Ingress controller - failed to get L7 router (%s)", e)
|
||||||
return
|
return
|
||||||
self._status = 'ACTIVE'
|
self._status = 'ACTIVE'
|
||||||
LOG.info("Ingress controller - ACTIVE")
|
LOG.info("Ingress controller - ACTIVE")
|
||||||
@@ -131,10 +134,7 @@ class IngressCtrlr(object):
|
|||||||
'Ingress-LB handlers should be enabled, and '
|
'Ingress-LB handlers should be enabled, and '
|
||||||
'l7_router_uuid should be specified')
|
'l7_router_uuid should be specified')
|
||||||
return
|
return
|
||||||
# Note(yboaron) Create a new thread for L7 router/LB configuration
|
self._start_operation_impl()
|
||||||
# verification, a separate thread is needed since it might be that
|
|
||||||
# router not created yet and we can't block controller/service thread.
|
|
||||||
eventlet.spawn(self._start_operation_impl)
|
|
||||||
|
|
||||||
def get_router_and_listener(self):
|
def get_router_and_listener(self):
|
||||||
"""This function returns L7 router and Listeners details,
|
"""This function returns L7 router and Listeners details,
|
||||||
|
@@ -46,27 +46,50 @@ class TestIngressCtrlr(test_base.TestCase):
|
|||||||
self.assertIsNone(ret_l7router)
|
self.assertIsNone(ret_l7router)
|
||||||
self.assertIsNone(ret_listener)
|
self.assertIsNone(ret_listener)
|
||||||
|
|
||||||
@mock.patch('eventlet.spawn')
|
@mock.patch('kuryr_kubernetes.controller.drivers.base'
|
||||||
|
'.LBaaSDriver.get_instance')
|
||||||
@mock.patch('kuryr_kubernetes.config.CONF')
|
@mock.patch('kuryr_kubernetes.config.CONF')
|
||||||
def test_ingress_ctrlr_router_enabled_k8s(self, m_cfg, m_eventlet):
|
def test_ingress_ctrlr_router_enabled_k8s(self, m_cfg, m_get_lbaas_drv):
|
||||||
|
|
||||||
m_cfg.kubernetes.enabled_handlers = ['ingresslb']
|
m_cfg.kubernetes.enabled_handlers = ['ingresslb']
|
||||||
m_cfg.ingress.l7_router_uuid = '00EE9E11-91C2-41CF-8FD4-7970579E5C4C'
|
m_cfg.ingress.l7_router_uuid = '00EE9E11-91C2-41CF-8FD4-7970579E5C4C'
|
||||||
|
l7_router = obj_lbaas.LBaaSLoadBalancer(
|
||||||
|
name='TEST_NAME', project_id='TEST_PROJECT', ip='1.2.3.4',
|
||||||
|
subnet_id='D3FA400A-F543-4B91-9CD3-047AF0CE42D1',
|
||||||
|
security_groups=[],
|
||||||
|
id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C')
|
||||||
|
|
||||||
|
m_driver = mock.Mock()
|
||||||
|
m_driver.get_lb_by_uuid.return_value = l7_router
|
||||||
|
m_get_lbaas_drv.return_value = m_driver
|
||||||
|
|
||||||
ing_ctrl = ingress_ctl.IngressCtrlr.get_instance()
|
ing_ctrl = ingress_ctl.IngressCtrlr.get_instance()
|
||||||
ing_ctrl.start_operation()
|
ing_ctrl.start_operation()
|
||||||
self.assertIsNotNone(ing_ctrl)
|
self.assertIsNotNone(ing_ctrl)
|
||||||
m_eventlet.assert_called_once()
|
self.assertEqual(ing_ctrl._status, 'ACTIVE')
|
||||||
|
|
||||||
@mock.patch('eventlet.spawn')
|
@mock.patch('kuryr_kubernetes.controller.drivers.base'
|
||||||
|
'.LBaaSDriver.get_instance')
|
||||||
@mock.patch('kuryr_kubernetes.config.CONF')
|
@mock.patch('kuryr_kubernetes.config.CONF')
|
||||||
def test_ingress_ctrlr_router_enabled_ocp(self, m_cfg, m_eventlet):
|
def test_ingress_ctrlr_router_enabled_ocp(self, m_cfg, m_get_lbaas_drv):
|
||||||
|
|
||||||
m_cfg.kubernetes.enabled_handlers = ['ocproute']
|
m_cfg.kubernetes.enabled_handlers = ['ocproute']
|
||||||
m_cfg.ingress.l7_router_uuid = '00EE9E11-91C2-41CF-8FD4-7970579E5C4C'
|
m_cfg.ingress.l7_router_uuid = '00EE9E11-91C2-41CF-8FD4-7970579E5C4C'
|
||||||
|
|
||||||
|
l7_router = obj_lbaas.LBaaSLoadBalancer(
|
||||||
|
name='TEST_NAME', project_id='TEST_PROJECT', ip='1.2.3.4',
|
||||||
|
subnet_id='D3FA400A-F543-4B91-9CD3-047AF0CE42D1',
|
||||||
|
security_groups=[],
|
||||||
|
id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C')
|
||||||
|
|
||||||
|
m_driver = mock.Mock()
|
||||||
|
m_driver.get_lb_by_uuid.return_value = l7_router
|
||||||
|
m_get_lbaas_drv.return_value = m_driver
|
||||||
|
|
||||||
ing_ctrl = ingress_ctl.IngressCtrlr.get_instance()
|
ing_ctrl = ingress_ctl.IngressCtrlr.get_instance()
|
||||||
ing_ctrl.start_operation()
|
ing_ctrl.start_operation()
|
||||||
self.assertIsNotNone(ing_ctrl)
|
self.assertIsNotNone(ing_ctrl)
|
||||||
m_eventlet.assert_called_once()
|
self.assertEqual(ing_ctrl._status, 'ACTIVE')
|
||||||
|
|
||||||
@mock.patch('kuryr_kubernetes.controller.drivers.base'
|
@mock.patch('kuryr_kubernetes.controller.drivers.base'
|
||||||
'.LBaaSDriver.get_instance')
|
'.LBaaSDriver.get_instance')
|
||||||
|
Reference in New Issue
Block a user