From 44cae460147898186a56d7d022c734e3ac86e4dc Mon Sep 17 00:00:00 2001 From: Min Chen Date: Wed, 24 Jul 2013 17:49:10 -0700 Subject: [PATCH] CLOUDSTACK-3741: generate template.properties so that KVM processor will not fail with FileNotFound. --- .../resource/NfsSecondaryStorageResource.java | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/services/secondary-storage/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java b/services/secondary-storage/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java index 082fc6c1cdb..e7dc62da239 100755 --- a/services/secondary-storage/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java +++ b/services/secondary-storage/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java @@ -423,11 +423,26 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S String destFileFullPath = destFile.getAbsolutePath() + File.separator + templateName + "." + ImageFormat.QCOW2.getFileExtension(); s_logger.debug("copy snapshot " + srcFile.getAbsolutePath() + " to template " + destFileFullPath); Script.runSimpleBashScript("cp " + srcFile.getAbsolutePath() + " " + destFileFullPath); - // template post processing - QCOW2Processor processor = new QCOW2Processor(); - Map params = new HashMap(); - params.put(StorageLayer.InstanceConfigKey, _storage); try { + // generate template.properties file + String metaFileName = destFile.getAbsolutePath() + File.separator + "template.properties"; + _storage.create(destFile.getAbsolutePath(), "template.properties"); + File metaFile = new File(metaFileName); + FileWriter writer = new FileWriter(metaFile); + BufferedWriter bufferWriter = new BufferedWriter(writer); + bufferWriter.write("uniquename=" + destData.getName()); + bufferWriter.write("\n"); + bufferWriter.write("filename=" + templateName + "." + ImageFormat.QCOW2.getFileExtension()); + bufferWriter.write("\n"); + long size = this._storage.getSize(destFileFullPath); + bufferWriter.write("size=" + size); + bufferWriter.close(); + writer.close(); + // template post processing + QCOW2Processor processor = new QCOW2Processor(); + Map params = new HashMap(); + params.put(StorageLayer.InstanceConfigKey, _storage); + processor.configure("qcow2 processor", params); String destPath = destFile.getAbsolutePath(); FormatInfo info = processor.process(destPath, null, templateName);