You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by sw...@apache.org on 2016/05/26 03:06:00 UTC
[21/39] git commit: updated refs/heads/master to 3c800b4
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b0c27e48/plugins/network-elements/nuage-vsp/src/com/cloud/network/guru/NuageVspGuestNetworkGuru.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/guru/NuageVspGuestNetworkGuru.java b/plugins/network-elements/nuage-vsp/src/com/cloud/network/guru/NuageVspGuestNetworkGuru.java
index 2037d92..a6c17e3 100644
--- a/plugins/network-elements/nuage-vsp/src/com/cloud/network/guru/NuageVspGuestNetworkGuru.java
+++ b/plugins/network-elements/nuage-vsp/src/com/cloud/network/guru/NuageVspGuestNetworkGuru.java
@@ -31,18 +31,14 @@ import com.cloud.dc.DataCenter.NetworkType;
import com.cloud.dc.VlanVO;
import com.cloud.deploy.DeployDestination;
import com.cloud.deploy.DeploymentPlan;
-import com.cloud.domain.Domain;
-import com.cloud.domain.DomainVO;
import com.cloud.domain.dao.DomainDao;
import com.cloud.exception.ConcurrentOperationException;
import com.cloud.exception.InsufficientAddressCapacityException;
import com.cloud.exception.InsufficientVirtualNetworkCapacityException;
import com.cloud.host.HostVO;
import com.cloud.host.dao.HostDao;
-import com.cloud.network.IpAddress;
import com.cloud.network.Network;
import com.cloud.network.Network.GuestType;
-import com.cloud.network.Network.Service;
import com.cloud.network.Network.State;
import com.cloud.network.NetworkProfile;
import com.cloud.network.Networks;
@@ -50,11 +46,12 @@ import com.cloud.network.NuageVspDeviceVO;
import com.cloud.network.PhysicalNetwork;
import com.cloud.network.PhysicalNetwork.IsolationMethod;
import com.cloud.network.dao.IPAddressVO;
+import com.cloud.network.dao.NetworkDetailVO;
+import com.cloud.network.dao.NetworkDetailsDao;
import com.cloud.network.dao.NetworkVO;
import com.cloud.network.dao.NuageVspDao;
import com.cloud.network.dao.PhysicalNetworkVO;
import com.cloud.network.manager.NuageVspManager;
-import com.cloud.network.vpc.Vpc;
import com.cloud.network.vpc.dao.VpcDao;
import com.cloud.offering.NetworkOffering;
import com.cloud.offerings.dao.NetworkOfferingDao;
@@ -62,28 +59,25 @@ import com.cloud.offerings.dao.NetworkOfferingServiceMapDao;
import com.cloud.user.Account;
import com.cloud.user.AccountVO;
import com.cloud.user.dao.AccountDao;
-import com.cloud.util.NuageVspUtil;
+import com.cloud.utils.StringUtils;
import com.cloud.utils.db.DB;
import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.utils.net.NetUtils;
import com.cloud.vm.NicProfile;
import com.cloud.vm.NicVO;
import com.cloud.vm.ReservationContext;
-import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachineProfile;
import com.google.common.base.Strings;
-import org.apache.commons.lang.StringUtils;
+import com.cloud.util.NuageVspEntityBuilder;
+import net.nuage.vsp.acs.client.api.model.VspNetwork;
+import net.nuage.vsp.acs.client.api.model.VspNic;
+import net.nuage.vsp.acs.client.api.model.VspStaticNat;
+import net.nuage.vsp.acs.client.api.model.VspVm;
+import org.apache.cloudstack.resourcedetail.VpcDetailVO;
+import org.apache.cloudstack.resourcedetail.dao.VpcDetailsDao;
import org.apache.log4j.Logger;
import javax.inject.Inject;
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
import java.util.List;
-import java.util.Set;
-import java.util.TreeSet;
public class NuageVspGuestNetworkGuru extends GuestNetworkGuru {
public static final Logger s_logger = Logger.getLogger(NuageVspGuestNetworkGuru.class);
@@ -108,6 +102,12 @@ public class NuageVspGuestNetworkGuru extends GuestNetworkGuru {
NuageVspManager _nuageVspManager;
@Inject
ConfigurationManager _configMgr;
+ @Inject
+ NuageVspEntityBuilder _nuageVspEntityBuilder;
+ @Inject
+ NetworkDetailsDao _networkDetailsDao;
+ @Inject
+ VpcDetailsDao _vpcDetailsDao;
public NuageVspGuestNetworkGuru() {
super();
@@ -148,6 +148,15 @@ public class NuageVspGuestNetworkGuru extends GuestNetworkGuru {
throw new IllegalStateException("Network " + networkId + " is not in expected state Implementing, but is in state " + network.getState());
}
+ //Get the Account details and find the type
+ AccountVO networksAccount = _accountDao.findById(network.getAccountId());
+ if (networksAccount.getType() == Account.ACCOUNT_TYPE_PROJECT) {
+ String errorMessage = "Networks created by account " + networksAccount.getAccountName() + " of type Project (" + Account.ACCOUNT_TYPE_PROJECT + ") " +
+ "are not yet supported by NuageVsp provider";
+ s_logger.error(errorMessage);
+ throw new InsufficientVirtualNetworkCapacityException(errorMessage, Account.class, network.getAccountId());
+ }
+
long dcId = dest.getDataCenter().getId();
//Get physical network id
Long physicalNetworkId = network.getPhysicalNetworkId();
@@ -155,80 +164,29 @@ public class NuageVspGuestNetworkGuru extends GuestNetworkGuru {
if (physicalNetworkId == null) {
physicalNetworkId = _networkModel.findPhysicalNetworkId(dcId, offering.getTags(), offering.getTrafficType());
}
- implemented = new NetworkVO(network.getTrafficType(), network.getMode(), network.getBroadcastDomainType(), network.getNetworkOfferingId(), State.Allocated,
- network.getDataCenterId(), physicalNetworkId, offering.getRedundantRouter());
+
+ implemented = new NetworkVO(network.getId(), network, network.getNetworkOfferingId(), network.getGuruName(), network.getDomainId(), network.getAccountId(),
+ network.getRelated(), network.getName(), network.getDisplayText(), network.getNetworkDomain(), network.getGuestType(), network.getDataCenterId(),
+ physicalNetworkId, network.getAclType(), network.getSpecifyIpRanges(), network.getVpcId(), offering.getRedundantRouter());
+ implemented.setUuid(network.getUuid());
+ implemented.setState(State.Allocated);
if (network.getGateway() != null) {
implemented.setGateway(network.getGateway());
}
if (network.getCidr() != null) {
implemented.setCidr(network.getCidr());
}
- List<String[]> ipAddressRanges = new ArrayList<String[]>();
- String virtualRouterIp = getVirtualRouterIP(network, ipAddressRanges);
- String networkUuid = implemented.getUuid();
+
+ VspNetwork vspNetwork = _nuageVspEntityBuilder.buildVspNetwork(implemented, true);
String tenantId = context.getDomain().getName() + "-" + context.getAccount().getAccountId();
- String broadcastUriStr = networkUuid + "/" + virtualRouterIp;
+ String broadcastUriStr = implemented.getUuid() + "/" + vspNetwork.getVirtualRouterIp();
implemented.setBroadcastUri(Networks.BroadcastDomainType.Vsp.toUri(broadcastUriStr));
implemented.setBroadcastDomainType(Networks.BroadcastDomainType.Vsp);
- //Check if the network is associated to a VPC
- Long vpcId = network.getVpcId();
- boolean isVpc = (vpcId != null);
- //Check owner of the Network
- Domain networksDomain = _domainDao.findById(network.getDomainId());
- //Get the Account details and find the type
- AccountVO networksAccount = _accountDao.findById(network.getAccountId());
- if (networksAccount.getType() == Account.ACCOUNT_TYPE_PROJECT) {
- String errorMessage = "Networks created by account " + networksAccount.getAccountName() + " of type Project (" + Account.ACCOUNT_TYPE_PROJECT + ") " +
- "are not yet supported by NuageVsp provider";
- s_logger.error(errorMessage);
- throw new InsufficientVirtualNetworkCapacityException(errorMessage, Account.class, network.getAccountId());
- }
- String vpcName = null;
- String vpcUuid = null;
- String preConfiguredDomainTemplateName = NuageVspUtil.getPreConfiguredDomainTemplateName(_configDao, network, offering);
- boolean isSharedNetwork = offering.getGuestType() == GuestType.Shared;
- boolean isL3Network = !isVpc && (isSharedNetwork || isL3Network(network));
-
- if (isVpc) {
- Vpc vpcObj = _vpcDao.findById(vpcId);
- vpcName = vpcObj.getName();
- vpcUuid = vpcObj.getUuid();
- }
-
- if (isSharedNetwork) {
- List<VlanVO> vlans = _vlanDao.listVlansByNetworkId(network.getId());
- for (VlanVO vlan : vlans) {
- boolean isIpv4 = StringUtils.isNotBlank(vlan.getIpRange());
- String[] range = isIpv4 ? vlan.getIpRange().split("-") : vlan.getIp6Range().split("-");
- ipAddressRanges.add(range);
- }
- }
HostVO nuageVspHost = getNuageVspHost(physicalNetworkId);
List<String> dnsServers = _nuageVspManager.getDnsDetails(network);
- List<String> gatewaySystemIds = _nuageVspManager.getGatewaySystemIds();
- ImplementNetworkVspCommand.Builder cmdBuilder = new ImplementNetworkVspCommand.Builder()
- .networkDomainName(networksDomain.getName())
- .networkDomainPath(networksDomain.getPath())
- .networkDomainUuid(networksDomain.getUuid())
- .networkAccountName(networksAccount.getAccountName())
- .networkAccountUuid(networksAccount.getUuid())
- .networkName(network.getName())
- .networkCidr(network.getCidr())
- .networkGateway(network.getGateway())
- .networkAclId(network.getNetworkACLId())
- .dnsServers(dnsServers)
- .gatewaySystemIds(gatewaySystemIds)
- .networkUuid(network.getUuid())
- .isL3Network(isL3Network)
- .isVpc(isVpc)
- .isSharedNetwork(isSharedNetwork)
- .vpcName(vpcName)
- .vpcUuid(vpcUuid)
- .defaultEgressPolicy(offering.getEgressDefaultPolicy())
- .ipAddressRange(ipAddressRanges)
- .domainTemplateName(preConfiguredDomainTemplateName);
- Answer answer = _agentMgr.easySend(nuageVspHost.getId(), cmdBuilder.build());
+ ImplementNetworkVspCommand cmd = new ImplementNetworkVspCommand(vspNetwork, dnsServers);
+ Answer answer = _agentMgr.easySend(nuageVspHost.getId(), cmd);
if (answer == null || !answer.getResult()) {
s_logger.error("ImplementNetworkVspCommand for network " + network.getUuid() + " failed on Nuage VSD " + nuageVspHost.getDetail("hostname"));
@@ -237,7 +195,18 @@ public class NuageVspGuestNetworkGuru extends GuestNetworkGuru {
}
return null;
}
- s_logger.info("Implemented OK, network " + networkUuid + " in tenant " + tenantId + " linked to " + implemented.getBroadcastUri());
+
+ if (StringUtils.isNotBlank(vspNetwork.getDomainTemplateName())) {
+ if (network.getVpcId() != null) {
+ VpcDetailVO vpcDetail = new VpcDetailVO(network.getVpcId(), NuageVspManager.nuageDomainTemplateDetailName, vspNetwork.getDomainTemplateName(), false);
+ _vpcDetailsDao.persist(vpcDetail);
+ } else {
+ NetworkDetailVO networkDetail = new NetworkDetailVO(implemented.getId(), NuageVspManager.nuageDomainTemplateDetailName, vspNetwork.getDomainTemplateName(), false);
+ _networkDetailsDao.persist(networkDetail);
+ }
+ }
+
+ s_logger.info("Implemented OK, network " + implemented.getUuid() + " in tenant " + tenantId + " linked to " + implemented.getBroadcastUri());
} finally {
_networkDao.releaseFromLockTable(network.getId());
}
@@ -262,68 +231,38 @@ public class NuageVspGuestNetworkGuru extends GuestNetworkGuru {
if (s_logger.isDebugEnabled()) {
s_logger.debug("Handling reserve() call back to with Create a new VM or add an interface to existing VM in network " + network.getName());
}
- nic.setBroadcastUri(network.getBroadcastUri());
- nic.setIsolationUri(network.getBroadcastUri());
+
DataCenter dc = _dcDao.findById(network.getDataCenterId());
- Account networksAccount = _accountDao.findById(network.getAccountId());
- DomainVO networksDomain = _domainDao.findById(network.getDomainId());
- //Get the Account details and find the type
- long networkOwnedBy = network.getAccountId();
- AccountVO neworkAccountDetails = _accountDao.findById(networkOwnedBy);
+ AccountVO neworkAccountDetails = _accountDao.findById(network.getAccountId());
if (neworkAccountDetails.getType() == Account.ACCOUNT_TYPE_PROJECT) {
throw new InsufficientVirtualNetworkCapacityException("CS project support is not yet implemented in NuageVsp", DataCenter.class, dc.getId());
}
- //NicProfile does not contain the NIC UUID. We need this information to set it in the VMInterface and VPort
- //that we create in VSP
- NicVO nicFrmDB = _nicDao.findById(nic.getId());
- NetworkOffering networkOffering = _ntwkOfferingDao.findById(network.getNetworkOfferingId());
- boolean isDomainRouter = vm.getType().equals(VirtualMachine.Type.DomainRouter);
- URI broadcastUri = network.getBroadcastUri();
- if (Strings.isNullOrEmpty(broadcastUri.getPath()) || !broadcastUri.getPath().startsWith("/")) {
+ if (Strings.isNullOrEmpty(network.getBroadcastUri().getPath()) || !network.getBroadcastUri().getPath().startsWith("/")) {
throw new IllegalStateException("The broadcast URI path " + network.getBroadcastUri() + " is empty or in an incorrect format.");
}
- String domainRouterIp = network.getBroadcastUri().getPath().substring(1);
- boolean isL3Network = isL3Network(network);
- boolean isSharedNetwork = networkOffering.getGuestType() == GuestType.Shared;
- Long vpcId = network.getVpcId();
- String vpcUuid = null;
- if (vpcId != null) {
- Vpc vpcObj = _vpcDao.findById(vpcId);
- vpcUuid = vpcObj.getUuid();
- }
- HostVO nuageVspHost = getNuageVspHost(network.getPhysicalNetworkId());
+
+ nic.setBroadcastUri(network.getBroadcastUri());
+ nic.setIsolationUri(network.getBroadcastUri());
+
+ //NicProfile does not contain the NIC UUID. We need this information to set it in the VMInterface and VPort
+ //that we create in VSP
+ NicVO nicFromDb = _nicDao.findById(nic.getId());
IPAddressVO staticNatIp = _ipAddressDao.findByVmIdAndNetworkId(network.getId(), vm.getId());
- ReserveVmInterfaceVspCommand.Builder cmdBuilder = new ReserveVmInterfaceVspCommand.Builder()
- .nicUuid(nicFrmDB.getUuid())
- .nicMacAddress(nic.getMacAddress())
- .networkUuid(network.getUuid())
- .isL3Network(isL3Network)
- .isSharedNetwork(isSharedNetwork)
- .vpcUuid(vpcUuid)
- .networkDomainUuid(networksDomain.getUuid())
- .networksAccountUuid(networksAccount.getUuid())
- .isDomainRouter(isDomainRouter)
- .domainRouterIp(domainRouterIp)
- .vmInstanceName(vm.getInstanceName())
- .vmUuid(vm.getUuid())
- .vmUserName(networksDomain.getUuid())
- .vmUserDomainName(networksAccount.getUuid())
- .useStaticIp(true)
- .staticIp(nic.getIPv4Address());
+ VspNetwork vspNetwork = _nuageVspEntityBuilder.buildVspNetwork(network, false);
+ VspVm vspVm = _nuageVspEntityBuilder.buildVspVm(vm.getVirtualMachine(), network);
+ VspNic vspNic = _nuageVspEntityBuilder.buildVspNic(nicFromDb.getUuid(), nic);
+ VspStaticNat vspStaticNat = null;
if (staticNatIp != null) {
VlanVO staticNatVlan = _vlanDao.findById(staticNatIp.getVlanId());
- cmdBuilder = cmdBuilder.staticNatIpUuid(staticNatIp.getUuid())
- .staticNatIpAddress(staticNatIp.getAddress().addr())
- .isStaticNatIpAllocated(staticNatIp.getState().equals(IpAddress.State.Allocated))
- .isOneToOneNat(staticNatIp.isOneToOneNat())
- .staticNatVlanUuid(staticNatVlan.getUuid())
- .staticNatVlanGateway(staticNatVlan.getVlanGateway())
- .staticNatVlanNetmask(staticNatVlan.getVlanNetmask());
+ vspStaticNat = _nuageVspEntityBuilder.buildVspStaticNat(null, staticNatIp, staticNatVlan, null);
}
- Answer answer = _agentMgr.easySend(nuageVspHost.getId(), cmdBuilder.build());
+ HostVO nuageVspHost = getNuageVspHost(network.getPhysicalNetworkId());
+ ReserveVmInterfaceVspCommand cmd = new ReserveVmInterfaceVspCommand(vspNetwork, vspVm, vspNic, vspStaticNat);
+ Answer answer = _agentMgr.easySend(nuageVspHost.getId(), cmd);
+
if (answer == null || !answer.getResult()) {
s_logger.error("ReserveVmInterfaceNuageVspCommand failed for NIC " + nic.getId() + " attached to VM " + vm.getId() + " in network " + network.getId());
if ((null != answer) && (null != answer.getDetails())) {
@@ -332,8 +271,8 @@ public class NuageVspGuestNetworkGuru extends GuestNetworkGuru {
throw new InsufficientVirtualNetworkCapacityException("Failed to reserve VM in Nuage VSP.", Network.class, network.getId());
}
- if (isDomainRouter) {
- nic.setIPv4Address(domainRouterIp);
+ if (vspVm.getDomainRouter() == Boolean.TRUE) {
+ nic.setIPv4Address(vspVm.getDomainRouterIp());
}
} finally {
@@ -378,32 +317,16 @@ public class NuageVspGuestNetworkGuru extends GuestNetworkGuru {
s_logger.debug("Handling deallocate() call back, which is called when a VM is destroyed or interface is removed, " + "to delete VM Interface with IP "
+ nic.getIPv4Address() + " from a VM " + vm.getInstanceName() + " with state " + vm.getVirtualMachine().getState());
}
- DomainVO networksDomain = _domainDao.findById(network.getDomainId());
- NicVO nicFrmDd = _nicDao.findById(nic.getId());
- NetworkOffering networkOffering = _ntwkOfferingDao.findById(network.getNetworkOfferingId());
- boolean isL3Network = isL3Network(network);
- boolean isSharedNetwork = networkOffering.getGuestType() == GuestType.Shared;
- boolean isExpunging = vm.getVirtualMachine().getState() == VirtualMachine.State.Expunging;
- Long vpcId = network.getVpcId();
- String vpcUuid = null;
- if (vpcId != null) {
- Vpc vpcObj = _vpcDao.findById(vpcId);
- vpcUuid = vpcObj.getUuid();
- }
+
+ NicVO nicFromDb = _nicDao.findById(nic.getId());
+
+ VspNetwork vspNetwork = _nuageVspEntityBuilder.buildVspNetwork(network, false);
+ VspVm vspVm = _nuageVspEntityBuilder.buildVspVm(vm.getVirtualMachine(), network);
+ VspNic vspNic = _nuageVspEntityBuilder.buildVspNic(nicFromDb.getUuid(), nic);
HostVO nuageVspHost = getNuageVspHost(network.getPhysicalNetworkId());
- DeallocateVmVspCommand.Builder cmdBuilder = new DeallocateVmVspCommand.Builder()
- .networkUuid(network.getUuid())
- .nicFromDbUuid(nicFrmDd.getUuid())
- .nicMacAddress(nic.getMacAddress())
- .nicIp4Address(nic.getIPv4Address())
- .isL3Network(isL3Network)
- .isSharedNetwork(isSharedNetwork)
- .vpcUuid(vpcUuid)
- .networksDomainUuid(networksDomain.getUuid())
- .vmInstanceName(vm.getInstanceName())
- .vmUuid(vm.getUuid())
- .isExpungingState(isExpunging);
- Answer answer = _agentMgr.easySend(nuageVspHost.getId(), cmdBuilder.build());
+
+ DeallocateVmVspCommand cmd = new DeallocateVmVspCommand(vspNetwork, vspVm, vspNic);
+ Answer answer = _agentMgr.easySend(nuageVspHost.getId(), cmd);
if (answer == null || !answer.getResult()) {
s_logger.error("DeallocateVmNuageVspCommand for VM " + vm.getUuid() + " failed on Nuage VSD " + nuageVspHost.getDetail("hostname"));
if ((null != answer) && (null != answer.getDetails())) {
@@ -451,27 +374,10 @@ public class NuageVspGuestNetworkGuru extends GuestNetworkGuru {
if (s_logger.isDebugEnabled()) {
s_logger.debug("Handling trash() call back to delete the network " + network.getName() + " with uuid " + network.getUuid() + " from VSP");
}
- long domainId = network.getDomainId();
- Domain domain = _domainDao.findById(domainId);
- boolean isL3Network = isL3Network(network);
- boolean isSharedNetwork = offering.getGuestType() == GuestType.Shared;
- Long vpcId = network.getVpcId();
- String vpcUuid = null;
- if (vpcId != null) {
- Vpc vpcObj = _vpcDao.findById(vpcId);
- vpcUuid = vpcObj.getUuid();
- }
-
- String preConfiguredDomainTemplateName = NuageVspUtil.getPreConfiguredDomainTemplateName(_configDao, network, offering);
+ VspNetwork vspNetwork = _nuageVspEntityBuilder.buildVspNetwork(network, false);
HostVO nuageVspHost = getNuageVspHost(network.getPhysicalNetworkId());
- TrashNetworkVspCommand.Builder cmdBuilder = new TrashNetworkVspCommand.Builder()
- .domainUuid(domain.getUuid())
- .networkUuid(network.getUuid())
- .isL3Network(isL3Network)
- .isSharedNetwork(isSharedNetwork)
- .vpcUuid(vpcUuid)
- .domainTemplateName(preConfiguredDomainTemplateName);
- Answer answer = _agentMgr.easySend(nuageVspHost.getId(), cmdBuilder.build());
+ TrashNetworkVspCommand cmd = new TrashNetworkVspCommand(vspNetwork);
+ Answer answer = _agentMgr.easySend(nuageVspHost.getId(), cmd);
if (answer == null || !answer.getResult()) {
s_logger.error("TrashNetworkNuageVspCommand for network " + network.getUuid() + " failed");
if ((null != answer) && (null != answer.getDetails())) {
@@ -485,51 +391,6 @@ public class NuageVspGuestNetworkGuru extends GuestNetworkGuru {
return super.trash(network, offering);
}
- private String getVirtualRouterIP(Network network, Collection<String[]> ipAddressRanges) throws InsufficientVirtualNetworkCapacityException {
- String virtualRouterIp;
- //Check if the subnet has minimum 5 host in it.
- String subnet = NetUtils.getCidrSubNet(network.getCidr());
- String netmask = NetUtils.getCidrNetmask(network.getCidr());
- long cidrSize = NetUtils.getCidrSize(netmask);
-
- Set<Long> allIPsInCidr = NetUtils.getAllIpsFromCidr(subnet, cidrSize, new HashSet<Long>());
- if (allIPsInCidr == null || !(allIPsInCidr instanceof TreeSet)) {
- throw new IllegalStateException("The IPs in CIDR for subnet " + subnet + " where null or returned in a non-ordered set.");
- }
-
- if (allIPsInCidr.size() > 3) {
- //get the second IP and see if it the networks GatewayIP
- Iterator<Long> ipIterator = allIPsInCidr.iterator();
- long vip = ipIterator.next();
- if (NetUtils.ip2Long(network.getGateway()) == vip) {
- vip = ipIterator.next();
- virtualRouterIp = NetUtils.long2Ip(vip);
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("1st IP is used as gateway IP. Reserving " + virtualRouterIp + " for the Virtual Router IP for Network(" + network.getName() + ")");
- }
- } else {
- virtualRouterIp = NetUtils.long2Ip(vip);
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("1st IP is not used as the gateway IP. Reserving" + virtualRouterIp + " for the Virtual Router IP for Network(" + network.getName() + ")");
- }
- }
- ipAddressRanges.add(new String[] {
- NetUtils.long2Ip(ipIterator.next()),
- NetUtils.getIpRangeEndIpFromCidr(subnet, cidrSize)
- });
- return virtualRouterIp;
- }
-
- throw new InsufficientVirtualNetworkCapacityException("VSP allocates an IP for VirtualRouter." + " So, subnet should have atleast minimum 4 hosts ", Network.class,
- network.getId());
- }
-
- private boolean isL3Network(Network network) {
- return _ntwkOfferingSrvcDao.areServicesSupportedByNetworkOffering(network.getNetworkOfferingId(), Service.SourceNat)
- || _ntwkOfferingSrvcDao.areServicesSupportedByNetworkOffering(network.getNetworkOfferingId(), Service.StaticNat)
- || network.getGuestType() == GuestType.Shared;
- }
-
private HostVO getNuageVspHost(long physicalNetworkId) {
HostVO nuageVspHost;
List<NuageVspDeviceVO> nuageVspDevices = _nuageVspDao.listByPhysicalNetwork(physicalNetworkId);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b0c27e48/plugins/network-elements/nuage-vsp/src/com/cloud/network/manager/NuageVspManager.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/manager/NuageVspManager.java b/plugins/network-elements/nuage-vsp/src/com/cloud/network/manager/NuageVspManager.java
index 0aae22c..4861fb2 100644
--- a/plugins/network-elements/nuage-vsp/src/com/cloud/network/manager/NuageVspManager.java
+++ b/plugins/network-elements/nuage-vsp/src/com/cloud/network/manager/NuageVspManager.java
@@ -40,6 +40,8 @@ public interface NuageVspManager extends PluggableService {
static final String nuageVPCOfferingDisplayText = "Nuage VSP VPC Offering";
+ static final String nuageDomainTemplateDetailName = "domainTemplateName";
+
static final ConfigKey<Boolean> NuageVspConfigDns = new ConfigKey<Boolean>(Boolean.class, "nuagevsp.configure.dns", "Advanced", "true",
"Defines if NuageVsp plugin needs to configure DNS setting for a VM or not. True will configure the DNS and false will not configure the DNS settings", true,
Scope.Global, null);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b0c27e48/plugins/network-elements/nuage-vsp/src/com/cloud/network/manager/NuageVspManagerImpl.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/manager/NuageVspManagerImpl.java b/plugins/network-elements/nuage-vsp/src/com/cloud/network/manager/NuageVspManagerImpl.java
index f38a9c7..04b1ccc 100644
--- a/plugins/network-elements/nuage-vsp/src/com/cloud/network/manager/NuageVspManagerImpl.java
+++ b/plugins/network-elements/nuage-vsp/src/com/cloud/network/manager/NuageVspManagerImpl.java
@@ -27,8 +27,8 @@ import com.cloud.agent.api.Answer;
import com.cloud.agent.api.Command;
import com.cloud.agent.api.PingNuageVspCommand;
import com.cloud.agent.api.StartupCommand;
-import com.cloud.agent.api.manager.GetClientDefaultsAnswer;
-import com.cloud.agent.api.manager.GetClientDefaultsCommand;
+import com.cloud.agent.api.manager.GetApiDefaultsAnswer;
+import com.cloud.agent.api.manager.GetApiDefaultsCommand;
import com.cloud.agent.api.manager.SupportedApiVersionCommand;
import com.cloud.agent.api.sync.SyncDomainAnswer;
import com.cloud.agent.api.sync.SyncDomainCommand;
@@ -37,7 +37,6 @@ import com.cloud.agent.api.sync.SyncNuageVspCmsIdCommand;
import com.cloud.api.ApiDBUtils;
import com.cloud.api.commands.AddNuageVspDeviceCmd;
import com.cloud.api.commands.DeleteNuageVspDeviceCmd;
-import com.cloud.api.commands.IssueNuageVspResourceRequestCmd;
import com.cloud.api.commands.ListNuageVspDevicesCmd;
import com.cloud.api.commands.UpdateNuageVspDeviceCmd;
import com.cloud.api.response.NuageVspDeviceResponse;
@@ -70,7 +69,6 @@ import com.cloud.network.dao.PhysicalNetworkServiceProviderDao;
import com.cloud.network.dao.PhysicalNetworkServiceProviderVO;
import com.cloud.network.dao.PhysicalNetworkVO;
import com.cloud.network.resource.NuageVspResource;
-import com.cloud.network.sync.NuageVspSync;
import com.cloud.network.vpc.VpcManager;
import com.cloud.network.vpc.VpcOffering;
import com.cloud.network.vpc.VpcOfferingServiceMapVO;
@@ -106,7 +104,10 @@ import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
+import com.cloud.util.NuageVspEntityBuilder;
import net.nuage.vsp.acs.NuageVspPluginClientLoader;
+import net.nuage.vsp.acs.client.api.model.VspApiDefaults;
+import net.nuage.vsp.acs.client.api.model.VspDomain;
import org.apache.cloudstack.framework.config.ConfigKey;
import org.apache.cloudstack.framework.config.Configurable;
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
@@ -127,7 +128,6 @@ import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ScheduledExecutorService;
import static com.cloud.agent.api.sync.SyncNuageVspCmsIdCommand.SyncType;
@@ -135,8 +135,6 @@ public class NuageVspManagerImpl extends ManagerBase implements NuageVspManager,
private static final Logger s_logger = Logger.getLogger(NuageVspManagerImpl.class);
- private static final int ONE_MINUTE_MULTIPLIER = 60 * 1000;
-
public static final Map<Network.Service, Set<Network.Provider>> NUAGE_VSP_VPC_SERVICE_MAP;
private static final ConfigKey[] NUAGE_VSP_CONFIG_KEYS = new ConfigKey<?>[] { NuageVspConfigDns, NuageVspDnsExternal, NuageVspConfigGateway,
NuageVspSharedNetworkDomainTemplateName, NuageVspVpcDomainTemplateName, NuageVspIsolatedNetworkDomainTemplateName };
@@ -164,8 +162,6 @@ public class NuageVspManagerImpl extends ManagerBase implements NuageVspManager,
@Inject
NuageVspDao _nuageVspDao;
@Inject
- NuageVspSync _nuageVspSync;
- @Inject
DataCenterDao _dataCenterDao;
@Inject
ConfigurationDao _configDao;
@@ -187,8 +183,8 @@ public class NuageVspManagerImpl extends ManagerBase implements NuageVspManager,
NetworkOfferingDao _networkOfferingDao;
@Inject
NetworkOfferingServiceMapDao _networkOfferingServiceMapDao;
-
- private ScheduledExecutorService scheduler;
+ @Inject
+ NuageVspEntityBuilder _nuageVspEntityBuilder;
@Inject
MessageBus _messageBus;
@@ -212,7 +208,7 @@ public class NuageVspManagerImpl extends ManagerBase implements NuageVspManager,
@Override
public List<Class<?>> getCommands() {
return Lists.<Class<?>>newArrayList(AddNuageVspDeviceCmd.class, DeleteNuageVspDeviceCmd.class, ListNuageVspDevicesCmd.class,
- IssueNuageVspResourceRequestCmd.class, UpdateNuageVspDeviceCmd.class);
+ UpdateNuageVspDeviceCmd.class);
}
@Override
@@ -242,21 +238,21 @@ public class NuageVspManagerImpl extends ManagerBase implements NuageVspManager,
}
try {
- NuageVspPluginClientLoader clientLoader = NuageVspPluginClientLoader.getClientLoader(null, null, 1, 1, null);
+ NuageVspPluginClientLoader clientLoader = NuageVspPluginClientLoader.getClientLoader(null, null, null, null, 1, 1, null);
- Map<String, Object> clientDefaults = clientLoader.getNuageVspManagerClient().getClientDefaults();
- String apiVersion = MoreObjects.firstNonNull(cmd.getApiVersion(), (String) clientDefaults.get("CURRENT_API_VERSION"));
+ VspApiDefaults apiDefaults = clientLoader.getNuageVspManagerClient().getApiDefaults();
+ String apiVersion = MoreObjects.firstNonNull(cmd.getApiVersion(), apiDefaults.getVersion());
if (!clientLoader.getNuageVspManagerClient().isSupportedApiVersion(apiVersion)) {
throw new CloudRuntimeException("Unsupported API version : " + apiVersion);
}
int port = cmd.getPort();
if (0 == port) {
- port = 8443;
+ port = 443;
}
String cmsUserPasswordBase64 = NuageVspUtil.encodePassword(cmd.getPassword());
- String retryCount = String.valueOf(MoreObjects.firstNonNull(cmd.getApiRetryCount(), clientDefaults.get("DEFAULT_API_RETRY_COUNT")));
- String retryInterval = String.valueOf(MoreObjects.firstNonNull(cmd.getApiRetryInterval(), clientDefaults.get("DEFAULT_API_RETRY_INTERVAL")));
+ String retryCount = String.valueOf(MoreObjects.firstNonNull(cmd.getApiRetryCount(), apiDefaults.getRetryCount()));
+ String retryInterval = String.valueOf(MoreObjects.firstNonNull(cmd.getApiRetryInterval(), apiDefaults.getRetryInterval()));
NuageVspResource.Configuration resourceConfiguration = new NuageVspResource.Configuration()
.name("Nuage VSD - " + cmd.getHostName())
.guid(UUID.randomUUID().toString())
@@ -284,22 +280,33 @@ public class NuageVspManagerImpl extends ManagerBase implements NuageVspManager,
_hostDetailsDao.persist(detail);
ConfigurationVO cmsIdConfig = _configDao.findByName("nuagevsp.cms.id");
+ NuageVspDeviceVO matchingNuageVspDevice = findMatchingNuageVspDevice(nuageVspDevice);
+ String cmsId;
+ if (matchingNuageVspDevice != null) {
+ cmsId = findNuageVspCmsIdForDevice(matchingNuageVspDevice.getId(), cmsIdConfig);
+ } else {
+ SyncNuageVspCmsIdCommand syncCmd = new SyncNuageVspCmsIdCommand(SyncType.REGISTER, null);
+ SyncNuageVspCmsIdAnswer answer = (SyncNuageVspCmsIdAnswer) _agentMgr.easySend(nuageVspDevice.getHostId(), syncCmd);
+ if (answer != null && answer.getSuccess()) {
+ cmsId = answer.getNuageVspCmsId();
+ } else {
+ throw new CloudRuntimeException("Failed to register CMS ID");
+ }
+ }
+
host = findNuageVspHost(nuageVspDevice.getHostId());
- SyncNuageVspCmsIdCommand syncCmd = new SyncNuageVspCmsIdCommand(SyncType.REGISTER, null);
- SyncNuageVspCmsIdAnswer answer = (SyncNuageVspCmsIdAnswer) _agentMgr.easySend(nuageVspDevice.getHostId(), syncCmd);
- if (answer != null && answer.getSuccess()) {
- registerNewNuageVspDevice(cmsIdConfig, nuageVspDevice.getId() + ":" + answer.getNuageVspCmsId());
+ registerNewNuageVspDevice(cmsIdConfig, nuageVspDevice.getId() + ":" + cmsId);
- detail = new DetailVO(host.getId(), "nuagevspcmsid", answer.getNuageVspCmsId());
- _hostDetailsDao.persist(detail);
+ detail = new DetailVO(host.getId(), "nuagevspcmsid", cmsId);
+ _hostDetailsDao.persist(detail);
- resourceConfiguration.nuageVspCmsId(answer.getNuageVspCmsId());
- resource.configure(cmd.getHostName(), Maps.<String, Object>newHashMap(resourceConfiguration.build()));
+ resourceConfiguration.nuageVspCmsId(cmsId);
+ resource.configure(cmd.getHostName(), Maps.<String, Object>newHashMap(resourceConfiguration.build()));
+ if (matchingNuageVspDevice == null) {
auditDomainsOnVsp((HostVO) host, true, false);
- } else {
- throw new CloudRuntimeException("Failed to register CMS ID");
}
+
return nuageVspDevice;
} catch (ConfigurationException e) {
s_logger.error("Failed to configure Nuage VSD resource " + cmd.getHostName(), e);
@@ -372,13 +379,13 @@ public class NuageVspManagerImpl extends ManagerBase implements NuageVspManager,
updateRequired = true;
}
- GetClientDefaultsCommand getClientDefaultsCmd = new GetClientDefaultsCommand();
- GetClientDefaultsAnswer getClientDefaultsAnswer = (GetClientDefaultsAnswer) _agentMgr.easySend(nuageVspHost.getId(), getClientDefaultsCmd);
+ GetApiDefaultsCommand apiDefaultsCmd = new GetApiDefaultsCommand();
+ GetApiDefaultsAnswer apiDefaultsAnswer = (GetApiDefaultsAnswer) _agentMgr.easySend(nuageVspHost.getId(), apiDefaultsCmd);
String apiVersion = MoreObjects.firstNonNull(command.getApiVersion(), resourceConfiguration.apiVersion());
SupportedApiVersionCommand supportedApiVersionCmd = new SupportedApiVersionCommand(apiVersion);
Answer supportedApiVersionAnswer = _agentMgr.easySend(nuageVspHost.getId(), supportedApiVersionCmd);
if (!supportedApiVersionAnswer.getResult()) {
- throw new CloudRuntimeException("Incorrect API version: Nuage plugin only supports " + getClientDefaultsAnswer.getCurrentApiVersion());
+ throw new CloudRuntimeException("Incorrect API version: Nuage plugin only supports " + apiDefaultsAnswer.getApiDefaults().getVersion());
}
String apiRelativePath = "/nuage/api/" + apiVersion;
@@ -474,25 +481,31 @@ public class NuageVspManagerImpl extends ManagerBase implements NuageVspManager,
}
}
+ NuageVspDeviceVO matchingNuageVspDevice = findMatchingNuageVspDevice(nuageVspDevice);
ConfigurationVO cmsIdConfig = _configDao.findByName("nuagevsp.cms.id");
HostVO host = findNuageVspHost(nuageVspDevice.getHostId());
- if (!auditDomainsOnVsp(host, false, true)) {
- return false;
- }
-
String nuageVspCmsId = findNuageVspCmsIdForDevice(nuageVspDevice.getId(), cmsIdConfig);
- SyncNuageVspCmsIdCommand syncCmd = new SyncNuageVspCmsIdCommand(SyncType.UNREGISTER, nuageVspCmsId);
- SyncNuageVspCmsIdAnswer answer = (SyncNuageVspCmsIdAnswer) _agentMgr.easySend(nuageVspDevice.getHostId(), syncCmd);
- if (answer != null && answer.getSuccess()) {
- String currentValue = cmsIdConfig.getValue();
- String newValue = currentValue.replace(nuageVspDevice.getId() + ":" + answer.getNuageVspCmsId(), "");
- if (!Strings.isNullOrEmpty(newValue) && newValue.startsWith(";")) {
- newValue = newValue.substring(1);
+ if (matchingNuageVspDevice == null) {
+ if (!auditDomainsOnVsp(host, false, true)) {
+ return false;
}
- _configDao.update("nuagevsp.cms.id", newValue);
- } else {
- return false;
+
+ SyncNuageVspCmsIdCommand syncCmd = new SyncNuageVspCmsIdCommand(SyncType.UNREGISTER, nuageVspCmsId);
+ SyncNuageVspCmsIdAnswer answer = (SyncNuageVspCmsIdAnswer) _agentMgr.easySend(nuageVspDevice.getHostId(), syncCmd);
+ if (answer == null || !answer.getSuccess()) {
+ return false;
+ }
+ }
+
+ String newValue = cmsIdConfig.getValue().replace(nuageVspDevice.getId() + ":" + nuageVspCmsId, "");
+ if (newValue.startsWith(";")) {
+ newValue = newValue.substring(1);
}
+ if (newValue.endsWith(";")) {
+ newValue = newValue.substring(0, newValue.length() - 1);
+ }
+ newValue = newValue.replaceAll(";+", ";");
+ _configDao.update("nuagevsp.cms.id", newValue);
HostVO nuageHost = _hostDao.findById(nuageVspDevice.getHostId());
Long hostId = nuageHost.getId();
@@ -505,6 +518,22 @@ public class NuageVspManagerImpl extends ManagerBase implements NuageVspManager,
return true;
}
+ private NuageVspDeviceVO findMatchingNuageVspDevice(NuageVspDeviceVO nuageVspDevice) {
+ List<NuageVspDeviceVO> otherNuageVspDevices = _nuageVspDao.listAll();
+ for (NuageVspDeviceVO otherNuageVspDevice : otherNuageVspDevices) {
+ if (otherNuageVspDevice.getId() == nuageVspDevice.getId()) continue;
+
+ HostVO nuageVspDeviceHost = findNuageVspHost(nuageVspDevice.getHostId());
+ HostVO otherNuageVspDeviceHost = findNuageVspHost(otherNuageVspDevice.getHostId());
+ String nuageVspDeviceHostName = nuageVspDeviceHost.getDetail("hostname");
+ String otherNuageVspDeviceHostName = otherNuageVspDeviceHost.getDetail("hostname");
+ if (otherNuageVspDeviceHostName != null && otherNuageVspDeviceHostName.equals(nuageVspDeviceHostName)) {
+ return otherNuageVspDevice;
+ }
+ }
+ return null;
+ }
+
@Override
public List<NuageVspDeviceVO> listNuageVspDevices(ListNuageVspDevicesCmd cmd) {
Long physicalNetworkId = cmd.getPhysicalNetworkId();
@@ -551,6 +580,8 @@ public class NuageVspManagerImpl extends ManagerBase implements NuageVspManager,
}
private void auditHost(HostVO host) {
+ if (host == null) return;
+
_hostDao.loadDetails(host);
boolean validateDomains = true;
@@ -585,7 +616,8 @@ public class NuageVspManagerImpl extends ManagerBase implements NuageVspManager,
_hostDao.loadDetails(host);
List<DomainVO> allDomains = _domainDao.listAll();
for (DomainVO domain : allDomains) {
- SyncDomainCommand cmd = new SyncDomainCommand(domain.getUuid(), domain.getName(), domain.getPath(), add, remove);
+ VspDomain vspDomain = _nuageVspEntityBuilder.buildVspDomain(domain);
+ SyncDomainCommand cmd = new SyncDomainCommand(vspDomain, add, remove);
SyncDomainAnswer answer = (SyncDomainAnswer) _agentMgr.easySend(host.getId(), cmd);
return answer.getSuccess();
}
@@ -683,7 +715,8 @@ public class NuageVspManagerImpl extends ManagerBase implements NuageVspManager,
List<NuageVspDeviceVO> nuageVspDevices = _nuageVspDao.listAll();
for (NuageVspDeviceVO nuageVspDevice : nuageVspDevices) {
HostVO host = findNuageVspHost(nuageVspDevice.getHostId());
- SyncDomainCommand cmd = new SyncDomainCommand(domain.getUuid(), domain.getName(), domain.getPath(), true, false);
+ VspDomain vspDomain = _nuageVspEntityBuilder.buildVspDomain(domain);
+ SyncDomainCommand cmd = new SyncDomainCommand(vspDomain, true, false);
_agentMgr.easySend(host.getId(), cmd);
}
} finally {
@@ -700,7 +733,8 @@ public class NuageVspManagerImpl extends ManagerBase implements NuageVspManager,
List<NuageVspDeviceVO> nuageVspDevices = _nuageVspDao.listAll();
for (NuageVspDeviceVO nuageVspDevice : nuageVspDevices) {
HostVO host = findNuageVspHost(nuageVspDevice.getHostId());
- SyncDomainCommand cmd = new SyncDomainCommand(domain.getUuid(), domain.getName(), domain.getPath(), false, true);
+ VspDomain vspDomain = _nuageVspEntityBuilder.buildVspDomain(domain);
+ SyncDomainCommand cmd = new SyncDomainCommand(vspDomain, false, true);
_agentMgr.easySend(host.getId(), cmd);
}
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b0c27e48/plugins/network-elements/nuage-vsp/src/com/cloud/network/resource/NuageVspResource.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/resource/NuageVspResource.java b/plugins/network-elements/nuage-vsp/src/com/cloud/network/resource/NuageVspResource.java
index 8e14237..677fa9f 100644
--- a/plugins/network-elements/nuage-vsp/src/com/cloud/network/resource/NuageVspResource.java
+++ b/plugins/network-elements/nuage-vsp/src/com/cloud/network/resource/NuageVspResource.java
@@ -30,8 +30,6 @@ import com.cloud.agent.api.ReadyAnswer;
import com.cloud.agent.api.ReadyCommand;
import com.cloud.agent.api.StartupCommand;
import com.cloud.agent.api.StartupVspCommand;
-import com.cloud.agent.api.VspResourceAnswer;
-import com.cloud.agent.api.VspResourceCommand;
import com.cloud.agent.api.element.ApplyAclRuleVspCommand;
import com.cloud.agent.api.element.ApplyStaticNatVspCommand;
import com.cloud.agent.api.element.ImplementVspCommand;
@@ -40,14 +38,13 @@ import com.cloud.agent.api.guru.DeallocateVmVspCommand;
import com.cloud.agent.api.guru.ImplementNetworkVspCommand;
import com.cloud.agent.api.guru.ReserveVmInterfaceVspCommand;
import com.cloud.agent.api.guru.TrashNetworkVspCommand;
-import com.cloud.agent.api.manager.GetClientDefaultsAnswer;
-import com.cloud.agent.api.manager.GetClientDefaultsCommand;
+import com.cloud.agent.api.manager.GetApiDefaultsAnswer;
+import com.cloud.agent.api.manager.GetApiDefaultsCommand;
import com.cloud.agent.api.manager.SupportedApiVersionCommand;
import com.cloud.agent.api.sync.SyncDomainAnswer;
import com.cloud.agent.api.sync.SyncDomainCommand;
import com.cloud.agent.api.sync.SyncNuageVspCmsIdAnswer;
import com.cloud.agent.api.sync.SyncNuageVspCmsIdCommand;
-import com.cloud.agent.api.sync.SyncVspCommand;
import com.cloud.host.Host;
import com.cloud.resource.ServerResource;
import com.cloud.util.NuageVspUtil;
@@ -56,12 +53,11 @@ import com.cloud.utils.component.ManagerBase;
import com.cloud.utils.exception.CloudRuntimeException;
import com.google.common.base.Strings;
import net.nuage.vsp.acs.NuageVspPluginClientLoader;
-import net.nuage.vsp.acs.client.NuageVspApiClient;
-import net.nuage.vsp.acs.client.NuageVspElementClient;
-import net.nuage.vsp.acs.client.NuageVspGuruClient;
-import net.nuage.vsp.acs.client.NuageVspManagerClient;
-import net.nuage.vsp.acs.client.NuageVspSyncClient;
-import org.apache.commons.lang3.tuple.Pair;
+import net.nuage.vsp.acs.client.api.NuageVspApiClient;
+import net.nuage.vsp.acs.client.api.NuageVspElementClient;
+import net.nuage.vsp.acs.client.api.NuageVspGuruClient;
+import net.nuage.vsp.acs.client.api.NuageVspManagerClient;
+import net.nuage.vsp.acs.client.common.model.Pair;
import org.apache.log4j.Logger;
import javax.naming.ConfigurationException;
@@ -91,7 +87,8 @@ public class NuageVspResource extends ManagerBase implements ServerResource {
private String _name;
private String _guid;
private String _zoneId;
- private String[] _cmsUserInfo;
+ private String _cmsUserLogin;
+ private String _cmsUserPassword;
private String _hostName;
private String _relativePath;
private int _numRetries;
@@ -102,7 +99,6 @@ public class NuageVspResource extends ManagerBase implements ServerResource {
protected NuageVspApiClient _nuageVspApiClient;
protected NuageVspGuruClient _nuageVspGuruClient;
protected NuageVspElementClient _nuageVspElementClient;
- protected NuageVspSyncClient _nuageVspSyncClient;
protected NuageVspManagerClient _nuageVspManagerClient;
protected boolean _isNuageVspClientLoaded;
@@ -190,7 +186,8 @@ public class NuageVspResource extends ManagerBase implements ServerResource {
_relativePath = new StringBuffer().append("https://").append(_hostName).append(":").append(port).append(apiRelativePath).toString();
String cmsUserPass = NuageVspUtil.decodePassword(cmsUserPassBase64);
- _cmsUserInfo = new String[] {CMS_USER_ENTEPRISE_NAME, cmsUser, cmsUserPass};
+ _cmsUserLogin = cmsUser;
+ _cmsUserPassword = cmsUserPass;
_nuageVspCmsId = (String)params.get(NUAGE_VSP_CMS_ID);
@@ -199,8 +196,8 @@ public class NuageVspResource extends ManagerBase implements ServerResource {
try {
login();
} catch (ExecutionException | ConfigurationException e) {
- s_logger.error("Failed to login to Nuage VSD on " + name + " as user " + cmsUser, e);
- throw new CloudRuntimeException("Failed to login to Nuage VSD on " + name + " as user " + cmsUser, e);
+ s_logger.error(e.getMessage(), e);
+ throw new CloudRuntimeException(e.getMessage(), e);
}
return true;
@@ -211,23 +208,14 @@ public class NuageVspResource extends ManagerBase implements ServerResource {
_nuageVspApiClient.login();
}
- protected <A extends NuageVspApiClient, B extends NuageVspElementClient, C extends NuageVspSyncClient, D extends NuageVspGuruClient> void loadNuageClient() {
-
- try {
- NuageVspPluginClientLoader clientLoader = NuageVspPluginClientLoader.getClientLoader(_relativePath, _cmsUserInfo, _numRetries, _retryInterval, _nuageVspCmsId);
- _nuageVspApiClient = clientLoader.getNuageVspApiClient();
- _nuageVspSyncClient = clientLoader.getNuageVspSyncClient();
- _nuageVspGuruClient = clientLoader.getNuageVspGuruClient();
- _nuageVspElementClient = clientLoader.getNuageVspElementClient();
- _nuageVspManagerClient = clientLoader.getNuageVspManagerClient();
- _isNuageVspClientLoaded = true;
- } catch (ConfigurationException e) {
- _isNuageVspClientLoaded = false;
- String errorMessage = "Nuage Vsp Plugin client is not yet installed. Please install NuageVsp plugin client to use NuageVsp plugin in Cloudstack. ";
- s_logger.error(errorMessage, e);
- throw new CloudRuntimeException(errorMessage, e);
- }
-
+ protected <A extends NuageVspApiClient, B extends NuageVspElementClient, C extends NuageVspGuruClient> void loadNuageClient() {
+ NuageVspPluginClientLoader clientLoader = NuageVspPluginClientLoader.getClientLoader(_relativePath, CMS_USER_ENTEPRISE_NAME,
+ _cmsUserLogin, _cmsUserPassword, _numRetries, _retryInterval, _nuageVspCmsId);
+ _nuageVspApiClient = clientLoader.getNuageVspApiClient();
+ _nuageVspGuruClient = clientLoader.getNuageVspGuruClient();
+ _nuageVspElementClient = clientLoader.getNuageVspElementClient();
+ _nuageVspManagerClient = clientLoader.getNuageVspManagerClient();
+ _isNuageVspClientLoaded = true;
}
@Override
@@ -265,12 +253,12 @@ public class NuageVspResource extends ManagerBase implements ServerResource {
@Override
public PingCommand getCurrentStatus(long id) {
- if (_relativePath == null || _relativePath.isEmpty()) {
+ if (Strings.isNullOrEmpty(_relativePath)) {
s_logger.error("Refusing to ping Nuage VSD because the resource configuration is missing the relative path information");
_shouldAudit = true;
return null;
}
- if (_cmsUserInfo == null || _cmsUserInfo.length < 2) {
+ if (Strings.isNullOrEmpty(_cmsUserLogin) || Strings.isNullOrEmpty(_cmsUserPassword)) {
s_logger.error("Refusing to ping Nuage VSD because the resource configuration is missing the CMS user information");
_shouldAudit = true;
return null;
@@ -278,7 +266,7 @@ public class NuageVspResource extends ManagerBase implements ServerResource {
try {
login();
} catch (ExecutionException | ConfigurationException e) {
- s_logger.error("Failed to ping to Nuage VSD on " + _name + " as user " + _cmsUserInfo[1], e);
+ s_logger.error("Failed to ping to Nuage VSD on " + _name + " as user " + _cmsUserLogin, e);
_shouldAudit = true;
return null;
}
@@ -293,8 +281,6 @@ public class NuageVspResource extends ManagerBase implements ServerResource {
return executeRequest((ReadyCommand)cmd);
} else if (cmd instanceof MaintainCommand) {
return executeRequest((MaintainCommand)cmd);
- } else if (cmd instanceof VspResourceCommand) {
- return executeRequest((VspResourceCommand)cmd);
}
//Guru commands
else if (cmd instanceof ImplementNetworkVspCommand) {
@@ -317,16 +303,14 @@ public class NuageVspResource extends ManagerBase implements ServerResource {
return executeRequest((ShutDownVpcVspCommand)cmd);
}
//Sync Commands
- else if (cmd instanceof SyncVspCommand) {
- return executeRequest((SyncVspCommand)cmd);
- } else if (cmd instanceof SyncNuageVspCmsIdCommand) {
+ else if (cmd instanceof SyncNuageVspCmsIdCommand) {
return executeRequest((SyncNuageVspCmsIdCommand)cmd);
} else if (cmd instanceof SyncDomainCommand) {
return executeRequest((SyncDomainCommand)cmd);
}
//Other commands
- else if (cmd instanceof GetClientDefaultsCommand) {
- return executeRequest((GetClientDefaultsCommand)cmd);
+ else if (cmd instanceof GetApiDefaultsCommand) {
+ return executeRequest((GetApiDefaultsCommand)cmd);
} else if (cmd instanceof SupportedApiVersionCommand) {
return executeRequest((SupportedApiVersionCommand)cmd);
}
@@ -357,29 +341,11 @@ public class NuageVspResource extends ManagerBase implements ServerResource {
return new MaintainAnswer(cmd);
}
- private Answer executeRequest(VspResourceCommand cmd) {
- try {
- isNuageVspApiLoaded();
- if (cmd.getRequestType().equalsIgnoreCase("GETALL") || cmd.getRequestType().equalsIgnoreCase("GET") || cmd.getRequestType().equalsIgnoreCase("GETRELATED")) {
- String resourceInfo = _nuageVspApiClient.executeRestApi(cmd.getRequestType(), cmd.getResource(), cmd.getResourceId(), cmd.getChildResource(),
- cmd.getEntityDetails(), cmd.getResourceFilter(), cmd.getProxyUserUuid(), cmd.getProxyUserDomainuuid());
- return new VspResourceAnswer(cmd, resourceInfo, "Executed Issue Resource command");
- }
- return new VspResourceAnswer(cmd, false, cmd.getRequestType() + " is not yet supported");
- } catch (ExecutionException | ConfigurationException e) {
- s_logger.error("Failure during " + cmd + " on Nuage VSD " + _hostName, e);
- return new VspResourceAnswer(cmd, e);
- }
- }
-
private Answer executeRequest(ImplementNetworkVspCommand cmd) {
try {
isNuageVspGuruLoaded();
- _nuageVspGuruClient.implement(cmd.getNetworkDomainName(), cmd.getNetworkDomainPath(), cmd.getNetworkDomainUuid(), cmd.getNetworkAccountName(),
- cmd.getNetworkAccountUuid(), cmd.getNetworkName(), cmd.getNetworkCidr(), cmd.getNetworkGateway(), cmd.getNetworkAclId(), cmd.getDnsServers(),
- cmd.getGatewaySystemIds(), cmd.isL3Network(), cmd.isVpc(), cmd.isSharedNetwork(), cmd.getNetworkUuid(), cmd.getVpcName(), cmd.getVpcUuid(),
- cmd.isDefaultEgressPolicy(), cmd.getIpAddressRange(), cmd.getDomainTemplateName());
- return new Answer(cmd, true, "Created network mapping to " + cmd.getNetworkName() + " on Nuage VSD " + _hostName);
+ _nuageVspGuruClient.implement(cmd.getNetwork(), cmd.getDnsServers());
+ return new Answer(cmd, true, "Created network mapping to " + cmd.getNetwork().getName() + " on Nuage VSD " + _hostName);
} catch (ExecutionException | ConfigurationException e) {
s_logger.error("Failure during " + cmd + " on Nuage VSD " + _hostName, e);
return new Answer(cmd, e);
@@ -389,11 +355,8 @@ public class NuageVspResource extends ManagerBase implements ServerResource {
private Answer executeRequest(ReserveVmInterfaceVspCommand cmd) {
try {
isNuageVspGuruLoaded();
- _nuageVspGuruClient.reserve(cmd.getNicUuid(), cmd.getNicMacAddress(), cmd.getNetworkUuid(), cmd.isL3Network(),
- cmd.isSharedNetwork(), cmd.getVpcUuid(), cmd.getNetworkDomainUuid(), cmd.getNetworksAccountUuid(), cmd.isDomainRouter(), cmd.getDomainRouterIp(),
- cmd.getVmInstanceName(), cmd.getVmUuid(), cmd.useStaticIp(), cmd.getStaticIp(), cmd.getStaticNatIpUuid(), cmd.getStaticNatIpAddress(), cmd.isStaticNatIpAllocated(),
- cmd.isOneToOneNat(), cmd.getStaticNatVlanUuid(), cmd.getStaticNatVlanGateway(), cmd.getStaticNatVlanNetmask());
- return new Answer(cmd, true, "Created NIC that maps to nicUuid" + cmd.getNicUuid() + " on Nuage VSD " + _hostName);
+ _nuageVspGuruClient.reserve(cmd.getNetwork(), cmd.getVm(), cmd.getNic(), cmd.getStaticNat());
+ return new Answer(cmd, true, "Created NIC that maps to nicUuid" + cmd.getNic().getUuid() + " on Nuage VSD " + _hostName);
} catch (ExecutionException | ConfigurationException e) {
s_logger.error("Failure during " + cmd + " on Nuage VSD " + _hostName, e);
return new Answer(cmd, e);
@@ -403,9 +366,9 @@ public class NuageVspResource extends ManagerBase implements ServerResource {
private Answer executeRequest(DeallocateVmVspCommand cmd) {
try {
isNuageVspGuruLoaded();
- _nuageVspGuruClient.deallocate(cmd.getNetworkUuid(), cmd.getNicFromDdUuid(), cmd.getNicMacAddress(), cmd.getNicIp4Address(), cmd.isL3Network(), cmd.isSharedNetwork(),
- cmd.getVpcUuid(), cmd.getNetworksDomainUuid(), cmd.getVmInstanceName(), cmd.getVmUuid(), cmd.isExpungingState());
- return new Answer(cmd, true, "Deallocated VM " + cmd.getVmInstanceName() + " on Nuage VSD " + _hostName);
+
+ _nuageVspGuruClient.deallocate(cmd.getNetwork(), cmd.getVm(), cmd.getNic());
+ return new Answer(cmd, true, "Deallocated VM " + cmd.getVm().getName() + " on Nuage VSD " + _hostName);
} catch (ExecutionException | ConfigurationException e) {
s_logger.error("Failure during " + cmd + " on Nuage VSD " + _hostName, e);
return new Answer(cmd, e);
@@ -415,8 +378,8 @@ public class NuageVspResource extends ManagerBase implements ServerResource {
private Answer executeRequest(TrashNetworkVspCommand cmd) {
try {
isNuageVspGuruLoaded();
- _nuageVspGuruClient.trash(cmd.getDomainUuid(), cmd.getNetworkUuid(), cmd.isL3Network(), cmd.isSharedNetwork(), cmd.getVpcUuid(), cmd.getDomainTemplateName());
- return new Answer(cmd, true, "Deleted network mapping to " + cmd.getNetworkUuid() + " on Nuage VSD " + _hostName);
+ _nuageVspGuruClient.trash(cmd.getNetwork());
+ return new Answer(cmd, true, "Deleted network mapping to " + cmd.getNetwork().getUuid() + " on Nuage VSD " + _hostName);
} catch (ExecutionException | ConfigurationException e) {
s_logger.error("Failure during " + cmd + " on Nuage VSD " + _hostName, e);
return new Answer(cmd, e);
@@ -426,9 +389,8 @@ public class NuageVspResource extends ManagerBase implements ServerResource {
private Answer executeRequest(ApplyStaticNatVspCommand cmd) {
try {
isNuageVspElementLoaded();
- _nuageVspElementClient.applyStaticNats(cmd.getNetworkDomainUuid(), cmd.getNetworkUuid(), cmd.getVpcOrSubnetUuid(), cmd.isL3Network(),
- cmd.isVpc(), cmd.getStaticNatDetails());
- return new Answer(cmd, true, "Applied Static NAT to network mapping " + cmd.getVpcOrSubnetUuid() + " on Nuage VSD " + _hostName);
+ _nuageVspElementClient.applyStaticNats(cmd.getNetwork(), cmd.getStaticNatDetails());
+ return new Answer(cmd, true, "Applied Static NAT to network mapping " + cmd.getNetwork().getUuid() + " on Nuage VSD " + _hostName);
} catch (ExecutionException | ConfigurationException e) {
s_logger.error("Failure during " + cmd + " on Nuage VSD " + _hostName, e);
return new Answer(cmd, e);
@@ -438,10 +400,9 @@ public class NuageVspResource extends ManagerBase implements ServerResource {
private Answer executeRequest(ImplementVspCommand cmd) {
try {
isNuageVspElementLoaded();
- boolean success = _nuageVspElementClient.implement(cmd.getNetworkId(), cmd.getNetworkDomainUuid(), cmd.getNetworkUuid(), cmd.getNetworkName(), cmd.getVpcOrSubnetUuid(), cmd.isL2Network(),
- cmd.isL3Network(), cmd.isVpc(), cmd.isShared(), cmd.getDomainTemplateName(), cmd.isFirewallServiceSupported(), cmd.getDnsServers(), cmd.getIngressFirewallRules(),
- cmd.getEgressFirewallRules(), cmd.getAcsFipUuid(), cmd.isEgressDefaultPolicy());
- return new Answer(cmd, success, "Implemented network " + cmd.getNetworkUuid() + " on Nuage VSD " + _hostName);
+ boolean success = _nuageVspElementClient.implement(cmd.getNetwork(), cmd.getDnsServers(), cmd.getIngressFirewallRules(),
+ cmd.getEgressFirewallRules(), cmd.getFloatingIpUuids());
+ return new Answer(cmd, success, "Implemented network " + cmd.getNetwork().getUuid() + " on Nuage VSD " + _hostName);
} catch (ExecutionException | ConfigurationException e) {
s_logger.error("Failure during " + cmd + " on Nuage VSD " + _hostName, e);
return new Answer(cmd, e);
@@ -451,9 +412,8 @@ public class NuageVspResource extends ManagerBase implements ServerResource {
private Answer executeRequest(ApplyAclRuleVspCommand cmd) {
try {
isNuageVspElementLoaded();
- _nuageVspElementClient.applyAclRules(cmd.isNetworkAcl(), cmd.getNetworkUuid(), cmd.getNetworkDomainUuid(), cmd.getVpcOrSubnetUuid(), cmd.getNetworkName(),
- cmd.isL2Network(), cmd.getAclRules(), cmd.getNetworkId(), cmd.isEgressDefaultPolicy(), cmd.getAcsIngressAcl(), cmd.isNetworkReset(), cmd.getDomainTemplateName());
- return new Answer(cmd, true, "Applied ACL Rule to network mapping " + cmd.getVpcOrSubnetUuid() + " on Nuage VSD " + _hostName);
+ _nuageVspElementClient.applyAclRules(cmd.getAclType(), cmd.getNetwork(), cmd.getAclRules(), cmd.isNetworkReset());
+ return new Answer(cmd, true, "Applied ACL Rule to network mapping " + cmd.getNetwork().getUuid() + " on Nuage VSD " + _hostName);
} catch (ExecutionException | ConfigurationException e) {
s_logger.error("Failure during " + cmd + " on Nuage VSD " + _hostName, e);
return new Answer(cmd, e);
@@ -471,17 +431,6 @@ public class NuageVspResource extends ManagerBase implements ServerResource {
}
}
- private Answer executeRequest(SyncVspCommand cmd) {
- try {
- isNuageVspSyncLoaded();
- _nuageVspSyncClient.syncWithNuageVsp(cmd.getNuageVspEntity());
- return new Answer(cmd, true, "Synced " + cmd.getNuageVspEntity() + " on Nuage VSD " + _hostName);
- } catch (ExecutionException | ConfigurationException e) {
- s_logger.error("Failure during " + cmd + " on Nuage VSD " + _hostName, e);
- return new Answer(cmd, e);
- }
- }
-
private Answer executeRequest(SyncNuageVspCmsIdCommand cmd) {
try {
isNuageVspManagerLoaded();
@@ -504,7 +453,7 @@ public class NuageVspResource extends ManagerBase implements ServerResource {
private Answer executeRequest(SyncDomainCommand cmd) {
try {
isNuageVspManagerLoaded();
- boolean success = _nuageVspManagerClient.syncDomainWithNuageVsp(cmd.getDomainUuid(), cmd.getDomainName(), cmd.getDomainPath(), cmd.isToAdd(), cmd.isToRemove());
+ boolean success = _nuageVspManagerClient.syncDomainWithNuageVsp(cmd.getDomain(), cmd.isToAdd(), cmd.isToRemove());
return new SyncDomainAnswer(success);
} catch (ExecutionException | ConfigurationException e) {
s_logger.error("Failure during " + cmd + " on Nuage VSD " + _hostName, e);
@@ -512,14 +461,13 @@ public class NuageVspResource extends ManagerBase implements ServerResource {
}
}
- private Answer executeRequest(GetClientDefaultsCommand cmd) {
+ private Answer executeRequest(GetApiDefaultsCommand cmd) {
try {
isNuageVspManagerLoaded();
- Map<String, Object> clientDefaults = _nuageVspManagerClient.getClientDefaults();
- return new GetClientDefaultsAnswer(cmd, clientDefaults);
+ return new GetApiDefaultsAnswer(cmd, _nuageVspManagerClient.getApiDefaults());
} catch (ExecutionException | ConfigurationException e) {
s_logger.error("Failure during " + cmd + " on Nuage VSD " + _hostName, e);
- return new GetClientDefaultsAnswer(cmd, e);
+ return new GetApiDefaultsAnswer(cmd, e);
}
}
@@ -552,12 +500,6 @@ public class NuageVspResource extends ManagerBase implements ServerResource {
}
}
- protected void isNuageVspSyncLoaded() throws ConfigurationException {
- if (!_isNuageVspClientLoaded || _nuageVspSyncClient == null) {
- throw new ConfigurationException(NUAGE_VSP_PLUGIN_ERROR_MESSAGE);
- }
- }
-
protected void isNuageVspManagerLoaded() throws ConfigurationException {
if (!_isNuageVspClientLoaded || _nuageVspManagerClient == null) {
throw new ConfigurationException(NUAGE_VSP_PLUGIN_ERROR_MESSAGE);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b0c27e48/plugins/network-elements/nuage-vsp/src/com/cloud/network/sync/NuageVspSync.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/sync/NuageVspSync.java b/plugins/network-elements/nuage-vsp/src/com/cloud/network/sync/NuageVspSync.java
deleted file mode 100644
index 4e1cc43..0000000
--- a/plugins/network-elements/nuage-vsp/src/com/cloud/network/sync/NuageVspSync.java
+++ /dev/null
@@ -1,26 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-
-package com.cloud.network.sync;
-
-
-public interface NuageVspSync {
-
- public void syncWithNuageVsp(String nuageVspEntity);
-}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b0c27e48/plugins/network-elements/nuage-vsp/src/com/cloud/network/sync/NuageVspSyncImpl.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/sync/NuageVspSyncImpl.java b/plugins/network-elements/nuage-vsp/src/com/cloud/network/sync/NuageVspSyncImpl.java
deleted file mode 100644
index 9180c17..0000000
--- a/plugins/network-elements/nuage-vsp/src/com/cloud/network/sync/NuageVspSyncImpl.java
+++ /dev/null
@@ -1,65 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-
-package com.cloud.network.sync;
-
-import com.cloud.agent.AgentManager;
-import com.cloud.agent.api.Answer;
-import com.cloud.agent.api.sync.SyncVspCommand;
-import com.cloud.host.HostVO;
-import com.cloud.host.dao.HostDao;
-import com.cloud.network.NuageVspDeviceVO;
-import com.cloud.network.dao.NuageVspDao;
-import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
-
-import javax.inject.Inject;
-import java.util.List;
-
-@Component
-public class NuageVspSyncImpl implements NuageVspSync {
-
- private static final Logger s_logger = Logger.getLogger(NuageVspSyncImpl.class);
-
- @Inject
- NuageVspDao _nuageVspDao;
- @Inject
- HostDao _hostDao;
- @Inject
- AgentManager _agentMgr;
-
- public void syncWithNuageVsp(String nuageVspEntity) {
- //Get the NuageVspDevice and get the host information.
- //This information is used to query VSP and synch the corresponding
- //entities
- List<NuageVspDeviceVO> nuageVspDevices = _nuageVspDao.listAll();
- for (NuageVspDeviceVO nuageVspDevice : nuageVspDevices) {
- HostVO nuageVspHost = _hostDao.findById(nuageVspDevice.getHostId());
- _hostDao.loadDetails(nuageVspHost);
- SyncVspCommand cmd = new SyncVspCommand(nuageVspEntity);
- Answer answer = _agentMgr.easySend(nuageVspHost.getId(), cmd);
- if (answer == null || !answer.getResult()) {
- s_logger.error("SyncNuageVspCommand for Nuage VSP Host " + nuageVspHost.getUuid() + " failed");
- if ((null != answer) && (null != answer.getDetails())) {
- s_logger.error(answer.getDetails());
- }
- }
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b0c27e48/plugins/network-elements/nuage-vsp/src/com/cloud/util/NuageVspEntityBuilder.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/util/NuageVspEntityBuilder.java b/plugins/network-elements/nuage-vsp/src/com/cloud/util/NuageVspEntityBuilder.java
new file mode 100644
index 0000000..135a552
--- /dev/null
+++ b/plugins/network-elements/nuage-vsp/src/com/cloud/util/NuageVspEntityBuilder.java
@@ -0,0 +1,368 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+
+package com.cloud.util;
+
+import com.cloud.dc.VlanVO;
+import com.cloud.dc.dao.VlanDao;
+import com.cloud.domain.Domain;
+import com.cloud.domain.DomainVO;
+import com.cloud.domain.dao.DomainDao;
+import com.cloud.exception.InsufficientVirtualNetworkCapacityException;
+import com.cloud.network.Network;
+import com.cloud.network.NetworkModel;
+import com.cloud.network.dao.IPAddressDao;
+import com.cloud.network.dao.IPAddressVO;
+import com.cloud.network.dao.NetworkDetailsDao;
+import com.cloud.network.rules.FirewallRule;
+import com.cloud.network.vpc.NetworkACLItem;
+import com.cloud.network.vpc.VpcVO;
+import com.cloud.network.vpc.dao.VpcDao;
+import com.cloud.offerings.NetworkOfferingVO;
+import com.cloud.offerings.dao.NetworkOfferingDao;
+import com.cloud.offerings.dao.NetworkOfferingServiceMapDao;
+import com.cloud.user.AccountVO;
+import com.cloud.user.dao.AccountDao;
+import com.cloud.utils.exception.CloudRuntimeException;
+import com.cloud.utils.net.NetUtils;
+import com.cloud.vm.NicProfile;
+import com.cloud.vm.NicVO;
+import com.cloud.vm.VirtualMachine;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import net.nuage.vsp.acs.client.api.model.VspAclRule;
+import net.nuage.vsp.acs.client.api.model.VspDomain;
+import net.nuage.vsp.acs.client.api.model.VspNetwork;
+import net.nuage.vsp.acs.client.api.model.VspNic;
+import net.nuage.vsp.acs.client.api.model.VspStaticNat;
+import net.nuage.vsp.acs.client.api.model.VspVm;
+import net.nuage.vsp.acs.client.common.model.Pair;
+import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
+
+import javax.inject.Inject;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
+
+public class NuageVspEntityBuilder {
+ private static final Logger s_logger = Logger.getLogger(NuageVspEntityBuilder.class);
+
+ @Inject
+ VpcDao _vpcDao;
+ @Inject
+ DomainDao _domainDao;
+ @Inject
+ AccountDao _accountDao;
+ @Inject
+ NetworkOfferingDao _networkOfferingDao;
+ @Inject
+ NetworkOfferingServiceMapDao _networkOfferingServiceMapDao;
+ @Inject
+ NetworkModel _networkModel;
+ @Inject
+ VlanDao _vlanDao;
+ @Inject
+ ConfigurationDao _configurationDao;
+ @Inject
+ IPAddressDao _ipAddressDao;
+ @Inject
+ NetworkDetailsDao _networkDetailsDao;
+
+ public VspDomain buildVspDomain(Domain domain) {
+ return new VspDomain.Builder()
+ .uuid(domain.getUuid())
+ .name(domain.getName())
+ .path(domain.getPath())
+ .build();
+ }
+
+ public VspNetwork buildVspNetwork(Network network, boolean fillAddressRange) {
+ VspNetwork.Builder vspNetworkBuilder = new VspNetwork.Builder()
+ .id(network.getId())
+ .uuid(network.getUuid())
+ .name(network.getName())
+ .cidr(network.getCidr())
+ .gateway(network.getGateway());
+
+ DomainVO domain = _domainDao.findById(network.getDomainId());
+ VspDomain vspDomain = buildVspDomain(domain);
+ vspNetworkBuilder.domain(vspDomain);
+
+ AccountVO account = _accountDao.findById(network.getAccountId());
+ vspNetworkBuilder.accountUuid(account.getUuid()).accountName(account.getAccountName());
+
+ NetworkOfferingVO networkOffering = _networkOfferingDao.findById(network.getNetworkOfferingId());
+ vspNetworkBuilder.egressDefaultPolicy(networkOffering.getEgressDefaultPolicy());
+
+ if (network.getVpcId() != null) {
+ VpcVO vpc = _vpcDao.findById(network.getVpcId());
+ vspNetworkBuilder.vpcUuid(vpc.getUuid())
+ .vpcName(vpc.getName())
+ .networkType(VspNetwork.NetworkType.Vpc);
+ } else {
+ if (networkOffering.getGuestType() == Network.GuestType.Shared) {
+ vspNetworkBuilder.networkType(VspNetwork.NetworkType.Shared);
+ } else if (_networkOfferingServiceMapDao.areServicesSupportedByNetworkOffering(network.getNetworkOfferingId(), Network.Service.SourceNat)
+ || _networkOfferingServiceMapDao.areServicesSupportedByNetworkOffering(network.getNetworkOfferingId(), Network.Service.StaticNat)) {
+ vspNetworkBuilder.networkType(VspNetwork.NetworkType.L3);
+ } else {
+ vspNetworkBuilder.networkType(VspNetwork.NetworkType.L2);
+ }
+ }
+
+ boolean firewallServiceSupported = _networkModel.areServicesSupportedByNetworkOffering(network.getNetworkOfferingId(), Network.Service.Firewall);
+ vspNetworkBuilder.firewallServiceSupported(firewallServiceSupported);
+
+ String preConfiguredDomainTemplateName = NuageVspUtil.getPreConfiguredDomainTemplateName(_configurationDao, _networkDetailsDao, network, networkOffering);
+ vspNetworkBuilder.domainTemplateName(preConfiguredDomainTemplateName);
+
+ if (fillAddressRange) {
+ try {
+ List<Pair<String, String>> ipAddressRanges = getIpAddressRanges(networkOffering, network);
+ vspNetworkBuilder.ipAddressRanges(ipAddressRanges);
+
+ String virtualRouterIp = getVirtualRouterIP(network, ipAddressRanges);
+ vspNetworkBuilder.virtualRouterIp(virtualRouterIp);
+ } catch (InsufficientVirtualNetworkCapacityException ex) {
+ s_logger.error("There is an insufficient network capacity in network " + network.getId(), ex);
+ throw new CloudRuntimeException("There is an insufficient network capacity in network " + network.getId(), ex);
+ }
+ }
+
+ return vspNetworkBuilder.build();
+ }
+
+ private List<Pair<String, String>> getIpAddressRanges(NetworkOfferingVO networkOffering, Network network) {
+ List<Pair<String, String>> ipAddressRanges = Lists.newArrayList();
+ if (networkOffering.getGuestType() == Network.GuestType.Shared) {
+ List<VlanVO> vlans = _vlanDao.listVlansByNetworkId(network.getId());
+ ipAddressRanges = Lists.newArrayList();
+ for (VlanVO vlan : vlans) {
+ boolean isIpv4 = StringUtils.isNotBlank(vlan.getIpRange());
+ String[] range = isIpv4 ? vlan.getIpRange().split("-") : vlan.getIp6Range().split("-");
+ if (range.length == 2) {
+ ipAddressRanges.add(Pair.of(range[0], range[1]));
+ }
+ }
+ return ipAddressRanges;
+ }
+
+ String subnet = NetUtils.getCidrSubNet(network.getCidr());
+ String netmask = NetUtils.getCidrNetmask(network.getCidr());
+ long cidrSize = NetUtils.getCidrSize(netmask);
+ Set<Long> allIPsInCidr = NetUtils.getAllIpsFromCidr(subnet, cidrSize, new HashSet<Long>());
+ if (allIPsInCidr == null || !(allIPsInCidr instanceof TreeSet)) {
+ throw new IllegalStateException("The IPs in CIDR for subnet " + subnet + " where null or returned in a non-ordered set.");
+ }
+
+ Iterator<Long> ipIterator = allIPsInCidr.iterator();
+ long ip = ipIterator.next();
+ if (NetUtils.ip2Long(network.getGateway()) == ip) {
+ ip = ipIterator.next();
+ }
+ ipAddressRanges.add(Pair.of(NetUtils.long2Ip(ip), NetUtils.getIpRangeEndIpFromCidr(subnet, cidrSize)));
+ return ipAddressRanges;
+ }
+
+ private String getVirtualRouterIP(Network network, List<Pair<String, String>> ipAddressRanges) throws InsufficientVirtualNetworkCapacityException {
+ Pair<String, String> lowestIpAddressRange = null;
+ if (ipAddressRanges.size() == 1) {
+ lowestIpAddressRange = Iterables.getOnlyElement(ipAddressRanges);
+ } else {
+ for (Pair<String, String> ipAddressRange : ipAddressRanges) {
+ if (lowestIpAddressRange == null || NetUtils.ip2Long(ipAddressRange.getLeft()) < NetUtils.ip2Long(lowestIpAddressRange.getLeft())) {
+ lowestIpAddressRange = ipAddressRange;
+ }
+ }
+ }
+
+ if (lowestIpAddressRange == null) {
+ throw new InsufficientVirtualNetworkCapacityException("VSP allocates an IP for VirtualRouter." + " But no ip address ranges are specified", Network.class,
+ network.getId());
+ } else if (NetUtils.ip2Long(lowestIpAddressRange.getRight()) - NetUtils.ip2Long(lowestIpAddressRange.getLeft()) < 2) {
+ throw new InsufficientVirtualNetworkCapacityException("VSP allocates an IP for VirtualRouter." + " So, subnet should have atleast minimum 3 hosts", Network.class,
+ network.getId());
+ }
+
+ String virtualRouterIp = lowestIpAddressRange.getLeft();
+ long lowestIp = NetUtils.ip2Long(lowestIpAddressRange.getLeft());
+ lowestIp = lowestIp + 1;
+ lowestIpAddressRange.setLeft(NetUtils.long2Ip(lowestIp));
+ return virtualRouterIp;
+ }
+
+ public VspVm buildVspVm(VirtualMachine vm, Network network) {
+ VspVm.Builder vspVmBuilder = new VspVm.Builder()
+ .uuid(vm.getUuid())
+ .name(vm.getInstanceName());
+
+ switch (vm.getState()) {
+ case Starting:
+ vspVmBuilder.state(VspVm.State.Starting); break;
+ case Running:
+ vspVmBuilder.state(VspVm.State.Running); break;
+ case Stopping:
+ vspVmBuilder.state(VspVm.State.Stopping); break;
+ case Stopped:
+ vspVmBuilder.state(VspVm.State.Stopped); break;
+ case Destroyed:
+ vspVmBuilder.state(VspVm.State.Destroyed); break;
+ case Expunging:
+ vspVmBuilder.state(VspVm.State.Expunging); break;
+ case Migrating:
+ vspVmBuilder.state(VspVm.State.Migrating); break;
+ case Error:
+ vspVmBuilder.state(VspVm.State.Error); break;
+ case Shutdowned:
+ vspVmBuilder.state(VspVm.State.Shutdowned); break;
+ default:
+ vspVmBuilder.state(VspVm.State.Unknown);
+ }
+
+ boolean isDomainRouter = vm.getType().equals(VirtualMachine.Type.DomainRouter);
+ vspVmBuilder.domainRouter(isDomainRouter);
+
+ if (network.getBroadcastUri() != null) {
+ String domainRouterIp = network.getBroadcastUri().getPath().substring(1);
+ vspVmBuilder.domainRouterIp(domainRouterIp);
+ }
+
+ return vspVmBuilder.build();
+ }
+
+ public VspNic buildVspNic(String nicUuid, NicProfile nicProfile) {
+ VspNic.Builder vspNicBuilder = new VspNic.Builder()
+ .uuid(nicUuid)
+ .macAddress(nicProfile.getMacAddress())
+ .useStaticIp(true)
+ .ip(nicProfile.getIPv4Address());
+ return vspNicBuilder.build();
+ }
+
+ public VspNic buildVspNic(NicVO nic) {
+ VspNic.Builder vspNicBuilder = new VspNic.Builder()
+ .uuid(nic.getUuid())
+ .macAddress(nic.getMacAddress())
+ .useStaticIp(true)
+ .ip(nic.getIPv4Address());
+ return vspNicBuilder.build();
+ }
+
+ public VspStaticNat buildVspStaticNat(Boolean forRevoke, IPAddressVO staticNatIp, VlanVO staticNatVlan, NicVO nic) {
+ VspStaticNat.Builder vspStaticNatBuilder = new VspStaticNat.Builder()
+ .ipUuid(staticNatIp.getUuid())
+ .ipAddress(staticNatIp.getAddress().addr())
+ .revoke(forRevoke)
+ .oneToOneNat(staticNatIp.isOneToOneNat())
+ .vlanUuid(staticNatVlan.getUuid())
+ .vlanGateway(staticNatVlan.getVlanGateway())
+ .vlanNetmask(staticNatVlan.getVlanNetmask());
+
+ if (nic != null) {
+ VspNic vspNic = buildVspNic(nic);
+ vspStaticNatBuilder.nic(vspNic);
+ }
+
+ return vspStaticNatBuilder.build();
+ }
+
+ public VspAclRule buildVspAclRule(FirewallRule firewallRule, Network network) {
+ VspAclRule.Builder vspAclRuleBuilder = new VspAclRule.Builder()
+ .uuid(firewallRule.getUuid())
+ .protocol(firewallRule.getProtocol())
+ .startPort(firewallRule.getSourcePortStart())
+ .endPort(firewallRule.getSourcePortEnd())
+ .sourceCidrList(firewallRule.getSourceCidrList())
+ .priority(-1)
+ .type(VspAclRule.ACLType.Firewall);
+
+ switch (firewallRule.getState()) {
+ case Active:
+ vspAclRuleBuilder.state(VspAclRule.ACLState.Active); break;
+ case Add:
+ vspAclRuleBuilder.state(VspAclRule.ACLState.Add); break;
+ case Revoke:
+ vspAclRuleBuilder.state(VspAclRule.ACLState.Revoke);
+ }
+
+ switch (firewallRule.getTrafficType()) {
+ case Ingress:
+ vspAclRuleBuilder.trafficType(VspAclRule.ACLTrafficType.Ingress); break;
+ case Egress:
+ vspAclRuleBuilder.trafficType(VspAclRule.ACLTrafficType.Egress);
+ }
+
+ NetworkOfferingVO networkOffering = _networkOfferingDao.findById(network.getNetworkOfferingId());
+ if (firewallRule.getTrafficType() == FirewallRule.TrafficType.Egress && networkOffering.getEgressDefaultPolicy()) {
+ vspAclRuleBuilder.action(VspAclRule.ACLAction.Deny);
+ } else {
+ vspAclRuleBuilder.action(VspAclRule.ACLAction.Allow);
+ }
+
+ if (firewallRule.getSourceIpAddressId() != null) {
+ IPAddressVO ipAddress = _ipAddressDao.findById(firewallRule.getSourceIpAddressId());
+ if (ipAddress != null) {
+ vspAclRuleBuilder.sourceIpAddress(ipAddress.getVmIp() + "/32");
+ }
+ }
+
+ return vspAclRuleBuilder.build();
+ }
+
+ public VspAclRule buildVspAclRule(NetworkACLItem networkAcl) {
+ VspAclRule.Builder vspAclRuleBuilder = new VspAclRule.Builder()
+ .uuid(networkAcl.getUuid())
+ .protocol(networkAcl.getProtocol())
+ .startPort(networkAcl.getSourcePortStart())
+ .endPort(networkAcl.getSourcePortEnd())
+ .sourceIpAddress(null)
+ .sourceCidrList(networkAcl.getSourceCidrList())
+ .priority(networkAcl.getNumber())
+ .type(VspAclRule.ACLType.NetworkACL);
+
+ switch (networkAcl.getState()) {
+ case Active:
+ vspAclRuleBuilder.state(VspAclRule.ACLState.Active); break;
+ case Add:
+ vspAclRuleBuilder.state(VspAclRule.ACLState.Add); break;
+ case Revoke:
+ vspAclRuleBuilder.state(VspAclRule.ACLState.Revoke);
+ }
+
+ switch (networkAcl.getTrafficType()) {
+ case Ingress:
+ vspAclRuleBuilder.trafficType(VspAclRule.ACLTrafficType.Ingress); break;
+ case Egress:
+ vspAclRuleBuilder.trafficType(VspAclRule.ACLTrafficType.Egress);
+ }
+
+ switch (networkAcl.getAction()) {
+ case Allow:
+ vspAclRuleBuilder.action(VspAclRule.ACLAction.Allow); break;
+ case Deny:
+ vspAclRuleBuilder.action(VspAclRule.ACLAction.Deny);
+ }
+
+ return vspAclRuleBuilder.build();
+ }
+}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b0c27e48/plugins/network-elements/nuage-vsp/src/com/cloud/util/NuageVspUtil.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/util/NuageVspUtil.java b/plugins/network-elements/nuage-vsp/src/com/cloud/util/NuageVspUtil.java
index 2300289..fedf048 100644
--- a/plugins/network-elements/nuage-vsp/src/com/cloud/util/NuageVspUtil.java
+++ b/plugins/network-elements/nuage-vsp/src/com/cloud/util/NuageVspUtil.java
@@ -20,6 +20,8 @@
package com.cloud.util;
import com.cloud.network.Network;
+import com.cloud.network.dao.NetworkDetailVO;
+import com.cloud.network.dao.NetworkDetailsDao;
import com.cloud.network.manager.NuageVspManager;
import com.cloud.offering.NetworkOffering;
import com.cloud.utils.StringUtils;
@@ -28,7 +30,12 @@ import org.apache.commons.codec.binary.Base64;
public class NuageVspUtil {
- public static String getPreConfiguredDomainTemplateName(ConfigurationDao configDao, Network network, NetworkOffering networkOffering) {
+ public static String getPreConfiguredDomainTemplateName(ConfigurationDao configDao, NetworkDetailsDao networkDetailsDao, Network network, NetworkOffering networkOffering) {
+ NetworkDetailVO domainTemplateNetworkDetail = networkDetailsDao.findDetail(network.getId(), NuageVspManager.nuageDomainTemplateDetailName);
+ if (domainTemplateNetworkDetail != null) {
+ return domainTemplateNetworkDetail.getValue();
+ }
+
String configKey;
if (network.getVpcId() != null) {
configKey = NuageVspManager.NuageVspVpcDomainTemplateName.key();