vmsnap
Version:
A Node based backup and backup rotation tool for KVM domains.
2 lines (1 loc) • 1.11 kB
JavaScript
import{sep as f}from"path";import{asyncExec as c,logger as r}from"../vmsnap.js";import{findKeyByValue as u}from"./general.js";import{CHECKPOINT_REGEX as d,fetchAllDisks as l}from"./virsh.js";export const QEMU_IMG="qemu-img";const p=async a=>{const i=[],s=await l(a);for(const t of s.values()){const o=[QEMU_IMG,"info",t,"--output=json"];try{const{stdout:e}=await c(o.join(" ")),n=JSON.parse(e),m=n.format;i.push({disk:u(s,t),virtualSize:n["virtual-size"],actualSize:n["actual-size"],type:m,name:t.split(f).pop(),path:t,bitmaps:m==="raw"?[]:n["format-specific"].data.bitmaps||[]})}catch{continue}}return i},b=async(a,i=void 0)=>{const s=await p(a);for(const t of s){if(t.bitmaps.length===0){r.info(`No bitmaps found for ${t.disk} on domain ${a}`);continue}for(const o of t.bitmaps){if(d.test(o.name)===!1||i&&o.name!==i)continue;const e=[QEMU_IMG,"bitmap","--remove",t.path,o.name];r.info(`Removing bitmap ${o.name} from ${t.path} on ${a}`);try{await c(e.join(" "))}catch(n){r.warn(`Error removing bitmap ${o.name} from ${t.path} on ${a}: ${n.message}`);continue}}}};export{p as findBitmaps,b as cleanupBitmaps};