mirror of https://github.com/apache/cloudstack.git
[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:
parent
c135fa13ae
commit
f46b7883a8
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()));
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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()) {
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue