Skip to content

Commit 2772157

Browse files
committed
Routed: check if routed network is enabled when create ipv4 subnet/bgp peer/ASN range/network/vpc
1 parent 0f4d801 commit 2772157

File tree

5 files changed

+42
-10
lines changed

5 files changed

+42
-10
lines changed

server/src/main/java/com/cloud/bgp/BGPServiceImpl.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import com.cloud.dc.dao.DataCenterDao;
2525
import com.cloud.domain.Domain;
2626
import com.cloud.domain.dao.DomainDao;
27+
import com.cloud.exception.InvalidParameterValueException;
2728
import com.cloud.exception.ResourceUnavailableException;
2829
import com.cloud.network.Network;
2930
import com.cloud.network.NetworkModel;
@@ -116,6 +117,9 @@ public ASNumberRange createASNumberRange(long zoneId, long startASNumber, long e
116117
LOGGER.error(msg);
117118
throw new InvalidParameterException(msg);
118119
}
120+
if (!routedIpv4Manager.isRoutedNetworkVpcEnabled(zoneId)) {
121+
throw new InvalidParameterValueException("Cannot create ASN range as Routed networks and VPCs are not enabled for the zone.");
122+
}
119123
if (startASNumber > endASNumber) {
120124
String msg = "Please specify a valid AS Number range";
121125
LOGGER.error(msg);

server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6677,6 +6677,13 @@ public NetworkOfferingVO createNetworkOffering(final String name, final String d
66776677
if (!RoutedIpv4Manager.RoutedNetworkVpcEnabled.value()) {
66786678
throw new InvalidParameterValueException(String.format("Configuration %s needs to be enabled for Routed networks", RoutedIpv4Manager.RoutedNetworkVpcEnabled.key()));
66796679
}
6680+
if (zoneIds != null) {
6681+
for (Long zoneId: zoneIds) {
6682+
if (!RoutedIpv4Manager.RoutedNetworkVpcEnabled.valueIn(zoneId)) {
6683+
throw new InvalidParameterValueException(String.format("Configuration %s needs to be enabled for Routed networks in zone (ID: %s)", RoutedIpv4Manager.RoutedNetworkVpcEnabled.key(), zoneId));
6684+
}
6685+
}
6686+
}
66806687
boolean useVirtualRouterOnly = true;
66816688
for (Service service : serviceProviderMap.keySet()) {
66826689
Set<Provider> providers = serviceProviderMap.get(service);

server/src/main/java/com/cloud/network/NetworkServiceImpl.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1394,10 +1394,6 @@ void validateNetworkCidrSize(Account caller, Integer cidrSize, String cidr, Netw
13941394
if (ObjectUtils.allNotNull(cidr, cidrSize)) {
13951395
throw new InvalidParameterValueException("network cidr and cidr size are mutually exclusive");
13961396
}
1397-
if (NetworkOffering.NetworkMode.ROUTED.equals(networkOffering.getNetworkMode())
1398-
&& !routedIpv4Manager.isRoutedNetworkVpcEnabled(zoneId)) {
1399-
throw new InvalidParameterValueException("Routed network is not enabled in this zone");
1400-
}
14011397
if (NetworkOffering.NetworkMode.ROUTED.equals(networkOffering.getNetworkMode())
14021398
&& routedIpv4Manager.isVirtualRouterGateway(networkOffering)) {
14031399
if (cidr != null) {
@@ -1655,6 +1651,11 @@ public Network createGuestNetwork(CreateNetworkCmd cmd) throws InsufficientCapac
16551651
}
16561652
}
16571653

1654+
if (NetworkOffering.NetworkMode.ROUTED.equals(ntwkOff.getNetworkMode())
1655+
&& !routedIpv4Manager.isRoutedNetworkVpcEnabled(zone.getId())) {
1656+
throw new InvalidParameterValueException("Routed network is not enabled in this zone");
1657+
}
1658+
16581659
if (isNonVpcNetworkSupportingDynamicRouting(ntwkOff) && ntwkOff.isSpecifyAsNumber() && asNumber == null) {
16591660
throw new InvalidParameterValueException("AS number is required for the network but not passed.");
16601661
}

server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -500,8 +500,17 @@ public VpcOffering createVpcOffering(CreateVPCOfferingCmd cmd) {
500500
}
501501
networkMode = NetworkOffering.NetworkMode.valueOf(networkModeStr);
502502
}
503-
if (NetworkOffering.NetworkMode.ROUTED.equals(networkMode) && !RoutedIpv4Manager.RoutedNetworkVpcEnabled.value()) {
504-
throw new InvalidParameterValueException(String.format("Configuration %s needs to be enabled for Routed VPCs", RoutedIpv4Manager.RoutedNetworkVpcEnabled.key()));
503+
if (NetworkOffering.NetworkMode.ROUTED.equals(networkMode)) {
504+
if (!RoutedIpv4Manager.RoutedNetworkVpcEnabled.value()) {
505+
throw new InvalidParameterValueException(String.format("Configuration %s needs to be enabled for Routed VPCs", RoutedIpv4Manager.RoutedNetworkVpcEnabled.key()));
506+
}
507+
if (zoneIds != null) {
508+
for (Long zoneId: zoneIds) {
509+
if (!RoutedIpv4Manager.RoutedNetworkVpcEnabled.valueIn(zoneId)) {
510+
throw new InvalidParameterValueException(String.format("Configuration %s needs to be enabled for Routed VPCs in zone (ID: %s)", RoutedIpv4Manager.RoutedNetworkVpcEnabled.key(), zoneId));
511+
}
512+
}
513+
}
505514
}
506515
boolean specifyAsNumber = cmd.getSpecifyAsNumber();
507516
String routingModeString = cmd.getRoutingMode();
@@ -1164,6 +1173,11 @@ public Vpc createVpc(final long zoneId, final long vpcOffId, final long vpcOwner
11641173
throw ex;
11651174
}
11661175

1176+
if (NetworkOffering.NetworkMode.ROUTED.equals(vpcOff.getNetworkMode())
1177+
&& !routedIpv4Manager.RoutedNetworkVpcEnabled.valueIn(zoneId)) {
1178+
throw new InvalidParameterValueException("Routed VPC is not enabled in this zone");
1179+
}
1180+
11671181
if (NetworkOffering.RoutingMode.Dynamic.equals(vpcOff.getRoutingMode()) && vpcOff.isSpecifyAsNumber() && asNumber == null) {
11681182
throw new InvalidParameterValueException("AS number is required for the VPC but not passed.");
11691183
}
@@ -1261,10 +1275,6 @@ private void validateVpcCidrSize(Account caller, long accountId, VpcOffering vpc
12611275
if (ObjectUtils.allNotNull(cidr, cidrSize)) {
12621276
throw new InvalidParameterValueException("VPC cidr and cidr size are mutually exclusive");
12631277
}
1264-
if (NetworkOffering.NetworkMode.ROUTED.equals(vpcOffering.getNetworkMode())
1265-
&& !routedIpv4Manager.RoutedNetworkVpcEnabled.valueIn(zoneId)) {
1266-
throw new InvalidParameterValueException("Routed VPC is not enabled in this zone");
1267-
}
12681278
if (routedIpv4Manager.isVpcVirtualRouterGateway(vpcOffering)) {
12691279
if (cidr != null) {
12701280
if (!_accountMgr.isRootAdmin(caller.getId())) {

server/src/main/java/org/apache/cloudstack/network/RoutedIpv4ManagerImpl.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,8 @@ public DataCenterIpv4GuestSubnet createDataCenterIpv4GuestSubnet(CreateIpv4Subne
217217
throw new InvalidParameterValueException("Invalid IPv4 subnet: " + subnet);
218218
}
219219

220+
checkIfRoutedNetworkVpcEnabled(zoneId);
221+
220222
// check conflicts
221223
List<DataCenterIpv4GuestSubnetVO> existingSubnets = dataCenterIpv4GuestSubnetDao.listByDataCenterId(zoneId);
222224
checkConflicts(existingSubnets, subnet, null);
@@ -1036,6 +1038,8 @@ public BgpPeer createBgpPeer(CreateBgpPeerCmd createBgpPeerCmd) {
10361038
String password = createBgpPeerCmd.getPassword();
10371039
Map<String, String> detailsStr = createBgpPeerCmd.getDetails();
10381040

1041+
checkIfRoutedNetworkVpcEnabled(zoneId);
1042+
10391043
if (ObjectUtils.allNull(ip4Address, ip6Address)) {
10401044
throw new InvalidParameterValueException("At least one of IPv4 and IPv6 address must be specified.");
10411045
}
@@ -1645,4 +1649,10 @@ public void removeBgpPeersByDomainId(long domainId) {
16451649
public Boolean isRoutedNetworkVpcEnabled(long zoneId) {
16461650
return RoutedNetworkVpcEnabled.valueIn(zoneId);
16471651
}
1652+
1653+
private void checkIfRoutedNetworkVpcEnabled(long zoneId) {
1654+
if (!isRoutedNetworkVpcEnabled(zoneId)) {
1655+
throw new InvalidParameterValueException("Routed networks and VPCs are not enabled for the zone.");
1656+
}
1657+
}
16481658
}

0 commit comments

Comments
 (0)