aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorkfraser@localhost.localdomain <kfraser@localhost.localdomain>2007-07-24 18:05:04 +0100
committerkfraser@localhost.localdomain <kfraser@localhost.localdomain>2007-07-24 18:05:04 +0100
commite313dc3ed8a13242ce9a9c5cb658d482c44a192e (patch)
treec60b0752812f502122f9499914e967053d426622 /tools
parent3e3989b612f269221d3bb510a619fd2baa0f68a6 (diff)
downloadxen-e313dc3ed8a13242ce9a9c5cb658d482c44a192e.tar.gz
xen-e313dc3ed8a13242ce9a9c5cb658d482c44a192e.tar.bz2
xen-e313dc3ed8a13242ce9a9c5cb658d482c44a192e.zip
Add domain name check and UUID check to 'xm new' command.
Add a domain name check and a UUID check to xm new command. The check logic is as follows: - If the UUID is not specified - If a VM with same name exists => Update the config for that existing VM - Else no vm with same name exists => Define a brand new VM with auto-generated UUID - Else UUID is specified - If a VM with same UUID exists - If name is different => Error - Else if name is same => Update the config for that existing VM - Else no VM with same UUID exists - If name is different => Define a branch new VM with that name - Else if name is same => Error Signed-off-by: Masaki Kanno <kanno.masaki@jp.fujitsu.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/python/xen/xend/XendDomain.py26
1 files changed, 26 insertions, 0 deletions
diff --git a/tools/python/xen/xend/XendDomain.py b/tools/python/xen/xend/XendDomain.py
index 3d48365571..9947111a8b 100644
--- a/tools/python/xen/xend/XendDomain.py
+++ b/tools/python/xen/xend/XendDomain.py
@@ -51,6 +51,7 @@ from xen.xend.xenstore.xstransact import xstransact
from xen.xend.xenstore.xswatch import xswatch
from xen.util import mkdir
from xen.xend import uuid
+from xen.xend import sxp
xc = xen.lowlevel.xc.xc()
xoptions = XendOptions.instance()
@@ -968,6 +969,31 @@ class XendDomain:
try:
try:
domconfig = XendConfig.XendConfig(sxp_obj = config)
+
+ domains = self.list('all')
+ domains = map(lambda dom: dom.sxpr(), domains)
+ for dom in domains:
+ if sxp.child_value(config, 'uuid', None):
+ if domconfig['uuid'] == sxp.child_value(dom, 'uuid'):
+ if domconfig['name_label'] != sxp.child_value(dom, 'name'):
+ raise XendError("Domain UUID '%s' is already used." % \
+ domconfig['uuid'])
+ else:
+ # Update the config for that existing domain
+ # because it is same name and same UUID.
+ break
+ else:
+ if domconfig['name_label'] == sxp.child_value(dom, 'name'):
+ raise XendError("Domain name '%s' is already used." % \
+ domconfig['name_label'])
+ else:
+ if domconfig['name_label'] == sxp.child_value(dom, 'name'):
+ # Overwrite the auto-generated UUID by the UUID
+ # of the existing domain. And update the config
+ # for that existing domain.
+ domconfig['uuid'] = sxp.child_value(dom, 'uuid')
+ break
+
dominfo = XendDomainInfo.createDormant(domconfig)
log.debug("Creating new managed domain: %s" %
dominfo.getName())