package org.ovirt.engine.core.bll;
import java.util.List;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.action.VmOperationParameterBase;
import org.ovirt.engine.core.common.action.VmPoolSimpleUserParameters;
import org.ovirt.engine.core.common.businessentities.DbUser;
import org.ovirt.engine.core.common.businessentities.VmPoolType;
import org.ovirt.engine.core.common.businessentities.vm_pool_map;
import org.ovirt.engine.core.common.businessentities.vm_pools;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.compat.LogCompat;
import org.ovirt.engine.core.compat.LogFactoryCompat;
import org.ovirt.engine.core.dal.dbbroker.DbFacade;
public class VmPoolHandler {
/**
* VM should be return to pool after it stopped unless Manual Return VM To Pool chosen.
*
* @param vmId
* The VM's id.
*/
public static void ProcessVmPoolOnStopVm(Guid vmId) {
vm_pool_map map = DbFacade.getInstance().getVmPoolDAO().getVmPoolMapByVmGuid(vmId);
if (map != null) {
vm_pools pool = DbFacade.getInstance().getVmPoolDAO().get(map.getvm_pool_id());
if (pool != null && pool.getvm_pool_type() == VmPoolType.Automatic) {
List<DbUser> users = DbFacade.getInstance().getDbUserDAO()
.getAllForVm(vmId);
// shuld be only one user in the collection
for (DbUser dbUser : users) {
Backend.getInstance().runInternalAction(VdcActionType.DetachUserFromVmFromPool,
new VmPoolSimpleUserParameters(map.getvm_pool_id(), dbUser.getuser_id()));
}
}
}
removeVmStatelessImages(vmId);
}
public static void removeVmStatelessImages(Guid vmId) {
if (DbFacade.getInstance().getDiskImageDAO().getAllStatelessVmImageMapsForVm(vmId).size() > 0) {
log.infoFormat("VdcBll.VmPoolHandler.ProcessVmPoolOnStopVm - Deleting snapshot for stateless vm {0}", vmId);
Backend.getInstance().runInternalAction(VdcActionType.RestoreStatelessVm,
new VmOperationParameterBase(vmId));
}
}
private static LogCompat log = LogFactoryCompat.getLog(VmPoolHandler.class);
}