Skip to content

Commit 4848194

Browse files
authored
Add global routing flag on subnet creation (#45)
1 parent f70cc1c commit 4848194

File tree

6 files changed

+30
-11
lines changed

6 files changed

+30
-11
lines changed

api/src/main/java/com/cloud/network/netris/NetrisService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public interface NetrisService {
3030

3131
boolean deleteVpcResource(long zoneId, long accountId, long domainId, Vpc vpc);
3232

33-
boolean createVnetResource(Long zoneId, long accountId, long domainId, String vpcName, Long vpcId, String networkName, Long networkId, String cidr);
33+
boolean createVnetResource(Long zoneId, long accountId, long domainId, String vpcName, Long vpcId, String networkName, Long networkId, String cidr, Boolean globalRouting);
3434

3535
boolean deleteVnetResource(long zoneId, long accountId, long domainId, String vpcName, Long vpcId, String networkName, Long networkId, String cidr);
3636

plugins/network-elements/netris/src/main/java/org/apache/cloudstack/agent/api/CreateNetrisVnetCommand.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public class CreateNetrisVnetCommand extends NetrisCommand {
2424
private String gateway;
2525
private String netrisTag;
2626
private String ipv6Cidr;
27+
private Boolean globalRouting;
2728

2829
public CreateNetrisVnetCommand(Long zoneId, Long accountId, Long domainId, String vpcName, Long vpcId, String vNetName, Long networkId, String cidr, String gateway, boolean isVpc) {
2930
super(zoneId, accountId, domainId, vNetName, networkId, isVpc);
@@ -73,4 +74,12 @@ public String getIpv6Cidr() {
7374
public void setIpv6Cidr(String ipv6Cidr) {
7475
this.ipv6Cidr = ipv6Cidr;
7576
}
77+
78+
public Boolean isGlobalRouting() {
79+
return globalRouting;
80+
}
81+
82+
public void setGlobalRouting(Boolean globalRouting) {
83+
this.globalRouting = globalRouting;
84+
}
7685
}

plugins/network-elements/netris/src/main/java/org/apache/cloudstack/service/NetrisApiClientImpl.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -716,6 +716,7 @@ public boolean createVnet(CreateNetrisVnetCommand cmd) {
716716
String netrisGateway = cmd.getGateway() + "/" + netmask;
717717
String netrisV6Cidr = cmd.getIpv6Cidr();
718718
boolean isVpc = cmd.isVpc();
719+
Boolean isGlobalRouting = cmd.isGlobalRouting();
719720

720721
String netrisVpcName = getNetrisVpcName(cmd, vpcId, vpcName);
721722
VPCListing associatedVpc = getNetrisVpcResource(netrisVpcName);
@@ -733,15 +734,15 @@ public boolean createVnet(CreateNetrisVnetCommand cmd) {
733734
String netrisVnetName = NetrisResourceObjectUtils.retrieveNetrisResourceObjectName(cmd, NetrisResourceObjectUtils.NetrisObjectType.VNET, vNetName) ;
734735
String netrisSubnetName = NetrisResourceObjectUtils.retrieveNetrisResourceObjectName(cmd, NetrisResourceObjectUtils.NetrisObjectType.IPAM_SUBNET, vnetCidr) ;
735736

736-
createIpamSubnetInternal(netrisSubnetName, vnetCidr, SubnetBody.PurposeEnum.COMMON, associatedVpc);
737+
createIpamSubnetInternal(netrisSubnetName, vnetCidr, SubnetBody.PurposeEnum.COMMON, associatedVpc, isGlobalRouting);
737738
if (Objects.nonNull(netrisV6Cidr)) {
738739
String netrisV6IpamAllocationName = NetrisResourceObjectUtils.retrieveNetrisResourceObjectName(cmd, NetrisResourceObjectUtils.NetrisObjectType.IPAM_ALLOCATION, netrisV6Cidr);
739740
String netrisV6SubnetName = NetrisResourceObjectUtils.retrieveNetrisResourceObjectName(cmd, NetrisResourceObjectUtils.NetrisObjectType.IPAM_SUBNET, netrisV6Cidr) ;
740741
InlineResponse2004Data createdIpamAllocation = createIpamAllocationInternal(netrisV6IpamAllocationName, netrisV6Cidr, associatedVpc);
741742
if (Objects.isNull(createdIpamAllocation)) {
742743
throw new CloudRuntimeException(String.format("Failed to create Netris IPAM Allocation %s for VPC %s", netrisV6IpamAllocationName, netrisVpcName));
743744
}
744-
createIpamSubnetInternal(netrisV6SubnetName, netrisV6Cidr, SubnetBody.PurposeEnum.COMMON, associatedVpc);
745+
createIpamSubnetInternal(netrisV6SubnetName, netrisV6Cidr, SubnetBody.PurposeEnum.COMMON, associatedVpc, isGlobalRouting);
745746
}
746747
logger.debug("Successfully created IPAM Subnet {} for network {} on Netris", netrisSubnetName, networkName);
747748

@@ -851,7 +852,7 @@ public boolean setupZoneLevelPublicRange(SetupNetrisPublicRangeCommand cmd) {
851852
IpTreeSubnet exactSubnet = getIpamSubnetByAllocationAndPrefixAndPurposeAndVpc(ipamAllocationId, exactCidr, IpTreeSubnet.PurposeEnum.COMMON, systemVpc);
852853
if (exactSubnet == null) {
853854
String ipamSubnetName = NetrisResourceObjectUtils.retrieveNetrisResourceObjectName(cmd, NetrisResourceObjectUtils.NetrisObjectType.IPAM_SUBNET, exactCidr);
854-
createIpamSubnetInternal(ipamSubnetName, exactCidr, SubnetBody.PurposeEnum.COMMON, systemVpc);
855+
createIpamSubnetInternal(ipamSubnetName, exactCidr, SubnetBody.PurposeEnum.COMMON, systemVpc, null);
855856
}
856857
} catch (ApiException e) {
857858
String msg = String.format("Error setting up the Netris Public Range %s on super CIDR %s", exactCidr, superCidr);
@@ -1000,7 +1001,7 @@ private void createNatSubnet(String natIp, Integer netrisVpcId) {
10001001
List<IpTreeSubnet> matchedSubnets = getSubnet(vpcFilter, netrisSubnetName);
10011002
if (matchedSubnets.isEmpty()) {
10021003
VPCListing systemVpc = getSystemVpc();
1003-
createIpamSubnetInternal(natIp, natIp, SubnetBody.PurposeEnum.NAT, systemVpc);
1004+
createIpamSubnetInternal(natIp, natIp, SubnetBody.PurposeEnum.NAT, systemVpc, null);
10041005
return;
10051006
}
10061007
logger.debug("NAT subnet: {} already exists", natIp);
@@ -1191,7 +1192,7 @@ private void deleteSubnetInternal(FilterByVpc vpcFilter, String netrisVnetName,
11911192
}
11921193
}
11931194

1194-
private InlineResponse2004Data createIpamSubnetInternal(String subnetName, String subnetPrefix, SubnetBody.PurposeEnum purpose, VPCListing vpc) {
1195+
private InlineResponse2004Data createIpamSubnetInternal(String subnetName, String subnetPrefix, SubnetBody.PurposeEnum purpose, VPCListing vpc, Boolean isGlobalRouting) {
11951196
logger.debug("Creating Netris IPAM Subnet {} for VPC {}", subnetPrefix, vpc.getName());
11961197
try {
11971198

@@ -1215,6 +1216,9 @@ private InlineResponse2004Data createIpamSubnetInternal(String subnetName, Strin
12151216

12161217
subnetBody.setPurpose(purpose);
12171218
subnetBody.setPrefix(subnetPrefix);
1219+
if (isGlobalRouting != null) {
1220+
subnetBody.setGlobalRouting(isGlobalRouting);
1221+
}
12181222
IpamApi ipamApi = apiClient.getApiStubForMethod(IpamApi.class);
12191223
InlineResponse2004 subnetResponse = ipamApi.apiV2IpamSubnetPost(subnetBody);
12201224
if (subnetResponse == null || !subnetResponse.isIsSuccess()) {

plugins/network-elements/netris/src/main/java/org/apache/cloudstack/service/NetrisGuestNetworkGuru.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,12 @@ public void createNetrisVnet(NetworkVO networkVO, DataCenter zone) {
286286
}
287287
String vpcName = null;
288288
Long vpcId = null;
289+
Boolean globalRouting = null;
290+
long networkOfferingId = networkVO.getNetworkOfferingId();
291+
NetworkOfferingVO networkOfferingVO = networkOfferingDao.findById(networkOfferingId);
292+
if (NetworkOffering.NetworkMode.ROUTED.equals(networkOfferingVO.getNetworkMode())) {
293+
globalRouting = true;
294+
}
289295
if (nonNull(networkVO.getVpcId())) {
290296
VpcVO vpc = _vpcDao.findById(networkVO.getVpcId());
291297
if (isNull(vpc)) {
@@ -295,8 +301,6 @@ public void createNetrisVnet(NetworkVO networkVO, DataCenter zone) {
295301
vpcId = vpc.getId();
296302
} else {
297303
logger.debug(String.format("Creating IPAM Allocation before creating IPAM Subnet", networkVO.getName()));
298-
long networkOfferingId = networkVO.getNetworkOfferingId();
299-
NetworkOfferingVO networkOfferingVO = networkOfferingDao.findById(networkOfferingId);
300304
boolean isSourceNatSupported = !NetworkOffering.NetworkMode.ROUTED.equals(networkOfferingVO.getNetworkMode()) &&
301305
networkOfferingServiceMapDao.areServicesSupportedByNetworkOffering(networkVO.getNetworkOfferingId(), Network.Service.SourceNat);
302306
boolean result = netrisService.createVpcResource(zone.getId(), networkVO.getAccountId(), networkVO.getDomainId(),
@@ -307,7 +311,8 @@ public void createNetrisVnet(NetworkVO networkVO, DataCenter zone) {
307311
throw new CloudRuntimeException(msg);
308312
}
309313
}
310-
boolean result = netrisService.createVnetResource(zone.getId(), account.getId(), domain.getId(), vpcName, vpcId, networkVO.getName(), networkVO.getId(), networkVO.getCidr());
314+
boolean result = netrisService.createVnetResource(zone.getId(), account.getId(), domain.getId(), vpcName, vpcId,
315+
networkVO.getName(), networkVO.getId(), networkVO.getCidr(), globalRouting);
311316
if (!result) {
312317
throw new CloudRuntimeException("Failed to create Netris vNet resource for network: " + networkVO.getName());
313318
}

plugins/network-elements/netris/src/main/java/org/apache/cloudstack/service/NetrisServiceImpl.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,13 +204,14 @@ public boolean deleteVpcResource(long zoneId, long accountId, long domainId, Vpc
204204
}
205205

206206
@Override
207-
public boolean createVnetResource(Long zoneId, long accountId, long domainId, String vpcName, Long vpcId, String networkName, Long networkId, String cidr) {
207+
public boolean createVnetResource(Long zoneId, long accountId, long domainId, String vpcName, Long vpcId, String networkName, Long networkId, String cidr, Boolean globalRouting) {
208208
NetworkVO network = networkDao.findById(networkId);
209209
String vxlanId = Networks.BroadcastDomainType.getValue(network.getBroadcastUri());
210210
CreateNetrisVnetCommand cmd = new CreateNetrisVnetCommand(zoneId, accountId, domainId, vpcName, vpcId, networkName, networkId, cidr, network.getGateway(), !Objects.isNull(vpcId));
211211
cmd.setVxlanId(Integer.parseInt(vxlanId));
212212
NetrisProviderVO netrisProvider = netrisProviderDao.findByZoneId(zoneId);
213213
cmd.setNetrisTag(netrisProvider.getNetrisTag());
214+
cmd.setGlobalRouting(globalRouting);
214215
if (Objects.nonNull(networkId)) {
215216
Ipv6GuestPrefixSubnetNetworkMapVO ipv6PrefixNetworkMapVO = ipv6PrefixNetworkMapDao.findByNetworkId(networkId);
216217
if (Objects.nonNull(ipv6PrefixNetworkMapVO)) {

server/src/test/java/org/apache/cloudstack/service/NetrisServiceMockTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public boolean deleteVpcResource(long zoneId, long accountId, long domainId, Vpc
4242
}
4343

4444
@Override
45-
public boolean createVnetResource(Long zoneId, long accountId, long domainId, String vpcName, Long vpcId, String networkName, Long networkId, String cidr) {
45+
public boolean createVnetResource(Long zoneId, long accountId, long domainId, String vpcName, Long vpcId, String networkName, Long networkId, String cidr, Boolean globalRouting) {
4646
return true;
4747
}
4848

0 commit comments

Comments
 (0)