package org.ovirt.engine.core.bll.storage.disk; import java.util.List; import org.ovirt.engine.core.bll.ConcurrentChildCommandsExecutionCallback; import org.ovirt.engine.core.bll.DisableInPrepareMode; import org.ovirt.engine.core.bll.InternalCommandAttribute; import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute; import org.ovirt.engine.core.bll.VmTemplateCommand; import org.ovirt.engine.core.bll.context.CommandContext; import org.ovirt.engine.core.bll.storage.disk.image.DisksFilter; import org.ovirt.engine.core.bll.tasks.interfaces.CommandCallback; import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.common.action.UpdateAllTemplateDisksParameters; import org.ovirt.engine.core.common.action.UpdateVolumeCommandParameters; import org.ovirt.engine.core.common.action.VdcActionParametersBase.EndProcedure; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.action.VdcReturnValueBase; import org.ovirt.engine.core.common.businessentities.VdsmImageLocationInfo; import org.ovirt.engine.core.common.businessentities.storage.DiskImage; import org.ovirt.engine.core.common.errors.EngineException; import org.ovirt.engine.core.compat.Guid; @DisableInPrepareMode @NonTransactiveCommandAttribute @InternalCommandAttribute public class UpdateAllTemplateDisksCommand<T extends UpdateAllTemplateDisksParameters> extends VmTemplateCommand<T> { public UpdateAllTemplateDisksCommand(Guid commandId) { super(commandId); } public UpdateAllTemplateDisksCommand(T parameters, CommandContext cmdContext) { super(parameters, cmdContext); } private List<DiskImage> getDiskImages() { vmTemplateHandler.updateDisksFromDb(getVmTemplate()); return DisksFilter.filterImageDisks(getVmTemplate().getDiskTemplateMap().values(), DisksFilter.ONLY_NOT_SHAREABLE); } @Override protected void executeCommand() { getDiskImages().forEach(this::updateDiskImage); setSucceeded(true); } private void updateDiskImage(DiskImage diskImage) { VdcReturnValueBase returnValue = runInternalActionWithTasksContext( VdcActionType.UpdateVolume, buildUpdateVolumeCommandParameters(diskImage)); if (!returnValue.getSucceeded()) { throw new EngineException(returnValue.getFault().getError(), returnValue.getFault().getMessage()); } } private UpdateVolumeCommandParameters buildUpdateVolumeCommandParameters(DiskImage diskImage) { UpdateVolumeCommandParameters parameters = new UpdateVolumeCommandParameters( diskImage.getStoragePoolId(), new VdsmImageLocationInfo(diskImage), getParameters().getLegal(), null, null, getParameters().getShared()); parameters.setParentCommand(getActionType()); parameters.setParentParameters(getParameters()); parameters.setEndProcedure(EndProcedure.COMMAND_MANAGED); return parameters; } @Override public CommandCallback getCallback() { return new ConcurrentChildCommandsExecutionCallback(); } @Override public List<PermissionSubject> getPermissionCheckSubjects() { return null; } }