package org.ovirt.engine.core.vdsbroker.vdsbroker; import java.util.ArrayList; import java.util.List; import java.util.Map; import javax.inject.Inject; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.vdscommands.GetVmsFromExternalProviderParameters; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogable; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableImpl; public class GetVmsFullInfoFromExternalProviderVDSCommand<T extends GetVmsFromExternalProviderParameters> extends VdsBrokerCommand<T> { private VMListReturn vmListReturn; @Inject private AuditLogDirector auditLogDirector; public GetVmsFullInfoFromExternalProviderVDSCommand(T parameters) { super(parameters); } @Override protected void executeVdsBrokerCommand() { vmListReturn = getBroker().getExternalVmList(getParameters().getUrl(), getParameters().getUsername(), getParameters().getPassword(), getParameters().getNamesOfVms()); proceedProxyReturnValue(); List<VM> vms = new ArrayList<>(); List<VM> notDownVms = new ArrayList<>(); for (Map<String, Object> map : vmListReturn.vmList) { VM vm = VdsBrokerObjectsBuilder.buildVmsDataFromExternalProvider(map); if (vm != null) { vm.setOrigin(getParameters().getOriginType()); vms.add(vm); // identify vms not in Down status if (!vm.isDown()) { notDownVms.add(vm); } } } logNonDownVms(notDownVms); setReturnValue(vms); } @Override protected Status getReturnStatus() { return vmListReturn.status; } @Override protected Object getReturnValueFromBroker() { return vmListReturn; } private void logNonDownVms(List<VM> notDownVms) { if (!notDownVms.isEmpty()) { if (shouldLogToAuditLog()) { AuditLogable logable = new AuditLogableImpl(); logable.addCustomValue("URL", getParameters().getUrl()); logable.addCustomValue("Vms", StringUtils.join(notDownVms, ",")); auditLogDirector.log(logable, AuditLogType.IMPORTEXPORT_GET_EXTERNAL_VMS_NOT_IN_DOWN_STATUS); } else { log.warn( "The following VMs retrieved from external server '{}' are not in down status and therefore can't be imported: '{}'.", getParameters().getUrl(), StringUtils.join(notDownVms, ",")); } } } private boolean shouldLogToAuditLog() { return CollectionUtils.isNotEmpty(getParameters().getNamesOfVms()); } }