Ejemplo n.º 1
0
 def _create_router(self, distributed=True, ha=False):
     with self.ctx.session.begin(subtransactions=True):
         self.ctx.session.add(l3_db.Router(id=TEST_ROUTER_ID))
         self.ctx.session.add(
             l3_attrs_db.RouterExtraAttributes(router_id=TEST_ROUTER_ID,
                                               distributed=distributed,
                                               ha=ha))
Ejemplo n.º 2
0
 def test_delete_flavor_in_use(self):
     # make use of router since it has a flavor id
     fl, data = self._create_flavor()
     with self.ctx.session.begin():
         self.ctx.session.add(l3_db.Router(flavor_id=fl['id']))
     self.assertRaises(flavors.FlavorInUse, self.plugin.delete_flavor,
                       self.ctx, fl['id'])
Ejemplo n.º 3
0
    def _test_create_router(self, external_gateway_info=None):
        router_db = l3_db.Router(id='123')
        router_dict = {'id': '123', 'tenant_id': '456',
                       'external_gateway_info': external_gateway_info}
        # Need to use a copy here as the create_router method pops the gateway
        # information
        router_input = {'router': router_dict.copy()}

        with mock.patch.object(l3_db.L3_NAT_dbonly_mixin, '_create_router_db',
                               return_value=router_db) as crd,\
            mock.patch.object(l3_db.L3_NAT_dbonly_mixin, '_make_router_dict',
                              return_value=router_dict),\
            mock.patch.object(l3_db.L3_NAT_dbonly_mixin,
                              '_update_router_gw_info') as urgi,\
            mock.patch.object(l3_db.L3_NAT_db_mixin, 'notify_router_updated')\
            as nru:

            self.db.create_router(mock.ANY, router_input)
            self.assertTrue(crd.called)
            if external_gateway_info:
                self.assertTrue(urgi.called)
                self.assertTrue(nru.called)
            else:
                self.assertFalse(urgi.called)
                self.assertFalse(nru.called)
    def create_router(self, context, router):
        """Creates the vRouter VM using vrouter_driver.

        If we encounter vRouter VM creation failure or connectivity failure
        vrouter_driver will handle the appropriate exceptions and delete
        the vRouter VM.
        """
        LOG.debug("Vyatta vRouter Plugin::Create router: %s", router)

        r = router['router']
        router_id = self.driver.create_router(context)
        if router_id is None:
            raise q_exc.BadRequest(resource='router',
                                   msg=_('Vyatta vRouter creation failed'))

        gw_info = r.pop(l3.EXTERNAL_GW_INFO, attributes.ATTR_NOT_SPECIFIED)

        tenant_id = self._get_tenant_id_for_create(context, r)

        with context.session.begin(subtransactions=True):
            # noinspection PyArgumentList
            router_db = l3_db.Router(id=router_id,
                                     tenant_id=tenant_id,
                                     name=r['name'],
                                     admin_state_up=r['admin_state_up'],
                                     status="ACTIVE")
            context.session.add(router_db)
            self._process_extra_attr_router_create(context, router_db, router)
            router_dict = self._make_router_dict(router_db)

        try:
            self.driver.init_router(context, router_dict)
        except (v_exc.InvalidVRouterInstance,
                v_exc.InvalidInstanceConfiguration,
                v_exc.VRouterConnectFailure, v_exc.VRouterOperationError,
                Exception):
            with excutils.save_and_reraise_exception():
                with context.session.begin(subtransactions=True):
                    context.session.delete(router_db)

        if gw_info != attributes.ATTR_NOT_SPECIFIED:
            self._update_router_gw_info(context, router_db['id'], gw_info)
            router_dict[l3.EXTERNAL_GW_INFO] = gw_info

        return self._make_router_dict(router_db)
Ejemplo n.º 5
0
 def setUp(self):
     super(TestL3GwModeMixin, self).setUp()
     plugin = __name__ + '.' + TestDbIntPlugin.__name__
     self.setup_coreplugin(plugin)
     self.target_object = TestDbIntPlugin()
     # Patch the context
     ctx_patcher = mock.patch('neutron.context', autospec=True)
     mock_context = ctx_patcher.start()
     self.addCleanup(db_api.clear_db)
     self.context = mock_context.get_admin_context()
     # This ensure also calls to elevated work in unit tests
     self.context.elevated.return_value = self.context
     self.context.session = db_api.get_session()
     # Create sample data for tests
     self.ext_net_id = _uuid()
     self.int_net_id = _uuid()
     self.int_sub_id = _uuid()
     self.tenant_id = 'the_tenant'
     self.network = models_v2.Network(id=self.ext_net_id,
                                      tenant_id=self.tenant_id,
                                      admin_state_up=True,
                                      status=constants.NET_STATUS_ACTIVE)
     self.net_ext = external_net_db.ExternalNetwork(
         network_id=self.ext_net_id)
     self.context.session.add(self.network)
     # The following is to avoid complains from sqlite on
     # foreign key violations
     self.context.session.flush()
     self.context.session.add(self.net_ext)
     self.router = l3_db.Router(id=_uuid(),
                                name=None,
                                tenant_id=self.tenant_id,
                                admin_state_up=True,
                                status=constants.NET_STATUS_ACTIVE,
                                enable_snat=True,
                                gw_port_id=None)
     self.context.session.add(self.router)
     self.context.session.flush()
     self.router_gw_port = models_v2.Port(
         id=FAKE_GW_PORT_ID,
         tenant_id=self.tenant_id,
         device_id=self.router.id,
         device_owner=l3_db.DEVICE_OWNER_ROUTER_GW,
         admin_state_up=True,
         status=constants.PORT_STATUS_ACTIVE,
         mac_address=FAKE_GW_PORT_MAC,
         network_id=self.ext_net_id)
     self.router.gw_port_id = self.router_gw_port.id
     self.context.session.add(self.router)
     self.context.session.add(self.router_gw_port)
     self.context.session.flush()
     self.fip_ext_port = models_v2.Port(
         id=FAKE_FIP_EXT_PORT_ID,
         tenant_id=self.tenant_id,
         admin_state_up=True,
         device_id=self.router.id,
         device_owner=l3_db.DEVICE_OWNER_FLOATINGIP,
         status=constants.PORT_STATUS_ACTIVE,
         mac_address=FAKE_FIP_EXT_PORT_MAC,
         network_id=self.ext_net_id)
     self.context.session.add(self.fip_ext_port)
     self.context.session.flush()
     self.int_net = models_v2.Network(id=self.int_net_id,
                                      tenant_id=self.tenant_id,
                                      admin_state_up=True,
                                      status=constants.NET_STATUS_ACTIVE)
     self.int_sub = models_v2.Subnet(id=self.int_sub_id,
                                     tenant_id=self.tenant_id,
                                     ip_version=4,
                                     cidr='3.3.3.0/24',
                                     gateway_ip='3.3.3.1',
                                     network_id=self.int_net_id)
     self.router_port = models_v2.Port(
         id=FAKE_ROUTER_PORT_ID,
         tenant_id=self.tenant_id,
         admin_state_up=True,
         device_id=self.router.id,
         device_owner=l3_db.DEVICE_OWNER_ROUTER_INTF,
         status=constants.PORT_STATUS_ACTIVE,
         mac_address=FAKE_ROUTER_PORT_MAC,
         network_id=self.int_net_id)
     self.router_port_ip_info = models_v2.IPAllocation(
         port_id=self.router_port.id,
         network_id=self.int_net.id,
         subnet_id=self.int_sub_id,
         ip_address='3.3.3.1')
     self.context.session.add(self.int_net)
     self.context.session.add(self.int_sub)
     self.context.session.add(self.router_port)
     self.context.session.add(self.router_port_ip_info)
     self.context.session.flush()
     self.fip_int_port = models_v2.Port(id=FAKE_FIP_INT_PORT_ID,
                                        tenant_id=self.tenant_id,
                                        admin_state_up=True,
                                        device_id='something',
                                        device_owner='compute:nova',
                                        status=constants.PORT_STATUS_ACTIVE,
                                        mac_address=FAKE_FIP_INT_PORT_MAC,
                                        network_id=self.int_net_id)
     self.fip_int_ip_info = models_v2.IPAllocation(
         port_id=self.fip_int_port.id,
         network_id=self.int_net.id,
         subnet_id=self.int_sub_id,
         ip_address='3.3.3.3')
     self.fip = l3_db.FloatingIP(id=_uuid(),
                                 floating_ip_address='1.1.1.2',
                                 floating_network_id=self.ext_net_id,
                                 floating_port_id=FAKE_FIP_EXT_PORT_ID,
                                 fixed_port_id=None,
                                 fixed_ip_address=None,
                                 router_id=None)
     self.context.session.add(self.fip_int_port)
     self.context.session.add(self.fip_int_ip_info)
     self.context.session.add(self.fip)
     self.context.session.flush()
     self.fip_request = {
         'port_id': FAKE_FIP_INT_PORT_ID,
         'tenant_id': self.tenant_id
     }
Ejemplo n.º 6
0
 def _setup_neutron_router(self):
     with self.ctx.session.begin(subtransactions=True):
         router = l3_db.Router()
         self.ctx.session.add(router)
         return router