Updated Branches:
  refs/heads/master 63c22a150 -> df77c4310

CLOUDSTACK-6103: Pass VM iso information along with
PrepareForMigrationCommand, so that destination hypervisor can
mount pool. This further exposed an issue for KVM where iso
was not getting cleaned up upon successful migration, fixed as well.


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/df77c431
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/df77c431
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/df77c431

Branch: refs/heads/master
Commit: df77c4310a5020f4fc8df8309ada60d5e76ef893
Parents: 63c22a1
Author: Marcus Sorensen <[email protected]>
Authored: Fri Feb 14 00:34:48 2014 -0700
Committer: Marcus Sorensen <[email protected]>
Committed: Fri Feb 14 00:34:48 2014 -0700

----------------------------------------------------------------------
 .../src/com/cloud/template/TemplateManager.java |  9 +++++
 .../orchestration/VolumeOrchestrator.java       | 10 +++---
 .../kvm/resource/LibvirtComputingResource.java  |  6 +++-
 .../com/cloud/template/TemplateManagerImpl.java | 34 +++++++++++++++++++
 server/src/com/cloud/vm/UserVmManagerImpl.java  | 35 ++------------------
 tools/devcloud-kvm/devcloud-kvm-advanced.cfg    |  4 +--
 6 files changed, 58 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/df77c431/engine/components-api/src/com/cloud/template/TemplateManager.java
----------------------------------------------------------------------
diff --git a/engine/components-api/src/com/cloud/template/TemplateManager.java 
b/engine/components-api/src/com/cloud/template/TemplateManager.java
index 0a07f6b..0557a29 100755
--- a/engine/components-api/src/com/cloud/template/TemplateManager.java
+++ b/engine/components-api/src/com/cloud/template/TemplateManager.java
@@ -31,6 +31,7 @@ import com.cloud.storage.VMTemplateHostVO;
 import com.cloud.storage.VMTemplateStoragePoolVO;
 import com.cloud.storage.VMTemplateVO;
 import com.cloud.utils.Pair;
+import com.cloud.vm.VirtualMachineProfile;
 
 /**
  * TemplateManager manages the templates stored on secondary storage. It is 
responsible for creating private/public templates.
@@ -113,4 +114,12 @@ public interface TemplateManager {
 
     TemplateInfo prepareIso(long isoId, long dcId);
 
+
+    /**
+     * Adds ISO definition to given vm profile
+     *
+     * @param VirtualMachineProfile
+     */
+    void prepareIsoForVmProfile(VirtualMachineProfile profile);
+
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/df77c431/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
----------------------------------------------------------------------
diff --git 
a/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
 
b/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
index d51ed19..047e10a 100644
--- 
a/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
+++ 
b/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
@@ -943,10 +943,12 @@ public class VolumeOrchestrator extends ManagerBase 
implements VolumeOrchestrati
             vm.addDisk(disk);
         }
 
-        if (vm.getType() == VirtualMachine.Type.User && 
vm.getTemplate().getFormat() == ImageFormat.ISO) {
-            DataTO dataTO = tmplFactory.getTemplate(vm.getTemplate().getId(), 
DataStoreRole.Image, vm.getVirtualMachine().getDataCenterId()).getTO();
-            DiskTO iso = new DiskTO(dataTO, 3L, null, Volume.Type.ISO);
-            vm.addDisk(iso);
+        //if (vm.getType() == VirtualMachine.Type.User && 
vm.getTemplate().getFormat() == ImageFormat.ISO) {
+        if (vm.getType() == VirtualMachine.Type.User) {
+            _tmpltMgr.prepareIsoForVmProfile(vm);
+            //DataTO dataTO = 
tmplFactory.getTemplate(vm.getTemplate().getId(), DataStoreRole.Image, 
vm.getVirtualMachine().getDataCenterId()).getTO();
+            //DiskTO iso = new DiskTO(dataTO, 3L, null, Volume.Type.ISO);
+            //vm.addDisk(iso);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/df77c431/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
----------------------------------------------------------------------
diff --git 
a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
 
b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
index 5998f5c..d63b643 100755
--- 
a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
+++ 
b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
@@ -2895,6 +2895,7 @@ public class LibvirtComputingResource extends 
ServerResourceBase implements Serv
         }
 
         List<InterfaceDef> ifaces = null;
+        List<DiskDef> disks = null;
 
         Domain dm = null;
         Connect dconn = null;
@@ -2904,6 +2905,7 @@ public class LibvirtComputingResource extends 
ServerResourceBase implements Serv
         try {
             conn = LibvirtConnection.getConnectionByVmName(cmd.getVmName());
             ifaces = getInterfaces(conn, vmName);
+            disks = getDisks(conn, vmName);
             dm = conn.domainLookupByName(vmName);
             /*
                 We replace the private IP address with the address of the 
destination host.
@@ -2926,7 +2928,9 @@ public class LibvirtComputingResource extends 
ServerResourceBase implements Serv
              */
             destDomain = dm.migrate(dconn, (1 << 0), xmlDesc, vmName, "tcp:" + 
cmd.getDestinationIp(), _migrateSpeed);
 
-            
_storagePoolMgr.disconnectPhysicalDisksViaVmSpec(cmd.getVirtualMachine());
+            for (DiskDef disk : disks) {
+                cleanupDisk(disk);
+            }
         } catch (LibvirtException e) {
             s_logger.debug("Can't migrate domain: " + e.getMessage());
             result = e.getMessage();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/df77c431/server/src/com/cloud/template/TemplateManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/template/TemplateManagerImpl.java 
b/server/src/com/cloud/template/TemplateManagerImpl.java
index 70e4a49..6d7eece 100755
--- a/server/src/com/cloud/template/TemplateManagerImpl.java
+++ b/server/src/com/cloud/template/TemplateManagerImpl.java
@@ -81,6 +81,7 @@ import 
org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
 import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO;
 import org.apache.cloudstack.storage.image.datastore.ImageStoreEntity;
+import org.apache.cloudstack.storage.to.TemplateObjectTO;
 
 import com.cloud.agent.AgentManager;
 import com.cloud.agent.api.Answer;
@@ -146,6 +147,7 @@ import com.cloud.storage.dao.VMTemplatePoolDao;
 import com.cloud.storage.dao.VMTemplateZoneDao;
 import com.cloud.storage.dao.VolumeDao;
 import com.cloud.template.TemplateAdapter.TemplateAdapterType;
+import com.cloud.template.VirtualMachineTemplate.BootloaderType;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.AccountService;
@@ -167,6 +169,7 @@ import com.cloud.utils.exception.CloudRuntimeException;
 import com.cloud.vm.UserVmVO;
 import com.cloud.vm.VMInstanceVO;
 import com.cloud.vm.VirtualMachine.State;
+import com.cloud.vm.VirtualMachineProfile;
 import com.cloud.vm.dao.UserVmDao;
 import com.cloud.vm.dao.VMInstanceDao;
 
@@ -434,6 +437,37 @@ public class TemplateManagerImpl extends ManagerBase 
implements TemplateManager,
         return 
tmpltStore.createEntityExtractUrl(templateObject.getInstallPath(), 
template.getFormat(), templateObject);
     }
 
+    @Override
+    public void prepareIsoForVmProfile(VirtualMachineProfile profile) {
+        UserVmVO vm = _userVmDao.findById(profile.getId());
+        if (vm.getIsoId() != null) {
+            TemplateInfo template = prepareIso(vm.getIsoId(), 
vm.getDataCenterId());
+            if (template == null){
+                s_logger.error("Failed to prepare ISO on secondary or cache 
storage");
+                throw new CloudRuntimeException("Failed to prepare ISO on 
secondary or cache storage");
+            }
+            if (template.isBootable()) {
+                profile.setBootLoaderType(BootloaderType.CD);
+            }
+
+            GuestOSVO guestOS = _guestOSDao.findById(template.getGuestOSId());
+            String displayName = null;
+            if (guestOS != null) {
+                displayName = guestOS.getDisplayName();
+            }
+
+            TemplateObjectTO iso = (TemplateObjectTO)template.getTO();
+            iso.setGuestOsType(displayName);
+            DiskTO disk = new DiskTO(iso, 3L, null, Volume.Type.ISO);
+            profile.addDisk(disk);
+        } else {
+            TemplateObjectTO iso = new TemplateObjectTO();
+            iso.setFormat(ImageFormat.ISO);
+            DiskTO disk = new DiskTO(iso, 3L, null, Volume.Type.ISO);
+            profile.addDisk(disk);
+        }
+    }
+
     public void prepareTemplateInAllStoragePools(final VMTemplateVO template, 
long zoneId) {
         List<StoragePoolVO> pools = 
_poolDao.listByStatus(StoragePoolStatus.Up);
         for (final StoragePoolVO pool : pools) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/df77c431/server/src/com/cloud/vm/UserVmManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java 
b/server/src/com/cloud/vm/UserVmManagerImpl.java
index 5457dea..c53b95f 100755
--- a/server/src/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/com/cloud/vm/UserVmManagerImpl.java
@@ -66,7 +66,6 @@ import 
org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationSe
 import 
org.apache.cloudstack.engine.orchestration.service.VolumeOrchestrationService;
 import org.apache.cloudstack.engine.service.api.OrchestrationService;
 import org.apache.cloudstack.engine.subsystem.api.storage.TemplateDataFactory;
-import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo;
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory;
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService;
@@ -79,7 +78,6 @@ import org.apache.cloudstack.framework.jobs.AsyncJobManager;
 import org.apache.cloudstack.managed.context.ManagedContextRunnable;
 import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
-import org.apache.cloudstack.storage.to.TemplateObjectTO;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.log4j.Logger;
 
@@ -93,7 +91,6 @@ import com.cloud.agent.api.PvlanSetupCommand;
 import com.cloud.agent.api.StartAnswer;
 import com.cloud.agent.api.VmDiskStatsEntry;
 import com.cloud.agent.api.VmStatsEntry;
-import com.cloud.agent.api.to.DiskTO;
 import com.cloud.agent.api.to.NicTO;
 import com.cloud.agent.api.to.VirtualMachineTO;
 import com.cloud.agent.manager.Commands;
@@ -218,7 +215,6 @@ import com.cloud.storage.snapshot.SnapshotManager;
 import com.cloud.tags.dao.ResourceTagDao;
 import com.cloud.template.TemplateManager;
 import com.cloud.template.VirtualMachineTemplate;
-import com.cloud.template.VirtualMachineTemplate.BootloaderType;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.AccountService;
@@ -412,7 +408,7 @@ public class UserVmManagerImpl extends ManagerBase 
implements UserVmManager, Vir
     @Inject
     VpcManager _vpcMgr;
     @Inject
-    TemplateManager templateMgr;
+    TemplateManager _templateMgr;
     @Inject
     protected GuestOSCategoryDao _guestOSCategoryDao;
     @Inject
@@ -2995,34 +2991,7 @@ public class UserVmManagerImpl extends ManagerBase 
implements UserVmManager, Vir
         UserVmVO vm = _vmDao.findById(profile.getId());
         Map<String, String> details = 
_vmDetailsDao.listDetailsKeyPairs(vm.getId());
         vm.setDetails(details);
-
-        if (vm.getIsoId() != null) {
-            TemplateInfo template = templateMgr.prepareIso(vm.getIsoId(), 
vm.getDataCenterId());
-            if (template == null) {
-                s_logger.error("Failed to prepare ISO on secondary or cache 
storage");
-                throw new CloudRuntimeException("Failed to prepare ISO on 
secondary or cache storage");
-            }
-            if (template.isBootable()) {
-                profile.setBootLoaderType(BootloaderType.CD);
-            }
-
-            GuestOSVO guestOS = _guestOSDao.findById(template.getGuestOSId());
-            String displayName = null;
-            if (guestOS != null) {
-                displayName = guestOS.getDisplayName();
-            }
-
-            TemplateObjectTO iso = (TemplateObjectTO)template.getTO();
-            iso.setGuestOsType(displayName);
-            DiskTO disk = new DiskTO(iso, 3L, null, Volume.Type.ISO);
-            profile.addDisk(disk);
-        } else {
-            TemplateObjectTO iso = new TemplateObjectTO();
-            iso.setFormat(ImageFormat.ISO);
-            DiskTO disk = new DiskTO(iso, 3L, null, Volume.Type.ISO);
-            profile.addDisk(disk);
-        }
-
+        _templateMgr.prepareIsoForVmProfile(profile);
         return true;
     }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/df77c431/tools/devcloud-kvm/devcloud-kvm-advanced.cfg
----------------------------------------------------------------------
diff --git a/tools/devcloud-kvm/devcloud-kvm-advanced.cfg 
b/tools/devcloud-kvm/devcloud-kvm-advanced.cfg
index 8e77809..53e1a44 100644
--- a/tools/devcloud-kvm/devcloud-kvm-advanced.cfg
+++ b/tools/devcloud-kvm/devcloud-kvm-advanced.cfg
@@ -77,7 +77,7 @@
                     "endip": "192.168.100.199", 
                     "netmask": "255.255.255.0", 
                     "vlan": "untagged", 
-                    "gateway": "192.168.100.1"
+                    "gateway": "192.168.100.2"
                 }
             ], 
             "networktype": "Advanced", 
@@ -101,7 +101,7 @@
                             "clustertype": "CloudManaged"
                         }
                     ], 
-                    "gateway": "172.17.10.1"
+                    "gateway": "172.17.10.2"
                 }
             ], 
             "internaldns1": "8.8.4.4", 

Reply via email to