Repository: cloudstack
Updated Branches:
  refs/heads/4.4 b4d3aac74 -> 50b92054c


CLOUDSTACK-6122: Map rbd image on host before attaching to Vm


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

Branch: refs/heads/4.4
Commit: 50b92054c57b211fc37de72218c67ec21956649a
Parents: b4d3aac
Author: Kishan Kavala <[email protected]>
Authored: Thu Mar 27 14:33:34 2014 +0530
Committer: Kishan Kavala <[email protected]>
Committed: Thu Mar 27 14:35:09 2014 +0530

----------------------------------------------------------------------
 .../kvm/resource/LibvirtComputingResource.java  |  4 ++++
 .../kvm/storage/KVMStorageProcessor.java        | 20 ++++++++++++++++++--
 2 files changed, 22 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/50b92054/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 1d7d1b2..14b7f2f 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
@@ -5458,4 +5458,8 @@ public class LibvirtComputingResource extends 
ServerResourceBase implements Serv
 
     }
 
+    public HypervisorType getHypervisorType(){
+        return _hypervisorType;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/50b92054/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
----------------------------------------------------------------------
diff --git 
a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
 
b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
index 9813389..0024c8e 100644
--- 
a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
+++ 
b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
@@ -38,6 +38,7 @@ import java.util.UUID;
 
 import javax.naming.ConfigurationException;
 
+import com.cloud.hypervisor.Hypervisor;
 import org.apache.commons.io.FileUtils;
 import org.apache.log4j.Logger;
 import org.libvirt.Connect;
@@ -955,8 +956,23 @@ public class KVMStorageProcessor implements 
StorageProcessor {
             } else {
                 diskdef = new DiskDef();
                 if (attachingPool.getType() == StoragePoolType.RBD) {
-                    diskdef.defNetworkBasedDisk(attachingDisk.getPath(), 
attachingPool.getSourceHost(), attachingPool.getSourcePort(), 
attachingPool.getAuthUserName(),
-                        attachingPool.getUuid(), devId, 
DiskDef.diskBus.VIRTIO, diskProtocol.RBD, DiskDef.diskFmtType.RAW);
+                    if(resource.getHypervisorType() == 
Hypervisor.HypervisorType.LXC){
+                        // For LXC, map image to host and then attach to Vm
+                        String mapRbd = Script.runSimpleBashScript("rbd map " 
+ attachingDisk.getPath() + " --id "+attachingPool.getAuthUserName());
+                        //Split pool and image details from disk path
+                        String[] splitPoolImage = 
attachingDisk.getPath().split("/");
+                        //ToDo: rbd showmapped supports json and xml output. 
Use json/xml to get device
+                        String device = Script.runSimpleBashScript("rbd 
showmapped | grep \""+splitPoolImage[0]+"  "+splitPoolImage[1]+"\" | cut -d \" 
\" -f10");
+                        if (device != null) {
+                            s_logger.debug("RBD device on host is: "+device);
+                            diskdef.defBlockBasedDisk(device, devId, 
DiskDef.diskBus.VIRTIO);
+                        } else {
+                            throw new InternalErrorException("Error while 
mapping disk "+attachingDisk.getPath()+" on host");
+                        }
+                    } else {
+                        diskdef.defNetworkBasedDisk(attachingDisk.getPath(), 
attachingPool.getSourceHost(), attachingPool.getSourcePort(), 
attachingPool.getAuthUserName(),
+                                attachingPool.getUuid(), devId, 
DiskDef.diskBus.VIRTIO, diskProtocol.RBD, DiskDef.diskFmtType.RAW);
+                    }
                 } else if (attachingPool.getType() == StoragePoolType.Gluster) 
{
                     String mountpoint = attachingPool.getLocalPath();
                     String path = attachingDisk.getPath();

Reply via email to