def create_network(self, context, network): (network_type, physical_network, segmentation_id) = self._process_provider_create(context, network["network"]) session = context.session # set up default security groups tenant_id = self._get_tenant_id_for_create(context, network["network"]) self._ensure_default_security_group(context, tenant_id) with session.begin(subtransactions=True): if not network_type: # tenant network network_type = self.tenant_network_type if network_type == svc_constants.TYPE_NONE: raise q_exc.TenantNetworksDisabled() elif network_type == svc_constants.TYPE_VLAN: (physical_network, segmentation_id) = ovs_db_v2.reserve_vlan(session) elif network_type in constants.TUNNEL_NETWORK_TYPES: segmentation_id = ovs_db_v2.reserve_tunnel(session) # no reservation needed for TYPE_LOCAL else: # provider network if network_type in [svc_constants.TYPE_VLAN, svc_constants.TYPE_FLAT]: ovs_db_v2.reserve_specific_vlan(session, physical_network, segmentation_id) elif network_type in constants.TUNNEL_NETWORK_TYPES: ovs_db_v2.reserve_specific_tunnel(session, segmentation_id) # no reservation needed for TYPE_LOCAL net = super(OVSNeutronPluginV2, self).create_network(context, network) binding = ovs_db_v2.add_network_binding(session, net["id"], network_type, physical_network, segmentation_id) self._process_l3_create(context, net, network["network"]) # passing None as db model to use binding object self._extend_network_dict_provider_ovs(net, None, binding) # note - exception will rollback entire transaction LOG.debug(_("Created network: %s"), net["id"]) return net
def test_sync_with_allocated_false(self): vlan_ids = set() for x in moves.xrange(VLAN_MIN, VLAN_MAX + 1): physical_network, vlan_id = ovs_db_v2.reserve_vlan(self.session) self.assertEqual(physical_network, PHYS_NET) self.assertThat(vlan_id, matchers.GreaterThan(VLAN_MIN - 1)) self.assertThat(vlan_id, matchers.LessThan(VLAN_MAX + 1)) vlan_ids.add(vlan_id) ovs_db_v2.release_vlan(self.session, PHYS_NET, vlan_ids.pop(), VLAN_RANGES) ovs_db_v2.sync_vlan_allocations({})
def test_sync_with_allocated_false(self): vlan_ids = set() for x in xrange(VLAN_MIN, VLAN_MAX + 1): physical_network, vlan_id = ovs_db_v2.reserve_vlan(self.session) self.assertEqual(physical_network, PHYS_NET) self.assertThat(vlan_id, matchers.GreaterThan(VLAN_MIN - 1)) self.assertThat(vlan_id, matchers.LessThan(VLAN_MAX + 1)) vlan_ids.add(vlan_id) ovs_db_v2.release_vlan(self.session, PHYS_NET, vlan_ids.pop(), VLAN_RANGES) ovs_db_v2.sync_vlan_allocations({})
def test_vlan_pool(self): vlan_ids = set() for x in moves.xrange(VLAN_MIN, VLAN_MAX + 1): physical_network, vlan_id = ovs_db_v2.reserve_vlan(self.session) self.assertEqual(physical_network, PHYS_NET) self.assertThat(vlan_id, matchers.GreaterThan(VLAN_MIN - 1)) self.assertThat(vlan_id, matchers.LessThan(VLAN_MAX + 1)) vlan_ids.add(vlan_id) with testtools.ExpectedException(n_exc.NoNetworkAvailable): physical_network, vlan_id = ovs_db_v2.reserve_vlan(self.session) ovs_db_v2.release_vlan(self.session, PHYS_NET, vlan_ids.pop(), VLAN_RANGES) physical_network, vlan_id = ovs_db_v2.reserve_vlan(self.session) self.assertEqual(physical_network, PHYS_NET) self.assertThat(vlan_id, matchers.GreaterThan(VLAN_MIN - 1)) self.assertThat(vlan_id, matchers.LessThan(VLAN_MAX + 1)) vlan_ids.add(vlan_id) for vlan_id in vlan_ids: ovs_db_v2.release_vlan(self.session, PHYS_NET, vlan_id, VLAN_RANGES)
def test_vlan_pool(self): vlan_ids = set() for x in xrange(VLAN_MIN, VLAN_MAX + 1): physical_network, vlan_id = ovs_db_v2.reserve_vlan(self.session) self.assertEqual(physical_network, PHYS_NET) self.assertThat(vlan_id, matchers.GreaterThan(VLAN_MIN - 1)) self.assertThat(vlan_id, matchers.LessThan(VLAN_MAX + 1)) vlan_ids.add(vlan_id) with testtools.ExpectedException(n_exc.NoNetworkAvailable): physical_network, vlan_id = ovs_db_v2.reserve_vlan(self.session) ovs_db_v2.release_vlan(self.session, PHYS_NET, vlan_ids.pop(), VLAN_RANGES) physical_network, vlan_id = ovs_db_v2.reserve_vlan(self.session) self.assertEqual(physical_network, PHYS_NET) self.assertThat(vlan_id, matchers.GreaterThan(VLAN_MIN - 1)) self.assertThat(vlan_id, matchers.LessThan(VLAN_MAX + 1)) vlan_ids.add(vlan_id) for vlan_id in vlan_ids: ovs_db_v2.release_vlan(self.session, PHYS_NET, vlan_id, VLAN_RANGES)
def create_network(self, context, network): (network_type, physical_network, segmentation_id) = self._process_provider_create(context, network['network']) session = context.session #set up default security groups tenant_id = self._get_tenant_id_for_create( context, network['network']) self._ensure_default_security_group(context, tenant_id) with session.begin(subtransactions=True): if not network_type: # tenant network network_type = self.tenant_network_type if network_type == svc_constants.TYPE_NONE: raise q_exc.TenantNetworksDisabled() elif network_type == svc_constants.TYPE_VLAN: (physical_network, segmentation_id) = ovs_db_v2.reserve_vlan(session) elif network_type in constants.TUNNEL_NETWORK_TYPES: segmentation_id = ovs_db_v2.reserve_tunnel(session) # no reservation needed for TYPE_LOCAL else: # provider network if network_type in [svc_constants.TYPE_VLAN, svc_constants.TYPE_FLAT]: ovs_db_v2.reserve_specific_vlan(session, physical_network, segmentation_id) elif network_type in constants.TUNNEL_NETWORK_TYPES: ovs_db_v2.reserve_specific_tunnel(session, segmentation_id) # no reservation needed for TYPE_LOCAL net = super(OVSNeutronPluginV2, self).create_network(context, network) binding = ovs_db_v2.add_network_binding(session, net['id'], network_type, physical_network, segmentation_id) self._process_l3_create(context, net, network['network']) # passing None as db model to use binding object self._extend_network_dict_provider_ovs(net, None, binding) # note - exception will rollback entire transaction LOG.debug(_("Created network: %s"), net['id']) return net