mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
Verify QCOW2 features on direct download of template
This commit is contained in:
parent
54b3519df1
commit
966b75d0b9
@ -26,6 +26,7 @@ import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.text.DateFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
@ -63,6 +64,7 @@ import org.apache.cloudstack.storage.command.ResignatureCommand;
|
||||
import org.apache.cloudstack.storage.command.SnapshotAndCopyAnswer;
|
||||
import org.apache.cloudstack.storage.command.SnapshotAndCopyCommand;
|
||||
import org.apache.cloudstack.storage.command.SyncVolumePathCommand;
|
||||
import org.apache.cloudstack.storage.formatinspector.Qcow2Inspector;
|
||||
import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
|
||||
import org.apache.cloudstack.storage.to.SnapshotObjectTO;
|
||||
import org.apache.cloudstack.storage.to.TemplateObjectTO;
|
||||
@ -2394,6 +2396,22 @@ public class KVMStorageProcessor implements StorageProcessor {
|
||||
|
||||
template = storagePoolMgr.createPhysicalDiskFromDirectDownloadTemplate(tempFilePath, destTemplatePath, destPool, cmd.getFormat(), cmd.getWaitInMillSeconds());
|
||||
|
||||
String templatePath = template.getPath();
|
||||
if (templatePath != null) {
|
||||
try {
|
||||
Qcow2Inspector.validateQcow2File(templatePath);
|
||||
} catch (RuntimeException e) {
|
||||
try {
|
||||
Files.deleteIfExists(Path.of(templatePath));
|
||||
} catch (IOException ioException) {
|
||||
s_logger.warn(String.format("Unable to remove file [%s]; consider removing it manually.", templatePath), ioException);
|
||||
}
|
||||
|
||||
s_logger.error(String.format("The downloaded file [%s] is not a valid QCOW2.", templatePath), e);
|
||||
return new DirectDownloadAnswer(false, "The downloaded file is not a valid QCOW2. Ask the administrator to check the logs for more details.", true);
|
||||
}
|
||||
}
|
||||
|
||||
if (!storagePoolMgr.disconnectPhysicalDisk(pool.getPoolType(), pool.getUuid(), destTemplatePath)) {
|
||||
s_logger.warn("Unable to disconnect physical disk at path: " + destTemplatePath + ", in storage pool id: " + pool.getUuid());
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user