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@lists.xensource.com http://lists.xensource.com/xen-devel