mirror of https://github.com/apache/cloudstack.git
192 lines
7.9 KiB
Java
192 lines
7.9 KiB
Java
// 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.vm;
|
|
|
|
import java.net.URI;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
import com.cloud.agent.api.to.NicTO;
|
|
import com.cloud.agent.api.to.VirtualMachineTO;
|
|
import com.cloud.deploy.DeployDestination;
|
|
import com.cloud.deploy.DeploymentPlan;
|
|
import com.cloud.exception.ConcurrentOperationException;
|
|
import com.cloud.exception.InsufficientCapacityException;
|
|
import com.cloud.exception.InsufficientServerCapacityException;
|
|
import com.cloud.exception.ManagementServerException;
|
|
import com.cloud.exception.OperationTimedoutException;
|
|
import com.cloud.exception.ResourceUnavailableException;
|
|
import com.cloud.exception.VirtualMachineMigrationException;
|
|
import com.cloud.hypervisor.Hypervisor.HypervisorType;
|
|
import com.cloud.network.Network;
|
|
import com.cloud.network.dao.NetworkVO;
|
|
import com.cloud.offering.ServiceOffering;
|
|
import com.cloud.service.ServiceOfferingVO;
|
|
import com.cloud.storage.DiskOfferingVO;
|
|
import com.cloud.storage.StoragePool;
|
|
import com.cloud.storage.VMTemplateVO;
|
|
import com.cloud.storage.Volume;
|
|
import com.cloud.user.Account;
|
|
import com.cloud.utils.Pair;
|
|
import com.cloud.utils.component.Manager;
|
|
import com.cloud.utils.fsm.NoTransitionException;
|
|
|
|
/**
|
|
* VirtualMachineManager orchestrates the life cycle of a virtual machine.
|
|
* It does not care what is the type of the virtual machine. As long as
|
|
* it can find the virtual machine in the database via the vm instance name,
|
|
* it starts to orchestrates the life cycle.
|
|
*
|
|
* There's a set of easy to use methods to start/stop a virtual machine. These
|
|
* methods rethrows any exceptions as CloudRuntimeException so the caller's
|
|
* code can be less complicated.
|
|
*
|
|
* There is also a set of advance methods. The advance methods throw
|
|
* exceptions that describes the problem that actually happen. For callers,
|
|
* that can adjust to the exceptions, it should call the advance methods.
|
|
*
|
|
* All of the methods expect the UserContext to be set. It retrieves information
|
|
* wrt the user and account of the caller from the UserContext. The current
|
|
* caller and account input parameters will be deprecated.
|
|
*
|
|
*/
|
|
public interface VirtualMachineManager extends Manager {
|
|
|
|
boolean allocate(String vmInstanceName,
|
|
VMTemplateVO template,
|
|
ServiceOfferingVO serviceOffering,
|
|
Pair<? extends DiskOfferingVO, Long> rootDiskOffering,
|
|
List<Pair<DiskOfferingVO, Long>> dataDiskOfferings,
|
|
List<Pair<NetworkVO, NicProfile>> networks,
|
|
Map<VirtualMachineProfile.Param, Object> params,
|
|
DeploymentPlan plan,
|
|
HypervisorType hyperType,
|
|
Account owner);
|
|
|
|
boolean allocate(String vmInstanceName,
|
|
VMTemplateVO template,
|
|
ServiceOfferingVO serviceOffering,
|
|
List<Pair<NetworkVO, NicProfile>> networkProfiles,
|
|
DeploymentPlan plan,
|
|
HypervisorType hyperType,
|
|
Account owner);
|
|
|
|
void start(String vmUuid, Map<VirtualMachineProfile.Param, Object> params);
|
|
|
|
void start(String vmUuid, Map<VirtualMachineProfile.Param, Object> params, DeploymentPlan planToDeploy);
|
|
|
|
void stop(String vmUuid);
|
|
|
|
void expunge(String vmUuid);
|
|
|
|
void registerGuru(VirtualMachine.Type type, VirtualMachineGuru guru);
|
|
|
|
boolean stateTransitTo(VMInstanceVO vm, VirtualMachine.Event e, Long hostId) throws NoTransitionException;
|
|
|
|
void advanceStart(String vmUuid, Map<VirtualMachineProfile.Param, Object> params, DeploymentPlan planToDeploy)
|
|
throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException, OperationTimedoutException;
|
|
|
|
void advanceStop(String vmUuid, boolean cleanup) throws ResourceUnavailableException, OperationTimedoutException,
|
|
ConcurrentOperationException;
|
|
|
|
void advanceExpunge(String vmUuid) throws ResourceUnavailableException, OperationTimedoutException,
|
|
ConcurrentOperationException;
|
|
|
|
boolean destroy(String vmUuid) throws ResourceUnavailableException, OperationTimedoutException,
|
|
ConcurrentOperationException;
|
|
|
|
boolean migrateAway(VirtualMachine.Type type, long vmid, long hostId) throws InsufficientServerCapacityException, VirtualMachineMigrationException;
|
|
|
|
VirtualMachine migrate(String vmUuid, long srcHostId, DeployDestination dest) throws ResourceUnavailableException, ConcurrentOperationException, ManagementServerException,
|
|
VirtualMachineMigrationException;
|
|
|
|
VirtualMachine migrateWithStorage(String vmUuid, long srcId, long destId, Map<Volume, StoragePool> volumeToPool) throws ResourceUnavailableException,
|
|
ConcurrentOperationException, ManagementServerException, VirtualMachineMigrationException;
|
|
|
|
void reboot(String vmUuid);
|
|
|
|
void advanceReboot(String vmUuid) throws InsufficientCapacityException,
|
|
ResourceUnavailableException, ConcurrentOperationException, OperationTimedoutException;
|
|
|
|
VirtualMachine storageMigration(String vmUuid, StoragePool storagePoolId);
|
|
|
|
/**
|
|
* @param vmInstance
|
|
* @param newServiceOfferingId
|
|
*/
|
|
void checkIfCanUpgrade(VirtualMachine vmInstance, long newServiceOfferingId);
|
|
|
|
/**
|
|
* @param vmId
|
|
* @param serviceOfferingId
|
|
* @return
|
|
*/
|
|
boolean upgradeVmDb(long vmId, long serviceOfferingId);
|
|
|
|
/**
|
|
* @param vm
|
|
* @param network
|
|
* @param requested TODO
|
|
* @return
|
|
* @throws ConcurrentOperationException
|
|
* @throws ResourceUnavailableException
|
|
* @throws InsufficientCapacityException
|
|
*/
|
|
NicProfile addVmToNetwork(VirtualMachine vm, Network network, NicProfile requested) throws ConcurrentOperationException,
|
|
ResourceUnavailableException, InsufficientCapacityException;
|
|
|
|
/**
|
|
* @param vm
|
|
* @param nic
|
|
* @return
|
|
* @throws ResourceUnavailableException
|
|
* @throws ConcurrentOperationException
|
|
*/
|
|
boolean removeNicFromVm(VirtualMachine vm, NicVO nic) throws ConcurrentOperationException, ResourceUnavailableException;
|
|
|
|
/**
|
|
* @param vm
|
|
* @param network
|
|
* @param broadcastUri TODO
|
|
* @return
|
|
* @throws ResourceUnavailableException
|
|
* @throws ConcurrentOperationException
|
|
*/
|
|
boolean removeVmFromNetwork(VirtualMachine vm, Network network, URI broadcastUri) throws ConcurrentOperationException, ResourceUnavailableException;
|
|
|
|
/**
|
|
* @param profile
|
|
* @param hvGuru
|
|
* @return
|
|
*/
|
|
VirtualMachineTO toVmTO(VirtualMachineProfile profile);
|
|
|
|
|
|
boolean reConfigureVm(VirtualMachine vm, ServiceOffering newServiceOffering, boolean sameHost)
|
|
throws ResourceUnavailableException, ConcurrentOperationException;
|
|
|
|
boolean findHostAndMigrate(String vmUuid, Long newSvcOfferingId) throws InsufficientCapacityException,
|
|
ConcurrentOperationException, ResourceUnavailableException,
|
|
VirtualMachineMigrationException, ManagementServerException;
|
|
|
|
boolean migrateForScale(String vmUuid, long srcHostId, DeployDestination dest, Long newSvcOfferingId)
|
|
throws ResourceUnavailableException, ConcurrentOperationException,
|
|
ManagementServerException, VirtualMachineMigrationException;
|
|
|
|
NicTO toNicTO(NicProfile nic, HypervisorType hypervisorType);
|
|
}
|