package org.ovirt.engine.core.bll.storage.pool; import java.util.List; import java.util.Map; import org.ovirt.engine.core.bll.InternalCommandAttribute; import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute; import org.ovirt.engine.core.bll.context.CommandContext; import org.ovirt.engine.core.bll.storage.connection.CINDERStorageHelper; import org.ovirt.engine.core.bll.storage.connection.StorageHelperDirector; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.action.ConnectHostToStoragePoolServersParameters; import org.ovirt.engine.core.common.businessentities.StorageServerConnections; import org.ovirt.engine.core.common.businessentities.storage.StorageType; import org.ovirt.engine.core.common.vdscommands.StorageServerConnectionManagementVDSParameters; import org.ovirt.engine.core.common.vdscommands.VDSCommandType; /** * Connect host to all Storage server connections in Storage pool. We * considering that connection failed only if data domains failed to connect. If * Iso/Export domains failed to connect - only log it. */ @NonTransactiveCommandAttribute @InternalCommandAttribute public class ConnectHostToStoragePoolServersCommand extends ConnectHostToStoragePoolServerCommandBase<ConnectHostToStoragePoolServersParameters> { public ConnectHostToStoragePoolServersCommand(ConnectHostToStoragePoolServersParameters parameters, CommandContext cmdContext) { super(parameters, cmdContext); setStoragePool(parameters.getStoragePool()); setVds(parameters.getVds()); } @Override protected void executeCommand() { initConnectionList(getParameters().isConnectToInactiveDomains()); setSucceeded(connectStorageServer(getConnectionsTypeMap())); if (!getSucceeded()) { auditLogDirector.log(this, AuditLogType.CONNECT_STORAGE_SERVERS_FAILED); } } private boolean connectStorageServer(Map<StorageType, List<StorageServerConnections>> connectionsByType) { boolean connectSucceeded = true; for (Map.Entry<StorageType, List<StorageServerConnections>> connectionToType : connectionsByType.entrySet()) { StorageType connectionsType = connectionToType.getKey(); List<StorageServerConnections> connections = connectionToType.getValue(); connectSucceeded = connectStorageServersByType(connectionsType, connections) && connectSucceeded; } CINDERStorageHelper CINDERStorageHelper = new CINDERStorageHelper(); if (CINDERStorageHelper.isActiveCinderDomainAvailable(getStoragePool().getId())) { connectSucceeded &= CINDERStorageHelper.prepareConnectHostToStoragePoolServers( getContext(), getParameters(), null); } log.info("Host '{}' storage connection was {} ", getVds().getName(), connectSucceeded ? "succeeded" : "failed"); return connectSucceeded; } private boolean connectStorageServersByType(StorageType storageType, List<StorageServerConnections> connections) { if (!StorageHelperDirector.getInstance().getItem(storageType).prepareConnectHostToStoragePoolServers(getContext(), getParameters(), connections)) { return false; } Map<String, String> retValues = (Map<String, String>) runVdsCommand( VDSCommandType.ConnectStorageServer, new StorageServerConnectionManagementVDSParameters(getVds().getId(), getStoragePool().getId(), storageType, connections)).getReturnValue(); return StorageHelperDirector.getInstance().getItem(storageType).isConnectSucceeded(retValues, connections); } }