diff --git a/api/src/com/cloud/storage/Storage.java b/api/src/com/cloud/storage/Storage.java index 24ceb5b3fec..7ebdc5e187e 100644 --- a/api/src/com/cloud/storage/Storage.java +++ b/api/src/com/cloud/storage/Storage.java @@ -23,16 +23,25 @@ public class Storage { RAW(false, false, false), VHD(true, true, true), ISO(false, false, false), - VMDK(true, true, true); + VMDK(true, true, true, ".tar.bz2"); private final boolean thinProvisioned; private final boolean supportSparse; private final boolean supportSnapshot; + private final String fileExtension; private ImageFormat(boolean thinProvisioned, boolean supportSparse, boolean supportSnapshot) { this.thinProvisioned = thinProvisioned; this.supportSparse = supportSparse; this.supportSnapshot = supportSnapshot; + fileExtension = null; + } + + private ImageFormat(boolean thinProvisioned, boolean supportSparse, boolean supportSnapshot, String fileExtension) { + this.thinProvisioned = thinProvisioned; + this.supportSparse = supportSparse; + this.supportSnapshot = supportSnapshot; + this.fileExtension = fileExtension; } public boolean isThinProvisioned() { @@ -48,7 +57,10 @@ public class Storage { } public String getFileExtension() { - return toString().toLowerCase(); + if(fileExtension == null) + return toString().toLowerCase(); + + return fileExtension; } } diff --git a/core/src/com/cloud/agent/api/storage/PrimaryStorageDownloadCommand.java b/core/src/com/cloud/agent/api/storage/PrimaryStorageDownloadCommand.java index a9010d5782e..f11f17f1bb5 100644 --- a/core/src/com/cloud/agent/api/storage/PrimaryStorageDownloadCommand.java +++ b/core/src/com/cloud/agent/api/storage/PrimaryStorageDownloadCommand.java @@ -28,6 +28,16 @@ public class PrimaryStorageDownloadCommand extends AbstractDownloadCommand { String localPath; String poolUuid; long poolId; + + // + // Temporary hacking to make vmware work quickly, expose NFS raw information to allow + // agent do quick copy over NFS. + // + // provide storage URL (it contains all information to help agent resource to mount the + // storage if needed, example of such URL may be as following + // nfs://192.168.10.231/export/home/kelven/vmware-test/secondary + String secondaryStorageUrl; + String primaryStorageUrl; protected PrimaryStorageDownloadCommand() { } @@ -54,6 +64,22 @@ public class PrimaryStorageDownloadCommand extends AbstractDownloadCommand { return localPath; } + public void setSecondaryStorageUrl(String url) { + secondaryStorageUrl = url; + } + + public String getSecondaryStorageUrl() { + return secondaryStorageUrl; + } + + public void setPrimaryStorageUrl(String url) { + primaryStorageUrl = url; + } + + public String getPrimaryStorageUrl() { + return primaryStorageUrl; + } + @Override public boolean executeInSequence() { return true; diff --git a/core/src/com/cloud/storage/template/VmdkProcessor.java b/core/src/com/cloud/storage/template/VmdkProcessor.java index b8d037c3538..fe060ab02de 100644 --- a/core/src/com/cloud/storage/template/VmdkProcessor.java +++ b/core/src/com/cloud/storage/template/VmdkProcessor.java @@ -20,20 +20,22 @@ public class VmdkProcessor implements Processor { @Override public FormatInfo process(String templatePath, ImageFormat format, String templateName) throws InternalErrorException { if (format != null) { - s_logger.debug("We currently don't handle conversion from " + format + " to VMDK."); + if(s_logger.isInfoEnabled()) + s_logger.info("We currently don't handle conversion from " + format + " to VMDK."); return null; } s_logger.info("Template processing. templatePath: " + templatePath + ", templateName: " + templateName); - String templateFilePath = templatePath + File.separator + templateName + ".tar.bz2"; + String templateFilePath = templatePath + File.separator + templateName + ImageFormat.VMDK.getFileExtension(); if (!_storage.exists(templateFilePath)) { - s_logger.debug("Unable to find the vmware template file: " + templateFilePath); + if(s_logger.isInfoEnabled()) + s_logger.info("Unable to find the vmware template file: " + templateFilePath); return null; } FormatInfo info = new FormatInfo(); info.format = ImageFormat.VMDK; - info.filename = templateName + ".tar.bz2"; + info.filename = templateName + ImageFormat.VMDK.getFileExtension(); info.size = _storage.getSize(templateFilePath); info.virtualSize = info.size; return info; diff --git a/server/src/com/cloud/template/TemplateManagerImpl.java b/server/src/com/cloud/template/TemplateManagerImpl.java index 700aa85c42c..71fe9be0052 100644 --- a/server/src/com/cloud/template/TemplateManagerImpl.java +++ b/server/src/com/cloud/template/TemplateManagerImpl.java @@ -223,7 +223,13 @@ public class TemplateManagerImpl implements TemplateManager { return templateStoragePoolRef; } String url = origUrl + "/" + templateHostRef.getInstallPath(); - PrimaryStorageDownloadCommand dcmd = new PrimaryStorageDownloadCommand(template.getUniqueName(), url, template.getFormat(), template.getAccountId(), pool.getId(), pool.getUuid()); + PrimaryStorageDownloadCommand dcmd = new PrimaryStorageDownloadCommand(template.getUniqueName(), url, template.getFormat(), + template.getAccountId(), pool.getId(), pool.getUuid()); + HostVO secondaryStorageHost = _hostDao.findSecondaryStorageHost(pool.getDataCenterId()); + assert(secondaryStorageHost != null); + dcmd.setSecondaryStorageUrl(secondaryStorageHost.getStorageUrl()); + // TODO temporary hacking, hard-coded to NFS primary data store + dcmd.setPrimaryStorageUrl("nfs://" + pool.getHostAddress() + pool.getPath()); for (StoragePoolHostVO vo : vos) { if (s_logger.isDebugEnabled()) { diff --git a/utils/src/com/cloud/utils/DateUtil.java b/utils/src/com/cloud/utils/DateUtil.java index 436bb8df231..c6659a7cfe1 100644 --- a/utils/src/com/cloud/utils/DateUtil.java +++ b/utils/src/com/cloud/utils/DateUtil.java @@ -18,6 +18,7 @@ package com.cloud.utils; +import java.net.URI; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -235,14 +236,22 @@ public class DateUtil { throw new CloudRuntimeException("Incorrect interval: "+type.toString()); } - return scheduleTime.getTime(); } // test only public static void main(String[] args) { - + try { + URI uri = new URI("nfs://192.168.10.231/export/home/kelven/vmware-test/secondary"); + System.out.println("protocol: " + uri.getScheme()); + System.out.println("Host: " + uri.getHost()); + System.out.println("path: " + uri.getPath()); + System.out.println("port: " + uri.getPort()); + } catch(Exception e) { + } + +/* TimeZone localTimezone = Calendar.getInstance().getTimeZone(); TimeZone gmtTimezone = TimeZone.getTimeZone("GMT"); TimeZone estTimezone = TimeZone.getTimeZone("EST"); @@ -265,6 +274,7 @@ public class DateUtil { System.out.println("Parsed TZ time string : "+ dtParsed.toString()); } catch (ParseException e) { } +*/ } }