2015-05-04 22:15:01 +02:00
|
|
|
Reference: bnc#872789
|
|
|
|
This is an indexing problem created by virt-manager. It knows not
|
|
|
|
to add two IDE disks of the same name (eg, 'hda' twice) or two Xen
|
|
|
|
disks of the same name (eg, 'xvda' twice) but with the different bus
|
|
|
|
types (ide vs xen) it added xvda with hda. These disks were then
|
|
|
|
passed to qemu where it error'ed out with the disks having the same
|
|
|
|
index (in this case both are 0).
|
2014-04-22 22:09:58 +02:00
|
|
|
|
2022-11-04 18:04:31 +01:00
|
|
|
Index: virt-manager-4.1.0/virtinst/devices/disk.py
|
2014-06-12 07:14:17 +02:00
|
|
|
===================================================================
|
2022-11-04 18:04:31 +01:00
|
|
|
--- virt-manager-4.1.0.orig/virtinst/devices/disk.py
|
|
|
|
+++ virt-manager-4.1.0/virtinst/devices/disk.py
|
|
|
|
@@ -903,6 +903,17 @@ class DeviceDisk(Device):
|
2018-10-30 23:00:52 +01:00
|
|
|
:returns: generated target
|
2014-04-22 22:09:58 +02:00
|
|
|
"""
|
2020-09-16 19:23:41 +02:00
|
|
|
prefix, maxnode = self.get_target_prefix()
|
2014-04-22 22:09:58 +02:00
|
|
|
+ postfix_targets = []
|
|
|
|
+ if self.conn.is_xen():
|
|
|
|
+ prefixes = [ "hd", "xvd", "vd", "sd", "fd" ]
|
|
|
|
+ for x in skip_targets:
|
2014-06-12 07:14:17 +02:00
|
|
|
+ if x is None:
|
|
|
|
+ continue
|
2014-04-22 22:09:58 +02:00
|
|
|
+ for p in prefixes:
|
|
|
|
+ found = x.split(p,1)
|
|
|
|
+ if found and len(found) == 2:
|
|
|
|
+ postfix_targets.append(found[1])
|
|
|
|
+ break
|
|
|
|
skip_targets = [t for t in skip_targets if t and t.startswith(prefix)]
|
|
|
|
skip_targets.sort()
|
|
|
|
|
2022-11-04 18:04:31 +01:00
|
|
|
@@ -910,11 +921,18 @@ class DeviceDisk(Device):
|
2020-09-16 19:23:41 +02:00
|
|
|
first_found = None
|
2014-04-22 22:09:58 +02:00
|
|
|
|
2020-09-16 19:23:41 +02:00
|
|
|
for i in range(maxnode):
|
2014-04-22 22:09:58 +02:00
|
|
|
- gen_t = prefix + self.num_to_target(i + 1)
|
|
|
|
+ postfix = self.num_to_target(i + 1)
|
|
|
|
+ gen_t = prefix + postfix
|
|
|
|
+ if self.conn.is_xen() and postfix in postfix_targets:
|
|
|
|
+ if gen_t in skip_targets:
|
|
|
|
+ skip_targets.remove(gen_t)
|
|
|
|
+ continue
|
|
|
|
if gen_t in skip_targets:
|
|
|
|
skip_targets.remove(gen_t)
|
|
|
|
continue
|
2021-11-23 23:41:31 +01:00
|
|
|
if not skip_targets:
|
|
|
|
+ if first_found:
|
|
|
|
+ return first_found
|
|
|
|
return gen_t
|
|
|
|
elif not first_found:
|
|
|
|
first_found = gen_t
|