You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by de...@apache.org on 2013/10/31 12:46:11 UTC

git commit: updated refs/heads/hyperv to 96b670a

Updated Branches:
  refs/heads/hyperv 9cdf193d9 -> 96b670a51


Add a SCSI controller by default. This is needed so that data volumes can be added/removed
on a running vm.


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

Branch: refs/heads/hyperv
Commit: 96b670a511003604ec3e963750bd1849610b1168
Parents: 9cdf193
Author: Devdeep Singh <de...@gmail.com>
Authored: Thu Oct 31 17:14:31 2013 +0530
Committer: Devdeep Singh <de...@gmail.com>
Committed: Thu Oct 31 17:17:27 2013 +0530

----------------------------------------------------------------------
 .../HypervResource/HypervResourceController.cs  |  2 +-
 .../ServerResource/HypervResource/WmiCallsV2.cs | 36 ++++++++++++++++++++
 2 files changed, 37 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/96b670a5/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/HypervResourceController.cs
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/HypervResourceController.cs b/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/HypervResourceController.cs
index 55c37f3..eb8834f 100644
--- a/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/HypervResourceController.cs
+++ b/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/HypervResourceController.cs
@@ -986,7 +986,7 @@ namespace HypervResource
             }
         }
 
-        // POST api/HypervResource/StartupCommand
+        // POST api/HypervResource/CopyCommand
         [HttpPost]
         [ActionName(CloudStackTypes.CopyCommand)]
         public JContainer CopyCommand(dynamic cmd)

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/96b670a5/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/WmiCallsV2.cs
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/WmiCallsV2.cs b/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/WmiCallsV2.cs
index 71c75d3..18b96cc 100644
--- a/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/WmiCallsV2.cs
+++ b/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/WmiCallsV2.cs
@@ -188,6 +188,7 @@ namespace HypervResource
         }
 
         public const string IDE_HARDDISK_CONTROLLER = "Microsoft:Hyper-V:Emulated IDE Controller";
+        public const string SCSI_CONTROLLER = "Microsoft:Hyper-V:Synthetic SCSI Controller";
         public const string IDE_HARDDISK_DRIVE = "Microsoft:Hyper-V:Synthetic Disk Drive";
         public const string IDE_ISO_DRIVE = "Microsoft:Hyper-V:Synthetic DVD Drive";
 
@@ -258,6 +259,9 @@ namespace HypervResource
             logger.DebugFormat("Going ahead with create VM {0}, {1} vcpus, {2}MB RAM", vmName, vcpus, memSize);
             var newVm = CreateVM(vmName, memSize, vcpus);
 
+            // Add a SCSI controller for attaching/detaching data volumes.
+            AddScsiControllerToVm(newVm);
+
             foreach (var diskDrive in diskDrives)
             {
                 string vhdFile = null;
@@ -657,6 +661,38 @@ namespace HypervResource
             return newDrivePaths[0];
         }
 
+        private ManagementPath AddScsiControllerToVm(ComputerSystem vm)
+        {
+            // A description of the controller is created by modifying a clone of the default ResourceAllocationSettingData for scsi controller
+            string scsiQuery = String.Format("ResourceSubType LIKE \"{0}\" AND InstanceID LIKE \"%Default\"", SCSI_CONTROLLER);
+            var scsiSettings = CloneResourceAllocationSetting(scsiQuery);
+
+            scsiSettings.LateBoundObject["ElementName"] = "SCSI Controller";
+            scsiSettings.CommitObject();
+
+            // Insert SCSI controller into vm
+            string[] newResources = new string[] { scsiSettings.LateBoundObject.GetText(System.Management.TextFormat.CimDtd20) };
+            ManagementPath[] newResourcePaths = AddVirtualResource(newResources, vm);
+
+            // assert
+            if (newResourcePaths.Length != 1)
+            {
+                var errMsg = string.Format(
+                    "Failed to add scsi controller to VM {0} (GUID {1}): number of resource created {2}",
+                    vm.ElementName,
+                    vm.Name,
+                    newResourcePaths.Length);
+                var ex = new WmiException(errMsg);
+                logger.Error(errMsg, ex);
+                throw ex;
+            }
+
+            logger.DebugFormat("New controller type {0} WMI path is {1}s",
+                scsiSettings.ResourceSubType,
+                newResourcePaths[0].Path);
+            return newResourcePaths[0];
+        }
+
 
         private void InsertDiskImage(ComputerSystem vm, string diskImagePath, string diskResourceSubType, ManagementPath drivePath)
         {