vmsnap
Version:
A Node based backup and backup rotation tool for KVM domains.
2 lines (1 loc) • 1.62 kB
JavaScript
import{EOL as l}from"os";import{asyncExec as e}from"../vmsnap.js";import{logger as m}from"../vmsnap.js";export const VIRSH="virsh",CHECKPOINT_REGEX=/^virtnbdbackup\.[0-9]*$/;let f=null;export const setLibvirtUri=t=>{f=t};const i=()=>f?[VIRSH,"-c",f]:[VIRSH],h=async t=>{const n=[...i(),"domstate",t];try{const{stdout:o}=await e(n.join(" "));return o.trim().toLowerCase()==="running"}catch{return!1}},p=async t=>{if(/^[A-Za-z0-9_\.\+\-&:/]*$/.test(t)===!1)return m.error(`Domain ${t} contains invalid characters`),!1;const n=[...i(),"domstate",t];try{return await e(n.join(" ")),!0}catch{return!1}},w=async()=>{const t=[...i(),"list","--all","--name"],{stdout:n,stderr:o}=await e(t.join(" "));if(o)throw new Error(o);return n.split(l).filter(r=>r.length>0)},d=async t=>{const n=[...i(),"checkpoint-list",t,"--name"],{stdout:o,stderr:r}=await e(n.join(" "));if(r)throw new Error(r);return o.split(l).filter(s=>s.trim()!=="")},k=async(t,n=void 0)=>{const o=await d(t);if(o.length!==0)for(const r of o){if(CHECKPOINT_REGEX.test(r)===!1||n&&r!==n)continue;const s=[...i(),"checkpoint-delete",t,r,"--metadata"];m.info(`Removing checkpoint ${r} from ${t}`);const{stderr:c}=await e(s.join(" "));if(c)throw new Error(c)}},g=async t=>{const n=new Map,o=[...i(),"domblklist",t,"--details"],{stdout:r,stderr:s}=await e(o.join(" "));if(s)throw new Error(s);for(const c of r.split(l).slice(1)){const a=c.split(" ").filter(u=>u.length>0);a.length>=4&&a[1]==="disk"&&n.set(a[2],a[3].trim())}return n};export{p as domainExists,h as isDomainRunning,w as fetchAllDomains,d as findCheckpoints,k as cleanupCheckpoints,g as fetchAllDisks};