package org.ovirt.engine.core.bll.storage;
import java.util.HashMap;
import org.ovirt.engine.core.bll.Backend;
import org.ovirt.engine.core.bll.InternalCommandAttribute;
import org.ovirt.engine.core.common.action.StoragePoolParametersBase;
import org.ovirt.engine.core.common.businessentities.StoragePoolStatus;
import org.ovirt.engine.core.common.vdscommands.ConnectStorageServerVDSCommandParameters;
import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
import org.ovirt.engine.core.dal.VdcBllMessages;
@InternalCommandAttribute
public class DisconnectHostFromStoragePoolServersCommand<T extends StoragePoolParametersBase> extends
ConnectHostToStoragePooServerCommandBase<T> {
public DisconnectHostFromStoragePoolServersCommand(T parameters) {
super(parameters);
setVdsId(parameters.getVdsId());
}
@Override
protected void executeCommand() {
InitConnectionList();
// TODO: check if host belong to more than one storage pool
VDSReturnValue vdsReturnValue = Backend
.getInstance()
.getResourceManager()
.RunVdsCommand(
VDSCommandType.DisconnectStorageServer,
new ConnectStorageServerVDSCommandParameters(getVds().getvds_id(), getStoragePool().getId(),
getStoragePool().getstorage_pool_type(), getConnections()));
setSucceeded(vdsReturnValue.getSucceeded());
if (!vdsReturnValue.getSucceeded()) {
StorageHelperDirector.getInstance().getItem(getStoragePool().getstorage_pool_type())
.IsConnectSucceeded((HashMap<String, String>) vdsReturnValue.getReturnValue(), getConnections());
}
if (getIsoConnections() != null && getIsoConnections().size() != 0) {
vdsReturnValue = Backend
.getInstance()
.getResourceManager()
.RunVdsCommand(
VDSCommandType.DisconnectStorageServer,
new ConnectStorageServerVDSCommandParameters(getVds().getvds_id(),
getStoragePool().getId(), getIsoType(), getIsoConnections()));
setSucceeded(vdsReturnValue.getSucceeded());
if (!vdsReturnValue.getSucceeded()) {
StorageHelperDirector.getInstance()
.getItem(getIsoType())
.IsConnectSucceeded((HashMap<String, String>) vdsReturnValue.getReturnValue(),
getIsoConnections());
}
}
if (getExportConnections() != null && getExportConnections().size() != 0) {
vdsReturnValue = Backend
.getInstance()
.getResourceManager()
.RunVdsCommand(
VDSCommandType.DisconnectStorageServer,
new ConnectStorageServerVDSCommandParameters(getVds().getvds_id(),
getStoragePool().getId(), getExportType(), getExportConnections()));
setSucceeded(vdsReturnValue.getSucceeded());
if (!vdsReturnValue.getSucceeded()) {
StorageHelperDirector.getInstance()
.getItem(getExportType())
.IsConnectSucceeded((HashMap<String, String>) vdsReturnValue.getReturnValue(),
getExportConnections());
}
}
}
@Override
protected boolean canDoAction() {
boolean returnValue = CheckStoragePool()
&& CheckStoragePoolStatusNotEqual(StoragePoolStatus.Uninitialized,
VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_POOL_STATUS_ILLEGAL)
&& InitializeVds();
return returnValue;
}
}