package org.ovirt.engine.core.vdsbroker; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.ovirt.engine.core.common.vdscommands.UpdateVmPolicyVDSParams; import org.ovirt.engine.core.vdsbroker.vdsbroker.VdsBrokerCommand; import org.ovirt.engine.core.vdsbroker.vdsbroker.VdsProperties; public class UpdateVmPolicyVDSCommand<P extends UpdateVmPolicyVDSParams> extends VdsBrokerCommand<P> { public UpdateVmPolicyVDSCommand(P parameters) { super(parameters); } @Override protected void executeVdsBrokerCommand() { status = getBroker().updateVmPolicy(build()); proceedProxyReturnValue(); } protected Map<String, Object> build() { Map<String, Object> struct = new HashMap<>(); struct.put(VdsProperties.vm_guid, getParameters().getVmId().toString()); if (getParameters().getCpuLimit() != null) { struct.put(VdsProperties.vCpuLimit, String.valueOf(getParameters().getCpuLimit())); } List<Object> ioTunesList = new ArrayList<>(); for (UpdateVmPolicyVDSParams.IoTuneParams param : getParameters().getIoTuneList()) { Map<String, Object> ioStruct = new HashMap<>(); ioStruct.put(VdsProperties.DomainId, param.getDomainId()); ioStruct.put(VdsProperties.PoolId, param.getPoolId()); ioStruct.put(VdsProperties.ImageId, param.getImageId()); ioStruct.put(VdsProperties.VolumeId, param.getVolumeId()); // StorageQos has only one limit value, // so sending it to vdsm as maximum and guaranteed ioStruct.put(VdsProperties.IoPolicyMaximum, param.getIoTune()); ioStruct.put(VdsProperties.IoPolicyGuarenteed, param.getIoTune()); ioTunesList.add(ioStruct); } if (!ioTunesList.isEmpty()) { struct.put(VdsProperties.Iotune, ioTunesList); } return struct; } }