2009-08-01 11:53:46 +02:00
|
|
|
Index: xen-3.4.1-testing/tools/python/xen/xend/XendAPI.py
|
2009-06-12 20:43:24 +02:00
|
|
|
===================================================================
|
2009-08-01 11:53:46 +02:00
|
|
|
--- xen-3.4.1-testing.orig/tools/python/xen/xend/XendAPI.py
|
|
|
|
+++ xen-3.4.1-testing/tools/python/xen/xend/XendAPI.py
|
2009-06-12 20:43:24 +02:00
|
|
|
@@ -1817,10 +1817,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):
|
2009-08-01 11:53:46 +02:00
|
|
|
Index: xen-3.4.1-testing/tools/python/xen/xend/XendDomain.py
|
2009-06-12 20:43:24 +02:00
|
|
|
===================================================================
|
2009-08-01 11:53:46 +02:00
|
|
|
--- xen-3.4.1-testing.orig/tools/python/xen/xend/XendDomain.py
|
|
|
|
+++ xen-3.4.1-testing/tools/python/xen/xend/XendDomain.py
|
2009-06-12 20:43:24 +02:00
|
|
|
@@ -1380,7 +1380,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
|
|
|
|
@@ -1396,6 +1396,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:
|
2009-08-01 11:53:46 +02:00
|
|
|
Index: xen-3.4.1-testing/tools/python/xen/xm/main.py
|
2009-06-12 20:43:24 +02:00
|
|
|
===================================================================
|
2009-08-01 11:53:46 +02:00
|
|
|
--- xen-3.4.1-testing.orig/tools/python/xen/xm/main.py
|
|
|
|
+++ xen-3.4.1-testing/tools/python/xen/xm/main.py
|
2009-06-12 20:43:24 +02:00
|
|
|
@@ -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.'),
|
|
|
|
'shutdown' : ('<Domain> [-waRH]', 'Shutdown a domain.'),
|
|
|
|
'top' : ('', 'Monitor a host and the domains in real time.'),
|
|
|
|
@@ -275,6 +275,7 @@ SUBCOMMAND_OPTIONS = {
|
|
|
|
),
|
|
|
|
'save': (
|
|
|
|
('-c', '--checkpoint', 'Leave domain running after creating snapshot'),
|
|
|
|
+ ('-f', '--force', 'Force to overwrite exist file'),
|
|
|
|
),
|
|
|
|
'restore': (
|
|
|
|
('-p', '--paused', 'Do not unpause domain after restoring it'),
|
|
|
|
@@ -726,18 +727,21 @@ def xm_event_monitor(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")
|
|
|
|
@@ -751,9 +755,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)
|