[NSX] Allow NSX isolated networks (#8132)

* Add network offerings for NSX on isolated networks

* Fix offerings creation

* In progress NSX isolated network

* Fixes

* Fix NIC allocation to router
This commit is contained in:
Nicolas Vazquez 2023-10-24 15:00:41 -03:00 committed by GitHub
parent c135fa13ae
commit f46b7883a8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 200 additions and 110 deletions

View File

@ -57,8 +57,10 @@ public interface NetworkOffering extends InfrastructureEntity, InternalIdentity,
public final static String DefaultSharedNetworkOfferingWithSGService = "DefaultSharedNetworkOfferingWithSGService";
public static final String DEFAULT_TUNGSTEN_SHARED_NETWORK_OFFERING_WITH_SGSERVICE = "DefaultTungstenSharedNetworkOfferingWithSGService";
public static final String DEFAULT_NAT_NSX_OFFERING_FOR_VPC = "DefaultNATNSXNetworkOfferingForVpc";
public static final String DEFAULT_ROUTED_NSX_OFFERING_FOR_VPC = "DefaultRoutedNSXNetworkOfferingForVpc";
public static final String DEFAULT_NAT_NSX_OFFERING = "DefaultNATNSXNetworkOffering";
public static final String DEFAULT_ROUTER_NSX_OFFERING = "DefaultRouteNSXNetworkOffering";
public static final String DEFAULT_ROUTED_NSX_OFFERING = "DefaultRoutedNSXNetworkOffering";
public final static String QuickCloudNoServices = "QuickCloudNoServices";
public final static String DefaultIsolatedNetworkOfferingWithSourceNatService = "DefaultIsolatedNetworkOfferingWithSourceNatService";
public final static String OvsIsolatedNetworkOfferingWithSourceNatService = "OvsIsolatedNetworkOfferingWithSourceNatService";

View File

@ -1475,41 +1475,54 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
}
public void setVmNetworkDetails(VMInstanceVO vm, VirtualMachineTO vmTO) {
Map<Long, String> networkToNetworkNameMap = new HashMap<>();
if (VirtualMachine.Type.User.equals(vm.getType())) {
List<UserVmJoinVO> userVmJoinVOs = userVmJoinDao.searchByIds(vm.getId());
Map<Long, String> networkToNetworkNameMap = new HashMap<>();
if (userVmJoinVOs != null && !userVmJoinVOs.isEmpty()) {
for (UserVmJoinVO userVmJoinVO : userVmJoinVOs) {
NetworkVO networkVO = _networkDao.findById(userVmJoinVO.getNetworkId());
Account acc = accountDao.findById(networkVO.getAccountId());
Domain domain = domainDao.findById(networkVO.getDomainId());
DataCenter zone = _dcDao.findById(vm.getDataCenterId());
if (Objects.isNull(zone)) {
throw new CloudRuntimeException(String.format("Failed to find zone with ID: %s", vm.getDataCenterId()));
}
if (Objects.isNull(acc)) {
throw new CloudRuntimeException(String.format("Failed to find account with ID: %s", networkVO.getAccountId()));
}
if (Objects.isNull(domain)) {
throw new CloudRuntimeException(String.format("Failed to find domain with ID: %s", networkVO.getDomainId()));
}
String networkName = String.format("D%s-A%s-Z%s", domain.getId(), acc.getId(), zone.getId());
if (Objects.isNull(networkVO.getVpcId())) {
networkName += "-S"+networkVO.getId();
} else {
VpcVO vpc = vpcDao.findById(networkVO.getVpcId());
if (Objects.isNull(vpc)) {
throw new CloudRuntimeException(String.format("Failed to find VPC with ID: %s", networkVO.getVpcId()));
}
networkName = String.format("%s-V%s-S%s", networkName, vpc.getId(), networkVO.getId());
}
networkToNetworkNameMap.put(networkVO.getId(), networkName);
addToNetworkNameMap(userVmJoinVO.getNetworkId(), vm.getDataCenterId(), networkToNetworkNameMap);
}
vmTO.setNetworkIdToNetworkNameMap(networkToNetworkNameMap);
}
} else if (VirtualMachine.Type.DomainRouter.equals(vm.getType())) {
List<DomainRouterJoinVO> routerJoinVO = domainRouterJoinDao.getRouterByIdAndTrafficType(vm.getId(), Networks.TrafficType.Guest);
for (DomainRouterJoinVO router : routerJoinVO) {
NetworkVO guestNetwork = _networkDao.findById(router.getNetworkId());
if (guestNetwork.getVpcId() == null && guestNetwork.getBroadcastDomainType() == Networks.BroadcastDomainType.NSX) {
addToNetworkNameMap(router.getNetworkId(), vm.getDataCenterId(), networkToNetworkNameMap);
}
}
vmTO.setNetworkIdToNetworkNameMap(networkToNetworkNameMap);
}
}
private void addToNetworkNameMap(long networkId, long dataCenterId, Map<Long, String> networkToNetworkNameMap) {
NetworkVO networkVO = _networkDao.findById(networkId);
Account acc = accountDao.findById(networkVO.getAccountId());
Domain domain = domainDao.findById(networkVO.getDomainId());
DataCenter zone = _dcDao.findById(dataCenterId);
if (Objects.isNull(zone)) {
throw new CloudRuntimeException(String.format("Failed to find zone with ID: %s", dataCenterId));
}
if (Objects.isNull(acc)) {
throw new CloudRuntimeException(String.format("Failed to find account with ID: %s", networkVO.getAccountId()));
}
if (Objects.isNull(domain)) {
throw new CloudRuntimeException(String.format("Failed to find domain with ID: %s", networkVO.getDomainId()));
}
String networkName = String.format("D%s-A%s-Z%s", domain.getId(), acc.getId(), zone.getId());
if (Objects.isNull(networkVO.getVpcId())) {
networkName += "-S"+networkVO.getId();
} else {
VpcVO vpc = vpcDao.findById(networkVO.getVpcId());
if (Objects.isNull(vpc)) {
throw new CloudRuntimeException(String.format("Failed to find VPC with ID: %s", networkVO.getVpcId()));
}
networkName = String.format("%s-V%s-S%s", networkName, vpc.getId(), networkVO.getId());
}
networkToNetworkNameMap.put(networkVO.getId(), networkName);
}
private void logBootModeParameters(Map<VirtualMachineProfile.Param, Object> params) {
if (params == null) {
return;

View File

@ -19,21 +19,28 @@ package org.apache.cloudstack.agent.api;
import java.util.Objects;
public class CreateNsxTier1GatewayCommand extends NsxCommand {
private long vpcId;
private String vpcName;
private Long networkResourceId;
private String networkResourceName;
private boolean isResourceVpc;
public CreateNsxTier1GatewayCommand(long domainId, long accountId, long zoneId, long vpcId, String vpcName) {
public CreateNsxTier1GatewayCommand(long domainId, long accountId, long zoneId,
Long networkResourceId, String networkResourceName, boolean isResourceVpc) {
super(domainId, accountId, zoneId);
this.vpcId = vpcId;
this.vpcName = vpcName;
this.networkResourceId = networkResourceId;
this.networkResourceName = networkResourceName;
this.isResourceVpc = isResourceVpc;
}
public long getVpcId() {
return vpcId;
public Long getNetworkResourceId() {
return networkResourceId;
}
public String getVpcName() {
return vpcName;
public boolean isResourceVpc() {
return isResourceVpc;
}
public String getNetworkResourceName() {
return networkResourceName;
}
@Override
@ -42,11 +49,11 @@ public class CreateNsxTier1GatewayCommand extends NsxCommand {
if (o == null || getClass() != o.getClass()) return false;
if (!super.equals(o)) return false;
CreateNsxTier1GatewayCommand that = (CreateNsxTier1GatewayCommand) o;
return Objects.equals(vpcName, that.vpcName);
return Objects.equals(networkResourceName, that.networkResourceName);
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode(), vpcName);
return Objects.hash(super.hashCode(), networkResourceName);
}
}

View File

@ -18,20 +18,27 @@ package org.apache.cloudstack.agent.api;
public class DeleteNsxTier1GatewayCommand extends NsxCommand {
private Long vpcId;
private String vpcName;
private Long networkResourceId;
private String networkResourceName;
private boolean isResourceVpc;
public DeleteNsxTier1GatewayCommand(long domainId, long accountId, long zoneId, Long vpcId, String vpcName) {
public DeleteNsxTier1GatewayCommand(long domainId, long accountId, long zoneId,
Long networkResourceId, String networkResourceName, boolean isResourceVpc) {
super(domainId, accountId, zoneId);
this.vpcId = vpcId;
this.vpcName = vpcName;
this.networkResourceId = networkResourceId;
this.networkResourceName = networkResourceName;
this.isResourceVpc = isResourceVpc;
}
public Long getVpcId() {
return vpcId;
public Long getNetworkResourceId() {
return networkResourceId;
}
public String getVpcName() {
return vpcName;
public String getNetworkResourceName() {
return networkResourceName;
}
public boolean isResourceVpc() {
return isResourceVpc;
}
}

View File

@ -48,6 +48,7 @@ import javax.naming.ConfigurationException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
public class NsxResource implements ServerResource {
@ -213,7 +214,7 @@ public class NsxResource implements ServerResource {
long zoneId = cmd.getZoneId();
long domainId = cmd.getDomainId();
long accountId = cmd.getAccountId();
long vpcId = cmd.getVpcId();
Long vpcId = cmd.getVpcId();
long networkId = cmd.getNetworkId();
String vpcName = cmd.getVpcName();
String networkName = cmd.getNetworkName();
@ -253,18 +254,20 @@ public class NsxResource implements ServerResource {
}
private Answer executeRequest(CreateNsxTier1GatewayCommand cmd) {
String name = NsxControllerUtils.getTier1GatewayName(cmd.getDomainId(), cmd.getAccountId(), cmd.getZoneId(), cmd.getVpcId());
String name = NsxControllerUtils.getTier1GatewayName(cmd.getDomainId(), cmd.getAccountId(), cmd.getZoneId(), cmd.getNetworkResourceId(), cmd.isResourceVpc());
try {
nsxApiClient.createTier1Gateway(name, tier0Gateway, edgeCluster);
return new NsxAnswer(cmd, true, "");
} catch (CloudRuntimeException e) {
LOGGER.error(String.format("Cannot create tier 1 gateway %s (VPC: %s): %s", name, cmd.getVpcName(), e.getMessage()));
String msg = String.format("Cannot create tier 1 gateway %s (%s: %s): %s", name,
(cmd.isResourceVpc() ? "VPC" : "NETWORK"), cmd.getNetworkResourceName(), e.getMessage());
LOGGER.error(msg);
return new NsxAnswer(cmd, e);
}
}
private Answer executeRequest(DeleteNsxTier1GatewayCommand cmd) {
String tier1Id = NsxControllerUtils.getTier1GatewayName(cmd.getDomainId(), cmd.getAccountId(), cmd.getZoneId(), cmd.getVpcId());
String tier1Id = NsxControllerUtils.getTier1GatewayName(cmd.getDomainId(), cmd.getAccountId(), cmd.getZoneId(), cmd.getNetworkResourceId(), cmd.isResourceVpc());
try {
nsxApiClient.deleteTier1Gateway(tier1Id);
} catch (Exception e) {
@ -309,8 +312,11 @@ public class NsxResource implements ServerResource {
String segmentName = NsxControllerUtils.getNsxSegmentId(cmd.getDomainId(), cmd.getAccountId(), cmd.getZoneId(), cmd.getVpcId(), cmd.getNetworkId());
String gatewayAddress = cmd.getNetworkGateway() + "/" + cmd.getNetworkCidr().split("/")[1];
nsxApiClient.createSegment(cmd.getZoneId(), cmd.getDomainId(), cmd.getAccountId(), cmd.getVpcId(),
segmentName, gatewayAddress, tier0Gateway, enforcementPointPath, transportZones);
Long networkResourceId = Objects.isNull(cmd.getVpcId()) ? cmd.getNetworkId() : cmd.getVpcId();
boolean isResourceVpc = !Objects.isNull(cmd.getVpcId());
String tier1GatewayName = NsxControllerUtils.getTier1GatewayName(cmd.getDomainId(), cmd.getAccountId(),
cmd.getZoneId(), networkResourceId, isResourceVpc);
nsxApiClient.createSegment(segmentName, tier1GatewayName, gatewayAddress, enforcementPointPath, transportZones);
} catch (Exception e) {
LOGGER.error(String.format("Failed to create network: %s", cmd.getNetworkName()));
return new NsxAnswer(cmd, new CloudRuntimeException(e.getMessage()));

View File

@ -51,8 +51,6 @@ import org.apache.log4j.Logger;
import java.util.List;
import java.util.function.Function;
import static java.util.Objects.isNull;
public class NsxApiClient {
private final Function<Class<? extends Service>, Service> nsxService;
@ -249,7 +247,8 @@ public class NsxApiClient {
}
}
public void createSegment(long zoneId, long domainId, long accountId, Long vpcId, String segmentName, String gatewayAddress, String tier0Gateway, String enforcementPointPath, List<TransportZone> transportZones) {
public void createSegment(String segmentName, String tier1GatewayName, String gatewayAddress, String enforcementPointPath,
List<TransportZone> transportZones) {
try {
Segments segmentService = (Segments) nsxService.apply(Segments.class);
SegmentSubnet subnet = new SegmentSubnet.Builder()
@ -259,8 +258,7 @@ public class NsxApiClient {
.setResourceType(SEGMENT_RESOURCE_TYPE)
.setId(segmentName)
.setDisplayName(segmentName)
.setConnectivityPath(isNull(vpcId) ? TIER_0_GATEWAY_PATH_PREFIX + tier0Gateway
: TIER_1_GATEWAY_PATH_PREFIX + NsxControllerUtils.getTier1GatewayName(domainId, accountId, zoneId, vpcId))
.setConnectivityPath(TIER_1_GATEWAY_PATH_PREFIX + tier1GatewayName)
.setAdminState(AdminState.UP.name())
.setSubnets(List.of(subnet))
.setTransportZonePath(enforcementPointPath + "/transport-zones/" + transportZones.get(0).getId())

View File

@ -179,6 +179,10 @@ public class NsxElement extends AdapterBase implements DhcpServiceProvider, DnsS
@Override
public boolean implement(Network network, NetworkOffering offering, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException {
// Account account = accountMgr.getAccount(network.getAccountId());
// DomainVO domain = domainDao.findById(network.getDomainId());
// return nsxService.createNetwork(network.getDataCenterId(), account.getId(), domain.getId(), network.getId(), network.getName());
// TODO: Check if the network is NSX based (was already implemented as part of the guru.setup()
return true;
}

View File

@ -49,6 +49,7 @@ import com.cloud.vm.VirtualMachineProfile;
import org.apache.cloudstack.NsxAnswer;
import org.apache.cloudstack.agent.api.CreateNsxDhcpRelayConfigCommand;
import org.apache.cloudstack.agent.api.CreateNsxSegmentCommand;
import org.apache.cloudstack.agent.api.CreateNsxTier1GatewayCommand;
import org.apache.cloudstack.utils.NsxControllerUtils;
import org.apache.cloudstack.utils.NsxHelper;
@ -206,9 +207,8 @@ public class NsxGuestNetworkGuru extends GuestNetworkGuru implements NetworkMigr
}
VpcVO vpc = _vpcDao.findById(network.getVpcId());
if (Objects.isNull(vpc)) {
String msg = String.format("Unable to find VPC with id: %s", network.getVpcId());
LOGGER.error(msg);
throw new CloudRuntimeException(msg);
String msg = String.format("Unable to find VPC with id: %s, allocating for network %s", network.getVpcId(), network.getName());
LOGGER.debug(msg);
}
DomainVO domain = domainDao.findById(account.getDomainId());
@ -270,14 +270,6 @@ public class NsxGuestNetworkGuru extends GuestNetworkGuru implements NetworkMigr
}
private void createNsxSegment(NetworkVO networkVO, DataCenter zone) {
String vpcName = null;
if (nonNull(networkVO.getVpcId())) {
VpcVO vpc = _vpcDao.findById(networkVO.getVpcId());
if (isNull(vpc)) {
throw new CloudRuntimeException(String.format("Failed to find VPC network with id: %s", networkVO.getVpcId()));
}
vpcName = vpc.getName();
}
Account account = accountDao.findById(networkVO.getAccountId());
if (isNull(account)) {
throw new CloudRuntimeException(String.format("Unable to find account with id: %s", networkVO.getAccountId()));
@ -288,6 +280,23 @@ public class NsxGuestNetworkGuru extends GuestNetworkGuru implements NetworkMigr
LOGGER.error(msg);
throw new CloudRuntimeException(msg);
}
String vpcName = null;
if (nonNull(networkVO.getVpcId())) {
VpcVO vpc = _vpcDao.findById(networkVO.getVpcId());
if (isNull(vpc)) {
throw new CloudRuntimeException(String.format("Failed to find VPC network with id: %s", networkVO.getVpcId()));
}
vpcName = vpc.getName();
} else {
LOGGER.debug(String.format("Creating a Tier 1 Gateway for the network %s before creating the NSX segment", networkVO.getName()));
CreateNsxTier1GatewayCommand nsxTier1GatewayCommand = NsxHelper.createNsxTier1GatewayCommand(domain, account, zone, networkVO.getId(), networkVO.getName(), false);
NsxAnswer nsxAnswer = nsxControllerUtils.sendNsxCommand(nsxTier1GatewayCommand, zone.getId());
if (!nsxAnswer.getResult()) {
String msg = String.format("Could not create a Tier 1 Gateway for network %s: %s", networkVO.getName(), nsxAnswer.getDetails());
LOGGER.error(msg);
throw new CloudRuntimeException(msg);
}
}
CreateNsxSegmentCommand command = NsxHelper.createNsxSegmentCommand(domain, account, zone, vpcName, networkVO);
NsxAnswer answer = nsxControllerUtils.sendNsxCommand(command, zone.getId());
if (!answer.getResult()) {

View File

@ -19,11 +19,13 @@ package org.apache.cloudstack.service;
import com.cloud.network.dao.NetworkVO;
import com.cloud.network.vpc.VpcVO;
import com.cloud.network.vpc.dao.VpcDao;
import com.cloud.utils.exception.CloudRuntimeException;
import org.apache.cloudstack.NsxAnswer;
import org.apache.cloudstack.agent.api.CreateNsxTier1GatewayCommand;
import org.apache.cloudstack.agent.api.DeleteNsxSegmentCommand;
import org.apache.cloudstack.agent.api.DeleteNsxTier1GatewayCommand;
import org.apache.cloudstack.utils.NsxControllerUtils;
import org.apache.log4j.Logger;
import javax.inject.Inject;
import java.util.Objects;
@ -34,16 +36,25 @@ public class NsxServiceImpl implements NsxService {
@Inject
VpcDao vpcDao;
public boolean createVpcNetwork(Long zoneId, long accountId, long domainId, long vpcId, String vpcName) {
private static final Logger LOGGER = Logger.getLogger(NsxServiceImpl.class);
public boolean createVpcNetwork(Long zoneId, long accountId, long domainId, Long vpcId, String vpcName) {
CreateNsxTier1GatewayCommand createNsxTier1GatewayCommand =
new CreateNsxTier1GatewayCommand(domainId, accountId, zoneId, vpcId, vpcName);
new CreateNsxTier1GatewayCommand(domainId, accountId, zoneId, vpcId, vpcName, true);
NsxAnswer result = nsxControllerUtils.sendNsxCommand(createNsxTier1GatewayCommand, zoneId);
return result.getResult();
}
public boolean createNetwork(Long zoneId, long accountId, long domainId, Long networkId, String networkName) {
CreateNsxTier1GatewayCommand createNsxTier1GatewayCommand =
new CreateNsxTier1GatewayCommand(domainId, accountId, zoneId, networkId, networkName, false);
NsxAnswer result = nsxControllerUtils.sendNsxCommand(createNsxTier1GatewayCommand, zoneId);
return result.getResult();
}
public boolean deleteVpcNetwork(Long zoneId, long accountId, long domainId, Long vpcId, String vpcName) {
DeleteNsxTier1GatewayCommand deleteNsxTier1GatewayCommand =
new DeleteNsxTier1GatewayCommand(domainId, accountId, zoneId, vpcId, vpcName);
new DeleteNsxTier1GatewayCommand(domainId, accountId, zoneId, vpcId, vpcName, true);
NsxAnswer result = nsxControllerUtils.sendNsxCommand(deleteNsxTier1GatewayCommand, zoneId);
return result.getResult();
}
@ -57,6 +68,16 @@ public class NsxServiceImpl implements NsxService {
DeleteNsxSegmentCommand deleteNsxSegmentCommand = new DeleteNsxSegmentCommand(domainId, accountId, zoneId,
network.getVpcId(), vpcName, network.getId(), network.getName());
NsxAnswer result = nsxControllerUtils.sendNsxCommand(deleteNsxSegmentCommand, network.getDataCenterId());
if (!result.getResult()) {
String msg = String.format("Could not remove the NSX segment for network %s", network.getName());
LOGGER.error(msg);
throw new CloudRuntimeException(msg);
}
if (Objects.isNull(network.getVpcId())) {
DeleteNsxTier1GatewayCommand deleteNsxTier1GatewayCommand = new DeleteNsxTier1GatewayCommand(domainId, accountId, zoneId, network.getId(), network.getName(), false);
result = nsxControllerUtils.sendNsxCommand(deleteNsxTier1GatewayCommand, zoneId);
}
return result.getResult();
}
}

View File

@ -56,8 +56,13 @@ public class NsxControllerUtils {
return (NsxAnswer) answer;
}
public static String getTier1GatewayName(long domainId, long accountId, long zoneId, long vpcId) {
return String.format("D%s-A%s-Z%s-V%s", domainId, accountId, zoneId, vpcId);
/**
* Generates the Tier 1 Gateway name and identifier for the resource on the NSX manager
*/
public static String getTier1GatewayName(long domainId, long accountId, long zoneId,
Long networkResourceId, boolean isResourceVpc) {
String resourcePrefix = isResourceVpc ? "V" : "N";
return String.format("D%s-A%s-Z%s-%s%s", domainId, accountId, zoneId, resourcePrefix, networkResourceId);
}
public static String getNsxSegmentId(long domainId, long accountId, long zoneId, Long vpcId, long networkId) {

View File

@ -24,18 +24,26 @@ import com.cloud.network.vpc.VpcVO;
import com.cloud.user.Account;
import org.apache.cloudstack.agent.api.CreateNsxDhcpRelayConfigCommand;
import org.apache.cloudstack.agent.api.CreateNsxSegmentCommand;
import org.apache.cloudstack.agent.api.CreateNsxTier1GatewayCommand;
import java.util.List;
public class NsxHelper {
public static CreateNsxDhcpRelayConfigCommand createNsxDhcpRelayConfigCommand(DomainVO domain, Account account, DataCenter zone, VpcVO vpc, Network network, List<String> addresses) {
Long vpcId = vpc != null ? vpc.getId() : null;
String vpcName = vpc != null ? vpc.getName() : null;
return new CreateNsxDhcpRelayConfigCommand(domain.getId(), account.getId(), zone.getId(),
vpc.getId(), vpc.getName(), network.getId(), network.getName(), addresses);
vpcId, vpcName, network.getId(), network.getName(), addresses);
}
public static CreateNsxSegmentCommand createNsxSegmentCommand(DomainVO domain, Account account, DataCenter zone, String vpcName, NetworkVO networkVO) {
return new CreateNsxSegmentCommand(domain.getId(), account.getId(), zone.getId(),
networkVO.getVpcId(), vpcName, networkVO.getId(), networkVO.getName(), networkVO.getGateway(), networkVO.getCidr());
}
public static CreateNsxTier1GatewayCommand createNsxTier1GatewayCommand(DomainVO domain, Account account, DataCenter zone,
Long networkResourceId, String networkResourceName, boolean isResourceVpc) {
return new CreateNsxTier1GatewayCommand(domain.getId(), account.getId(), zone.getId(), networkResourceId, networkResourceName, isResourceVpc);
}
}

View File

@ -106,7 +106,7 @@ public class NsxResourceTest {
@Test
public void testCreateNsxTier1Gateway() {
NsxCommand command = new CreateNsxTier1GatewayCommand(1L, 2L,
1L, 3L, "VPC01");
1L, 3L, "VPC01", true);
NsxAnswer answer = (NsxAnswer) nsxResource.executeRequest(command);
assertTrue(answer.getResult());
@ -115,7 +115,7 @@ public class NsxResourceTest {
@Test
public void testDeleteTier1Gateway() {
NsxCommand command = new DeleteNsxTier1GatewayCommand(1L, 1L,
1L, 2L, "VPC01");
1L, 2L, "VPC01", true);
NsxAnswer answer = (NsxAnswer) nsxResource.executeRequest(command);
assertTrue(answer.getResult());

View File

@ -999,12 +999,6 @@ public class ConfigurationServerImpl extends ManagerBase implements Configuratio
defaultTungstenSharedSGNetworkOfferingProviders.put(Service.Dns, Provider.Tungsten);
defaultTungstenSharedSGNetworkOfferingProviders.put(Service.SecurityGroup, Provider.Tungsten);
final Map<Network.Service, Network.Provider> defaultNSXNetworkOfferingProviders = new HashMap<>();
defaultNSXNetworkOfferingProviders.put(Service.Dhcp, Provider.VPCVirtualRouter);
defaultNSXNetworkOfferingProviders.put(Service.Dns, Provider.VPCVirtualRouter );
defaultNSXNetworkOfferingProviders.put(Service.SourceNat, Provider.Nsx);
defaultNSXNetworkOfferingProviders.put(Service.UserData, Provider.VPCVirtualRouter);
final Map<Network.Service, Network.Provider> defaultIsolatedSourceNatEnabledNetworkOfferingProviders = new HashMap<Network.Service, Network.Provider>();
defaultIsolatedSourceNatEnabledNetworkOfferingProviders.put(Service.Dhcp, Provider.VirtualRouter);
defaultIsolatedSourceNatEnabledNetworkOfferingProviders.put(Service.Dns, Provider.VirtualRouter);
@ -1206,41 +1200,57 @@ public class ConfigurationServerImpl extends ManagerBase implements Configuratio
}
_networkOfferingDao.persistDefaultL2NetworkOfferings();
// Offering #9 - network offering for nsx provider - NATTED mode
NetworkOfferingVO defaultNatNSXNetworkOffering =
new NetworkOfferingVO(NetworkOffering.DEFAULT_NAT_NSX_OFFERING, "Offering for NSX enabled networks - NAT mode",
TrafficType.Guest, false, false, null, null, true, Availability.Optional, null, GuestType.Isolated, false, false, false, false, false, true);
defaultNatNSXNetworkOffering.setForNsx(true);
defaultNatNSXNetworkOffering.setNsxMode(NetworkOffering.NsxMode.NATTED.name());
defaultNatNSXNetworkOffering.setState(NetworkOffering.State.Enabled);
defaultNatNSXNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(defaultNatNSXNetworkOffering);
for (Map.Entry<Network.Service, Network.Provider> service : defaultNSXNetworkOfferingProviders.entrySet()) {
NetworkOfferingServiceMapVO offService =
new NetworkOfferingServiceMapVO(defaultNatNSXNetworkOffering.getId(), service.getKey(), service.getValue());
_ntwkOfferingServiceMapDao.persist(offService);
s_logger.trace("Added service for the network offering: " + offService);
}
// Offering #9 - network offering for NSX provider - NATTED mode
createAndPersistDefaultNsxOffering(NetworkOffering.DEFAULT_NAT_NSX_OFFERING, "Offering for NSX enabled networks - NAT mode",
NetworkOffering.NsxMode.NATTED, false);
// Offering #10 - network offering for nsx provider - ROUTED mode
NetworkOfferingVO defaultRouteNSXNetworkOffering =
new NetworkOfferingVO(NetworkOffering.DEFAULT_NAT_NSX_OFFERING, "Offering for NSX enabled networks - NAT mode",
TrafficType.Guest, false, false, null, null, true, Availability.Optional, null, GuestType.Isolated, false, false, false, false, false, true);
defaultRouteNSXNetworkOffering.setForNsx(true);
defaultRouteNSXNetworkOffering.setNsxMode(NetworkOffering.NsxMode.ROUTED.name());
defaultRouteNSXNetworkOffering.setState(NetworkOffering.State.Enabled);
defaultRouteNSXNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(defaultRouteNSXNetworkOffering);
// Offering #10 - network offering for NSX provider - ROUTED mode
createAndPersistDefaultNsxOffering(NetworkOffering.DEFAULT_ROUTED_NSX_OFFERING, "Offering for NSX enabled networks - ROUTED mode",
NetworkOffering.NsxMode.ROUTED, false);
for (Map.Entry<Network.Service, Network.Provider> service : defaultNSXNetworkOfferingProviders.entrySet()) {
NetworkOfferingServiceMapVO offService =
new NetworkOfferingServiceMapVO(defaultRouteNSXNetworkOffering.getId(), service.getKey(), service.getValue());
_ntwkOfferingServiceMapDao.persist(offService);
s_logger.trace("Added service for the network offering: " + offService);
}
// Offering #11 - network offering for NSX provider for VPCs - NATTED mode
createAndPersistDefaultNsxOffering(NetworkOffering.DEFAULT_NAT_NSX_OFFERING_FOR_VPC, "Offering for NSX enabled networks on VPCs - NAT mode",
NetworkOffering.NsxMode.NATTED, true);
// Offering #12 - network offering for NSX provider for VPCs - ROUTED mode
createAndPersistDefaultNsxOffering(NetworkOffering.DEFAULT_ROUTED_NSX_OFFERING_FOR_VPC, "Offering for NSX enabled networks on VPCs - ROUTED mode",
NetworkOffering.NsxMode.ROUTED, true);
}
});
}
private void createAndPersistDefaultNsxOffering(String name, String displayText, NetworkOffering.NsxMode nsxMode, boolean forVpc) {
NetworkOfferingVO defaultNatNSXNetworkOffering =
new NetworkOfferingVO(name, displayText, TrafficType.Guest, false, false, null,
null, true, Availability.Optional, null, GuestType.Isolated, false,
false, false, false, false, forVpc);
defaultNatNSXNetworkOffering.setForNsx(true);
defaultNatNSXNetworkOffering.setNsxMode(nsxMode.name());
defaultNatNSXNetworkOffering.setState(NetworkOffering.State.Enabled);
defaultNatNSXNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(defaultNatNSXNetworkOffering);
Map<Service, Provider> serviceProviderMap = getServicesAndProvidersForNSXNetwork(nsxMode, forVpc);
for (Map.Entry<Network.Service, Network.Provider> service : serviceProviderMap.entrySet()) {
NetworkOfferingServiceMapVO offService =
new NetworkOfferingServiceMapVO(defaultNatNSXNetworkOffering.getId(), service.getKey(), service.getValue());
_ntwkOfferingServiceMapDao.persist(offService);
s_logger.trace("Added service for the network offering: " + offService);
}
}
private Map<Service, Provider> getServicesAndProvidersForNSXNetwork(NetworkOffering.NsxMode nsxMode, boolean forVpc) {
final Map<Network.Service, Network.Provider> serviceProviderMap = new HashMap<>();
Provider routerProvider = forVpc ? Provider.VPCVirtualRouter : Provider.VirtualRouter;
serviceProviderMap.put(Service.Dhcp, routerProvider);
serviceProviderMap.put(Service.Dns, routerProvider);
serviceProviderMap.put(Service.UserData, routerProvider);
if (nsxMode == NetworkOffering.NsxMode.NATTED) {
serviceProviderMap.put(Service.SourceNat, Provider.Nsx);
}
return serviceProviderMap;
}
private void createDefaultNetworks() {
List<DataCenterVO> zones = _dataCenterDao.listAll();
long id = 1;