Menu="VMs:1"
Title="Virtual Machines"
Tag="columns"
Cond="is_file('/var/run/libvirt/libvirtd.pid')"
Markdown="false"
---
require_once "$docroot/plugins/dynamix.vm.manager/include/libvirt_helpers.php";
$cpus = cpu_list();
$hover = in_array($theme,['white','azure']) ? 'rgba(0,0,0,0.1)' : 'rgba(255,255,255,0.1)';
$bgcolor = in_array($theme,['white','azure']) ? '#f2f2f2' : '#1c1c1c';
$fgcolor = in_array($theme,['white','azure']) ? '#1c1c1c' : '#f2f2f2';
$incolor = $theme!='gray' ? $bgcolor : '#121510';
function showCPUs($uuid) {
global $cpus;
$vm = domain_to_config($uuid);
$vcpu = $vm['domain']['vcpu'];
echo "
";
foreach ($cpus as $pair) {
unset($cpu1,$cpu2);
[$cpu1, $cpu2] = my_preg_split('/[,-]/',$pair);
$check = in_array($cpu1, $vcpu) ? 'fa-circle orange-text':'fa-circle-o';
if (!$cpu2) {
echo "";
} else {
echo "";
$check = in_array($cpu2, $vcpu) ? 'fa-circle orange-text':'fa-circle-o';
echo "";
}
}
echo "
";
}
function vsize($size,$expand=true) {
$units = ['','K','M','G','T','P','E','Z','Y'];
if ($expand) {
$size = str_replace(['B',' ',',', '.'],'',strtoupper($size));
[$c1,$c2] = my_preg_split('/(?<=[0-9])(?=[A-Z])/',$size);
return $c1 * pow(1024,array_search($c2,$units)?:0);
} else {
$base = $size ? floor(log($size,1024)) : 0;
return $size/pow(1024,$base).$units[$base];
}
}
$uuid = unscript($_GET['uuid']??'');
$subaction = $_GET['subaction'] ?? false;
if (isset($_GET['refresh'])) {
$vm = unscript($_GET['name']);
if ($lv->domain_is_active($vm)) {
echo "";
$msg = "Waiting for $vm to shutdown...";
} else {
$msg = "$vm has been shutdown";
}
}
if ($subaction) {
$vm = $lv->domain_get_name_by_uuid($uuid);
if ($subaction == 'disk-resize') {
$capacity = vsize($_GET['cap']);
if ($capacity > vsize($_GET['oldcap'])) {
shell_exec("qemu-img resize -q ".escapeshellarg(unscript($_GET['disk']??''))." ".vsize($capacity,0));
$msg = $vm." disk capacity has been changed to {$_GET['cap']}";
} else {
$msg = "Error: disk capacity has to be greater than {$_GET['oldcap']}";
}
} elseif ($subaction == 'disk-remove') {
$msg = $lv->domain_disk_remove($vm, $_GET['dev'])
? "$vm disk has been removed"
: "Error: ".$lv->get_last_error();
} elseif ($subaction == 'snap-create') {
$msg = $lv->domain_snapshot_create($vm)
? "Snapshot for $vm has been created"
: "Error: ".$lv->get_last_error();
} elseif ($subaction == 'snap-delete') {
$msg = $lv->domain_snapshot_delete($vm, $_GET['snap'])
? "Snapshot for $vm has been deleted"
: "Error: ".$lv->get_last_error();
} elseif ($subaction == 'snap-revert') {
$msg = $lv->domain_snapshot_revert($vm, $_GET['snap'])
? "$vm has been reverted"
: "Error: ".$lv->get_last_error();
} elseif ($subaction == 'snap-desc') {
$msg = $lv->snapshot_set_metadata($vm, $_GET['snap'], $_POST['snapdesc'])
? "Snapshot description for $vm has been saved"
: "Error: ".$lv->get_last_error();
}
}
if ($libvirt_running=='yes') $vms = $lv->get_domains() ?: [];
if (empty($vms)) {
$msg = $libvirt_running=='yes'
? 'No VMs defined. Create from template or add XML.'
: 'Libvirt is not running. Goto Settings tab then click Start.';
}
?>
">
">
">
| _(Name)_ | _(Description)_ | _(CPUs)_ | _(Memory)_ | _(vDisks)_ | _(Graphics)_ | _(Autostart)_ |
|
lang="=strtok($locale,'_')?:'en'?>">
">
_(ISO Image)_:
: