public UserControl Forward()
        {
            _Local_Media_Create_Model.Machine_Definition.Devices.Devices.Clear();//remove any previous devices
            var de = new Libvirt.Models.Concrete.Device();

            de.Device_Bus_Type    = Libvirt.Models.Concrete.Device.Device_Bus_Types.virtio;
            de.Device_Device_Type = Libvirt.Models.Concrete.Device.Device_Device_Types.cdrom;
            de.Device_Type        = Libvirt.Models.Concrete.Device.Device_Types.volume;
            de.Driver_Cache_Type  = Libvirt.Models.Concrete.Device.Driver_Cache_Types._default;
            de.Driver_Type        = Libvirt.Models.Concrete.Device.Driver_Types.raw;
            de.ReadOnly           = true;
            de.Snapshot_Type      = Libvirt.Models.Concrete.Device.Snapshot_Types._default;
            var source = new Libvirt.Models.Concrete.Device_Source_Volume();

            source.pool = Pool_SelectBox.SelectedItem != null?Pool_SelectBox.SelectedItem.ToString() : "";

            source.volume = Volume_SelectBox.SelectedItem != null?Volume_SelectBox.SelectedItem.ToString() : "";

            source.Source_Startup_Policy = Libvirt.Models.Concrete.Device.Source_Startup_Policies.optional;
            de.Source = source;
            _Local_Media_Create_Model.Machine_Definition.Devices.Add(de);// add this .. NOW VALIDATE!!
            if (_Local_Media_Create_Model.Validate())
            {
                return(new Cpu_Ram_Create(this, _Local_Media_Create_Model.Connection, _Local_Media_Create_Model.Machine_Definition));
            }
            else
            {
                foreach (var item in _Local_Media_Create_Model.Errors)
                {
                    foreach (var r in item.Value)
                    {
                        errorProvider1.SetError(Volume_SelectBox, r);
                    }
                }
            }
            return(null);
        }
        public void QuickCreate(Libvirt_WebManager.Areas.Domain.Models.New_Domain_VM v)
        {
            var h = Service.VM_Manager.Instance.virConnectOpen(v.Host);

            var capabilities = System.Xml.Linq.XDocument.Parse(h.virConnectGetCapabilities()).Root;

            Libvirt.Models.Concrete.Virtual_Machine virtuammachine = new Libvirt.Models.Concrete.Virtual_Machine();
            virtuammachine.CPU.vCpu_Count = v.Cpus;
            virtuammachine.type = Libvirt.Models.Concrete.Virtual_Machine.Domain_Types.qemu;
            virtuammachine.Metadata.name = v.Name;
            virtuammachine.Memory.memory_unit = virtuammachine.Memory.currentMemory_unit = Libvirt.Models.Concrete.Memory_Allocation.UnitTypes.MiB;
            virtuammachine.Memory.currentMemory = virtuammachine.Memory.memory = v.Ram;

            //Add a hard drive
            var harddrive = new Libvirt.Models.Concrete.Disk();
            harddrive.Device_Bus_Type = Libvirt.Models.Concrete.Disk.Disk_Bus_Types.virtio;
            harddrive.Disk_Device_Type = Libvirt.Models.Concrete.Disk.Disk_Device_Types.disk;
            harddrive.Device_Type = Libvirt.Models.Concrete.Disk.Disk_Types.volume;
            harddrive.Driver_Cache_Type = Libvirt.Models.Concrete.Disk.Driver_Cache_Types.none;
            harddrive.Driver_Type = Libvirt.Models.Concrete.Disk.Driver_Types.raw;
            harddrive.ReadOnly = false;
            harddrive.Snapshot_Type = Libvirt.Models.Concrete.Disk.Snapshot_Types._default;
            var source = new Libvirt.Models.Concrete.Device_Source_Volume();
            source.pool = v.HD_Pool;
            source.volume = v.HD_Volume;

            source.Source_Startup_Policy = Libvirt.Models.Concrete.Disk.Source_Startup_Policies.mandatory;
            harddrive.Source = source;
            virtuammachine.Drives.Add(harddrive);

            var oscdrom = new Libvirt.Models.Concrete.Disk();
            oscdrom.Device_Bus_Type = Libvirt.Models.Concrete.Disk.Disk_Bus_Types.ide;
            oscdrom.Disk_Device_Type = Libvirt.Models.Concrete.Disk.Disk_Device_Types.cdrom;
            oscdrom.Device_Type = Libvirt.Models.Concrete.Disk.Disk_Types.volume;
            oscdrom.Driver_Cache_Type = Libvirt.Models.Concrete.Disk.Driver_Cache_Types.none;
            oscdrom.Driver_Type = Libvirt.Models.Concrete.Disk.Driver_Types.raw;
            oscdrom.ReadOnly = true;
            oscdrom.Snapshot_Type = Libvirt.Models.Concrete.Disk.Snapshot_Types._default;

            var cdsource = new Libvirt.Models.Concrete.Device_Source_Volume();
            cdsource.pool = v.OS_Pool;
            cdsource.volume = v.OS_Volume;

            cdsource.Source_Startup_Policy = Libvirt.Models.Concrete.Disk.Source_Startup_Policies.optional;
            oscdrom.Source = cdsource;
            virtuammachine.Drives.Add(oscdrom);
            virtuammachine.graphics = new Libvirt.Models.Concrete.Graphics();
            virtuammachine.graphics.Graphic_Type = Libvirt.Models.Concrete.Graphics.Graphic_Types.vnc;
            virtuammachine.graphics.autoport = true;
            virtuammachine.graphics.websocket = -1;
            virtuammachine.graphics.listen = "0.0.0.0";
            virtuammachine.clock = v.Operating_System == Areas.Domain.Models.OS_Options.Windows ? Libvirt.Models.Concrete.Virtual_Machine.Clock_Types.localtime : Libvirt.Models.Concrete.Virtual_Machine.Clock_Types.utc;

            var hostcapabilities = System.Xml.Linq.XDocument.Parse(h.virConnectGetCapabilities()).Root;

            foreach(var item in hostcapabilities.Elements("guest"))
            {
                var arch = item.Element("arch");
                if (arch != null)
                {
                    var attr = arch.Attribute("name");
                    if (attr != null)
                    {
                        if(attr.Value == "x86_64")
                        {
                            var wordsize = arch.Element("wordsize");
                            if (wordsize != null)
                            {
                                if (wordsize.Value == "64")
                                {//GOT IT!!! 64 bit, x86 type.. get host capaciliies and pick best
                                    var ele = arch.Element("emulator");
                                    if (ele != null)
                                    {
                                        virtuammachine.emulator = ele.Value;
                                    }
                                    ele = arch.Element("machine");
                                    if (ele != null)
                                    {
                                        var fattr = ele.Attribute("canonical");
                                        if (fattr != null)
                                        {
                                            virtuammachine.BootLoader.machine = fattr.Value;
                                        }
                                        else
                                        {
                                            virtuammachine.BootLoader.machine = ele.Value;
                                        }

                                    }
                                }
                            }

                        }
                    }
                }
            }

            using (var domain = h.virDomainDefineXML(virtuammachine))
            {

                if (domain.IsValid)
                {
                    if (domain.virDomainCreate() == 0)
                    {
                        Debug.WriteLine("Successfully created and started the new VM!");
                    }
                    else
                    {
                        Debug.WriteLine("Successfully created the VM, but was unable to start it. Check the error logs");
                    }

                }
                else
                {
                    Debug.WriteLine("Unable to create the VM, please check the error logs!");
                }
            }
        }
Example #3
0
        public UserControl Forward()
        {
            var previtem = _Storage_Create_Model.Machine_Definition.Devices.Devices.FirstOrDefault();

            _Storage_Create_Model.Machine_Definition.Devices.Devices.Clear();// clear everything
            var de = new Libvirt.Models.Concrete.Device();

            de.Device_Bus_Type    = Libvirt.Models.Concrete.Device.Device_Bus_Types.virtio;
            de.Device_Device_Type = Libvirt.Models.Concrete.Device.Device_Device_Types.disk;
            de.Device_Type        = Libvirt.Models.Concrete.Device.Device_Types.volume;
            de.Driver_Cache_Type  = Libvirt.Models.Concrete.Device.Driver_Cache_Types._default;
            de.Driver_Type        = Libvirt.Models.Concrete.Device.Driver_Types.raw;
            de.ReadOnly           = false;
            de.Snapshot_Type      = Libvirt.Models.Concrete.Device.Snapshot_Types._default;
            var source = new Libvirt.Models.Concrete.Device_Source_Volume();

            source.pool = Pool_ListBox.SelectedItem != null?Pool_ListBox.SelectedItem.ToString() : "";

            source.volume = Volume_ListBox.SelectedItem != null?Volume_ListBox.SelectedItem.ToString() : "";

            source.Source_Startup_Policy = Libvirt.Models.Concrete.Device.Source_Startup_Policies.mandatory;
            de.Source = source;

            _Storage_Create_Model.Machine_Definition.Devices.Add(de);// add this .. NOW VALIDATE!!
            if (_Storage_Create_Model.Validate())
            {
                _Storage_Create_Model.Machine_Definition.Devices.Add(previtem);//add the previous item back
                var tmpxml = _Storage_Create_Model.Machine_Definition.To_XML();

                using (var domain = _Storage_Create_Model.Connection.virDomainDefineXML(_Storage_Create_Model.Machine_Definition))
                {
                    if (domain.IsValid)
                    {
                        if (AutoStart_VM_chk.Checked)
                        {
                            if (domain.virDomainCreate() == 0)
                            {
                                MessageBox.Show("Successfully created and started the new VM!");
                                return(new End_Control());//marker to signal the end
                            }
                            else
                            {
                                MessageBox.Show("Successfully created the VM, but was unable to start it. Check the error logs");
                                return(new End_Control());//marker to signal the end
                            }
                        }
                        else
                        {
                            MessageBox.Show("Successfully created the new VM!");
                            return(new End_Control());//marker to signal the end
                        }
                    }
                    else
                    {
                        MessageBox.Show("Unable to create the VM, please check the error logs!");
                    }
                }
            }
            else
            {
                _Storage_Create_Model.Machine_Definition.Devices.Devices.Clear();// clear everything, bad attempt
            }



            return(null);
        }
        public ActionResult _Partial_Drives(Models.Domain_Drive_Down_VM Domain_Drive)
        {
            Libvirt.Models.Concrete.Virtual_Machine machine = null;

            var vm = Code.ViewModelFactory.Domain_Drive_Down(Domain_Drive.Host, Domain_Drive.Parent, Domain_Drive.Letter, out machine);

            if (ModelState.IsValid)
            {
                var harddrive = new Libvirt.Models.Concrete.Disk();
                harddrive.Device_Bus_Type = Domain_Drive.Device_Bus_Type;
                harddrive.Disk_Device_Type= Domain_Drive.Disk_Device_Type;
                harddrive.Device_Type = Libvirt.Models.Concrete.Disk.Disk_Types.volume;//use volumes because this makes management much easier
                harddrive.Driver_Cache_Type = Domain_Drive.Driver_Cache_Type;
                harddrive.Driver_Type = Domain_Drive.Driver_Type;
                harddrive.ReadOnly = Domain_Drive.ReadOnly;
                harddrive.Snapshot_Type = Domain_Drive.Snapshot_Type;
                harddrive.Letter = Domain_Drive.Letter;
                var source = new Libvirt.Models.Concrete.Device_Source_Volume();
                source.pool = Domain_Drive.Pool;
                source.volume = Domain_Drive.Volume;

                source.Source_Startup_Policy = Domain_Drive.Source_Startup_Policy;
                harddrive.Source = source;
                machine.Drives.Disks.RemoveAll(a => a.Letter == Domain_Drive.Letter);
                machine.Drives.Disks.Add(harddrive);
                virDomainDefineXML(machine, GetHost(Domain_Drive.Host));
            }
            vm.Domain_Drive = Domain_Drive;
            return PartialView(vm);
        }