package org.ovirt.engine.core.bll.storage; import org.ovirt.engine.core.bll.Backend; import org.ovirt.engine.core.common.action.StorageDomainManagementParameter; import org.ovirt.engine.core.common.action.StorageDomainPoolParametersBase; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.action.VdcReturnValueBase; import org.ovirt.engine.core.common.businessentities.StoragePoolStatus; import org.ovirt.engine.core.common.businessentities.StorageType; import org.ovirt.engine.core.common.businessentities.VDSType; //import org.ovirt.engine.core.common.businessentities.VDSType; import org.ovirt.engine.core.common.businessentities.storage_pool; import org.ovirt.engine.core.common.businessentities.storage_server_connections; import org.ovirt.engine.core.common.config.Config; import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.VdcBllMessages; import org.ovirt.engine.core.dal.dbbroker.DbFacade; public class AddLocalStorageDomainCommand<T extends StorageDomainManagementParameter> extends AddStorageDomainCommon<T> { /** * Constructor for command creation when compensation is applied on startup * * @param commandId */ protected AddLocalStorageDomainCommand(Guid commandId) { super(commandId); } public AddLocalStorageDomainCommand(T parameters) { super(parameters); } @Override protected boolean canDoAction() { boolean retVal = super.canDoAction(); if (retVal) { storage_pool storagePool = DbFacade.getInstance().getStoragePoolDAO().getForVds(getParameters().getVdsId()); if (storagePool == null) { addCanDoActionMessage(VdcBllMessages.NETWORK_CLUSTER_HAVE_NOT_EXISTING_DATA_CENTER_NETWORK); retVal = false; } else { setStoragePool(storagePool); } if (retVal && storagePool.getstorage_pool_type() != StorageType.LOCALFS) { addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_POOL_IS_NOT_LOCAL); retVal = false; } if (retVal && storagePool.getstatus() != StoragePoolStatus.Uninitialized) { retVal = CheckMasterDomainIsUp(); } // we limit RHEV-H local storage to its persistence mount - /data/images/rhev/ if (retVal && this.getVds().getvds_type() == VDSType.oVirtNode) { storage_server_connections conn = DbFacade.getInstance().getStorageServerConnectionDAO().get(getParameters().getStorageDomain() .getstorage()); if (!conn.getconnection().equals(Config.<String> GetValue(ConfigValues.RhevhLocalFSPath))) { addCanDoActionMessage(VdcBllMessages.RHEVH_LOCALFS_WRONG_PATH_LOCATION); addCanDoActionMessage(String.format("$path %1$s", Config.<String> GetValue(ConfigValues.RhevhLocalFSPath))); retVal = false; } } } return retVal; } @Override protected void executeCommand() { super.executeCommand(); if (getSucceeded()) { VdcReturnValueBase returnValue = Backend.getInstance() .runInternalAction( VdcActionType.AttachStorageDomainToPool, new StorageDomainPoolParametersBase(getStorageDomain().getid(), getStoragePool().getId())); if(!returnValue.getSucceeded()) { getReturnValue().setSucceeded(false); getReturnValue().setFault(returnValue.getFault()); } } } }