Search in sources :

Example 1 with VpcDetailVO

use of org.apache.cloudstack.resourcedetail.VpcDetailVO in project cloudstack by apache.

the class NuageVspElement method shutdownVpc.

@Override
public boolean shutdownVpc(Vpc vpc, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException {
    if (vpc.getState().equals(Vpc.State.Inactive)) {
        List<DomainRouterVO> routers = _routerDao.listByVpcId(vpc.getId());
        if (CollectionUtils.isEmpty(routers)) {
            routers = _routerDao.listIncludingRemovedByVpcId(vpc.getId());
        }
        List<String> domainRouterUuids = Lists.transform(routers, new Function<DomainRouterVO, String>() {

            @Nullable
            @Override
            public String apply(@Nullable DomainRouterVO input) {
                return input != null ? input.getUuid() : null;
            }
        });
        Domain vpcDomain = _domainDao.findById(vpc.getDomainId());
        HostVO nuageVspHost = _nuageVspManager.getNuageVspHost(getPhysicalNetworkId(vpc.getZoneId()));
        String preConfiguredDomainTemplateName;
        VpcDetailVO domainTemplateNameDetail = _vpcDetailsDao.findDetail(vpc.getId(), NuageVspManager.nuageDomainTemplateDetailName);
        if (domainTemplateNameDetail != null) {
            preConfiguredDomainTemplateName = domainTemplateNameDetail.getValue();
        } else {
            preConfiguredDomainTemplateName = _configDao.getValue(NuageVspManager.NuageVspVpcDomainTemplateName.key());
        }
        ShutDownVpcVspCommand cmd = new ShutDownVpcVspCommand(vpcDomain.getUuid(), vpc.getUuid(), preConfiguredDomainTemplateName, domainRouterUuids);
        Answer answer = _agentMgr.easySend(nuageVspHost.getId(), cmd);
        if (answer == null || !answer.getResult()) {
            s_logger.error("ShutDownVpcVspCommand for VPC " + vpc.getUuid() + " failed on Nuage VSD " + nuageVspHost.getDetail("hostname"));
            if ((null != answer) && (null != answer.getDetails())) {
                throw new ResourceUnavailableException(answer.getDetails(), Vpc.class, vpc.getId());
            }
        }
    }
    return true;
}
Also used : HostVO(com.cloud.host.HostVO) Answer(com.cloud.agent.api.Answer) ResourceUnavailableException(com.cloud.exception.ResourceUnavailableException) ShutDownVpcVspCommand(com.cloud.agent.api.element.ShutDownVpcVspCommand) Domain(com.cloud.domain.Domain) DomainRouterVO(com.cloud.vm.DomainRouterVO) Nullable(javax.annotation.Nullable) VpcDetailVO(org.apache.cloudstack.resourcedetail.VpcDetailVO)

Example 2 with VpcDetailVO

use of org.apache.cloudstack.resourcedetail.VpcDetailVO in project cloudstack by apache.

the class NuageVspGuestNetworkGuru method implement.

@Override
public Network implement(Network network, NetworkOffering offering, DeployDestination dest, ReservationContext context) throws InsufficientVirtualNetworkCapacityException {
    long networkId = network.getId();
    network = _networkDao.acquireInLockTable(network.getId(), 1200);
    if (network == null) {
        throw new ConcurrentOperationException("Unable to acquire lock on network " + networkId);
    }
    NetworkVO implemented = null;
    try {
        if (offering.getGuestType() == GuestType.Isolated && network.getState() != State.Implementing) {
            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());
        }
        //We don't support a shared network with UserData and multiple IP ranges at the same time.
        checkMultipleSubnetsCombinedWithUseData(network);
        long dcId = dest.getDataCenter().getId();
        //Get physical network id
        Long physicalNetworkId = network.getPhysicalNetworkId();
        //Physical network id can be null in Guest Network in Basic zone, so locate the physical network
        if (physicalNetworkId == null) {
            physicalNetworkId = _networkModel.findPhysicalNetworkId(dcId, offering.getTags(), offering.getTrafficType());
        }
        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());
        }
        VspNetwork vspNetwork = _nuageVspEntityBuilder.buildVspNetwork(implemented);
        String tenantId = context.getDomain().getName() + "-" + context.getAccount().getAccountId();
        String broadcastUriStr = implemented.getUuid() + "/" + vspNetwork.getVirtualRouterIp();
        implemented.setBroadcastUri(Networks.BroadcastDomainType.Vsp.toUri(broadcastUriStr));
        implemented.setBroadcastDomainType(Networks.BroadcastDomainType.Vsp);
        if (!implement(physicalNetworkId, vspNetwork, _nuageVspEntityBuilder.buildNetworkDhcpOption(network, offering))) {
            return null;
        }
        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());
    }
    return implemented;
}
Also used : PhysicalNetworkVO(com.cloud.network.dao.PhysicalNetworkVO) NetworkVO(com.cloud.network.dao.NetworkVO) InsufficientVirtualNetworkCapacityException(com.cloud.exception.InsufficientVirtualNetworkCapacityException) VspNetwork(net.nuage.vsp.acs.client.api.model.VspNetwork) ConcurrentOperationException(com.cloud.exception.ConcurrentOperationException) AccountVO(com.cloud.user.AccountVO) NetworkDetailVO(com.cloud.network.dao.NetworkDetailVO) VpcDetailVO(org.apache.cloudstack.resourcedetail.VpcDetailVO)

Aggregations

VpcDetailVO (org.apache.cloudstack.resourcedetail.VpcDetailVO)2 Answer (com.cloud.agent.api.Answer)1 ShutDownVpcVspCommand (com.cloud.agent.api.element.ShutDownVpcVspCommand)1 Domain (com.cloud.domain.Domain)1 ConcurrentOperationException (com.cloud.exception.ConcurrentOperationException)1 InsufficientVirtualNetworkCapacityException (com.cloud.exception.InsufficientVirtualNetworkCapacityException)1 ResourceUnavailableException (com.cloud.exception.ResourceUnavailableException)1 HostVO (com.cloud.host.HostVO)1 NetworkDetailVO (com.cloud.network.dao.NetworkDetailVO)1 NetworkVO (com.cloud.network.dao.NetworkVO)1 PhysicalNetworkVO (com.cloud.network.dao.PhysicalNetworkVO)1 AccountVO (com.cloud.user.AccountVO)1 DomainRouterVO (com.cloud.vm.DomainRouterVO)1 Nullable (javax.annotation.Nullable)1 VspNetwork (net.nuage.vsp.acs.client.api.model.VspNetwork)1