mirror of https://github.com/apache/cloudstack.git
vpc: add bypassvlanoverlapcheck parameter when create private g… (#3899)
This commit is contained in:
parent
458d3b5b47
commit
ce894238d9
|
|
@ -180,7 +180,7 @@ public interface NetworkService {
|
|||
* @throws ResourceAllocationException
|
||||
*/
|
||||
Network createPrivateNetwork(String networkName, String displayText, long physicalNetworkId, String broadcastUri, String startIp, String endIP, String gateway,
|
||||
String netmask, long networkOwnerId, Long vpcId, Boolean sourceNat, Long networkOfferingId) throws ResourceAllocationException, ConcurrentOperationException,
|
||||
String netmask, long networkOwnerId, Long vpcId, Boolean sourceNat, Long networkOfferingId, Boolean bypassVlanOverlapCheck) throws ResourceAllocationException, ConcurrentOperationException,
|
||||
InsufficientCapacityException;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -166,7 +166,7 @@ public interface VpcService {
|
|||
* @throws ResourceAllocationException
|
||||
*/
|
||||
public PrivateGateway createVpcPrivateGateway(long vpcId, Long physicalNetworkId, String vlan, String ipAddress, String gateway, String netmask, long gatewayOwnerId,
|
||||
Long networkOfferingId, Boolean isSoruceNat, Long aclId) throws ResourceAllocationException, ConcurrentOperationException, InsufficientCapacityException;
|
||||
Long networkOfferingId, Boolean isSoruceNat, Long aclId, Boolean bypassVlanOverlapCheck) throws ResourceAllocationException, ConcurrentOperationException, InsufficientCapacityException;
|
||||
|
||||
/**
|
||||
* Applies VPC private gateway on the backend, so it becomes functional
|
||||
|
|
|
|||
|
|
@ -92,6 +92,9 @@ public class CreatePrivateGatewayCmd extends BaseAsyncCreateCmd {
|
|||
@Parameter(name = ApiConstants.ACL_ID, type = CommandType.UUID, entityType = NetworkACLResponse.class, required = false, description = "the ID of the network ACL")
|
||||
private Long aclId;
|
||||
|
||||
@Parameter(name=ApiConstants.BYPASS_VLAN_OVERLAP_CHECK, type=CommandType.BOOLEAN, description="when true bypasses VLAN id/range overlap check during private gateway creation")
|
||||
private Boolean bypassVlanOverlapCheck;
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
/////////////////// Accessors ///////////////////////
|
||||
/////////////////////////////////////////////////////
|
||||
|
|
@ -135,6 +138,13 @@ public class CreatePrivateGatewayCmd extends BaseAsyncCreateCmd {
|
|||
return aclId;
|
||||
}
|
||||
|
||||
public Boolean getBypassVlanOverlapCheck() {
|
||||
if (bypassVlanOverlapCheck != null) {
|
||||
return bypassVlanOverlapCheck;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
/////////////// API Implementation///////////////////
|
||||
/////////////////////////////////////////////////////
|
||||
|
|
@ -149,7 +159,7 @@ public class CreatePrivateGatewayCmd extends BaseAsyncCreateCmd {
|
|||
try {
|
||||
result =
|
||||
_vpcService.createVpcPrivateGateway(getVpcId(), getPhysicalNetworkId(), getBroadcastUri(), getStartIp(), getGateway(), getNetmask(), getEntityOwnerId(),
|
||||
getNetworkOfferingId(), getIsSourceNat(), getAclId());
|
||||
getNetworkOfferingId(), getIsSourceNat(), getAclId(), getBypassVlanOverlapCheck());
|
||||
} catch (InsufficientCapacityException ex) {
|
||||
s_logger.info(ex);
|
||||
s_logger.trace(ex);
|
||||
|
|
|
|||
|
|
@ -178,6 +178,8 @@ public interface NetworkOrchestrationService {
|
|||
|
||||
boolean destroyNetwork(long networkId, ReservationContext context, boolean forced);
|
||||
|
||||
Network createPrivateNetwork(long networkOfferingId, String name, String displayText, String gateway, String cidr, String vlanId, boolean bypassVlanOverlapCheck, Account owner, PhysicalNetwork pNtwk, Long vpcId) throws ConcurrentOperationException, InsufficientCapacityException, ResourceAllocationException;
|
||||
|
||||
Network createGuestNetwork(long networkOfferingId, String name, String displayText, String gateway, String cidr, String vlanId, boolean bypassVlanOverlapCheck, String networkDomain, Account owner,
|
||||
Long domainId, PhysicalNetwork physicalNetwork, long zoneId, ACLType aclType, Boolean subdomainAccess, Long vpcId, String ip6Gateway, String ip6Cidr,
|
||||
Boolean displayNetworkEnabled, String isolatedPvlan, Network.PVlanType isolatedPvlanType, String externalId) throws ConcurrentOperationException, InsufficientCapacityException, ResourceAllocationException;
|
||||
|
|
|
|||
|
|
@ -2175,12 +2175,32 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@DB
|
||||
public Network createPrivateNetwork(final long networkOfferingId, final String name, final String displayText, final String gateway, final String cidr, final String vlanId, final boolean bypassVlanOverlapCheck, final Account owner, final PhysicalNetwork pNtwk, final Long vpcId) throws ConcurrentOperationException, InsufficientCapacityException, ResourceAllocationException {
|
||||
// create network for private gateway
|
||||
return createGuestNetwork(networkOfferingId, name, displayText, gateway, cidr, vlanId,
|
||||
bypassVlanOverlapCheck, null, owner, null, pNtwk, pNtwk.getDataCenterId(), ACLType.Account, null,
|
||||
vpcId, null, null, true, null, null, null, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
@DB
|
||||
public Network createGuestNetwork(final long networkOfferingId, final String name, final String displayText, final String gateway, final String cidr, String vlanId,
|
||||
boolean bypassVlanOverlapCheck, String networkDomain, final Account owner, final Long domainId, final PhysicalNetwork pNtwk,
|
||||
final long zoneId, final ACLType aclType, Boolean subdomainAccess, final Long vpcId, final String ip6Gateway, final String ip6Cidr,
|
||||
final Boolean isDisplayNetworkEnabled, final String isolatedPvlan, Network.PVlanType isolatedPvlanType, String externalId) throws ConcurrentOperationException, InsufficientCapacityException, ResourceAllocationException {
|
||||
// create Isolated/Shared/L2 network
|
||||
return createGuestNetwork(networkOfferingId, name, displayText, gateway, cidr, vlanId, bypassVlanOverlapCheck,
|
||||
networkDomain, owner, domainId, pNtwk, zoneId, aclType, subdomainAccess, vpcId, ip6Gateway, ip6Cidr,
|
||||
isDisplayNetworkEnabled, isolatedPvlan, isolatedPvlanType, externalId, false);
|
||||
}
|
||||
|
||||
@DB
|
||||
private Network createGuestNetwork(final long networkOfferingId, final String name, final String displayText, final String gateway, final String cidr, String vlanId,
|
||||
boolean bypassVlanOverlapCheck, String networkDomain, final Account owner, final Long domainId, final PhysicalNetwork pNtwk,
|
||||
final long zoneId, final ACLType aclType, Boolean subdomainAccess, final Long vpcId, final String ip6Gateway, final String ip6Cidr,
|
||||
final Boolean isDisplayNetworkEnabled, final String isolatedPvlan, Network.PVlanType isolatedPvlanType, String externalId, final Boolean isPrivateNetwork) throws ConcurrentOperationException, InsufficientCapacityException, ResourceAllocationException {
|
||||
|
||||
final NetworkOfferingVO ntwkOff = _networkOfferingDao.findById(networkOfferingId);
|
||||
final DataCenterVO zone = _dcDao.findById(zoneId);
|
||||
|
|
@ -2306,7 +2326,7 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra
|
|||
}
|
||||
if (! UuidUtils.validateUUID(vlanId)){
|
||||
// For Isolated and L2 networks, don't allow to create network with vlan that already exists in the zone
|
||||
if (ntwkOff.getGuestType() == GuestType.Isolated || ntwkOff.getGuestType() == GuestType.L2 || !hasGuestBypassVlanOverlapCheck(bypassVlanOverlapCheck, ntwkOff)) {
|
||||
if (!hasGuestBypassVlanOverlapCheck(bypassVlanOverlapCheck, ntwkOff, isPrivateNetwork)) {
|
||||
if (_networksDao.listByZoneAndUriAndGuestType(zoneId, uri.toString(), null).size() > 0) {
|
||||
throw new InvalidParameterValueException("Network with vlan " + vlanId + " already exists or overlaps with other network vlans in zone " + zoneId);
|
||||
} else if (secondaryUri != null && _networksDao.listByZoneAndUriAndGuestType(zoneId, secondaryUri.toString(), null).size() > 0) {
|
||||
|
|
@ -2508,8 +2528,8 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra
|
|||
* @param bypassVlanOverlapCheck bypass VLAN id/range overlap check
|
||||
* @param ntwkOff network offering
|
||||
*/
|
||||
private boolean hasGuestBypassVlanOverlapCheck(final boolean bypassVlanOverlapCheck, final NetworkOfferingVO ntwkOff) {
|
||||
return bypassVlanOverlapCheck && ntwkOff.getGuestType() != GuestType.Isolated;
|
||||
private boolean hasGuestBypassVlanOverlapCheck(final boolean bypassVlanOverlapCheck, final NetworkOfferingVO ntwkOff, final boolean isPrivateNetwork) {
|
||||
return bypassVlanOverlapCheck && (ntwkOff.getGuestType() == GuestType.Shared || isPrivateNetwork);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -105,7 +105,7 @@ public interface NetworkDao extends GenericDao<NetworkVO, Long>, StateDao<State,
|
|||
|
||||
List<NetworkVO> listByVpc(long vpcId);
|
||||
|
||||
NetworkVO getPrivateNetwork(String broadcastUri, String cidr, long accountId, long zoneId, Long networkOfferingId);
|
||||
NetworkVO getPrivateNetwork(String broadcastUri, String cidr, long accountId, long zoneId, Long networkOfferingId, Long vpcId);
|
||||
|
||||
long countVpcNetworks(long vpcId);
|
||||
|
||||
|
|
|
|||
|
|
@ -40,6 +40,8 @@ import com.cloud.network.Network.State;
|
|||
import com.cloud.network.Networks.BroadcastDomainType;
|
||||
import com.cloud.network.Networks.Mode;
|
||||
import com.cloud.network.Networks.TrafficType;
|
||||
import com.cloud.network.vpc.VpcGatewayVO;
|
||||
import com.cloud.network.vpc.dao.VpcGatewayDao;
|
||||
import com.cloud.offering.NetworkOffering;
|
||||
import com.cloud.offerings.NetworkOfferingVO;
|
||||
import com.cloud.offerings.dao.NetworkOfferingDao;
|
||||
|
|
@ -79,6 +81,7 @@ public class NetworkDaoImpl extends GenericDaoBase<NetworkVO, Long>implements Ne
|
|||
SearchBuilder<NetworkVO> OfferingAccountNetworkSearch;
|
||||
|
||||
GenericSearchBuilder<NetworkVO, Long> GarbageCollectedSearch;
|
||||
SearchBuilder<NetworkVO> PrivateNetworkSearch;
|
||||
|
||||
@Inject
|
||||
ResourceTagDao _tagsDao;
|
||||
|
|
@ -96,6 +99,8 @@ public class NetworkDaoImpl extends GenericDaoBase<NetworkVO, Long>implements Ne
|
|||
NetworkOpDao _ntwkOpDao;
|
||||
@Inject
|
||||
NetworkDetailsDao networkDetailsDao;
|
||||
@Inject
|
||||
VpcGatewayDao _vpcGatewayDao;
|
||||
|
||||
TableGenerator _tgMacAddress;
|
||||
|
||||
|
|
@ -251,6 +256,15 @@ public class NetworkDaoImpl extends GenericDaoBase<NetworkVO, Long>implements Ne
|
|||
GarbageCollectedSearch.join("ntwkOffGC", join8, GarbageCollectedSearch.entity().getNetworkOfferingId(), join8.entity().getId(), JoinBuilder.JoinType.INNER);
|
||||
GarbageCollectedSearch.done();
|
||||
|
||||
PrivateNetworkSearch = createSearchBuilder();
|
||||
PrivateNetworkSearch.and("cidr", PrivateNetworkSearch.entity().getCidr(), Op.EQ);
|
||||
PrivateNetworkSearch.and("offering", PrivateNetworkSearch.entity().getNetworkOfferingId(), Op.EQ);
|
||||
PrivateNetworkSearch.and("datacenter", PrivateNetworkSearch.entity().getDataCenterId(), Op.EQ);
|
||||
PrivateNetworkSearch.and("broadcastUri", PrivateNetworkSearch.entity().getBroadcastUri(), Op.EQ);
|
||||
final SearchBuilder<VpcGatewayVO> join10 = _vpcGatewayDao.createSearchBuilder();
|
||||
join10.and("vpc", join10.entity().getVpcId(), Op.EQ);
|
||||
PrivateNetworkSearch.join("vpcgateways", join10, PrivateNetworkSearch.entity().getId(), join10.entity().getNetworkId(), JoinBuilder.JoinType.INNER);
|
||||
PrivateNetworkSearch.done();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -597,16 +611,17 @@ public class NetworkDaoImpl extends GenericDaoBase<NetworkVO, Long>implements Ne
|
|||
}
|
||||
|
||||
@Override
|
||||
public NetworkVO getPrivateNetwork(final String broadcastUri, final String cidr, final long accountId, final long zoneId, Long networkOfferingId) {
|
||||
public NetworkVO getPrivateNetwork(final String broadcastUri, final String cidr, final long accountId, final long zoneId, Long networkOfferingId, Long vpcId) {
|
||||
if (networkOfferingId == null) {
|
||||
networkOfferingId = _ntwkOffDao.findByUniqueName(NetworkOffering.SystemPrivateGatewayNetworkOffering).getId();
|
||||
}
|
||||
final SearchCriteria<NetworkVO> sc = AllFieldsSearch.create();
|
||||
final SearchCriteria<NetworkVO> sc = PrivateNetworkSearch.create();
|
||||
sc.setParameters("datacenter", zoneId);
|
||||
sc.setParameters("broadcastUri", broadcastUri);
|
||||
sc.setParameters("cidr", cidr);
|
||||
sc.setParameters("account", accountId);
|
||||
sc.setParameters("offering", networkOfferingId);
|
||||
sc.setJoinParameters("vpcgateways", "vpc", vpcId);
|
||||
return findOneBy(sc);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4411,7 +4411,7 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C
|
|||
@Override
|
||||
@DB
|
||||
public Network createPrivateNetwork(final String networkName, final String displayText, long physicalNetworkId, String broadcastUriString, final String startIp, String endIp, final String gateway,
|
||||
String netmask, final long networkOwnerId, final Long vpcId, final Boolean sourceNat, final Long networkOfferingId)
|
||||
String netmask, final long networkOwnerId, final Long vpcId, final Boolean sourceNat, final Long networkOfferingId, final Boolean bypassVlanOverlapCheck)
|
||||
throws ResourceAllocationException, ConcurrentOperationException, InsufficientCapacityException {
|
||||
|
||||
final Account owner = _accountMgr.getAccount(networkOwnerId);
|
||||
|
|
@ -4469,11 +4469,10 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C
|
|||
DataCenterVO dc = _dcDao.lockRow(pNtwk.getDataCenterId(), true);
|
||||
|
||||
//check if we need to create guest network
|
||||
Network privateNetwork = _networksDao.getPrivateNetwork(uriString, cidr, networkOwnerId, pNtwk.getDataCenterId(), networkOfferingId);
|
||||
Network privateNetwork = _networksDao.getPrivateNetwork(uriString, cidr, networkOwnerId, pNtwk.getDataCenterId(), networkOfferingId, vpcId);
|
||||
if (privateNetwork == null) {
|
||||
//create Guest network
|
||||
privateNetwork = _networkMgr.createGuestNetwork(ntwkOffFinal.getId(), networkName, displayText, gateway, cidr, uriString, false, null, owner, null, pNtwk,
|
||||
pNtwk.getDataCenterId(), ACLType.Account, null, vpcId, null, null, true, null, null,null);
|
||||
privateNetwork = _networkMgr.createPrivateNetwork(ntwkOffFinal.getId(), networkName, displayText, gateway, cidr, uriString, bypassVlanOverlapCheck, owner, pNtwk, vpcId);
|
||||
if (privateNetwork != null) {
|
||||
s_logger.debug("Successfully created guest network " + privateNetwork);
|
||||
} else {
|
||||
|
|
@ -4482,10 +4481,8 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C
|
|||
} else {
|
||||
s_logger.debug("Private network already exists: " + privateNetwork);
|
||||
//Do not allow multiple private gateways with same Vlan within a VPC
|
||||
if (vpcId != null && vpcId.equals(privateNetwork.getVpcId())) {
|
||||
throw new InvalidParameterValueException("Private network for the vlan: " + uriString + " and cidr " + cidr + " already exists " + "for Vpc " + vpcId + " in zone "
|
||||
throw new InvalidParameterValueException("Private network for the vlan: " + uriString + " and cidr " + cidr + " already exists " + "for Vpc " + vpcId + " in zone "
|
||||
+ _entityMgr.findById(DataCenter.class, pNtwk.getDataCenterId()).getName());
|
||||
}
|
||||
}
|
||||
if (vpcId != null) {
|
||||
//add entry to private_ip_address table
|
||||
|
|
|
|||
|
|
@ -1805,7 +1805,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
|
|||
@DB
|
||||
@ActionEvent(eventType = EventTypes.EVENT_PRIVATE_GATEWAY_CREATE, eventDescription = "creating VPC private gateway", create = true)
|
||||
public PrivateGateway createVpcPrivateGateway(final long vpcId, Long physicalNetworkId, final String broadcastUri, final String ipAddress, final String gateway,
|
||||
final String netmask, final long gatewayOwnerId, final Long networkOfferingId, final Boolean isSourceNat, final Long aclId) throws ResourceAllocationException,
|
||||
final String netmask, final long gatewayOwnerId, final Long networkOfferingId, final Boolean isSourceNat, final Long aclId, final Boolean bypassVlanOverlapCheck) throws ResourceAllocationException,
|
||||
ConcurrentOperationException, InsufficientCapacityException {
|
||||
|
||||
// Validate parameters
|
||||
|
|
@ -1846,7 +1846,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
|
|||
Network privateNtwk = null;
|
||||
if (BroadcastDomainType.getSchemeValue(BroadcastDomainType.fromString(broadcastUri)) == BroadcastDomainType.Lswitch) {
|
||||
final String cidr = NetUtils.ipAndNetMaskToCidr(gateway, netmask);
|
||||
privateNtwk = _ntwkDao.getPrivateNetwork(broadcastUri, cidr, gatewayOwnerId, dcId, networkOfferingId);
|
||||
privateNtwk = _ntwkDao.getPrivateNetwork(broadcastUri, cidr, gatewayOwnerId, dcId, networkOfferingId, vpcId);
|
||||
// if the dcid is different we get no network so next we
|
||||
// try to create it
|
||||
}
|
||||
|
|
@ -1854,7 +1854,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
|
|||
s_logger.info("creating new network for vpc " + vpc + " using broadcast uri: " + broadcastUri);
|
||||
final String networkName = "vpc-" + vpc.getName() + "-privateNetwork";
|
||||
privateNtwk = _ntwkSvc.createPrivateNetwork(networkName, networkName, physicalNetworkIdFinal, broadcastUri, ipAddress, null, gateway, netmask,
|
||||
gatewayOwnerId, vpcId, isSourceNat, networkOfferingId);
|
||||
gatewayOwnerId, vpcId, isSourceNat, networkOfferingId, bypassVlanOverlapCheck);
|
||||
} else { // create the nic/ip as createPrivateNetwork
|
||||
// doesn''t do that work for us now
|
||||
s_logger.info("found and using existing network for vpc " + vpc + ": " + broadcastUri);
|
||||
|
|
|
|||
|
|
@ -116,7 +116,7 @@ public class CreatePrivateNetworkTest {
|
|||
DataCenterVO dc = new DataCenterVO(1L, "hut", "op de hei", null, null, null, null, "10.1.1.0/24", "unreal.net", 1L, NetworkType.Advanced, null, null);
|
||||
when(networkService._dcDao.lockRow(anyLong(), anyBoolean())).thenReturn(dc);
|
||||
|
||||
when(networkService._networksDao.getPrivateNetwork(anyString(), anyString(), eq(1L), eq(1L), anyLong())).thenReturn(null);
|
||||
when(networkService._networksDao.getPrivateNetwork(anyString(), anyString(), eq(1L), eq(1L), anyLong(), anyLong())).thenReturn(null);
|
||||
|
||||
Network net =
|
||||
new NetworkVO(1L, TrafficType.Guest, Mode.None, BroadcastDomainType.Vlan, 1L, 1L, 1L, 1L, "bla", "fake", "eet.net", GuestType.Isolated, 1L, 1L,
|
||||
|
|
@ -124,6 +124,8 @@ public class CreatePrivateNetworkTest {
|
|||
when(networkService._networkMgr.createGuestNetwork(eq(ntwkOff.getId()), eq("bla"), eq("fake"), eq("10.1.1.1"), eq("10.1.1.0/24"), nullable(String.class), nullable(Boolean.class), nullable(String.class),
|
||||
eq(account), nullable(Long.class), eq(physicalNetwork), eq(physicalNetwork.getDataCenterId()), eq(ACLType.Account), nullable(Boolean.class), eq(1L), nullable(String.class), nullable(String.class),
|
||||
nullable(Boolean.class), nullable(String.class), nullable(Network.PVlanType.class), nullable(String.class))).thenReturn(net);
|
||||
when(
|
||||
networkService._networkMgr.createPrivateNetwork(eq(ntwkOff.getId()), eq("bla"), eq("fake"), eq("10.1.1.1"), eq("10.1.1.0/24"), anyString(), anyBoolean(), eq(account), eq(physicalNetwork), eq(1L))).thenReturn(net);
|
||||
|
||||
when(networkService._privateIpDao.findByIpAndSourceNetworkId(net.getId(), "10.1.1.2")).thenReturn(null);
|
||||
when(networkService._privateIpDao.findByIpAndSourceNetworkIdAndVpcId(eq(1L), anyString(), eq(1L))).thenReturn(null);
|
||||
|
|
@ -137,21 +139,21 @@ public class CreatePrivateNetworkTest {
|
|||
/* Network nw; */
|
||||
try {
|
||||
/* nw = */
|
||||
networkService.createPrivateNetwork("bla", "fake", 1L, "vlan:1", "10.1.1.2", null, "10.1.1.1", "255.255.255.0", 1L, 1L, true, 1L);
|
||||
networkService.createPrivateNetwork("bla", "fake", 1L, "vlan:1", "10.1.1.2", null, "10.1.1.1", "255.255.255.0", 1L, 1L, true, 1L, false);
|
||||
/* nw = */
|
||||
networkService.createPrivateNetwork("bla", "fake", 1L, "lswitch:3", "10.1.1.2", null, "10.1.1.1", "255.255.255.0", 1L, 1L, false, 1L);
|
||||
networkService.createPrivateNetwork("bla", "fake", 1L, "lswitch:3", "10.1.1.2", null, "10.1.1.1", "255.255.255.0", 1L, 1L, false, 1L, false);
|
||||
boolean invalid = false;
|
||||
boolean unsupported = false;
|
||||
try {
|
||||
/* nw = */
|
||||
networkService.createPrivateNetwork("bla", "fake", 1, "bla:2", "10.1.1.2", null, "10.1.1.1", "255.255.255.0", 1, 1L, true, 1L);
|
||||
networkService.createPrivateNetwork("bla", "fake", 1, "bla:2", "10.1.1.2", null, "10.1.1.1", "255.255.255.0", 1, 1L, true, 1L, false);
|
||||
} catch (CloudRuntimeException e) {
|
||||
Assert.assertEquals("unexpected parameter exception", "string 'bla:2' has an unknown BroadcastDomainType.", e.getMessage());
|
||||
invalid = true;
|
||||
}
|
||||
try {
|
||||
/* nw = */
|
||||
networkService.createPrivateNetwork("bla", "fake", 1, "mido://4", "10.1.1.2", null, "10.1.1.1", "255.255.255.0", 1, 1L, false, 1L);
|
||||
networkService.createPrivateNetwork("bla", "fake", 1, "mido://4", "10.1.1.2", null, "10.1.1.1", "255.255.255.0", 1, 1L, false, 1L, false);
|
||||
} catch (InvalidParameterValueException e) {
|
||||
Assert.assertEquals("unexpected parameter exception", "unsupported type of broadcastUri specified: mido://4", e.getMessage());
|
||||
unsupported = true;
|
||||
|
|
|
|||
|
|
@ -506,7 +506,7 @@ public class MockNetworkManagerImpl extends ManagerBase implements NetworkOrches
|
|||
*/
|
||||
@Override
|
||||
public Network createPrivateNetwork(String networkName, String displayText, long physicalNetworkId, String vlan, String startIp, String endIP, String gateway,
|
||||
String netmask, long networkOwnerId, Long vpcId, Boolean sourceNat, Long networkOfferingId) throws ResourceAllocationException, ConcurrentOperationException,
|
||||
String netmask, long networkOwnerId, Long vpcId, Boolean sourceNat, Long networkOfferingId, Boolean bypassVlanOverlapCheck) throws ResourceAllocationException, ConcurrentOperationException,
|
||||
InsufficientCapacityException {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
|
|
@ -635,6 +635,11 @@ public class MockNetworkManagerImpl extends ManagerBase implements NetworkOrches
|
|||
return false;
|
||||
}
|
||||
|
||||
public Network createPrivateNetwork(final long networkOfferingId, final String name, final String displayText, final String gateway, final String cidr, final String vlanId, final boolean bypassVlanOverlapCheck, final Account owner, final PhysicalNetwork pNtwk, final Long vpcId) throws ConcurrentOperationException, InsufficientCapacityException, ResourceAllocationException {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see com.cloud.network.NetworkManager#createGuestNetwork(long, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, com.cloud.user.Account, java.lang.Long, com.cloud.network.PhysicalNetwork, long, org.apache.cloudstack.acl.ControlledEntity.ACLType, java.lang.Boolean, java.lang.Long)
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -192,7 +192,7 @@ public class MockNetworkDaoImpl extends GenericDaoBase<NetworkVO, Long> implemen
|
|||
}
|
||||
|
||||
@Override
|
||||
public NetworkVO getPrivateNetwork(final String broadcastUri, final String cidr, final long accountId, final long zoneId, final Long netofferid) {
|
||||
public NetworkVO getPrivateNetwork(final String broadcastUri, final String cidr, final long accountId, final long zoneId, final Long netofferid, final Long vpcId) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -639,6 +639,7 @@ class TestPrivateGwACL(cloudstackTestCase):
|
|||
createPrivateGatewayCmd.netmask = "255.255.255.0"
|
||||
createPrivateGatewayCmd.ipaddress = ip_address
|
||||
createPrivateGatewayCmd.vlan = vlan
|
||||
createPrivateGatewayCmd.bypassvlanoverlapcheck = "true"
|
||||
createPrivateGatewayCmd.vpcid = vpc.id
|
||||
createPrivateGatewayCmd.sourcenatsupported = "false"
|
||||
createPrivateGatewayCmd.aclid = aclId
|
||||
|
|
|
|||
|
|
@ -3030,7 +3030,7 @@ class Network:
|
|||
networkofferingid=None, projectid=None,
|
||||
subdomainaccess=None, zoneid=None,
|
||||
gateway=None, netmask=None, vpcid=None, aclid=None, vlan=None,
|
||||
externalid=None):
|
||||
externalid=None, bypassvlanoverlapcheck=None):
|
||||
"""Create Network for account"""
|
||||
cmd = createNetwork.createNetworkCmd()
|
||||
cmd.name = services["name"]
|
||||
|
|
@ -3084,6 +3084,8 @@ class Network:
|
|||
cmd.aclid = aclid
|
||||
if externalid:
|
||||
cmd.externalid = externalid
|
||||
if bypassvlanoverlapcheck:
|
||||
cmd.bypassvlanoverlapcheck = bypassvlanoverlapcheck
|
||||
return Network(apiclient.createNetwork(cmd).__dict__)
|
||||
|
||||
def delete(self, apiclient):
|
||||
|
|
@ -4540,7 +4542,7 @@ class PrivateGateway:
|
|||
|
||||
@classmethod
|
||||
def create(cls, apiclient, gateway, ipaddress, netmask, vlan, vpcid,
|
||||
physicalnetworkid=None, aclid=None):
|
||||
physicalnetworkid=None, aclid=None, bypassvlanoverlapcheck=None):
|
||||
"""Create private gateway"""
|
||||
|
||||
cmd = createPrivateGateway.createPrivateGatewayCmd()
|
||||
|
|
@ -4553,6 +4555,8 @@ class PrivateGateway:
|
|||
cmd.physicalnetworkid = physicalnetworkid
|
||||
if aclid:
|
||||
cmd.aclid = aclid
|
||||
if bypassvlanoverlapcheck:
|
||||
cmd.bypassvlanoverlapcheck = bypassvlanoverlapcheck
|
||||
|
||||
return PrivateGateway(apiclient.createPrivateGateway(cmd).__dict__)
|
||||
|
||||
|
|
|
|||
|
|
@ -2055,6 +2055,10 @@
|
|||
},
|
||||
docID: 'helpVPCGatewayVLAN'
|
||||
},
|
||||
bypassVlanOverlapCheck: {
|
||||
label: 'label.bypass.vlan.overlap.check',
|
||||
isBoolean: true
|
||||
},
|
||||
ipaddress: {
|
||||
label: 'label.ip.address',
|
||||
validation: {
|
||||
|
|
@ -2124,6 +2128,9 @@
|
|||
} else
|
||||
array1.push("&sourcenatsupported=false");
|
||||
|
||||
if (args.$form.find('.form-item[rel=bypassVlanOverlapCheck]').css("display") != "none") {
|
||||
array1.push("&bypassVlanOverlapCheck=" + encodeURIComponent((args.data.bypassVlanOverlapCheck == "on")));
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
url: createURL('createPrivateGateway' + array1.join("")),
|
||||
|
|
@ -2233,6 +2240,10 @@
|
|||
},
|
||||
docID: 'helpVPCGatewayVLAN'
|
||||
},
|
||||
bypassVlanOverlapCheck: {
|
||||
label: 'label.bypass.vlan.overlap.check',
|
||||
isBoolean: true
|
||||
},
|
||||
ipaddress: {
|
||||
label: 'label.ip.address',
|
||||
validation: {
|
||||
|
|
@ -2307,6 +2318,9 @@
|
|||
} else
|
||||
array1.push("&sourcenatsupported=false");
|
||||
|
||||
if (args.$form.find('.form-item[rel=bypassVlanOverlapCheck]').css("display") != "none") {
|
||||
array1.push("&bypassVlanOverlapCheck=" + encodeURIComponent((args.data.bypassVlanOverlapCheck == "on")));
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
url: createURL('createPrivateGateway' + array1.join("")),
|
||||
|
|
|
|||
Loading…
Reference in New Issue