Search in sources :

Example 46 with ServiceOfferingVO

use of com.cloud.service.ServiceOfferingVO in project cloudstack by apache.

the class VirtualNetworkApplianceManagerImpl method configure.

@Override
public boolean configure(final String name, final Map<String, Object> params) throws ConfigurationException {
    _executor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("RouterMonitor"));
    _checkExecutor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("RouterStatusMonitor"));
    _networkStatsUpdateExecutor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("NetworkStatsUpdater"));
    VirtualMachine.State.getStateMachine().registerListener(this);
    final Map<String, String> configs = _configDao.getConfiguration("AgentManager", params);
    _routerRamSize = NumbersUtil.parseInt(configs.get("router.ram.size"), DEFAULT_ROUTER_VM_RAMSIZE);
    _routerCpuMHz = NumbersUtil.parseInt(configs.get("router.cpu.mhz"), DEFAULT_ROUTER_CPU_MHZ);
    _routerExtraPublicNics = NumbersUtil.parseInt(_configDao.getValue(Config.RouterExtraPublicNics.key()), 2);
    final String guestOSString = configs.get("network.dhcp.nondefaultnetwork.setgateway.guestos");
    if (guestOSString != null) {
        final String[] guestOSList = guestOSString.split(",");
        for (final String os : guestOSList) {
            _guestOSNeedGatewayOnNonDefaultNetwork.add(os);
        }
    }
    String value = configs.get("router.stats.interval");
    _routerStatsInterval = NumbersUtil.parseInt(value, 300);
    value = configs.get("router.check.interval");
    _routerCheckInterval = NumbersUtil.parseInt(value, 30);
    value = configs.get("router.check.poolsize");
    _rvrStatusUpdatePoolSize = NumbersUtil.parseInt(value, 10);
    /*
         * We assume that one thread can handle 20 requests in 1 minute in
         * normal situation, so here we give the queue size up to 50 minutes.
         * It's mostly for buffer, since each time CheckRouterTask running, it
         * would add all the redundant networks in the queue immediately
         */
    _vrUpdateQueue = new LinkedBlockingQueue<Long>(_rvrStatusUpdatePoolSize * 1000);
    _rvrStatusUpdateExecutor = Executors.newFixedThreadPool(_rvrStatusUpdatePoolSize, new NamedThreadFactory("RedundantRouterStatusMonitor"));
    String instance = configs.get("instance.name");
    if (instance == null) {
        instance = "DEFAULT";
    }
    NetworkHelperImpl.setVMInstanceName(instance);
    final String rpValue = configs.get("network.disable.rpfilter");
    if (rpValue != null && rpValue.equalsIgnoreCase("true")) {
        _disableRpFilter = true;
    }
    _dnsBasicZoneUpdates = String.valueOf(_configDao.getValue(Config.DnsBasicZoneUpdates.key()));
    s_logger.info("Router configurations: " + "ramsize=" + _routerRamSize);
    _agentMgr.registerForHostEvents(new SshKeysDistriMonitor(_agentMgr, _hostDao, _configDao), true, false, false);
    final List<ServiceOfferingVO> offerings = _serviceOfferingDao.createSystemServiceOfferings("System Offering For Software Router", ServiceOffering.routerDefaultOffUniqueName, 1, _routerRamSize, _routerCpuMHz, null, null, true, null, ProvisioningType.THIN, true, null, true, VirtualMachine.Type.DomainRouter, true);
    // this can sometimes happen, if DB is manually or programmatically manipulated
    if (offerings == null || offerings.size() < 2) {
        final String msg = "Data integrity problem : System Offering For Software router VM has been removed?";
        s_logger.error(msg);
        throw new ConfigurationException(msg);
    }
    NetworkHelperImpl.setSystemAccount(_accountMgr.getSystemAccount());
    final String aggregationRange = configs.get("usage.stats.job.aggregation.range");
    _usageAggregationRange = NumbersUtil.parseInt(aggregationRange, 1440);
    _usageTimeZone = configs.get("usage.aggregation.timezone");
    if (_usageTimeZone == null) {
        _usageTimeZone = "GMT";
    }
    _agentMgr.registerForHostEvents(this, true, false, false);
    s_logger.info("DomainRouterManager is configured.");
    return true;
}
Also used : ConfigurationException(javax.naming.ConfigurationException) NamedThreadFactory(com.cloud.utils.concurrency.NamedThreadFactory) SshKeysDistriMonitor(com.cloud.network.SshKeysDistriMonitor) ServiceOfferingVO(com.cloud.service.ServiceOfferingVO)

Example 47 with ServiceOfferingVO

use of com.cloud.service.ServiceOfferingVO in project cloudstack by apache.

the class UserVmManagerImpl method checkHostsDedication.

public void checkHostsDedication(VMInstanceVO vm, long srcHostId, long destHostId) {
    HostVO srcHost = _hostDao.findById(srcHostId);
    HostVO destHost = _hostDao.findById(destHostId);
    boolean srcExplDedicated = checkIfHostIsDedicated(srcHost);
    boolean destExplDedicated = checkIfHostIsDedicated(destHost);
    //if srcHost is explicitly dedicated and destination Host is not
    if (srcExplDedicated && !destExplDedicated) {
        //raise an alert
        String msg = "VM is being migrated from a explicitly dedicated host " + srcHost.getName() + " to non-dedicated host " + destHost.getName();
        _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_USERVM, vm.getDataCenterId(), vm.getPodIdToDeployIn(), msg, msg);
        s_logger.warn(msg);
    }
    //if srcHost is non dedicated but destination Host is explicitly dedicated
    if (!srcExplDedicated && destExplDedicated) {
        //raise an alert
        String msg = "VM is being migrated from a non dedicated host " + srcHost.getName() + " to a explicitly dedicated host " + destHost.getName();
        _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_USERVM, vm.getDataCenterId(), vm.getPodIdToDeployIn(), msg, msg);
        s_logger.warn(msg);
    }
    //if hosts are dedicated to different account/domains, raise an alert
    if (srcExplDedicated && destExplDedicated) {
        if (!((accountOfDedicatedHost(srcHost) == null) || (accountOfDedicatedHost(srcHost).equals(accountOfDedicatedHost(destHost))))) {
            String msg = "VM is being migrated from host " + srcHost.getName() + " explicitly dedicated to account " + accountOfDedicatedHost(srcHost) + " to host " + destHost.getName() + " explicitly dedicated to account " + accountOfDedicatedHost(destHost);
            _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_USERVM, vm.getDataCenterId(), vm.getPodIdToDeployIn(), msg, msg);
            s_logger.warn(msg);
        }
        if (!((domainOfDedicatedHost(srcHost) == null) || (domainOfDedicatedHost(srcHost).equals(domainOfDedicatedHost(destHost))))) {
            String msg = "VM is being migrated from host " + srcHost.getName() + " explicitly dedicated to domain " + domainOfDedicatedHost(srcHost) + " to host " + destHost.getName() + " explicitly dedicated to domain " + domainOfDedicatedHost(destHost);
            _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_USERVM, vm.getDataCenterId(), vm.getPodIdToDeployIn(), msg, msg);
            s_logger.warn(msg);
        }
    }
    // Checks for implicitly dedicated hosts
    ServiceOfferingVO deployPlanner = _offeringDao.findById(vm.getId(), vm.getServiceOfferingId());
    if (deployPlanner.getDeploymentPlanner() != null && deployPlanner.getDeploymentPlanner().equals("ImplicitDedicationPlanner")) {
        //VM is deployed using implicit planner
        long accountOfVm = vm.getAccountId();
        String msg = "VM of account " + accountOfVm + " with implicit deployment planner being migrated to host " + destHost.getName();
        //Get all vms on destination host
        boolean emptyDestination = false;
        List<VMInstanceVO> vmsOnDest = getVmsOnHost(destHostId);
        if (vmsOnDest == null || vmsOnDest.isEmpty()) {
            emptyDestination = true;
        }
        if (!emptyDestination) {
            //Check if vm is deployed using strict implicit planner
            if (!isServiceOfferingUsingPlannerInPreferredMode(vm.getServiceOfferingId())) {
                //Check if all vms on destination host are created using strict implicit mode
                if (!checkIfAllVmsCreatedInStrictMode(accountOfVm, vmsOnDest)) {
                    msg = "VM of account " + accountOfVm + " with strict implicit deployment planner being migrated to host " + destHost.getName() + " not having all vms strict implicitly dedicated to account " + accountOfVm;
                }
            } else {
                //using implicit planner and must belong to same account
                for (VMInstanceVO vmsDest : vmsOnDest) {
                    ServiceOfferingVO destPlanner = _offeringDao.findById(vm.getId(), vmsDest.getServiceOfferingId());
                    if (!((destPlanner.getDeploymentPlanner() != null && destPlanner.getDeploymentPlanner().equals("ImplicitDedicationPlanner")) && vmsDest.getAccountId() == accountOfVm)) {
                        msg = "VM of account " + accountOfVm + " with preffered implicit deployment planner being migrated to host " + destHost.getName() + " not having all vms implicitly dedicated to account " + accountOfVm;
                    }
                }
            }
        }
        _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_USERVM, vm.getDataCenterId(), vm.getPodIdToDeployIn(), msg, msg);
        s_logger.warn(msg);
    } else {
        //VM is not deployed using implicit planner, check if it migrated between dedicated hosts
        List<PlannerHostReservationVO> reservedHosts = _plannerHostReservationDao.listAllDedicatedHosts();
        boolean srcImplDedicated = false;
        boolean destImplDedicated = false;
        String msg = null;
        for (PlannerHostReservationVO reservedHost : reservedHosts) {
            if (reservedHost.getHostId() == srcHostId) {
                srcImplDedicated = true;
            }
            if (reservedHost.getHostId() == destHostId) {
                destImplDedicated = true;
            }
        }
        if (srcImplDedicated) {
            if (destImplDedicated) {
                msg = "VM is being migrated from implicitly dedicated host " + srcHost.getName() + " to another implicitly dedicated host " + destHost.getName();
            } else {
                msg = "VM is being migrated from implicitly dedicated host " + srcHost.getName() + " to shared host " + destHost.getName();
            }
            _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_USERVM, vm.getDataCenterId(), vm.getPodIdToDeployIn(), msg, msg);
            s_logger.warn(msg);
        } else {
            if (destImplDedicated) {
                msg = "VM is being migrated from shared host " + srcHost.getName() + " to implicitly dedicated host " + destHost.getName();
                _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_USERVM, vm.getDataCenterId(), vm.getPodIdToDeployIn(), msg, msg);
                s_logger.warn(msg);
            }
        }
    }
}
Also used : PlannerHostReservationVO(com.cloud.deploy.PlannerHostReservationVO) ServiceOfferingVO(com.cloud.service.ServiceOfferingVO) HostVO(com.cloud.host.HostVO)

Example 48 with ServiceOfferingVO

use of com.cloud.service.ServiceOfferingVO in project cloudstack by apache.

the class UserVmManagerImpl method isVMUsingLocalStorage.

private boolean isVMUsingLocalStorage(VMInstanceVO vm) {
    boolean usesLocalStorage = false;
    ServiceOfferingVO svcOffering = _serviceOfferingDao.findById(vm.getId(), vm.getServiceOfferingId());
    if (svcOffering.getUseLocalStorage()) {
        usesLocalStorage = true;
    } else {
        List<VolumeVO> volumes = _volsDao.findByInstanceAndType(vm.getId(), Volume.Type.DATADISK);
        for (VolumeVO vol : volumes) {
            DiskOfferingVO diskOffering = _diskOfferingDao.findById(vol.getDiskOfferingId());
            if (diskOffering.getUseLocalStorage()) {
                usesLocalStorage = true;
                break;
            }
        }
    }
    return usesLocalStorage;
}
Also used : VolumeVO(com.cloud.storage.VolumeVO) DiskOfferingVO(com.cloud.storage.DiskOfferingVO) ServiceOfferingVO(com.cloud.service.ServiceOfferingVO)

Example 49 with ServiceOfferingVO

use of com.cloud.service.ServiceOfferingVO in project cloudstack by apache.

the class UserVmManagerImpl method updateVmStateForFailedVmCreation.

// used for vm transitioning to error state
private void updateVmStateForFailedVmCreation(Long vmId, Long hostId) {
    UserVmVO vm = _vmDao.findById(vmId);
    if (vm != null) {
        if (vm.getState().equals(State.Stopped)) {
            s_logger.debug("Destroying vm " + vm + " as it failed to create on Host with Id:" + hostId);
            try {
                _itMgr.stateTransitTo(vm, VirtualMachine.Event.OperationFailedToError, null);
            } catch (NoTransitionException e1) {
                s_logger.warn(e1.getMessage());
            }
            // destroy associated volumes for vm in error state
            // get all volumes in non destroyed state
            List<VolumeVO> volumesForThisVm = _volsDao.findUsableVolumesForInstance(vm.getId());
            for (VolumeVO volume : volumesForThisVm) {
                if (volume.getState() != Volume.State.Destroy) {
                    volumeMgr.destroyVolume(volume);
                }
            }
            String msg = "Failed to deploy Vm with Id: " + vmId + ", on Host with Id: " + hostId;
            _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_USERVM, vm.getDataCenterId(), vm.getPodIdToDeployIn(), msg, msg);
            // Get serviceOffering for Virtual Machine
            ServiceOfferingVO offering = _serviceOfferingDao.findById(vm.getId(), vm.getServiceOfferingId());
            // Update Resource Count for the given account
            resourceCountDecrement(vm.getAccountId(), vm.isDisplayVm(), new Long(offering.getCpu()), new Long(offering.getRamSize()));
        }
    }
}
Also used : VolumeVO(com.cloud.storage.VolumeVO) NoTransitionException(com.cloud.utils.fsm.NoTransitionException) ServiceOfferingVO(com.cloud.service.ServiceOfferingVO)

Example 50 with ServiceOfferingVO

use of com.cloud.service.ServiceOfferingVO in project cloudstack by apache.

the class UserVmManagerImpl method upgradeVirtualMachine.

@Override
@ActionEvent(eventType = EventTypes.EVENT_VM_UPGRADE, eventDescription = "upgrading Vm")
public // This method will be deprecated as we use ScaleVMCmd for both stopped VMs and running VMs
UserVm upgradeVirtualMachine(UpgradeVMCmd cmd) throws ResourceAllocationException {
    Long vmId = cmd.getId();
    Long svcOffId = cmd.getServiceOfferingId();
    Account caller = CallContext.current().getCallingAccount();
    // Verify input parameters
    //UserVmVO vmInstance = _vmDao.findById(vmId);
    VMInstanceVO vmInstance = _vmInstanceDao.findById(vmId);
    if (vmInstance == null) {
        throw new InvalidParameterValueException("unable to find a virtual machine with id " + vmId);
    } else if (!(vmInstance.getState().equals(State.Stopped))) {
        throw new InvalidParameterValueException("Unable to upgrade virtual machine " + vmInstance.toString() + " " + " in state " + vmInstance.getState() + "; make sure the virtual machine is stopped");
    }
    _accountMgr.checkAccess(caller, null, true, vmInstance);
    // Check resource limits for CPU and Memory.
    Map<String, String> customParameters = cmd.getDetails();
    ServiceOfferingVO newServiceOffering = _offeringDao.findById(svcOffId);
    if (newServiceOffering.isDynamic()) {
        newServiceOffering.setDynamicFlag(true);
        validateCustomParameters(newServiceOffering, cmd.getDetails());
        newServiceOffering = _offeringDao.getcomputeOffering(newServiceOffering, customParameters);
    }
    ServiceOfferingVO currentServiceOffering = _offeringDao.findByIdIncludingRemoved(vmInstance.getId(), vmInstance.getServiceOfferingId());
    int newCpu = newServiceOffering.getCpu();
    int newMemory = newServiceOffering.getRamSize();
    int currentCpu = currentServiceOffering.getCpu();
    int currentMemory = currentServiceOffering.getRamSize();
    if (newCpu > currentCpu) {
        _resourceLimitMgr.checkResourceLimit(caller, ResourceType.cpu, newCpu - currentCpu);
    }
    if (newMemory > currentMemory) {
        _resourceLimitMgr.checkResourceLimit(caller, ResourceType.memory, newMemory - currentMemory);
    }
    // Check that the specified service offering ID is valid
    _itMgr.checkIfCanUpgrade(vmInstance, newServiceOffering);
    _itMgr.upgradeVmDb(vmId, svcOffId);
    if (newServiceOffering.isDynamic()) {
        //save the custom values to the database.
        saveCustomOfferingDetails(vmId, newServiceOffering);
    }
    if (currentServiceOffering.isDynamic() && !newServiceOffering.isDynamic()) {
        removeCustomOfferingDetails(vmId);
    }
    // Increment or decrement CPU and Memory count accordingly.
    if (newCpu > currentCpu) {
        _resourceLimitMgr.incrementResourceCount(caller.getAccountId(), ResourceType.cpu, new Long(newCpu - currentCpu));
    } else if (currentCpu > newCpu) {
        _resourceLimitMgr.decrementResourceCount(caller.getAccountId(), ResourceType.cpu, new Long(currentCpu - newCpu));
    }
    if (newMemory > currentMemory) {
        _resourceLimitMgr.incrementResourceCount(caller.getAccountId(), ResourceType.memory, new Long(newMemory - currentMemory));
    } else if (currentMemory > newMemory) {
        _resourceLimitMgr.decrementResourceCount(caller.getAccountId(), ResourceType.memory, new Long(currentMemory - newMemory));
    }
    // Generate usage event for VM upgrade
    UserVmVO userVm = _vmDao.findById(vmId);
    generateUsageEvent(userVm, userVm.isDisplayVm(), EventTypes.EVENT_VM_UPGRADE);
    return userVm;
}
Also used : Account(com.cloud.user.Account) InvalidParameterValueException(com.cloud.exception.InvalidParameterValueException) ServiceOfferingVO(com.cloud.service.ServiceOfferingVO) ActionEvent(com.cloud.event.ActionEvent)

Aggregations

ServiceOfferingVO (com.cloud.service.ServiceOfferingVO)72 ArrayList (java.util.ArrayList)24 InvalidParameterValueException (com.cloud.exception.InvalidParameterValueException)18 CloudRuntimeException (com.cloud.utils.exception.CloudRuntimeException)18 Account (com.cloud.user.Account)17 List (java.util.List)14 Network (com.cloud.network.Network)10 DB (com.cloud.utils.db.DB)10 VolumeVO (com.cloud.storage.VolumeVO)9 NicProfile (com.cloud.vm.NicProfile)9 VMInstanceVO (com.cloud.vm.VMInstanceVO)9 HashMap (java.util.HashMap)9 LinkedHashMap (java.util.LinkedHashMap)9 ConfigurationException (javax.naming.ConfigurationException)9 DataCenterDeployment (com.cloud.deploy.DataCenterDeployment)8 ExcludeList (com.cloud.deploy.DeploymentPlanner.ExcludeList)8 ConcurrentOperationException (com.cloud.exception.ConcurrentOperationException)8 InsufficientCapacityException (com.cloud.exception.InsufficientCapacityException)8 HypervisorType (com.cloud.hypervisor.Hypervisor.HypervisorType)8 DomainRouterVO (com.cloud.vm.DomainRouterVO)8