revertVMSnapshot(slave, snapshotName, listener);
}
}
private static void revertVMSnapshot(VirtualMachineSlave slave, String snapshotName, TaskListener listener) {
ComputerLauncher launcher = slave.getLauncher();
if (launcher instanceof ComputerLauncher) {
VirtualMachineLauncher slaveLauncher = (VirtualMachineLauncher) launcher;
Hypervisor hypervisor = slaveLauncher.findOurHypervisorInstance();
try {
Map<String, IDomain> domains = hypervisor.getDomains();
String vmName = slaveLauncher.getVirtualMachineName();
IDomain domain = domains.get(vmName);
if (domain != null) {
listener.getLogger().println("Preparing to revert " + vmName + " to snapshot " + snapshotName + ".");
try {
IDomainSnapshot snapshot = domain.snapshotLookupByName(snapshotName);
try {
Computer computer = slave.getComputer();
try {
computer.getChannel().syncLocalIO();
try {
computer.getChannel().close();
computer.disconnect(null);
try {
computer.waitUntilOffline();
listener.getLogger().println("Reverting " + vmName + " to snapshot " + snapshotName + ".");
domain.revertToSnapshot(snapshot);
listener.getLogger().println("Relaunching " + vmName + ".");
try {
launcher.launch(slave.getComputer(), listener);
} catch (IOException e) {
listener.fatalError("Could not relaunch VM: " + e);
} catch (InterruptedException e) {
listener.fatalError("Could not relaunch VM: " + e);
}