package org.ovirt.engine.core.bll.storage;
import org.ovirt.engine.core.bll.Backend;
import org.ovirt.engine.core.common.AuditLogType;
import org.ovirt.engine.core.common.action.ExtendSANStorageDomainParameters;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.action.VdcReturnValueBase;
import org.ovirt.engine.core.common.businessentities.LUNs;
import org.ovirt.engine.core.common.businessentities.StorageDomainStatus;
import org.ovirt.engine.core.common.businessentities.StorageType;
import org.ovirt.engine.core.common.vdscommands.ExtendStorageDomainVDSCommandParameters;
import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
import org.ovirt.engine.core.dal.VdcBllMessages;
public class ExtendSANStorageDomainCommand<T extends ExtendSANStorageDomainParameters> extends
StorageDomainCommandBase<T> {
public ExtendSANStorageDomainCommand(T parameters) {
super(parameters);
}
@Override
protected void executeCommand() {
SetStorageDomainStatus(StorageDomainStatus.Locked);
for (LUNs lun : getParameters().getLunsList()) {
ProceedLUNInDb(lun);
}
if (Backend
.getInstance()
.getResourceManager()
.RunVdsCommand(
VDSCommandType.ExtendStorageDomain,
new ExtendStorageDomainVDSCommandParameters(getStoragePoolId().getValue(), getStorageDomain()
.getid(), getParameters().getLunIds())).getSucceeded()) {
SetStorageDomainStatus(StorageDomainStatus.Active);
setSucceeded(true);
}
}
@Override
protected boolean canDoAction() {
super.canDoAction();
addCanDoActionMessage(VdcBllMessages.VAR__ACTION__EXTEND);
boolean returnValue = CheckStorageDomain() && checkStorageDomainStatus(StorageDomainStatus.Active);
if (returnValue
&& (getStorageDomain().getstorage_type() == StorageType.NFS || getStorageDomain().getstorage_type() == StorageType.UNKNOWN)) {
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_DOMAIN_TYPE_ILLEGAL);
returnValue = false;
} else {
VdcReturnValueBase connectResult = Backend.getInstance().runInternalAction(
VdcActionType.ConnectAllHostsToLun,
new ExtendSANStorageDomainParameters(getParameters().getStorageDomainId(), getParameters()
.getLunIds()));
if (!connectResult.getSucceeded()) {
addCanDoActionMessage(VdcBllMessages.ERROR_CANNOT_EXTEND_CONNECTION_FAILED);
getReturnValue().getCanDoActionMessages().add(String.format("$hostName %1s$", getVds().getvds_name()));
returnValue = false;
} else {
// use luns list from connect command
getParameters().setLunsList((java.util.ArrayList<LUNs>) connectResult.getActionReturnValue());
}
}
return returnValue;
}
@Override
public AuditLogType getAuditLogTypeValue() {
return getSucceeded() ? AuditLogType.USER_EXTENDED_STORAGE_DOMAIN
: AuditLogType.USER_EXTENDED_STORAGE_DOMAIN_FAILED;
}
}