X-Git-Url: http://git.ipfire.org/?p=nitsi.git;a=blobdiff_plain;f=src%2Fnitsi%2Fmachine.py;h=3e97ecff1bce985fd96a930a81984b34a870d1ab;hp=0b4617aed8dcbb0df1ec094a414dbfce73621e42;hb=5499746ce7c6eed129053b7b3799de93b8419966;hpb=6ec03557d503bf732d72728887f1d8b4109be1e3 diff --git a/src/nitsi/machine.py b/src/nitsi/machine.py index 0b4617a..3e97ecf 100644 --- a/src/nitsi/machine.py +++ b/src/nitsi/machine.py @@ -14,6 +14,12 @@ class machine(): def __init__(self, libvirt_con, vm_xml_file, snapshot_xml_file, image, root_uid, username, password): self.log = logger.getChild(os.path.basename(vm_xml_file)) self.con = libvirt_con + # self.dom should be always defined + self.dom = None + # self.snapshot should be also at least None + self.snapshot = None + + try: with open(vm_xml_file) as fobj: self.vm_xml = fobj.read() @@ -47,40 +53,56 @@ class machine(): self.password = password def define(self): + self.log.info("Defining virtual machine") self.dom = self.con.defineXML(self.vm_xml) if self.dom == None: self.log.error("Could not define VM") raise BaseException def start(self): + self.log.info("Starting virtual machine") if self.dom.create() < 0: self.log.error("Could not start VM") raise BaseException def shutdown(self): if self.is_running(): + self.log.info("Shutting down virtual machine") if self.dom.shutdown() < 0: self.log.error("Could not shutdown VM") raise BaseException else: - self.log.error("Domain is not running") + self.log.warn("Cannot shutdown a not running domain") def undefine(self): - self.dom.undefine() + # We cannot undefine a not defined dom object + if self.dom != None: + self.log.info("Undefining virtual machine") + self.dom.undefine() + else: + self.log.warn("Cannot undefine a not defined domain") def create_snapshot(self): - + self.log.info("Creating snapshot of virtual machine") self.snapshot = self.dom.snapshotCreateXML(self.snapshot_xml) - if not self.snapshot: + if self.snapshot == None: self.log.error("Could not create snapshot") raise BaseException def revert_snapshot(self): - self.dom.revertToSnapshot(self.snapshot) - self.snapshot.delete() + if self.snapshot != None: + self.log.info("Reverting snapshot") + self.dom.revertToSnapshot(self.snapshot) + self.log.info("Deleting snapshot") + self.snapshot.delete() + else: + self.log.warn("No active snapshot. Cannot revert and delete snapshot") def is_running(self): + # Only if we have a valid dom object we can check the dom state + if self.dom == None: + return False state, reason = self.dom.state()