def test_on_present_no_change(self):
        route_event = mock.sentinel.route_event
        route_spec = mock.sentinel.route_spec

        m_handler = mock.Mock(spec=h_route.OcpRouteHandler)
        m_handler._get_route_spec.return_value = route_spec
        m_handler._should_ignore.return_value = True
        m_handler._l7_router = obj_lbaas.LBaaSLoadBalancer(
            id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C',
            project_id='TEST_PROJECT')

        m_handler._l7_router_listeners = obj_lbaas.LBaaSListener(
            id='00EE9E11-91C2-41CF-8FD4-7970579E1234',
            project_id='TEST_PROJECT',
            name='http_listenr',
            protocol='http',
            port=80)

        h_route.OcpRouteHandler.on_present(m_handler, route_event)
        m_handler._get_route_spec.assert_called_once_with(route_event)
        m_handler._sync_router_pool.assert_not_called()
        m_handler._sync_l7_policy.assert_not_called()
        m_handler._sync_host_l7_rule.assert_not_called()
        m_handler._sync_path_l7_rule.assert_not_called()
        m_handler._set_route_state.assert_not_called()
        m_handler._set_route_spec.assert_not_called()
        m_handler._send_route_notification_to_ep.assert_not_called()
    def test_create_listener(self):
        lbaas = self.useFixture(k_fix.MockLBaaSClient()).client
        cls = d_lbaasv2.LBaaSv2Driver
        m_driver = mock.Mock(spec=d_lbaasv2.LBaaSv2Driver)
        listener = obj_lbaas.LBaaSListener(
            name='TEST_NAME',
            project_id='TEST_PROJECT',
            protocol='TCP',
            port=1234,
            loadbalancer_id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C')
        listener_id = 'A57B7771-6050-4CA8-A63C-443493EC98AB'
        req = {
            'listener': {
                'name': listener.name,
                'project_id': listener.project_id,
                'loadbalancer_id': listener.loadbalancer_id,
                'protocol': listener.protocol,
                'protocol_port': listener.port
            }
        }
        resp = {'listener': {'id': listener_id}}
        lbaas.create_listener.return_value = resp

        ret = cls._create_listener(m_driver, listener)
        lbaas.create_listener.assert_called_once_with(req)
        for attr in listener.obj_fields:
            self.assertEqual(getattr(listener, attr), getattr(ret, attr))
        self.assertEqual(listener_id, ret.id)
Example #3
0
    def ensure_listener(self,
                        loadbalancer,
                        protocol,
                        port,
                        service_type='ClusterIP'):
        name = "%s:%s:%s" % (loadbalancer.name, protocol, port)
        listener = obj_lbaas.LBaaSListener(name=name,
                                           project_id=loadbalancer.project_id,
                                           loadbalancer_id=loadbalancer.id,
                                           protocol=protocol,
                                           port=port)
        try:
            result = self._ensure_provisioned(loadbalancer, listener,
                                              self._create_listener,
                                              self._find_listener,
                                              _LB_STS_POLL_SLOW_INTERVAL)
        except o_exc.BadRequestException:
            LOG.info(
                "Listener creation failed, most probably because "
                "protocol %(prot)s is not supported", {'prot': protocol})
            return None

        self._ensure_security_group_rules(loadbalancer, result, service_type)

        return result
    def test_find_listener(self):
        neutron = self.useFixture(k_fix.MockNeutronClient()).client
        cls = d_lbaasv2.LBaaSv2Driver
        m_driver = mock.Mock(spec=d_lbaasv2.LBaaSv2Driver)
        listener = obj_lbaas.LBaaSListener(
            name='TEST_NAME',
            project_id='TEST_PROJECT',
            protocol='TCP',
            port=1234,
            loadbalancer_id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C')
        listener_id = 'A57B7771-6050-4CA8-A63C-443493EC98AB'
        resp = {'listeners': [{'id': listener_id}]}
        neutron.list_listeners.return_value = resp

        ret = cls._find_listener(m_driver, listener)
        neutron.list_listeners.assert_called_once_with(
            name=listener.name,
            project_id=listener.project_id,
            tenant_id=listener.project_id,
            loadbalancer_id=listener.loadbalancer_id,
            protocol=listener.protocol,
            protocol_port=listener.port)
        for attr in listener.obj_fields:
            self.assertEqual(getattr(listener, attr), getattr(ret, attr))
        self.assertEqual(listener_id, ret.id)
Example #5
0
    def ensure_listener(self,
                        loadbalancer,
                        protocol,
                        port,
                        service_type='ClusterIP'):
        name = "%s:%s:%s" % (loadbalancer.name, protocol, port)
        listener = obj_lbaas.LBaaSListener(name=name,
                                           project_id=loadbalancer.project_id,
                                           loadbalancer_id=loadbalancer.id,
                                           protocol=protocol,
                                           port=port)
        try:
            result = self._ensure_provisioned(loadbalancer, listener,
                                              self._create_listener,
                                              self._find_listener,
                                              _LB_STS_POLL_SLOW_INTERVAL)
        except os_exc.SDKException:
            LOG.exception(
                "Listener creation failed, most probably because "
                "protocol %(prot)s is not supported", {'prot': protocol})
            return None

        if CONF.octavia_defaults.sg_mode == 'create':
            self._create_lb_security_group_rule(loadbalancer, result)

        return result
    def test_ensure_pool(self):
        cls = d_lbaasv2.LBaaSv2Driver
        m_driver = mock.Mock(spec=d_lbaasv2.LBaaSv2Driver)
        expected_resp = mock.sentinel.expected_resp
        endpoints = mock.sentinel.endpoints
        loadbalancer = obj_lbaas.LBaaSLoadBalancer(
            id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C',
            project_id='TEST_PROJECT')
        listener = obj_lbaas.LBaaSListener(
            id='A57B7771-6050-4CA8-A63C-443493EC98AB',
            name='TEST_LISTENER_NAME',
            protocol='TCP')
        m_driver._ensure_provisioned.return_value = expected_resp

        resp = cls.ensure_pool(m_driver, endpoints, loadbalancer, listener)

        m_driver._ensure_provisioned.assert_called_once_with(
            loadbalancer, mock.ANY, m_driver._create_pool,
            m_driver._find_pool)
        pool = m_driver._ensure_provisioned.call_args[0][1]
        self.assertEqual(listener.name, pool.name)
        self.assertEqual(loadbalancer.project_id, pool.project_id)
        self.assertEqual(listener.id, pool.listener_id)
        self.assertEqual(listener.protocol, pool.protocol)
        self.assertEqual(expected_resp, resp)
Example #7
0
 def ensure_listener(self, endpoints, loadbalancer, protocol, port):
     name = "%s:%s:%s" % (loadbalancer.name, protocol, port)
     return obj_lbaas.LBaaSListener(name=name,
                                    project_id=loadbalancer.project_id,
                                    loadbalancer_id=loadbalancer.id,
                                    protocol=protocol,
                                    port=port,
                                    id=uuidutils.generate_uuid())
Example #8
0
    def ensure_listener(self, endpoints, loadbalancer, protocol, port):
        if protocol not in _SUPPORTED_LISTENER_PROT:
            return None

        name = "%s:%s:%s" % (loadbalancer.name, protocol, port)
        return obj_lbaas.LBaaSListener(name=name,
                                       project_id=loadbalancer.project_id,
                                       loadbalancer_id=loadbalancer.id,
                                       protocol=protocol,
                                       port=port,
                                       id=uuidutils.generate_uuid())
Example #9
0
 def ensure_listener(self, endpoints, loadbalancer, protocol, port):
     name = "%(namespace)s/%(name)s" % endpoints['metadata']
     name += ":%s:%s" % (protocol, port)
     listener = obj_lbaas.LBaaSListener(name=name,
                                        project_id=loadbalancer.project_id,
                                        loadbalancer_id=loadbalancer.id,
                                        protocol=protocol,
                                        port=port)
     return self._ensure_provisioned(loadbalancer, listener,
                                     self._create_listener,
                                     self._find_listener)
Example #10
0
    def ensure_listener(self, loadbalancer, protocol, port,
                        service_type='ClusterIP'):
        if protocol not in _SUPPORTED_LISTENER_PROT:
            return None

        name = "%s:%s:%s" % (loadbalancer.name, protocol, port)
        return obj_lbaas.LBaaSListener(name=name,
                                       project_id=loadbalancer.project_id,
                                       loadbalancer_id=loadbalancer.id,
                                       protocol=protocol,
                                       port=port,
                                       id=str(uuid.uuid4()))
Example #11
0
    def ensure_listener(self,
                        loadbalancer,
                        protocol,
                        port,
                        service_type='ClusterIP'):

        # NOTE(yboaron): Since retrieving Octavia capabilities/version is not
        # supported via  the OpenstackSdk, the list of allowed listener's
        # protocols will be defined statically.
        # Kuryr still need to handle the case in which listener's protocol
        # (e.g: UDP) is not supported by Octavia.
        provider = loadbalancer.provider or 'amphora'
        try:
            if protocol not in _PROVIDER_SUPPORTED_LISTENER_PROT[provider]:
                LOG.info(
                    "Protocol: %(prot)s: is not supported by "
                    "%(provider)s", {
                        'prot': protocol,
                        'provider': provider
                    })
                return None
        except KeyError:
            LOG.info(
                "Provider %(provider)s doesnt exist in "
                "_PROVIDER_SUPPORTED_LISTENER_PROT", {'provider': provider})
            return None

        name = "%s:%s:%s" % (loadbalancer.name, protocol, port)
        listener = obj_lbaas.LBaaSListener(name=name,
                                           project_id=loadbalancer.project_id,
                                           loadbalancer_id=loadbalancer.id,
                                           protocol=protocol,
                                           port=port)
        try:
            result = self._ensure_provisioned(loadbalancer, listener,
                                              self._create_listener,
                                              self._find_listener,
                                              _LB_STS_POLL_SLOW_INTERVAL)
        except n_exc.BadRequest:
            LOG.info(
                "Listener creation failed, most probably because "
                "protocol %(prot)s is not supported", {'prot': protocol})
            return None

        self._ensure_security_group_rules(loadbalancer, result, service_type)

        return result
Example #12
0
    def test_sync_l7_policy(self):
        m_handler = mock.Mock(spec=h_route.OcpRouteHandler)
        m_handler._l7_router = obj_lbaas.LBaaSLoadBalancer(
            id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C',
            project_id='TEST_PROJECT')
        m_handler._drv_l7_router = mock.Mock(
            spec=d_l7_rtr.LBaaSv2L7RouterDriver)
        listener = obj_lbaas.LBaaSListener(
            id='123443545',
            name='TEST_NAME',
            project_id='TEST_PROJECT',
            protocol='TCP',
            port=80,
            loadbalancer_id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C')
        m_handler._l7_router_listeners = {'80': listener}
        l7_policy = obj_route.RouteL7Policy(
            id='00EE9E11-91C2-41CF-8FD4-7970579E5C44',
            name='myname',
            listener_id='00EE9E11-91C2-41CF-8FD4-7970579E5C45',
            redirect_pool_id='00EE9E11-91C2-41CF-8FD4-7970579E5C46',
            project_id='00EE9E11-91C2-41CF-8FD4-7970579E5C46')

        route_state = obj_route.RouteState()
        m_handler._drv_l7_router.ensure_l7_policy.return_value = l7_policy

        route = {
            'metadata': {
                'namespace': 'namespace',
                'name': 'name'
            },
            'spec': {
                'host': 'www.test.com',
                'path': 'mypath',
                'to': {
                    'name': 'target_service'
                }
            }
        }
        route_spec = obj_route.RouteSpec(host='www.test.com1',
                                         path='mypath',
                                         to_service='target_service')

        h_route.OcpRouteHandler._sync_l7_policy(m_handler, route, route_spec,
                                                route_state)
        self.assertEqual(route_state.l7_policy, l7_policy)
Example #13
0
    def ensure_listener(self, loadbalancer, protocol, port):
        if protocol not in _SUPPORTED_LISTENER_PROT:
            LOG.info("Protocol: %(prot)s: is not supported by LBaaSV2",
                     {'prot': protocol})
            return None
        name = "%s:%s:%s" % (loadbalancer.name, protocol, port)
        listener = obj_lbaas.LBaaSListener(name=name,
                                           project_id=loadbalancer.project_id,
                                           loadbalancer_id=loadbalancer.id,
                                           protocol=protocol,
                                           port=port)
        result = self._ensure_provisioned(loadbalancer, listener,
                                          self._create_listener,
                                          self._find_listener)

        self._ensure_security_group_rules(loadbalancer, result)

        return result
Example #14
0
    def test_find_listener_not_found(self):
        lbaas = self.useFixture(k_fix.MockLBaaSClient()).client
        cls = d_lbaasv2.LBaaSv2Driver
        m_driver = mock.Mock(spec=d_lbaasv2.LBaaSv2Driver)
        listener = obj_lbaas.LBaaSListener(
            name='TEST_NAME', project_id='TEST_PROJECT', protocol='TCP',
            port=1234, loadbalancer_id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C')
        resp = iter([])
        lbaas.listeners.return_value = resp

        ret = cls._find_listener(m_driver, listener)
        lbaas.listeners.assert_called_once_with(
            name=listener.name,
            project_id=listener.project_id,
            load_balancer_id=listener.loadbalancer_id,
            protocol=listener.protocol,
            protocol_port=listener.port)
        self.assertIsNone(ret)