The new lifecycle patches in xen-unstable added 3 new operations which can

be performed on domains - new, start and delete.  libvirt has had no-op
stub implementations of these APIs for a while & thus we'd enable their
use for Xen 3.0.4 builds. The new APIs are not currently exposed via the
existing SEXPR protocol, and since the new Xen-API protocol is unsupported
tech-preview for 3.0.4 we don't want to re-write against that just yet.

Thus the attached patch adds the 3 neccessary bindings for the SEXPR protocol
to allow the lifecycle functionality to be invoked. It also allows the 'state'
parameter to be specified when listing domains, so we can explicitly request
inactive domains if we know we're running against a 3.0.4 era XenD

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
This commit is contained in:
Ewan Mellor committed 2006-12-07 12:15:30 +00:00
1 parent 504c725be0
commit b744adfbba
2 files changed
+49 -1

No files matched your search

+13
View File
@@ -21,6 +21,7 @@ from xen.web import http
from xen.xend import sxp
from xen.xend import XendDomain
from xen.xend.Args import FormFn
from xen.xend.XendLogging import log
from xen.web.SrvDir import SrvDir
@@ -63,6 +64,18 @@ class SrvDomain(SrvDir):
self.acceptCommand(req)
return self.dom.shutdown(req.args['reason'][0])
def op_delete(self, _, req):
self.acceptCommand(req)
return self.xd.domain_delete(self.dom.getName())
def op_start(self, _, req):
self.acceptCommand(req)
paused = False
if 'paused' in req.args and req.args['paused'] == [1]:
paused = True
log.debug("Starting domain " + self.dom.getName() + " " + str(paused))
return self.xd.domain_start(self.dom.getName(), paused)
def op_sysrq(self, _, req):
self.acceptCommand(req)
return self.dom.send_sysrq(int(req.args['key'][0]))
+36 -1
View File
@@ -25,6 +25,8 @@ from xen.xend import XendDomain
from xen.xend.XendDomainInfo import XendDomainInfo
from xen.xend.Args import FormFn
from xen.xend.XendError import XendError
from xen.xend.XendLogging import log
from xen.xend.XendConstants import DOM_STATE_RUNNING
from xen.web.SrvDir import SrvDir
from SrvDomain import SrvDomain
@@ -101,6 +103,35 @@ class SrvDomainDir(SrvDir):
out.close()
return val
def op_new(self, _, req):
"""Define a new domain.
Expects the domain config in request parameter 'config' in SXP format.
"""
ok = 0
errmsg = ''
try:
configstring = req.args.get('config')[0]
#print 'op_create>', 'config:', configstring
pin = sxp.Parser()
pin.input(configstring)
pin.input_eof()
config = pin.get_val()
ok = 1
except sxp.ParseError, ex:
errmsg = 'Invalid configuration ' + str(ex)
except Exception, ex:
print 'op_create> Exception in config', ex
traceback.print_exc()
errmsg = 'Configuration error ' + str(ex)
if not ok:
raise XendError(errmsg)
try:
self.xd.domain_new(config)
except Exception, ex:
print 'op_create> Exception creating domain:'
traceback.print_exc()
raise XendError("Error creating domain: " + str(ex))
def op_restore(self, op, req):
"""Restore a domain from file.
@@ -159,7 +190,11 @@ class SrvDomainDir(SrvDir):
if detail:
sxp.show(map(XendDomainInfo.sxpr, self.xd.list()), out=req)
else:
sxp.show(self.xd.list_names(), out=req)
state = DOM_STATE_RUNNING
if 'state' in req.args and len(req.args['state']) > 0:
state = req.args['state'][0]
log.debug("Listing domains in state " + str(state))
sxp.show(self.xd.list_names(state), out=req)
else:
domains = self.xd.list_sorted()
req.write('<ul>')
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.