diff options
author | kfraser@localhost.localdomain <kfraser@localhost.localdomain> | 2007-07-24 18:05:04 +0100 |
---|---|---|
committer | kfraser@localhost.localdomain <kfraser@localhost.localdomain> | 2007-07-24 18:05:04 +0100 |
commit | e313dc3ed8a13242ce9a9c5cb658d482c44a192e (patch) | |
tree | c60b0752812f502122f9499914e967053d426622 /tools | |
parent | 3e3989b612f269221d3bb510a619fd2baa0f68a6 (diff) | |
download | xen-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.py | 26 |
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()) |