try { dm = conn.domainLookupByName(vmName); final int persist = dm.isPersistent(); if (force) { if (dm.isActive() == 1) { dm.destroy(); if (persist == 1) { dm.undefine(); if (dm.isActive() == 0) { return null; dm.shutdown(); int retry = _stopTimeout / 2000; while (dm.isActive() == 1 && retry >= 0) { Thread.sleep(2000); retry--; } else { if (persist == 1) { dm.undefine(); try { if (dm != null) { dm.free();
xmlDesc = dm.getXMLDesc(xmlFlag); xmlDesc = replaceIpForVNCInDescFile(xmlDesc, target); if (migrateDowntime > 0 ) { try { final int setDowntime = dm.migrateSetMaxDowntime(migrateDowntime); if (setDowntime == 0 ) { s_logger.debug("Set max downtime for migration of " + vmName + " to " + String.valueOf(migrateDowntime) + "ms"); DomainState state = null; try { state = dm.getInfo().state; } catch (final LibvirtException e) { s_logger.info("Couldn't get VM domain state after " + sleeptime + "ms: " + e.getMessage()); try { s_logger.info("Pausing VM " + vmName + " due to property vm.migrate.pauseafter setting to " + migratePauseAfter + "ms to complete migration"); dm.suspend(); } catch (final LibvirtException e) { if (dm.isPersistent() == 1) { dm.undefine(); dm.free(); destDomain.free();
public List<Ternary<String, Boolean, String>> cleanVMSnapshotMetadata(Domain dm) throws LibvirtException { s_logger.debug("Cleaning the metadata of vm snapshots of vm " + dm.getName()); List<Ternary<String, Boolean, String>> vmsnapshots = new ArrayList<Ternary<String, Boolean, String>>(); if (dm.snapshotNum() == 0) { return vmsnapshots; DomainSnapshot snapshotCurrent = dm.snapshotCurrent(); String snapshotXML = snapshotCurrent.getXMLDesc(); snapshotCurrent.free(); s_logger.debug("Fail to get the current vm snapshot for vm: " + dm.getName() + ", continue"); String[] snapshotNames = dm.snapshotListNames(); Arrays.sort(snapshotNames); for (String snapshotName: snapshotNames) { DomainSnapshot snapshot = dm.snapshotLookupByName(snapshotName); Boolean isCurrent = (currentSnapshotName != null && currentSnapshotName.equals(snapshotName)) ? true: false; vmsnapshots.add(new Ternary<String, Boolean, String>(snapshotName, isCurrent, snapshot.getXMLDesc())); DomainSnapshot snapshot = dm.snapshotLookupByName(snapshotName);
try { dm = conn.domainLookupByName(vmName); if (dm != null && dm.isPersistent() == 1) { dm.undefine(); dm.free();
public PowerState getVmState(final Connect conn, final String vmName) { int retry = 3; Domain vms = null; while (retry-- > 0) { try { vms = conn.domainLookupByName(vmName); final PowerState s = convertToPowerState(vms.getInfo().state); return s; } catch (final LibvirtException e) { s_logger.warn("Can't get vm state " + vmName + e.getMessage() + "retry:" + retry); } finally { try { if (vms != null) { vms.free(); } } catch (final LibvirtException l) { s_logger.trace("Ignoring libvirt error.", l); } } } return PowerState.PowerOff; }
switch (action.getAction()) { case "pause": d.suspend(); response.message = d.getName() + " paused successfully"; break; case "shutdown": d.shutdown(); response.message = d.getName() + " shutdown successfully"; break; case "reboot": d.reboot(0); response.message = d.getName() + " reset successfully"; break; case "force-reset": d.destroy(); d.create(); response.message = d.getName() + " force reset successfully"; break; case "force-off": d.destroy(); response.message = d.getName() + " force stopped successfully"; break; case "start": d.create(); response.message = d.getName() + " started successfully"; break; case "resume": d.resume(); response.message = d.getName() + " resumed successfully";
try { vm = resource.getDomain(conn, vmName); state = vm.getInfo().state; } catch (final LibvirtException e) { s_logger.trace("Ignoring libvirt error.", e); final String vmUuid = vm.getUUIDString(); final Object[] args = new Object[] {snapshotName, vmUuid}; final String snapshot = SnapshotXML.format(args); vm.snapshotCreateXML(snapshot); final long total = (System.currentTimeMillis() - start)/1000; s_logger.debug("snapshot takes " + total + " seconds to finish"); state = vm.getInfo().state; if (state == DomainInfo.DomainState.VIR_DOMAIN_PAUSED) { vm.resume();
public void destroyWithDisks() { try { // look up state before undefining the domain... boolean isRunning = (domain.getInfo().state == DomainState.VIR_DOMAIN_RUNNING); List<Disk> disks = getDisks(domain.getConnect(), domainXml); logger.info("Undefining domain '{}'", domain.getName()); domain.undefine(3); // also remove snapshot data and managed save data if (isRunning) { logger.info("Shutting down domain '{}'", domain.getName()); domain.destroy(); } // this will not destroy the backing store disks. for (Disk disk : disks) { logger.info("Removing disk {}", disk.getName()); disk.getVolume().delete(0); } } catch (LibvirtException e) { throw new LibvirtRuntimeException("Unable to destroy domain", e); } }
DomainSnapshot snapshot = dm.snapshotLookupByName(cmd.getTarget().getSnapshotName()); if (snapshot == null) return new RevertToVMSnapshotAnswer(cmd, false, "Cannot find vmSnapshot with name: " + cmd.getTarget().getSnapshotName()); dm.revertToSnapshot(snapshot); snapshot.free(); dm.destroy(); if (dm.isPersistent() == 1) dm.undefine(); vmState = VirtualMachine.PowerState.PowerOff; } else { if (dm != null) { try { dm.free(); } catch (LibvirtException l) { s_logger.trace("Ignoring libvirt error.", l);
dm = conn.domainLookupByID(ids[i]); final DomainState ps = dm.getInfo().state; s_logger.trace("VM " + dm.getName() + ": powerstate = " + ps + "; vm state=" + state.toString()); final String vmName = dm.getName(); try { if (dm != null) { dm.free(); final DomainState ps = dm.getInfo().state; final PowerState state = convertToPowerState(ps); final String vmName = dm.getName(); s_logger.trace("VM " + vmName + ": powerstate = " + ps + "; vm state=" + state.toString()); try { if (dm != null) { dm.free();
public Integer getVncPort(final Connect conn, final String vmName) throws LibvirtException { final LibvirtDomainXMLParser parser = new LibvirtDomainXMLParser(); Domain dm = null; try { dm = conn.domainLookupByName(vmName); final String xmlDesc = dm.getXMLDesc(0); parser.parseDomainXML(xmlDesc); return parser.getVncPort(); } finally { try { if (dm != null) { dm.free(); } } catch (final LibvirtException l) { s_logger.trace("Ignoring libvirt error.", l); } } }
/** * Clone the domain. All disks are cloned using the original disk as backing store. The names of the disks are * created by suffixing the original disk name with a number. */ public DomainWrapper cloneWithBackingStore(String cloneName, List<Filesystem> mappings) { logger.info("Creating clone from {}", getName()); try { // duplicate definition of base Document cloneXmlDocument = domainXml.clone(); setDomainName(cloneXmlDocument, cloneName); prepareForCloning(cloneXmlDocument); // keep track of who we are a clone from... updateCloneMetadata(cloneXmlDocument, getName(), new Date()); cloneDisks(cloneXmlDocument, cloneName); updateFilesystemMappings(cloneXmlDocument, mappings); String cloneXml = documentToString(cloneXmlDocument); logger.debug("Clone xml={}", cloneXml); // Domain cloneDomain = domain.getConnect().domainCreateXML(cloneXml, 0); Domain cloneDomain = domain.getConnect().domainDefineXML(cloneXml); String createdCloneXml = cloneDomain.getXMLDesc(0); logger.debug("Created clone xml: {}", createdCloneXml); cloneDomain.create(); logger.debug("Starting clone: '{}'", cloneDomain.getName()); return newWrapper(cloneDomain); } catch (IOException | LibvirtException e) { throw new LibvirtRuntimeException("Unable to clone domain", e); } }
DomainState domainState = dm.getInfo().state ; if (domainState != DomainState.VIR_DOMAIN_RUNNING) { return new CreateVMSnapshotAnswer(cmd, false, + " <memory snapshot='internal' />" + "</domainsnapshot>"; dm.snapshotCreateXML(vmSnapshotXML); if (dm != null) { try { dm.free(); } catch (LibvirtException l) { s_logger.trace("Ignoring libvirt error.", l);
return null; DomainInfo info = dm.getInfo(); final VmStatsEntry stats = new VmStatsEntry(); long tx = 0; for (final InterfaceDef vif : vifs) { final DomainInterfaceStats ifStats = dm.interfaceStats(vif.getDevName()); rx += ifStats.rx_bytes; tx += ifStats.tx_bytes; continue; final DomainBlockStats blockStats = dm.blockStats(disk.getDiskLabel()); io_rd += blockStats.rd_req; io_wr += blockStats.wr_req; } finally { if (dm != null) { dm.free();
"Restore VM Snapshot Failed due to can not find vm: " + vmName); String xmlDesc = dm.getXMLDesc(0); flags += 2; // VIR_DOMAIN_SNAPSHOT_CREATE_CURRENT = 2 dm.snapshotCreateXML(vmSnapshotXML, flags); } catch (LibvirtException e) { s_logger.debug("Failed to restore vm snapshot " + snapshot.getSnapshotName() + " on " + vmName); if (dm != null) { try { dm.free(); } catch (LibvirtException l) { s_logger.trace("Ignoring libvirt error.", l);
try { vm = resource.getDomain(conn, vmName); state = vm.getInfo().state; } catch (final LibvirtException e) { s_logger.trace("Ignoring libvirt error.", e); primaryStore.getUuid()); if (state == DomainInfo.DomainState.VIR_DOMAIN_RUNNING && !primaryStorage.isExternalSnapshot()) { final DomainSnapshot snap = vm.snapshotLookupByName(snapshotName); snap.delete(0); state = vm.getInfo().state; if (state == DomainInfo.DomainState.VIR_DOMAIN_PAUSED) { vm.resume();
public void acpiShutdown() { logger.info("Shutting down domain '{}'", getName()); try { domain.shutdown(); while (this.domain.isActive() == 1) { sleep(1); } logger.debug("Domain '{}' shut down (active={})", getName(), this.domain.isActive()); } catch (LibvirtException e) { throw new LibvirtRuntimeException(String.format("Unable to shut down domain '%s'", getName()), e); } }
public String getName() { try { return domain.getName(); } catch (LibvirtException e) { throw new LibvirtRuntimeException("Unable to get domain name", e); } }