From d748010da3c2e3bbe63995c12e8ade919ba126e2 Mon Sep 17 00:00:00 2001 From: Kelven Yang Date: Wed, 3 Nov 2010 19:18:34 -0700 Subject: [PATCH] Create Template from volume and snapshot for vmware --- .../api/CreatePrivateTemplateFromVolumeCommand.java | 13 +++++++++---- .../hypervisor/xen/resource/CitrixResourceBase.java | 1 - server/src/com/cloud/vm/UserVmManagerImpl.java | 3 ++- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/core/src/com/cloud/agent/api/CreatePrivateTemplateFromVolumeCommand.java b/core/src/com/cloud/agent/api/CreatePrivateTemplateFromVolumeCommand.java index 957e84fcb73..60f34e285b6 100644 --- a/core/src/com/cloud/agent/api/CreatePrivateTemplateFromVolumeCommand.java +++ b/core/src/com/cloud/agent/api/CreatePrivateTemplateFromVolumeCommand.java @@ -18,7 +18,8 @@ package com.cloud.agent.api; -public class CreatePrivateTemplateFromVolumeCommand extends SnapshotCommand { +public class CreatePrivateTemplateFromVolumeCommand extends SnapshotCommand { + private String _vmName; private String _volumePath; private String _userSpecifiedName; private String _uniqueName; @@ -30,14 +31,14 @@ public class CreatePrivateTemplateFromVolumeCommand extends SnapshotCommand { public CreatePrivateTemplateFromVolumeCommand() {} - public CreatePrivateTemplateFromVolumeCommand(String secondaryStorageURL, long templateId, long accountId, String userSpecifiedName, String uniqueName, String volumePath) { + public CreatePrivateTemplateFromVolumeCommand(String secondaryStorageURL, long templateId, long accountId, String userSpecifiedName, String uniqueName, String volumePath, String vmName) { _secondaryStorageURL = secondaryStorageURL; _templateId = templateId; _accountId = accountId; _userSpecifiedName = userSpecifiedName; _uniqueName = uniqueName; - _volumePath = volumePath; - + _volumePath = volumePath; + _vmName = vmName; } @Override @@ -61,6 +62,10 @@ public class CreatePrivateTemplateFromVolumeCommand extends SnapshotCommand { return _templateId; } + public String getVmName() { + return _vmName; + } + public void setVolumePath(String _volumePath) { this._volumePath = _volumePath; } diff --git a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java index 32a29bfec07..2eb4221eb44 100644 --- a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java +++ b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java @@ -5480,7 +5480,6 @@ public abstract class CitrixResourceBase implements StoragePoolResource, ServerR return new CreatePrivateTemplateAnswer(cmd, result, details); } - protected CreatePrivateTemplateAnswer execute(final CreatePrivateTemplateFromSnapshotCommand cmd) { String primaryStorageNameLabel = cmd.getPrimaryStoragePoolNameLabel(); Long dcId = cmd.getDataCenterId(); diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 832beea92d9..9fb3030109b 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -2615,6 +2615,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM // The volume below could be destroyed or removed. VolumeVO volume = _volsDao.findById(volumeId); + String vmName = _storageMgr.getVmNameOnVolume(volume); // If private template is created from Volume, check that the volume will not be active when the private template is created if (snapshotId == null && !_storageMgr.volumeInactive(volume)) { @@ -2675,7 +2676,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM } cmd = new CreatePrivateTemplateFromVolumeCommand(secondaryStorageURL, templateId, volume.getAccountId(), - command.getTemplateName(), uniqueName, volume.getPath()); + command.getTemplateName(), uniqueName, volume.getPath(), vmName); } else { throw new CloudRuntimeException("Creating private Template need to specify snapshotId or volumeId");