public SyntheticEthernetPortSettingData(System.Management.ManagementScope mgmtScope, string keyInstanceID) { this.InitializeObject(((System.Management.ManagementScope)(mgmtScope)), new System.Management.ManagementPath(SyntheticEthernetPortSettingData.ConstructPath(keyInstanceID)), null); }
/// <summary> /// Create a (synthetic) nic, and attach it to the vm /// </summary> /// <param name="vm"></param> /// <param name="mac"></param> /// <param name="vlan"></param> /// <returns></returns> public static SyntheticEthernetPortSettingData CreateNICforVm(ComputerSystem vm, string mac, string vlan) { logger.DebugFormat("Creating nic for VM {0} (GUID {1})", vm.ElementName, vm.Name); // Obtain controller for Hyper-V networking subsystem VirtualSwitchManagementService vmNetMgmtSvc = GetVirtualSwitchManagementService(); // Create NIC resource by cloning the default NIC var synthNICsSettings = SyntheticEthernetPortSettingData.GetInstances(vmNetMgmtSvc.Scope, "InstanceID LIKE \"%Default\""); // Assert if (synthNICsSettings.Count != 1) { var errMsg = string.Format("Internal error, coudl not find default SyntheticEthernetPort instance"); var ex = new WmiException(errMsg); logger.Error(errMsg, ex); throw ex; } var defaultSynthNICSettings = synthNICsSettings.OfType<SyntheticEthernetPortSettingData>().First(); var newSynthNICSettings = new SyntheticEthernetPortSettingData((ManagementBaseObject)defaultSynthNICSettings.LateBoundObject.Clone()); // Get the virtual switch VirtualSwitch vSwitch = GetExternalVirtSwitch(); // Crate switch port for new VM ManagementPath newSwitchPath = CreateSwitchPortForVm(vm, vmNetMgmtSvc, vSwitch); // Add required VLAND support if (vlan != null) { SetPortVlan(vlan, vmNetMgmtSvc, newSwitchPath); } logger.DebugFormat("Created switch port {0} on switch {1}", newSwitchPath.Path, vSwitch.Path.Path); // Assign configuration to new NIC string normalisedMAC = string.Join("", (mac.Split(new char[] { ':' }))); newSynthNICSettings.LateBoundObject["Connection"] = new string[] { newSwitchPath.Path }; newSynthNICSettings.LateBoundObject["ElementName"] = vm.ElementName; newSynthNICSettings.LateBoundObject["Address"] = normalisedMAC; newSynthNICSettings.LateBoundObject["StaticMacAddress"] = "TRUE"; newSynthNICSettings.LateBoundObject["VirtualSystemIdentifiers"] = new string[] { "{" + Guid.NewGuid().ToString() + "}" }; newSynthNICSettings.CommitObject(); // Insert NIC into vm string[] newResources = new string[] { newSynthNICSettings.LateBoundObject.GetText(System.Management.TextFormat.CimDtd20)}; ManagementPath[] newResourcePaths = AddVirtualResource(newResources, vm ); // assert if (newResourcePaths.Length != 1) { var errMsg = string.Format( "Failed to properly insert a single NIC on 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; } return new SyntheticEthernetPortSettingData(newResourcePaths[0]); }