You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ed...@apache.org on 2013/08/08 04:14:39 UTC
[2/2] git commit: updated refs/heads/master to 9bce985
CLOUDSTACK-4108: fix create template from snapshot for vmware& s3
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/9bce985f
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/9bce985f
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/9bce985f
Branch: refs/heads/master
Commit: 9bce985f622ed1ac25b1ad700a4e2bfb88e38ab0
Parents: e851f4a
Author: Edison Su <su...@gmail.com>
Authored: Wed Aug 7 19:11:28 2013 -0700
Committer: Edison Su <su...@gmail.com>
Committed: Wed Aug 7 19:14:22 2013 -0700
----------------------------------------------------------------------
.../storage/resource/VmwareStorageProcessor.java | 14 +++++++++++---
.../VmwareStorageSubsystemCommandHandler.java | 14 ++++++++++++++
2 files changed, 25 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/9bce985f/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java
index 527950d..8bb11c0 100644
--- a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java
+++ b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java
@@ -806,9 +806,17 @@ public class VmwareStorageProcessor implements StorageProcessor {
private Ternary<String, Long, Long> createTemplateFromSnapshot(String installPath, String templateUniqueName,
String secStorageUrl, String snapshotPath, Long templateId) throws Exception {
//Snapshot path is decoded in this form: /snapshots/account/volumeId/uuid/uuid
- String[] tokens = snapshotPath.split(File.separator);
- String backupSSUuid = tokens[tokens.length - 1];
- String snapshotFolder = StringUtils.join(tokens, File.separator, 0, tokens.length -1);
+ String backupSSUuid;
+ String snapshotFolder;
+ if (snapshotPath.endsWith(".ova")) {
+ int index = snapshotPath.lastIndexOf(File.separator);
+ backupSSUuid = snapshotPath.substring(index + 1).replace(".ova", "");
+ snapshotFolder = snapshotPath.substring(0, index);
+ } else {
+ String[] tokens = snapshotPath.split(File.separator);
+ backupSSUuid = tokens[tokens.length - 1];
+ snapshotFolder = StringUtils.join(tokens, File.separator, 0, tokens.length -1);
+ }
String secondaryMountPoint = mountService.getMountPoint(secStorageUrl);
String installFullPath = secondaryMountPoint + "/" + installPath;
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/9bce985f/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageSubsystemCommandHandler.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageSubsystemCommandHandler.java b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageSubsystemCommandHandler.java
index 7d3c888..f4a7db0 100644
--- a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageSubsystemCommandHandler.java
+++ b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageSubsystemCommandHandler.java
@@ -30,6 +30,7 @@ import com.cloud.storage.DataStoreRole;
import org.apache.cloudstack.storage.command.CopyCmdAnswer;
import org.apache.cloudstack.storage.command.CopyCommand;
import org.apache.cloudstack.storage.to.SnapshotObjectTO;
+import org.apache.cloudstack.storage.to.TemplateObjectTO;
import org.apache.cloudstack.storage.to.VolumeObjectTO;
import java.io.File;
@@ -87,6 +88,19 @@ public class VmwareStorageSubsystemCommandHandler extends StorageSubsystemComman
String name = path.substring(index + 1);
storageManager.createOva(parentPath + File.separator + path, name);
vol.setPath(path + File.separator + name + ".ova");
+ } else if (srcData.getObjectType() == DataObjectType.SNAPSHOT && destData.getObjectType() == DataObjectType.TEMPLATE) {
+ //create template from snapshot on src at first, then copy it to s3
+ TemplateObjectTO cacheTemplate = (TemplateObjectTO)destData;
+ cacheTemplate.setDataStore(srcDataStore);
+ CopyCmdAnswer answer = (CopyCmdAnswer)processor.createTemplateFromSnapshot(cmd);
+ if (!answer.getResult()) {
+ return answer;
+ }
+ cacheTemplate.setDataStore(destDataStore);
+ TemplateObjectTO template = (TemplateObjectTO)answer.getNewData();
+ template.setDataStore(srcDataStore);
+ CopyCommand newCmd = new CopyCommand(template, destData, cmd.getWait(), cmd.executeInSequence());
+ return storageResource.defaultAction(newCmd);
}
needDelegation = true;
}