[XEND] Prevent uuid double use.

A check_uuid() in this patch checks on uuid of the
VM configuration definition. If specified uuid is
already used with the others VM, the xm create command 
does not create the VM. The xm create command error occurs.

Signed-off-by: Masaki Kanno <kanno.masaki@jp.fujitsu.com>
This commit is contained in:
kfraser@localhost.localdomain committed 2006-07-10 15:10:00 +01:00
1 parent cf021d7e7d
commit c98d70f46a
2 files changed
+38

No files matched your search

+13
View File
@@ -347,6 +347,19 @@ class XendDomain:
self.domains_lock.release()
def domain_lookup_by_uuid_nr(self, uuid):
self.domains_lock.acquire()
try:
matching = filter(lambda d: d.getUuid() == uuid,
self.domains.values())
n = len(matching)
if n == 1:
return matching[0]
return None
finally:
self.domains_lock.release()
def privilegedDomain(self):
self.domains_lock.acquire()
try:
+25
View File
@@ -396,6 +396,10 @@ def domain_by_name(name):
return XendDomain.instance().domain_lookup_by_name_nr(name)
def domain_by_uuid(uuid):
return XendDomain.instance().domain_lookup_by_uuid_nr(uuid)
def shutdown_reason(code):
"""Get a shutdown reason from a code.
@@ -581,6 +585,7 @@ class XendDomainInfo:
defaultInfo('security', lambda: None)
self.check_name(self.info['name'])
self.check_uuid(self.info['uuid'])
if isinstance(self.info['image'], str):
self.info['image'] = sxp.from_string(self.info['image'])
@@ -778,6 +783,9 @@ class XendDomainInfo:
def getName(self):
return self.info['name']
def getUuid(self):
return self.info['uuid']
def getDomainPath(self):
return self.dompath
@@ -1207,6 +1215,23 @@ class XendDomainInfo:
(name, self.domid, dominfo.domid))
def check_uuid(self, uuid):
"""The same uuid cannot be used for more than one vm at the same time.
@param uuid: uuid
@raise: VmError if same uuid is used
"""
dominfo = domain_by_uuid(uuid)
if not dominfo:
return
if self.domid is None:
raise VmError("uuid '%s' already in use by domain %d" %
(uuid, dominfo.domid))
if dominfo.domid != self.domid:
raise VmError("uuid '%s' is used in both domains %d and %d" %
(uuid, self.domid, dominfo.domid))
def construct(self):
"""Construct the domain.
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.