mirror of https://github.com/apache/cloudstack.git
Add support for Gateway service for Netris VPC and network offerings (#39)
* Add support for Gateway service for Netris VPC and network offerings * Restore UserData service * add gateway only to vpc service * Add support for gateway service for external network providers for networks in routed mode * add support for gateway svc * Revert "add support for gateway svc" This reverts commit 06645cd1c6d08a81ede5d1431497ea3f2efdc5dc. * Fix VPC offering creation * Fix VR public NIC after Gateway service is set to Netris --------- Co-authored-by: nvazquez <nicovazquez90@gmail.com>
This commit is contained in:
parent
8659d9691b
commit
610fd911d6
|
|
@ -37,7 +37,7 @@ public interface VpcProvisioningService {
|
|||
VpcOffering createVpcOffering(String name, String displayText, List<String> supportedServices,
|
||||
Map<String, List<String>> serviceProviders,
|
||||
Map serviceCapabilitystList, NetUtils.InternetProtocol internetProtocol,
|
||||
Long serviceOfferingId, Boolean forNsx, NetworkOffering.NetworkMode networkMode,
|
||||
Long serviceOfferingId, String externalProvider, NetworkOffering.NetworkMode networkMode,
|
||||
List<Long> domainIds, List<Long> zoneIds, VpcOffering.State state,
|
||||
NetworkOffering.RoutingMode routingMode, boolean specifyAsNumber);
|
||||
|
||||
|
|
|
|||
|
|
@ -394,8 +394,7 @@ public class CreateNetworkOfferingCmd extends BaseCmd {
|
|||
private void getServiceProviderMapForExternalProvider(Map<String, List<String>> serviceProviderMap, String provider) {
|
||||
String routerProvider = Boolean.TRUE.equals(getForVpc()) ? VirtualRouterProvider.Type.VPCVirtualRouter.name() :
|
||||
VirtualRouterProvider.Type.VirtualRouter.name();
|
||||
List<String> unsupportedServices = new ArrayList<>(List.of("Vpn", "SecurityGroup", "Connectivity",
|
||||
"Gateway", "BaremetalPxeService"));
|
||||
List<String> unsupportedServices = new ArrayList<>(List.of("Vpn", "Gateway", "SecurityGroup", "Connectivity", "BaremetalPxeService"));
|
||||
List<String> routerSupported = List.of("Dhcp", "Dns", "UserData");
|
||||
List<String> allServices = Service.listAllServices().stream().map(Service::getName).collect(Collectors.toList());
|
||||
if (routerProvider.equals(VirtualRouterProvider.Type.VPCVirtualRouter.name())) {
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@ import static com.cloud.network.Network.Service.SourceNat;
|
|||
import static com.cloud.network.Network.Service.PortForwarding;
|
||||
import static com.cloud.network.Network.Service.NetworkACL;
|
||||
import static com.cloud.network.Network.Service.UserData;
|
||||
import static com.cloud.network.Network.Service.Gateway;
|
||||
|
||||
@APICommand(name = "createVPCOffering", description = "Creates VPC offering", responseObject = VpcOfferingResponse.class,
|
||||
requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
|
||||
|
|
@ -190,6 +191,9 @@ public class CreateVPCOfferingCmd extends BaseAsyncCreateCmd {
|
|||
SourceNat.getName(),
|
||||
PortForwarding.getName()));
|
||||
}
|
||||
if (NetworkOffering.NetworkMode.ROUTED.name().equalsIgnoreCase(getNetworkMode())) {
|
||||
supportedServices.add(Gateway.getName());
|
||||
}
|
||||
if (getNsxSupportsLbService()) {
|
||||
supportedServices.add(Lb.getName());
|
||||
}
|
||||
|
|
@ -239,8 +243,10 @@ public class CreateVPCOfferingCmd extends BaseAsyncCreateCmd {
|
|||
}
|
||||
|
||||
private void getServiceProviderMapForExternalProvider(Map<String, List<String>> serviceProviderMap, String provider) {
|
||||
List<String> unsupportedServices = List.of("Vpn", "BaremetalPxeService", "SecurityGroup", "Connectivity",
|
||||
"Gateway", "Firewall");
|
||||
List<String> unsupportedServices = Arrays.asList("Vpn", "BaremetalPxeService", "SecurityGroup", "Connectivity", "Firewall");
|
||||
if (NetworkOffering.NetworkMode.NATTED.name().equalsIgnoreCase(getNetworkMode())) {
|
||||
unsupportedServices.add("Gateway");
|
||||
}
|
||||
List<String> routerSupported = List.of("Dhcp", "Dns", "UserData");
|
||||
List<String> allServices = Network.Service.listAllServices().stream().map(Network.Service::getName).collect(Collectors.toList());
|
||||
for (String service : allServices) {
|
||||
|
|
@ -249,7 +255,7 @@ public class CreateVPCOfferingCmd extends BaseAsyncCreateCmd {
|
|||
if (routerSupported.contains(service))
|
||||
serviceProviderMap.put(service, List.of(VirtualRouterProvider.Type.VPCVirtualRouter.name()));
|
||||
else if (NetworkOffering.NetworkMode.NATTED.name().equalsIgnoreCase(getNetworkMode()) ||
|
||||
Stream.of(NetworkACL.getName()).anyMatch(s -> s.equalsIgnoreCase(service))) {
|
||||
Stream.of(NetworkACL.getName(), Gateway.getName()).anyMatch(s -> s.equalsIgnoreCase(service))) {
|
||||
serviceProviderMap.put(service, List.of(provider));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -293,7 +293,7 @@ public class ContrailManagerImpl extends ManagerBase implements ContrailManager
|
|||
}
|
||||
serviceProviderMap.put(svc, providerSet);
|
||||
}
|
||||
vpcOffer = _vpcProvSvc.createVpcOffering(juniperVPCOfferingName, juniperVPCOfferingDisplayText, services, serviceProviderMap, null, null, null, false, null, null, null, VpcOffering.State.Enabled, null, false);
|
||||
vpcOffer = _vpcProvSvc.createVpcOffering(juniperVPCOfferingName, juniperVPCOfferingDisplayText, services, serviceProviderMap, null, null, null, null, null, null, null, VpcOffering.State.Enabled, null, false);
|
||||
long id = vpcOffer.getId();
|
||||
_vpcOffDao.update(id, (VpcOfferingVO)vpcOffer);
|
||||
return _vpcOffDao.findById(id);
|
||||
|
|
|
|||
|
|
@ -171,6 +171,7 @@ public class NetrisElement extends AdapterBase implements DhcpServiceProvider, D
|
|||
Map<Network.Capability, String> sourceNatCapabilities = new HashMap<>();
|
||||
sourceNatCapabilities.put(Network.Capability.RedundantRouter, "true");
|
||||
sourceNatCapabilities.put(Network.Capability.SupportedSourceNatTypes, "peraccount");
|
||||
capabilities.put(Network.Service.Gateway, null);
|
||||
capabilities.put(Network.Service.SourceNat, sourceNatCapabilities);
|
||||
return capabilities;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -196,8 +196,9 @@ public class NetrisGuestNetworkGuru extends GuestNetworkGuru implements Network
|
|||
dcId);
|
||||
}
|
||||
implemented.setBroadcastUri(Networks.BroadcastDomainType.Netris.toUri(vnet));
|
||||
Long networkId = implemented.getId() > 0 ? implemented.getId() : network.getId();
|
||||
ActionEventUtils.onCompletedActionEvent(CallContext.current().getCallingUserId(), network.getAccountId(), EventVO.LEVEL_INFO, EventTypes.EVENT_ZONE_VXLAN_ASSIGN,
|
||||
"Assigned Zone vNet: " + vnet + " Network Id: " + implemented.getId(), implemented.getId(), ApiCommandResourceType.Network.toString(), 0);
|
||||
"Assigned Zone vNet: " + vnet + " Network Id: " + networkId, networkId, ApiCommandResourceType.Network.toString(), 0);
|
||||
} else {
|
||||
implemented.setBroadcastUri(network.getBroadcastUri());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6741,6 +6741,9 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
|
|||
} else {
|
||||
serviceProviderMap.put(Service.Gateway, Sets.newHashSet(Provider.VirtualRouter));
|
||||
}
|
||||
} else {
|
||||
Set<Provider> providers = serviceProviderMap.get(Service.NetworkACL);
|
||||
serviceProviderMap.put(Service.Gateway, Sets.newHashSet(providers.iterator().next()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ import java.util.Date;
|
|||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
|
|
@ -5084,11 +5085,14 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C
|
|||
|
||||
// validate Services
|
||||
boolean addGatewayService = false;
|
||||
boolean isRoutedMode = enabledServices.stream().noneMatch(svc -> svc.equalsIgnoreCase(Service.SourceNat.getName()));
|
||||
for (String serviceName : enabledServices) {
|
||||
Network.Service service = Network.Service.getService(serviceName);
|
||||
if (service == null || service == Service.Gateway) {
|
||||
throw new InvalidParameterValueException("Invalid Network Service specified=" + serviceName);
|
||||
} else if (service == Service.SourceNat) {
|
||||
} else if (service == Service.SourceNat ||
|
||||
(isRoutedMode && Arrays.asList(Provider.Nsx.getName().toLowerCase(Locale.ROOT),
|
||||
Provider.Netris.getName().toLowerCase(Locale.ROOT)).contains(providerName.toLowerCase(Locale.ROOT)))) {
|
||||
addGatewayService = true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -605,7 +605,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
|
|||
}
|
||||
|
||||
return createVpcOffering(vpcOfferingName, displayText, supportedServices,
|
||||
serviceProviderList, serviceCapabilityList, internetProtocol, serviceOfferingId, forNsx, networkMode,
|
||||
serviceProviderList, serviceCapabilityList, internetProtocol, serviceOfferingId, provider, networkMode,
|
||||
domainIds, zoneIds, (enable ? State.Enabled : State.Disabled), routingMode, specifyAsNumber);
|
||||
}
|
||||
|
||||
|
|
@ -613,7 +613,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
|
|||
@ActionEvent(eventType = EventTypes.EVENT_VPC_OFFERING_CREATE, eventDescription = "creating vpc offering", create = true)
|
||||
public VpcOffering createVpcOffering(final String name, final String displayText, final List<String> supportedServices, final Map<String, List<String>> serviceProviders,
|
||||
final Map serviceCapabilityList, final NetUtils.InternetProtocol internetProtocol, final Long serviceOfferingId,
|
||||
final Boolean forNsx, final NetworkOffering.NetworkMode networkMode, List<Long> domainIds, List<Long> zoneIds, State state,
|
||||
final String externalProvider, final NetworkOffering.NetworkMode networkMode, List<Long> domainIds, List<Long> zoneIds, State state,
|
||||
NetworkOffering.RoutingMode routingMode, boolean specifyAsNumber) {
|
||||
|
||||
if (!Ipv6Service.Ipv6OfferingCreationEnabled.value() && !(internetProtocol == null || NetUtils.InternetProtocol.IPv4.equals(internetProtocol))) {
|
||||
|
|
@ -697,7 +697,8 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
|
|||
Service redundantRouterService = Service.SourceNat;
|
||||
if (CollectionUtils.isNotEmpty(sourceNatServiceProviders)) {
|
||||
svcProviderMap.put(Service.Gateway, sourceNatServiceProviders);
|
||||
} else if (NetworkOffering.NetworkMode.ROUTED.equals(networkMode)) {
|
||||
} else if (NetworkOffering.NetworkMode.ROUTED.equals(networkMode) && org.apache.commons.lang3.StringUtils.isBlank(externalProvider)) {
|
||||
// For Routed mode, add the Gateway service except for external providers such as NSX, Netris to not override the svcProviderMap mapping
|
||||
svcProviderMap.put(Service.Gateway, Sets.newHashSet(Provider.VPCVirtualRouter));
|
||||
redundantRouterService = Service.Gateway;
|
||||
}
|
||||
|
|
@ -3540,7 +3541,9 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
|
|||
|| vpcOffSvcProvidersMap.get(Service.SourceNat).contains(Provider.Nsx)
|
||||
|| vpcOffSvcProvidersMap.get(Service.SourceNat).contains(Provider.Netris)))
|
||||
|| (Objects.nonNull(vpcOffSvcProvidersMap.get(Network.Service.Gateway))
|
||||
&& vpcOffSvcProvidersMap.get(Service.Gateway).contains(Network.Provider.VPCVirtualRouter));
|
||||
&& (vpcOffSvcProvidersMap.get(Service.Gateway).contains(Network.Provider.VPCVirtualRouter)
|
||||
|| vpcOffSvcProvidersMap.get(Service.Gateway).contains(Provider.Nsx)
|
||||
|| vpcOffSvcProvidersMap.get(Service.Gateway).contains(Network.Provider.Netris)));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -572,6 +572,13 @@ export default {
|
|||
services = services.filter(service => {
|
||||
return !['SourceNat', 'StaticNat', 'Lb', 'PortForwarding', 'Vpn'].includes(service.name)
|
||||
})
|
||||
if (['NSX', 'Netris'].includes(this.provider)) {
|
||||
services.push({
|
||||
name: 'Gateway',
|
||||
enabled: true,
|
||||
provider: [{ name: this.provider }]
|
||||
})
|
||||
}
|
||||
}
|
||||
for (var i in services) {
|
||||
services[i].description = services[i].name
|
||||
|
|
|
|||
Loading…
Reference in New Issue