vcpu)
except Exception, ex:
raise XendError(str(ex))
-
+
+ def domain_reset(self, domid):
+ """Terminate domain immediately, and then create domain.
+
+ @param domid: Domain ID or Name
+ @type domid: int or string.
+ @rtype: None
+ @raise XendError: Failed to destroy or create
+ @raise XendInvalidDomain: Domain is not valid
+ """
+
+ dominfo = self.domain_lookup_nr(domid)
+ if not dominfo:
+ raise XendInvalidDomain(str(domid))
+ if dominfo and dominfo.getDomid() == DOM0_ID:
+ raise XendError("Cannot reset privileged domain %s" % domid)
+ if dominfo._stateGet() not in (DOM_STATE_RUNNING, DOM_STATE_PAUSED):
+ raise VMBadState("Domain '%s' is not started" % domid,
+ POWER_STATE_NAMES[DOM_STATE_RUNNING],
+ POWER_STATE_NAMES[dominfo._stateGet()])
+ try:
+ dominfo.resetDomain()
+ except Exception, ex:
+ raise XendError(str(ex))
+
def instance():
"""Singleton constructor. Use this instead of the class constructor.
self._cleanup_phantom_devs(paths)
+ def resetDomain(self):
+ log.debug("XendDomainInfo.resetDomain(%s)", str(self.domid))
+
+ old_domid = self.domid
+ prev_vm_xend = self._listRecursiveVm('xend')
+ new_dom_info = self.info
+ try:
+ self._unwatchVm()
+ self.destroy()
+
+ new_dom = None
+ try:
+ from xen.xend import XendDomain
+ new_dom_info['domid'] = None
+ new_dom = XendDomain.instance().domain_create_from_dict(
+ new_dom_info)
+ for x in prev_vm_xend[0][1]:
+ new_dom._writeVm('xend/%s' % x[0], x[1])
+ new_dom.waitForDevices()
+ new_dom.unpause()
+ except:
+ if new_dom:
+ new_dom.destroy()
+ raise
+ except:
+ log.exception('Failed to reset domain %s.', str(old_domid))
+
+
def resumeDomain(self):
log.debug("XendDomainInfo.resumeDomain(%s)", str(self.domid))
'Migrate a domain to another machine.'),
'pause' : ('<Domain>', 'Pause execution of a domain.'),
'reboot' : ('<Domain> [-wa]', 'Reboot a domain.'),
+ 'reset' : ('<Domain>', 'Reset a domain.'),
'restore' : ('<CheckpointFile> [-p]',
'Restore a domain from a saved state.'),
'save' : ('[-c] <Domain> <CheckpointFile>',
"migrate",
"pause",
"reboot",
+ "reset",
"restore",
"resume",
"save",
"pause",
"reboot",
"rename",
+ "reset",
"restore",
"resume",
"save",
from xen.xm import shutdown
shutdown.main(["shutdown"] + args)
+def xm_reset(args):
+ arg_check(args, "reset", 1)
+ dom = args[0]
+
+ # TODO: XenAPI
+ server.xend.domain.reset(dom)
+
def xm_pause(args):
arg_check(args, "pause", 1)
dom = args[0]
"dump-core": xm_dump_core,
"reboot": xm_reboot,
"rename": xm_rename,
+ "reset": xm_reset,
"restore": xm_restore,
"resume": xm_resume,
"save": xm_save,