mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 18:21:39 +01:00
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>
This commit is contained in:
1 parent
3e3989b612
commit
e313dc3ed8
1 file changed
+26
@@ -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())
|
||||
|
||||