Skip to content

Commit 453fe8b

Browse files
author
Abhinandan Prateek
committed
md-ova: ISO metadata fix
1 parent 12071c4 commit 453fe8b

File tree

2 files changed

+71
-43
lines changed

2 files changed

+71
-43
lines changed

engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@
6060
import org.apache.log4j.Logger;
6161
import org.springframework.stereotype.Component;
6262
import javax.inject.Inject;
63+
64+
import java.io.File;
6365
import java.util.ArrayList;
6466
import java.util.Date;
6567
import java.util.HashMap;
@@ -745,9 +747,14 @@ private boolean createChildDataDiskTemplate(DatadiskTO dataDiskTemplate, VMTempl
745747
String suffix = dataDiskTemplate.isIso() ? "-IsoDiskTemplate-" : "-DataDiskTemplate-";
746748
TemplateType ttype = dataDiskTemplate.isIso() ? TemplateType.ISODISK : TemplateType.DATADISK;
747749
final long templateId = _templateDao.getNextInSequence(Long.class, "id");
748-
VMTemplateVO templateVO = new VMTemplateVO(templateId, template.getName() + suffix + diskCount, format, false, false, false, ttype, template.getUrl(),
749-
template.requiresHvm(), template.getBits(), template.getAccountId(), null, template.getDisplayText() + suffix, false, 0, false, template.getHypervisorType(), null,
750+
long guestOsId = dataDiskTemplate.isIso() ? 1 : 0;
751+
String templateName = dataDiskTemplate.isIso() ? dataDiskTemplate.getPath().substring(dataDiskTemplate.getPath().lastIndexOf(File.separator) + 1) : template.getName() + suffix + diskCount;
752+
VMTemplateVO templateVO = new VMTemplateVO(templateId, templateName, format, false, false, false, ttype, template.getUrl(),
753+
template.requiresHvm(), template.getBits(), template.getAccountId(), null, templateName, false, guestOsId, false, template.getHypervisorType(), null,
750754
null, false, false);
755+
if (dataDiskTemplate.isIso()){
756+
templateVO.setUniqueName(templateName);
757+
}
751758
templateVO.setParentTemplateId(template.getId());
752759
templateVO.setSize(dataDiskTemplate.getVirtualSize());
753760
templateVO = _templateDao.persist(templateVO);

services/secondary-storage/server/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java

Lines changed: 62 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -452,7 +452,7 @@ public Answer execute(CreateDatadiskTemplateCommand cmd) {
452452
OVFHelper ovfHelper = new OVFHelper();
453453
ovfHelper.rewriteOVFFile(ovfFilePath + ".orig", newOvfFilePath, diskName);
454454

455-
postCreatePrivateTemplate(newTmplDirAbsolute, templateId, templateUniqueName, physicalSize, virtualSize);
455+
postCreatePrivateTemplate(diskName, newTmplDirAbsolute, templateId, templateUniqueName, physicalSize, virtualSize);
456456
writeMetaOvaForTemplate(newTmplDirAbsolute, ovfFilePath.substring(ovfFilePath.lastIndexOf(File.separator) + 1), diskName, templateUniqueName, physicalSize);
457457

458458
diskTemplate.setId(templateId);
@@ -526,47 +526,68 @@ private static String getTemplateRelativeDirInSecStorage(long accountId, long te
526526
return "template/tmpl/" + accountId + "/" + templateId;
527527
}
528528

529-
private void postCreatePrivateTemplate(String installFullPath, long templateId, String templateName, long size, long virtualSize) throws Exception {
530-
529+
private void postCreatePrivateTemplate(final String diskName, final String installFullPath, final long templateId, final String templateName, final long size, final long virtualSize) throws Exception {
531530
// TODO a bit ugly here
532-
BufferedWriter out = null;
533-
try {
534-
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(installFullPath + "/template.properties"), "UTF-8"));
535-
out.write("filename=" + templateName + ".ova");
536-
out.newLine();
537-
out.write("description=");
538-
out.newLine();
539-
out.write("checksum=");
540-
out.newLine();
541-
out.write("hvm=false");
542-
out.newLine();
543-
out.write("size=" + size);
544-
out.newLine();
545-
//out.write("ova=true");
546-
out.write("ova=false"); //volss: the real ova file is not created
547-
out.newLine();
548-
out.write("id=" + templateId);
549-
out.newLine();
550-
out.write("public=false");
551-
out.newLine();
552-
out.write("ova.filename=" + templateName + ".ova");
553-
out.newLine();
554-
out.write("uniquename=" + templateName);
555-
out.newLine();
556-
out.write("ova.virtualsize=" + virtualSize);
557-
out.newLine();
558-
out.write("virtualsize=" + virtualSize);
559-
out.newLine();
560-
out.write("ova.size=" + size);
561-
out.newLine();
562-
} finally {
563-
if (out != null) {
564-
out.close();
565-
}
566-
}
567-
}
568-
569-
private void writeMetaOvaForTemplate(String installFullPath, String ovfFilename, String vmdkFilename, String templateName, long diskSize) throws Exception {
531+
try (BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(installFullPath + "/template.properties"), "UTF-8"));) {
532+
if (diskName.endsWith("iso")) {
533+
out.write("filename=" + diskName);
534+
out.newLine();
535+
out.write("iso.filename=" + diskName);
536+
out.newLine();
537+
out.write("uniquename=" + diskName.substring(diskName.lastIndexOf('.') + 1));
538+
out.newLine();
539+
out.write("description=privateIso");
540+
out.newLine();
541+
out.write("iso.virtualsize=" + virtualSize);
542+
out.newLine();
543+
out.write("virtualsize=" + virtualSize);
544+
out.newLine();
545+
out.write("iso.size=" + size);
546+
out.newLine();
547+
out.write("checksum=");
548+
out.newLine();
549+
out.write("hvm=false");
550+
out.newLine();
551+
out.write("size=" + size);
552+
out.newLine();
553+
out.write("iso=true");
554+
out.newLine();
555+
out.write("id=" + templateId);
556+
out.newLine();
557+
out.write("public=false");
558+
out.newLine();
559+
} else {
560+
out.write("filename=" + diskName);
561+
out.newLine();
562+
out.write("description=privateVmdk");
563+
out.newLine();
564+
out.write("checksum=");
565+
out.newLine();
566+
out.write("hvm=false");
567+
out.newLine();
568+
out.write("size=" + size);
569+
out.newLine();
570+
out.write("vmdk=false");
571+
out.newLine();
572+
out.write("id=" + templateId);
573+
out.newLine();
574+
out.write("public=false");
575+
out.newLine();
576+
out.write("vmdk.filename=" + diskName);
577+
out.newLine();
578+
out.write("uniquename=" + diskName.substring(diskName.lastIndexOf('.') + 1));
579+
out.newLine();
580+
out.write("vmdk.virtualsize=" + virtualSize);
581+
out.newLine();
582+
out.write("virtualsize=" + virtualSize);
583+
out.newLine();
584+
out.write("vmdk.size=" + size);
585+
out.newLine();
586+
}
587+
}
588+
}
589+
590+
private void writeMetaOvaForTemplate(final String installFullPath, final String ovfFilename, final String vmdkFilename, final String templateName, final long diskSize) throws Exception {
570591

571592
// TODO a bit ugly here
572593
BufferedWriter out = null;

0 commit comments

Comments
 (0)