diff --git a/emhttp/plugins/dynamix.vm.manager/VMMachines.page b/emhttp/plugins/dynamix.vm.manager/VMMachines.page index e425dd086..745342a83 100644 --- a/emhttp/plugins/dynamix.vm.manager/VMMachines.page +++ b/emhttp/plugins/dynamix.vm.manager/VMMachines.page @@ -254,14 +254,24 @@ function selectsnapshot(uuid, name ,snaps, opt, getlist,state ,fstype){ if (data.html) box.find('#targetsnapimages').html(data.html); },'json'); } + var memorydump = "no"; document.getElementById("targetsnaprmv").checked = true; document.getElementById("targetsnaprmvmeta").checked = true; document.getElementById("targetsnapkeep").checked = true; document.getElementById("targetsnapfspc").checked = true; - if (fstype == "ZFS") { + if (fstype == "ZFS") { box.find('#targetsnaprmv').prop('disabled',true); box.find('#targetsnaprmvmeta').prop('disabled',true); } + if (state != "running") { + box.find('#memoryline').prop('hidden',true); + box.find('#targetsnapmem').prop('hidden',true); + box.find('#targetsnapmem').prop('checked',false); + } else { + box.find('#memoryline').prop('hidden',false); + box.find('#targetsnapmem').prop('hidden',false); + box.find('#targetsnapmem').prop('checked',true); + } box.dialog({ title: optiontext, height: 'auto', @@ -289,10 +299,11 @@ function selectsnapshot(uuid, name ,snaps, opt, getlist,state ,fstype){ if (opt == "create") { free = box.find('#targetsnapfspc').prop('checked') ? 'yes' : 'no'; fstypeuse = box.find('#targetsnapfstype').prop('checked') ? 'yes' : 'no'; + memorydump = box.find('#targetsnapmem').prop('checked') ? 'yes' : 'no'; if (fstypeuse == "no") fstype ="QEMU"; desc = box.find("#targetsnapdesc").prop('value'); } - ajaxVMDispatch({action:"snap-" + opt +'-external', uuid:uuid, snapshotname:target, remove:remove, free:free, removemeta:removemeta, keep:keep, desc:desc, fstype:fstype}, "loadlist"); + ajaxVMDispatch({action:"snap-" + opt +'-external', uuid:uuid, snapshotname:target, remove:remove, free:free, removemeta:removemeta, keep:keep, desc:desc, fstype:fstype,memorydump:memorydump}, "loadlist"); box.dialog('close'); }, "_(Cancel)_": function(){ @@ -500,6 +511,7 @@ $(function() { _(VM Name)_: _(Snapshot Name)_:_(Check free space)_: _(Description )_: +_(Memory dump )_: _(FS Native Snapshot )_:_(Unchecked will use QEMU External Snapshot)_ diff --git a/emhttp/plugins/dynamix.vm.manager/include/VMajax.php b/emhttp/plugins/dynamix.vm.manager/include/VMajax.php index 167bb8e4d..3a694cf4f 100644 --- a/emhttp/plugins/dynamix.vm.manager/include/VMajax.php +++ b/emhttp/plugins/dynamix.vm.manager/include/VMajax.php @@ -338,7 +338,7 @@ case 'snap-create': case 'snap-create-external': requireLibvirt(); - $arrResponse = vm_snapshot($domName,$_REQUEST['snapshotname'],$_REQUEST['desc'],$_REQUEST['free'],$_REQUEST['fstype']) ; + $arrResponse = vm_snapshot($domName,$_REQUEST['snapshotname'],$_REQUEST['desc'],$_REQUEST['free'],$_REQUEST['fstype'],$_REQUEST['memorydump']) ; break; case 'snap-images': diff --git a/emhttp/plugins/dynamix.vm.manager/include/libvirt_helpers.php b/emhttp/plugins/dynamix.vm.manager/include/libvirt_helpers.php index 61feb45ad..0156cdbcf 100644 --- a/emhttp/plugins/dynamix.vm.manager/include/libvirt_helpers.php +++ b/emhttp/plugins/dynamix.vm.manager/include/libvirt_helpers.php @@ -1913,7 +1913,7 @@ private static $encoding = 'UTF-8'; $cmdstr = "virsh snapshot-create-as '$vm' --name '$name' $snapshotdesc --atomic" ; - if ($state == "running") { + if ($state == "running" & $memorysnap == "yes") { $cmdstr .= " --live ".$memspec.$diskspec ; $capacity = $capacity + $memory ; @@ -2088,7 +2088,7 @@ private static $encoding = 'UTF-8'; if (!$dryrun) shell_exec($fssnapcmd); else echo "$fssnapcmd\n"; } - if ($snapslist[$snap]['state'] == "running") { + if ($snapslist[$snap]['state'] == "running" || $snapslist[$snap]['state'] == "disk-snapshot") { $xmlfile = $primarypath."/$snap.running" ; $memoryfile = $primarypath."/memory$snap.mem" ; # Set XML to saved XML @@ -2100,9 +2100,12 @@ private static $encoding = 'UTF-8'; # Restore Memory. - if (!$dryrun) $cmdrtn = exec("virsh restore --running ".escapeshellarg($memoryfile)) ; - if (!$dryrun && !$cmdrtn) unlink($xmlfile); - if (!$dryrun && !$cmdrtn) unlink($memoryfile); + if ($snapslist[$snap]['state'] == "running") { + if (!$dryrun) $cmdrtn = exec("virsh restore --running ".escapeshellarg($memoryfile)) ; + if (!$dryrun && !$cmdrtn) unlink($xmlfile); + if (!$dryrun && !$cmdrtn) unlink($memoryfile); + } + if ($snapslist[$snap]['state'] == "disk-snapshot") if (!$dryrun) unlink($xmlfile); } diff --git a/emhttp/plugins/dynamix/DashStats.page b/emhttp/plugins/dynamix/DashStats.page index 2587ffbc6..aa5f16568 100644 --- a/emhttp/plugins/dynamix/DashStats.page +++ b/emhttp/plugins/dynamix/DashStats.page @@ -696,6 +696,7 @@ function hideShow() { _(VM Name)_: _(Snapshot Name)_:_(Check free space)_: _(Description)_: +_(Memory dump )_: _(FS Native Snapshot )_:_(Unchecked will use QEMU External Snapshot)_ @@ -1393,7 +1394,7 @@ function VMClone(uuid, name){ }); dialogStyle(); } -function selectsnapshot(uuid, name ,snaps, opt, getlist, status,fstype){ +function selectsnapshot(uuid, name ,snaps, opt, getlist, state,fstype){ box = $("#iframe-popup"); box.html($("#templatesnapshot"+opt).html()); const capopt = opt.charAt(0).toUpperCase() + opt.slice(1); @@ -1407,7 +1408,21 @@ function selectsnapshot(uuid, name ,snaps, opt, getlist, status,fstype){ var only = (opt == "remove") ? 0 : 1; $.post("/plugins/dynamix.vm.manager/include/VMajax.php",{action:"snap-images",uuid:uuid,snapshotname:snaps,only:only},function(data){if (data.html) box.find('#targetsnapimages').html(data.html);},'json'); } + var memorydump = "no"; document.getElementById("targetsnapfspc").checked = true; + if (fstype == "ZFS") { + box.find('#targetsnaprmv').prop('disabled',true); + box.find('#targetsnaprmvmeta').prop('disabled',true); + } + if (state != "running") { + box.find('#memoryline').prop('hidden',true); + box.find('#targetsnapmem').prop('hidden',true); + box.find('#targetsnapmem').prop('checked',false); + } else { + box.find('#memoryline').prop('hidden',false); + box.find('#targetsnapmem').prop('hidden',false); + box.find('#targetsnapmem').prop('checked',true); + } box.dialog({ title: optiontext, height: 'auto', @@ -1435,10 +1450,11 @@ function selectsnapshot(uuid, name ,snaps, opt, getlist, status,fstype){ if (opt == "create") { free = box.find('#targetsnapfspc').prop('checked') ? 'yes' : 'no'; desc = box.find("#targetsnapdesc").prop('value'); + memorydump = box.find('#targetsnapmem').prop('checked') ? 'yes' : 'no'; fstypeuse = box.find('#targetsnapfstype').prop('checked') ? 'yes' : 'no'; if (fstypeuse == "no") fstype ="QEMU"; } - ajaxVMDispatch({action:"snap-" + opt +'-external', uuid:uuid, snapshotname:target, remove:remove, free:free, desc:desc, fstype:fstype}, "loadlist"); + ajaxVMDispatch({action:"snap-" + opt +'-external', uuid:uuid, snapshotname:target, remove:remove, free:free, desc:desc, fstype:fstype,memorydump:memorydump}, "loadlist"); box.dialog('close'); }, "_(Cancel)_": function(){