* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version 2, * as published by the Free Software Foundation. * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. */ ?> <? require_once('/usr/local/emhttp/webGui/include/Helpers.php'); require_once('/usr/local/emhttp/plugins/dynamix.vm.manager/classes/libvirt.php'); require_once('/usr/local/emhttp/plugins/dynamix.vm.manager/classes/libvirt_helpers.php'); $arrValidMachineTypes = getValidMachineTypes(); $arrValidGPUDevices = getValidGPUDevices(); $arrValidAudioDevices = getValidAudioDevices(); $arrValidOtherDevices = getValidOtherDevices(); $arrValidUSBDevices = getValidUSBDevices(); $arrValidDiskDrivers = getValidDiskDrivers(); $arrValidBridges = getNetworkBridges(); $strCPUModel = getHostCPUModel(); $arrOpenELECVersions = [ '5.95.3_1' => [ 'name' => '6.0.0 Beta3', 'url' => 'https://s3.amazonaws.com/dnld.lime-technology.com/images/OpenELEC/OpenELEC-unRAID.x86_64-5.95.3_1.tar.xz', 'size' => 153990180, 'md5' => '8936cda74c28ddcaa165cc49ff2a477a', 'localpath' => '', 'valid' => '0'
function domain_to_config($uuid) { global $lv; $arrValidGPUDevices = getValidGPUDevices(); $arrValidAudioDevices = getValidAudioDevices(); $arrValidOtherDevices = getValidOtherDevices(); $arrValidUSBDevices = getValidUSBDevices(); $arrValidDiskDrivers = getValidDiskDrivers(); $res = $lv->domain_get_domain_by_uuid($uuid); $dom = $lv->domain_get_info($res); $medias = $lv->get_cdrom_stats($res); $disks = $lv->get_disk_stats($res, false); $arrNICs = $lv->get_nic_info($res); $arrHostDevs = $lv->domain_get_host_devices_pci($res); $arrUSBDevs = $lv->domain_get_host_devices_usb($res); // Metadata Parsing // libvirt xpath parser sucks, use php's xpath parser instead $strDOMXML = $lv->domain_get_xml($res); $xmldoc = new DOMDocument(); $xmldoc->loadXML($strDOMXML); $xpath = new DOMXPath($xmldoc); $objNodes = $xpath->query('//domain/metadata/vmtemplate/@*'); $arrTemplateValues = []; if ($objNodes->length > 0) { foreach ($objNodes as $objNode) { $arrTemplateValues[$objNode->nodeName] = $objNode->nodeValue; } } if (empty($arrTemplateValues['name'])) { $arrTemplateValues['name'] = 'Custom'; } $arrGPUDevices = []; $arrAudioDevices = []; $arrOtherDevices = []; // check for vnc; add to arrGPUDevices $intVNCPort = $lv->domain_get_vnc_port($res); if (!empty($intVNCPort)) { $arrGPUDevices[] = [ 'id' => 'vnc', 'keymap' => $lv->domain_get_vnc_keymap($res) ]; } foreach ($arrHostDevs as $arrHostDev) { $arrFoundGPUDevices = array_filter($arrValidGPUDevices, function($arrDev) use ($arrHostDev) { return ($arrDev['id'] == $arrHostDev['id']); }); if (!empty($arrFoundGPUDevices)) { $arrGPUDevices[] = ['id' => $arrHostDev['id']]; continue; } $arrFoundAudioDevices = array_filter($arrValidAudioDevices, function($arrDev) use ($arrHostDev) { return ($arrDev['id'] == $arrHostDev['id']); }); if (!empty($arrFoundAudioDevices)) { $arrAudioDevices[] = ['id' => $arrHostDev['id']]; continue; } $arrFoundOtherDevices = array_filter($arrValidOtherDevices, function($arrDev) use ($arrHostDev) { return ($arrDev['id'] == $arrHostDev['id']); }); if (!empty($arrFoundOtherDevices)) { $arrOtherDevices[] = ['id' => $arrHostDev['id']]; continue; } } // Add claimed USB devices by this VM to the available USB devices /* foreach($arrUSBDevs as $arrUSB) { $arrValidUSBDevices[] = array( 'id' => $arrUSB['id'], 'name' => $arrUSB['product'], ); } */ $arrDisks = []; foreach ($disks as $disk) { $arrDisks[] = [ 'new' => (empty($disk['file']) ? $disk['partition'] : $disk['file']), 'size' => '', 'driver' => 'raw', 'dev' => $disk['device'], 'bus' => $disk['bus'] ]; } return [ 'template' => $arrTemplateValues, 'domain' => [ 'name' => $lv->domain_get_name($res), 'desc' => $lv->domain_get_description($res), 'persistent' => 1, 'uuid' => $lv->domain_get_uuid($res), 'clock' => $lv->domain_get_clock_offset($res), 'arch' => $lv->domain_get_arch($res), 'machine' => $lv->domain_get_machine($res), 'mem' => $lv->domain_get_current_memory($res), 'maxmem' => $lv->domain_get_memory($res), 'password' => '', //TODO? 'cpumode' => $lv->domain_get_cpu_type($res), 'vcpus' => $dom['nrVirtCpu'], 'vcpu' => $lv->domain_get_vcpu_pins($res), 'hyperv' => ($lv->domain_get_feature($res, 'hyperv') ? 1 : 0), 'autostart' => ($lv->domain_get_autostart($res) ? 1 : 0), 'state' => $lv->domain_state_translate($dom['state']), 'ovmf' => ($lv->domain_get_ovmf($res) ? 1 : 0) ], 'media' => [ 'cdrom' => (!empty($medias) && !empty($medias[0]) && array_key_exists('file', $medias[0])) ? $medias[0]['file'] : '', 'drivers' => (!empty($medias) && !empty($medias[1]) && array_key_exists('file', $medias[1])) ? $medias[1]['file'] : '' ], 'disk' => $arrDisks, 'gpu' => $arrGPUDevices, 'audio' => $arrAudioDevices, 'pci' => $arrOtherDevices, 'nic' => $arrNICs, 'usb' => $arrUSBDevs, 'shares' => $lv->domain_get_mount_filesystems($res) ]; }