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:
kfraser@localhost.localdomain committed 2007-07-24 18:05:04 +01:00
1 parent 3e3989b612
commit e313dc3ed8
1 file changed
+26
+26
View File
@@ -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())
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.