예제 #1
0
        public IVm CreateMinimalVm(string name, string location)
        {
            IVirtualSystemSettingData systemSettingData = VirtualSystemSettingData.CreateVirtualSystemSettingData(this._Host);

            systemSettingData.ElementName           = name;
            systemSettingData.ConfigurationDataRoot = location;
            systemSettingData.SnapshotDataRoot      = location;
            List <string> stringList = new List <string>();

            using (IVirtualSystemManagementService managmentService = VirtualSystemManagementService.GetVirtualSystemManagmentService(this._Host))
                return((IVm) new Vm(this._Host, managmentService.DefineSystem(systemSettingData, stringList.ToArray(), (IVirtualSystemSettingData)null), this._Logger));
        }
예제 #2
0
        public IVm CreateVm(VmCreationInfo info)
        {
            IVirtualSystemSettingData systemSettingData = VirtualSystemSettingData.CreateVirtualSystemSettingData(this._Host);

            systemSettingData.ElementName           = info.Name;
            systemSettingData.ConfigurationDataRoot = info.Location;
            systemSettingData.SnapshotDataRoot      = info.Location;
            systemSettingData.BootOrder             = new ushort[4]
            {
                (ushort)2,
                (ushort)1,
                (ushort)0,
                (ushort)3
            };
            if (!string.IsNullOrEmpty(info.VirtualSystemSubType) && info.VirtualSystemSubType != "Microsoft:Hyper-V:SubType:1")
            {
                systemSettingData.VirtualSystemSubType = info.VirtualSystemSubType;
            }
            List <string> stringList = new List <string>();

            using (IVirtualSystemManagementService managmentService = VirtualSystemManagementService.GetVirtualSystemManagmentService(this._Host))
            {
                IVm vm = (IVm) new Vm(this._Host, managmentService.DefineSystem(systemSettingData, stringList.ToArray(), (IVirtualSystemSettingData)null), this._Logger);
                vm.CPUCount         = (ulong)info.NumCPU;
                vm.CPUCompatibility = info.CPUCompatibility;
                if (info.MemoryMB % 2L == 1L)
                {
                    ++info.MemoryMB;
                }
                vm.MemorySize = (ulong)(info.MemoryMB * 1024L) * 1024UL;
                try
                {
                    foreach (HVNicInfo nic in info.Nics)
                    {
                        if (string.Compare(nic.VirtualNetwork, "---Discard---", true, CultureInfo.InvariantCulture) != 0)
                        {
                            NicConnectionStatus nicStatus = string.IsNullOrEmpty(nic.VirtualNetwork) ? NicConnectionStatus.Disconnected : NicConnectionStatus.Connected;
                            vm.AddNic(nic.NicType, nic.VirtualNetwork, nicStatus, nic.NicGuid, nic.vLan);
                        }
                    }
                }
                catch (Exception ex)
                {
                    this._Logger.FormatErrorWithException(ex, "Failed to provision the NICs for the vm.  Removing the vm");
                    using (vm)
                        managmentService.DestroySystem(((IVmInternals)vm).ComputerSystem);
                    throw;
                }
                return(vm);
            }
        }
예제 #3
0
        public static IVirtualSystemSettingData CreateFromExisting(IComputerSystem host, IVirtualSystemSettingData vssd, string location)
        {
            IVirtualSystemSettingData systemSettingData = VirtualSystemSettingData.CreateVirtualSystemSettingData(host);
            List <string>             stringList        = new List <string>()
            {
                "ElementName",
                "ConfigurationDataRoot",
                "SnapshotDataRoot",
                "AdditionalRecoveryInformation",
                "AllowFullSCSICommandSet",
                "AllowReducedFcRedundancy",
                "AutomaticRecoveryAction",
                "AutomaticShutdownAction",
                "AutomaticStartupAction",
                "AutomaticStartupActionDelay",
                "AutomaticStartupActionSequenceNumber",
                "BaseBoardSerialNumber",
                "BIOSGUID",
                "BIOSNumLock",
                "BIOSSerialNumber",
                "BootOrder",
                "ChassisAssetTag",
                "ChassisSerialNumber",
                "ConfigurationFile",
                "ConfigurationID",
                "DebugChannelId",
                "DebugPort",
                "DebugPortEnabled",
                "IncrementalBackupEnabled",
                "IsSaved",
                "LogDataRoot",
                "LowMmioGapSize",
                "Notes",
                "PauseAfterBootFailure",
                "SecureBootEnabled",
                "SuspendDataRoot",
                "SwapFileDataRoot",
                "Version",
                "VirtualNumaEnabled",
                "VirtualSystemType",
                "VirtualSystemSubType"
            };

            if (vssd.VirtualSystemSubType != "Microsoft:Hyper-V:SubType:1")
            {
                stringList.Add("NetworkBootPreferredProtocol");
            }
            ManagementObject managementObject1 = vssd.Object;
            ManagementObject managementObject2 = systemSettingData.Object;

            foreach (string index in stringList)
            {
                try
                {
                    managementObject2[index] = managementObject1[index];
                }
                catch (Exception ex)
                {
                }
            }
            systemSettingData.ConfigurationDataRoot = location;
            systemSettingData.SnapshotDataRoot      = location;
            systemSettingData.SuspendDataRoot       = location;
            systemSettingData.SwapFileDataRoot      = location;
            return(systemSettingData);
        }