Check file exist for xm save, allow force to overwrite.
Signed-off-by: Wei Kong <weikong.cn@gmail.com>
diff -uNrp xen-3.4.0-testing/tools/python/xen/xend/XendAPI.py xen-3.4.0-testing/tools/python/xen/xend/XendAPI.py
--- xen-3.4.0-testing/tools/python/xen/xend/XendAPI.py 2009-05-19 01:52:28.000000000 +0800 +++ xen-3.4.0-testing/tools/python/xen/xend/XendAPI.py 2009-05-19 01:52:44.000000000 +0800
@@ -1809,10 +1809,10 @@ class XendAPI(object): bool(live), port, node, ssl) return xen_api_success_void()
- def VM_save(self, _, vm_ref, dest, checkpoint): + def VM_save(self, _, vm_ref, dest, checkpoint, force):
xendom = XendDomain.instance() xeninfo = xendom.get_vm_by_uuid(vm_ref) - xendom.domain_save(xeninfo.getDomid(), dest, checkpoint) + xendom.domain_save(xeninfo.getDomid(), dest, checkpoint, force)
return xen_api_success_void()
def VM_restore(self, _, src, paused): diff -uNrp xen-3.4.0-testing/tools/python/xen/xend/XendDomain.py xen-3.4.0-testing/tools/python/xen/xend/XendDomain.py --- xen-3.4.0-testing/tools/python/xen/xend/XendDomain.py 2009-05-19 01:52:28.000000000 +0800
+++ xen-3.4.0-testing/tools/python/xen/xend/XendDomain.py 2009-05-19 01:52:44.000000000 +0800 @@ -1381,7 +1381,7 @@ class XendDomain: finally: sock.close()
- def domain_save(self, domid, dst, checkpoint=False):
+ def domain_save(self, domid, dst, checkpoint=False, force=False): """Start saving a domain to file.
@param domid: Domain ID or Name @@ -1397,6 +1397,9 @@ class XendDomain:
if not dominfo: raise XendInvalidDomain(str(domid))
+ if os.access(dst, os.F_OK) and not force: + raise XendError("Save file:%s exist!\n" % dst)
+ if dominfo.getDomid() == DOM0_ID: raise XendError("Cannot save privileged domain %s" % str(domid)) if dominfo._stateGet() != DOM_STATE_RUNNING: diff -uNrp xen-3.4.0-testing/tools/python/xen/xm/main.py xen-3.4.0-testing/tools/python/xen/xm/main.py
--- xen-3.4.0-testing/tools/python/xen/xm/main.py 2009-05-19 01:52:28.000000000 +0800 +++ xen-3.4.0-testing/tools/python/xen/xm/main.py 2009-05-19 01:57:31.000000000 +0800 @@ -118,7 +118,7 @@ SUBCOMMAND_HELP = {
'reset' : ('<Domain>', 'Reset a domain.'), 'restore' : ('<CheckpointFile> [-p]', 'Restore a domain from a saved state.'),
- 'save' : ('[-c] <Domain> <CheckpointFile>', + 'save' : ('[-c|-f] <Domain> <CheckpointFile>', 'Save a domain state to restore later.'),
'snapshot-create' : ('[-d] <Domain> <SnapshotName>', 'Snapshot a running domain.'), @@ -283,6 +283,7 @@ SUBCOMMAND_OPTIONS = { ), 'save': (
('-c', '--checkpoint', 'Leave domain running after creating snapshot'), + ('-f', '--force', 'Force to overwrite exist file'), ), 'snapshot-create': (
('-d', '--diskonly', 'Perform disk only snapshot of domain'), @@ -801,18 +802,21 @@ def xm_snapshot_delete(args):
def xm_save(args):
- arg_check(args, "save", 2, 3)
+ arg_check(args, "save", 2, 4)
try: - (options, params) = getopt.gnu_getopt(args, 'c', ['checkpoint']) + (options, params) = getopt.gnu_getopt(args, 'cf', ['checkpoint', 'force'])
except getopt.GetoptError, opterr: err(opterr) usage('save')
checkpoint = False + force = False for (k, v) in options: if k in ['-c', '--checkpoint']:
checkpoint = True + if k in ['-f', '--force']: + force = True
if len(params) != 2: err("Wrong number of parameters") @@ -826,9 +830,9 @@ def xm_save(args):
sys.exit(1)
if serverType == SERVER_XEN_API: - server.xenapi.VM.save(get_single_vm(dom), savefile, checkpoint) + server.xenapi.VM.save(get_single_vm(dom), savefile, checkpoint, force)
else: - server.xend.domain.save(dom, savefile, checkpoint) + server.xend.domain.save(dom, savefile, checkpoint, force)
def xm_restore(args): arg_check(args, "restore", 1, 2)
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|