package org.ovirt.engine.core.bll.network.host; import java.util.List; import java.util.stream.Collectors; import javax.inject.Inject; import org.ovirt.engine.core.bll.VdsCommand; import org.ovirt.engine.core.bll.context.CommandContext; import org.ovirt.engine.core.bll.network.predicate.NetworkNotInSyncPredicate; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.action.PersistentHostSetupNetworksParameters; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.action.VdcReturnValueBase; import org.ovirt.engine.core.common.action.VdsActionParameters; import org.ovirt.engine.core.common.businessentities.network.NetworkAttachment; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.dao.network.NetworkAttachmentDao; public class SyncAllHostNetworksCommand extends VdsCommand { @Inject private NetworkAttachmentDao networkAttachmentDao; public SyncAllHostNetworksCommand(VdsActionParameters parameters, CommandContext commandContext) { super(parameters, commandContext); } @Override protected void executeCommand() { PersistentHostSetupNetworksParameters parameters = generateSyncAllHostNetworksParameters(); VdcReturnValueBase retVal = runInternalAction(VdcActionType.PersistentHostSetupNetworks, parameters, cloneContextAndDetachFromParent()); if (!retVal.getSucceeded()) { propagateFailure(retVal); } else { setSucceeded(true); } } @Override public AuditLogType getAuditLogTypeValue() { return getSucceeded() ? AuditLogType.HOST_SYNC_ALL_NETWORKS_FINISHED : AuditLogType.HOST_SYNC_ALL_NETWORKS_FAILED; } private PersistentHostSetupNetworksParameters generateSyncAllHostNetworksParameters() { PersistentHostSetupNetworksParameters parameters = new PersistentHostSetupNetworksParameters(getVdsId()); VdcQueryReturnValue returnValue = runInternalQuery(VdcQueryType.GetNetworkAttachmentsByHostId, new IdQueryParameters(getVdsId())); List<NetworkAttachment> networkAttachments = returnValue.getReturnValue(); List<NetworkAttachment> unSyncNetworkAttachments = networkAttachments.stream().filter(new NetworkNotInSyncPredicate()).collect(Collectors.toList()); for (NetworkAttachment networkAttachment : unSyncNetworkAttachments) { networkAttachment.setOverrideConfiguration(true); } parameters.setNetworkAttachments(unSyncNetworkAttachments); parameters.setSequence(parameters.getSequence() + 1); parameters.setTotal(parameters.getTotal() + 1); return parameters; } }