Return-Path: X-Original-To: apmail-cloudstack-commits-archive@www.apache.org Delivered-To: apmail-cloudstack-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id CFDA711DD1 for ; Mon, 28 Jul 2014 21:21:57 +0000 (UTC) Received: (qmail 20990 invoked by uid 500); 28 Jul 2014 21:21:57 -0000 Delivered-To: apmail-cloudstack-commits-archive@cloudstack.apache.org Received: (qmail 20956 invoked by uid 500); 28 Jul 2014 21:21:57 -0000 Mailing-List: contact commits-help@cloudstack.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cloudstack.apache.org Delivered-To: mailing list commits@cloudstack.apache.org Received: (qmail 20943 invoked by uid 99); 28 Jul 2014 21:21:57 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 28 Jul 2014 21:21:57 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 508509B8B39; Mon, 28 Jul 2014 21:21:57 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: dahn@apache.org To: commits@cloudstack.apache.org Date: Mon, 28 Jul 2014 21:21:58 -0000 Message-Id: In-Reply-To: <0dc1901b6efd4fe8b503f0550954f2da@git.apache.org> References: <0dc1901b6efd4fe8b503f0550954f2da@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [2/2] git commit: updated refs/heads/4.4 to 095fb09 CLOUDSTACK-6518 [Hyper-V] Efficient way of finding the empty nic in VR/VpcVR to configure VPC entities (cherry picked from commit cf41ccaa5b6475dace0bddbe6681c98cc5149189) Conflicts: plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/HypervResourceController.cs plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/IWmiCallsV2.cs plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/WmiCallsV2.cs Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/095fb09b Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/095fb09b Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/095fb09b Branch: refs/heads/4.4 Commit: 095fb09b7519289ab0d2ae3a880c5477d0cb52cc Parents: 2025f35 Author: Rajesh Battala Authored: Mon May 5 12:55:59 2014 +0530 Committer: Daan Hoogland Committed: Mon Jul 28 23:21:37 2014 +0200 ---------------------------------------------------------------------- .../HypervResource/HypervResourceController.cs | 222 +- .../HypervResource/IWmiCallsV2.cs | 8 +- .../ServerResource/HypervResource/WmiCallsV2.cs | 2409 ++++-------------- 3 files changed, 588 insertions(+), 2051 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/095fb09b/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 41a3a8a..40ac159 100644 --- a/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/HypervResourceController.cs +++ b/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/HypervResourceController.cs @@ -857,29 +857,11 @@ namespace HypervResource { using (log4net.NDC.Push(Guid.NewGuid().ToString())) { - logger.Info(CloudStackTypes.MigrateVolumeCommand + Utils.CleanString(cmd.ToString())); - - string details = null; - bool result = false; - - try - { - string vm = (string)cmd.attachedVmName; - string volume = (string)cmd.volumePath; - wmiCallsV2.MigrateVolume(vm, volume, GetStoragePoolPath(cmd.pool)); - result = true; - } - catch (Exception sysEx) - { - details = CloudStackTypes.MigrateVolumeCommand + " failed due to " + sysEx.Message; - logger.Error(details, sysEx); - } - + logger.Info(CloudStackTypes.PlugNicCommand + Utils.CleanString(cmd.ToString())); object ansContent = new { - result = result, - volumePath = (string)cmd.volumePath, - details = details, + result = true, + details = "Hot Nic plug not supported, change any empty virtual network adapter network settings", contextMap = contextMap }; @@ -1193,28 +1175,21 @@ namespace HypervResource string details = null; bool result = false; - List volumeTos = new List(); - - try + String vmName = cmd.vmName; + String vlan = cmd.vlan; + string macAddress = cmd.macAddress; + uint pos = cmd.index; + bool enable = cmd.enable; + string switchLableName = cmd.switchLableName; + if (macAddress != null) { - string vm = (string)cmd.vm.name; - string destination = (string)cmd.tgtHost; - var volumeToPoolList = cmd.volumeToFilerAsList; - var volumeToPool = new Dictionary(); - foreach (var item in volumeToPoolList) - { - volumeTos.Add(item.t); - string poolPath = GetStoragePoolPath(item.u); - volumeToPool.Add((string)item.t.path, poolPath); - } - - wmiCallsV2.MigrateVmWithVolume(vm, destination, volumeToPool); + wmiCallsV2.ModifyVmVLan(vmName, vlan, macAddress); result = true; } - catch (Exception sysEx) - { - details = CloudStackTypes.MigrateWithStorageCommand + " failed due to " + sysEx.Message; - logger.Error(details, sysEx); + else if (pos >= 1) + { + wmiCallsV2.ModifyVmVLan(vmName, vlan, pos, enable, switchLableName); + result = true; } object ansContent = new @@ -1259,142 +1234,45 @@ namespace HypervResource { using (log4net.NDC.Push(Guid.NewGuid().ToString())) { - logger.Info(cmdArray.ToString()); - // Log agent configuration - logger.Info("Agent StartupRoutingCommand received " + cmdArray.ToString()); - dynamic strtRouteCmd = cmdArray[0][CloudStackTypes.StartupRoutingCommand]; - - // Insert networking details - string privateIpAddress = strtRouteCmd.privateIpAddress; - config.PrivateIpAddress = privateIpAddress; - string subnet; - System.Net.NetworkInformation.NetworkInterface privateNic = GetNicInfoFromIpAddress(privateIpAddress, out subnet); - strtRouteCmd.privateIpAddress = privateIpAddress; - strtRouteCmd.privateNetmask = subnet; - strtRouteCmd.privateMacAddress = privateNic.GetPhysicalAddress().ToString(); - string storageip = strtRouteCmd.storageIpAddress; - System.Net.NetworkInformation.NetworkInterface storageNic = GetNicInfoFromIpAddress(storageip, out subnet); - - strtRouteCmd.storageIpAddress = storageip; - strtRouteCmd.storageNetmask = subnet; - strtRouteCmd.storageMacAddress = storageNic.GetPhysicalAddress().ToString(); - strtRouteCmd.gatewayIpAddress = storageNic.GetPhysicalAddress().ToString(); - strtRouteCmd.hypervisorVersion = System.Environment.OSVersion.Version.Major.ToString() + "." + - System.Environment.OSVersion.Version.Minor.ToString(); - strtRouteCmd.caps = "hvm"; - - dynamic details = strtRouteCmd.hostDetails; - if (details != null) - { - string productVersion = System.Environment.OSVersion.Version.Major.ToString() + "." + - System.Environment.OSVersion.Version.Minor.ToString(); - details.Add("product_version", productVersion); - details.Add("rdp.server.port", 2179); - } - - // Detect CPUs, speed, memory - uint cores; - uint mhz; - uint sockets; - wmiCallsV2.GetProcessorResources(out sockets, out cores, out mhz); - strtRouteCmd.cpus = cores; - strtRouteCmd.speed = mhz; - strtRouteCmd.cpuSockets = sockets; - ulong memoryKBs; - ulong freeMemoryKBs; - wmiCallsV2.GetMemoryResources(out memoryKBs, out freeMemoryKBs); - strtRouteCmd.memory = memoryKBs * 1024; // Convert to bytes - - // Need 2 Gig for DOM0, see http://technet.microsoft.com/en-us/magazine/hh750394.aspx - strtRouteCmd.dom0MinMemory = config.ParentPartitionMinMemoryMb * 1024 * 1024; // Convert to bytes - - // Insert storage pool details. - // - // Read the localStoragePath for virtual disks from the Hyper-V configuration - // See http://blogs.msdn.com/b/virtual_pc_guy/archive/2010/05/06/managing-the-default-virtual-machine-location-with-hyper-v.aspx - // for discussion of Hyper-V file locations paths. - string localStoragePath = wmiCallsV2.GetDefaultVirtualDiskFolder(); - if (localStoragePath != null) + logger.Info(CloudStackTypes.GetVmConfigCommand + Utils.CleanString(cmd.ToString())); + bool result = false; + String vmName = cmd.vmName; + ComputerSystem vm = wmiCallsV2.GetComputerSystem(vmName); + List nicDetails = new List(); + var nicSettingsViaVm = wmiCallsV2.GetEthernetPortSettings(vm); + NicDetails nic = null; + int index = 0; + int[] nicStates = new int[8]; + int[] nicVlan = new int[8]; + int vlanid = 1; + + var ethernetConnections = wmiCallsV2.GetEthernetConnections(vm); + foreach (EthernetPortAllocationSettingData item in ethernetConnections) + { + EthernetSwitchPortVlanSettingData vlanSettings = wmiCallsV2.GetVlanSettings(item); + if (vlanSettings == null) + { + vlanid = -1; + } + else + { + vlanid = vlanSettings.AccessVlanId; + } + nicStates[index] = (Int32)(item.EnabledState); + nicVlan[index] = vlanid; + index++; + } + + index = 0; + foreach (SyntheticEthernetPortSettingData item in nicSettingsViaVm) { - // GUID arbitrary. Host agents deals with storage pool in terms of localStoragePath. - // We use HOST guid. - string poolGuid = strtRouteCmd.guid; - - if (poolGuid == null) - { - poolGuid = Guid.NewGuid().ToString(); - logger.InfoFormat("Setting Startup StoragePool GUID to " + poolGuid); - } - else - { - logger.InfoFormat("Setting Startup StoragePool GUID same as HOST, i.e. " + poolGuid); - } - - long capacity; - long available; - GetCapacityForLocalPath(localStoragePath, out capacity, out available); - - logger.Debug(CloudStackTypes.StartupStorageCommand + " set available bytes to " + available); - - string ipAddr = strtRouteCmd.privateIpAddress; - var vmStates = wmiCallsV2.GetVmSync(config.PrivateIpAddress); - strtRouteCmd.vms = Utils.CreateCloudStackMapObject(vmStates); - - StoragePoolInfo pi = new StoragePoolInfo( - poolGuid.ToString(), - ipAddr, - localStoragePath, - localStoragePath, - StoragePoolType.Filesystem.ToString(), - capacity, - available); - - // Build StartupStorageCommand using an anonymous type - // See http://stackoverflow.com/a/6029228/939250 - object ansContent = new - { - poolInfo = pi, - guid = pi.uuid, - dataCenter = strtRouteCmd.dataCenter, - resourceType = StorageResourceType.STORAGE_POOL.ToString(), // TODO: check encoding - contextMap = contextMap - }; - JObject ansObj = Utils.CreateCloudStackObject(CloudStackTypes.StartupStorageCommand, ansContent); - cmdArray.Add(ansObj); + nic = new NicDetails(item.Address, nicVlan[index], nicStates[index]); + index++; + nicDetails.Add(nic); } - // Convert result to array for type correctness? - logger.Info(CloudStackTypes.StartupCommand + " result is " + cmdArray.ToString()); - return cmdArray; - } - } - - // POST api/HypervResource/GetVncPortCommand - [HttpPost] - [ActionName(CloudStackTypes.GetVncPortCommand)] - public JContainer GetVncPortCommand([FromBody]dynamic cmd) - { - using (log4net.NDC.Push(Guid.NewGuid().ToString())) - { - logger.Info(CloudStackTypes.GetVncPortCommand + Utils.CleanString(cmd.ToString())); - - string details = null; - bool result = false; - string address = null; - int port = -9; - try - { - string vmName = (string)cmd.name; - var sys = wmiCallsV2.GetComputerSystem(vmName); - address = "instanceId=" + sys.Name ; - result = true; - } - catch (Exception sysEx) - { - details = CloudStackTypes.GetVncPortAnswer + " failed due to " + sysEx.Message; - logger.Error(details, sysEx); - } + result = true; object ansContent = new { http://git-wip-us.apache.org/repos/asf/cloudstack/blob/095fb09b/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/IWmiCallsV2.cs ---------------------------------------------------------------------- diff --git a/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/IWmiCallsV2.cs b/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/IWmiCallsV2.cs index 0a64f4b..896a287 100644 --- a/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/IWmiCallsV2.cs +++ b/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/IWmiCallsV2.cs @@ -71,8 +71,8 @@ namespace HypervResource Dictionary GetVmSync(String privateIpAddress); string GetVmNote(System.Management.ManagementPath sysPath); void ModifyVmVLan(string vmName, String vlanid, string mac); - void ModifyVmVLan(string vmName, String vlanid, uint pos, bool enable, string switchLabelName); - void DisableVmNics(); + void ModifyVmVLan(string vmName, String vlanid, uint pos, bool enable, string switchLabelName); + void DisableVmNics(); void DisableNicVlan(String mac, String vmName); - } -} + } +}