Additionally:
* fixed some spurious indentation
* removed the spurious import to storage/__init__.py at the source
Interdiff:
diff --git a/lib/hypervisor/hv_kvm.py b/lib/hypervisor/hv_kvm.py
index 309a177..8eb2b00 100644
--- a/lib/hypervisor/hv_kvm.py
+++ b/lib/hypervisor/hv_kvm.py
@@ -1150,10 +1150,12 @@ class KVMHypervisor(hv_base.BaseHypervisor):
boot_val = ",boot=on"
if cfdev.params[constants.LDP_ACCESS] == constants.DISK_USERSPACE:
- dev_path = device.GetUserspaceAccessUri(constants.HT_KVM)
+ drive_uri = device.GetUserspaceAccessUri(constants.HT_KVM)
+ else:
+ drive_uri = dev_path
- drive_val = "file=%s,format=raw%s%s%s" % (dev_path, if_val,
- boot_val, cache_val)
+ drive_val = "file=%s,format=raw%s%s%s" % (drive_uri, if_val,
+ boot_val, cache_val)
kvm_cmd.extend(["-drive", drive_val])
#Now we can specify a different device type for CDROM devices.
diff --git a/lib/storage/__init__.py b/lib/storage/__init__.py
index efe9600..9b9e38c 100644
--- a/lib/storage/__init__.py
+++ b/lib/storage/__init__.py
@@ -22,5 +22,3 @@
"""Block device abstraction
"""
-
-from ganeti.storage import base
diff --git a/test/py/ganeti.hypervisor.hv_xen_unittest.py
b/test/py/ganeti.hypervisor.hv_xen_unittest.py
index 75f22dc..c40e50c 100755
--- a/test/py/ganeti.hypervisor.hv_xen_unittest.py
+++ b/test/py/ganeti.hypervisor.hv_xen_unittest.py
@@ -271,7 +271,7 @@ class TestGetConfigFileDiskData(unittest.TestCase):
for offset in [0, 1, 10]:
disks = [(objects.Disk(dev_type=constants.DT_PLAIN),
"/tmp/disk/%s" % idx,
- None)
+ NotImplemented)
for idx in range(len(hv_xen._DISK_LETTERS) + offset)]
if offset == 0:
@@ -292,10 +292,10 @@ class TestGetConfigFileDiskData(unittest.TestCase):
disks = [
(objects.Disk(dev_type=constants.DT_PLAIN, mode=constants.DISK_RDWR),
"/tmp/diskFirst",
- None),
+ NotImplemented),
(objects.Disk(dev_type=constants.DT_PLAIN, mode=constants.DISK_RDONLY),
"/tmp/diskLast",
- None),
+ NotImplemented),
]
result = hv_xen._GetConfigFileDiskData(disks, "hd")
@@ -309,19 +309,19 @@ class TestGetConfigFileDiskData(unittest.TestCase):
(objects.Disk(dev_type=constants.DT_FILE, mode=constants.DISK_RDWR,
logical_id=[constants.FD_LOOP]),
"/tmp/diskFirst",
- None),
+ NotImplemented),
(objects.Disk(dev_type=constants.DT_FILE, mode=constants.DISK_RDONLY,
logical_id=[constants.FD_BLKTAP]),
"/tmp/diskTwo",
- None),
+ NotImplemented),
(objects.Disk(dev_type=constants.DT_FILE, mode=constants.DISK_RDWR,
logical_id=[constants.FD_LOOP]),
"/tmp/diskThree",
- None),
+ NotImplemented),
(objects.Disk(dev_type=constants.DT_FILE, mode=constants.DISK_RDWR,
logical_id=[constants.FD_BLKTAP]),
"/tmp/diskLast",
- None),
+ NotImplemented),
]
result = hv_xen._GetConfigFileDiskData(disks, "sd")
@@ -337,7 +337,7 @@ class TestGetConfigFileDiskData(unittest.TestCase):
(objects.Disk(dev_type=constants.DT_FILE, mode=constants.DISK_RDWR,
logical_id=["#unknown#"]),
"/tmp/diskinvalid",
- None),
+ NotImplemented),
]
self.assertRaises(KeyError, hv_xen._GetConfigFileDiskData, disks, "sd")
@@ -689,17 +689,16 @@ class _TestXenHypervisor(object):
disks = [
(objects.Disk(dev_type=constants.DT_PLAIN, mode=constants.DISK_RDWR),
utils.PathJoin(self.tmpdir, "disk0"),
- None),
+ NotImplemented),
(objects.Disk(dev_type=constants.DT_PLAIN, mode=constants.DISK_RDONLY),
utils.PathJoin(self.tmpdir, "disk1"),
- None),
+ NotImplemented),
]
inst = objects.Instance(name="server01.example.com",
hvparams=hvp, beparams=bep,
osparams={}, nics=[], os="deb1",
disks=map(compat.fst, disks))
-
inst.UpgradeConfig()
return (inst, disks)
On Mon, Sep 30, 2013 at 10:54 AM, Thomas Thrainer <[email protected]> wrote:
>
>
>
> On Fri, Sep 27, 2013 at 3:35 PM, Raffa Santi <[email protected]> wrote:
>>
>> * Add device class object in block_device tuple
>> * Update hv_xen.py for new block_devices format
>> * Fix tests broken by the change
>>
>> Signed-off-by: Raffa Santi <[email protected]>
>> ---
>> lib/backend.py | 2 +-
>> lib/hypervisor/hv_kvm.py | 9 +++++---
>> lib/hypervisor/hv_xen.py | 2 +-
>> lib/storage/__init__.py | 2 ++
>> test/py/ganeti.hypervisor.hv_xen_unittest.py | 32
>> ++++++++++++++++++--------
>> 5 files changed, 32 insertions(+), 15 deletions(-)
>>
>> diff --git a/lib/backend.py b/lib/backend.py
>> index 5e27048..a16b22a 100644
>> --- a/lib/backend.py
>> +++ b/lib/backend.py
>> @@ -1636,7 +1636,7 @@ def _GatherAndLinkBlockDevs(instance):
>> raise errors.BlockDeviceError("Cannot create block device symlink:
>> %s" %
>> e.strerror)
>>
>> - block_devices.append((disk, link_name))
>> + block_devices.append((disk, link_name, device))
>>
>> return block_devices
>>
>> diff --git a/lib/hypervisor/hv_kvm.py b/lib/hypervisor/hv_kvm.py
>> index 91a3b35..309a177 100644
>> --- a/lib/hypervisor/hv_kvm.py
>> +++ b/lib/hypervisor/hv_kvm.py
>> @@ -1137,7 +1137,7 @@ class KVMHypervisor(hv_base.BaseHypervisor):
>> cache_val = ",cache=%s" % disk_cache
>> else:
>> cache_val = ""
>> - for cfdev, dev_path in block_devices:
>> + for cfdev, dev_path, device in block_devices:
>> if cfdev.mode != constants.DISK_RDWR:
>> raise errors.HypervisorError("Instance has read-only disks which"
>> " are not supported by KVM")
>> @@ -1149,8 +1149,11 @@ class KVMHypervisor(hv_base.BaseHypervisor):
>> if needs_boot_flag and disk_type != constants.HT_DISK_IDE:
>> boot_val = ",boot=on"
>>
>> - drive_val = "file=%s,format=raw%s%s%s" % (dev_path, if_val,
>> boot_val,
>> - cache_val)
>> + if cfdev.params[constants.LDP_ACCESS] == constants.DISK_USERSPACE:
>> + dev_path = device.GetUserspaceAccessUri(constants.HT_KVM)
>
>
> NIT: the dev_path variable does not hold a device path at this point.
> Consider introducing another variable (drive_uri, file_param or something)
> which you can use instead.
>
>>
>> +
>> + drive_val = "file=%s,format=raw%s%s%s" % (dev_path, if_val,
>> + boot_val, cache_val)
>> kvm_cmd.extend(["-drive", drive_val])
>>
>> #Now we can specify a different device type for CDROM devices.
>> diff --git a/lib/hypervisor/hv_xen.py b/lib/hypervisor/hv_xen.py
>> index cf697e9..a37bbc9 100644
>> --- a/lib/hypervisor/hv_xen.py
>> +++ b/lib/hypervisor/hv_xen.py
>> @@ -287,7 +287,7 @@ def _GetConfigFileDiskData(block_devices,
>> blockdev_prefix,
>>
>> disk_data = []
>>
>> - for sd_suffix, (cfdev, dev_path) in zip(_letters, block_devices):
>> + for sd_suffix, (cfdev, dev_path, _) in zip(_letters, block_devices):
>> sd_name = blockdev_prefix + sd_suffix
>>
>> if cfdev.mode == constants.DISK_RDWR:
>> diff --git a/lib/storage/__init__.py b/lib/storage/__init__.py
>> index 9b9e38c..efe9600 100644
>> --- a/lib/storage/__init__.py
>> +++ b/lib/storage/__init__.py
>> @@ -22,3 +22,5 @@
>> """Block device abstraction
>>
>> """
>> +
>> +from ganeti.storage import base
>> diff --git a/test/py/ganeti.hypervisor.hv_xen_unittest.py
>> b/test/py/ganeti.hypervisor.hv_xen_unittest.py
>> index 4a3270b..75f22dc 100755
>> --- a/test/py/ganeti.hypervisor.hv_xen_unittest.py
>> +++ b/test/py/ganeti.hypervisor.hv_xen_unittest.py
>> @@ -269,7 +269,9 @@ class TestGetConfigFileDiskData(unittest.TestCase):
>>
>> def testManyDisks(self):
>> for offset in [0, 1, 10]:
>> - disks = [(objects.Disk(dev_type=constants.DT_PLAIN), "/tmp/disk/%s"
>> % idx)
>> + disks = [(objects.Disk(dev_type=constants.DT_PLAIN),
>> + "/tmp/disk/%s" % idx,
>> + None)
>
>
> We usually use NotImplemented for values which are not required in a test
> instead of None (as None could be a valid value too). Same for all
> occurrences below.
>
>>
>> for idx in range(len(hv_xen._DISK_LETTERS) + offset)]
>>
>> if offset == 0:
>> @@ -289,9 +291,11 @@ class TestGetConfigFileDiskData(unittest.TestCase):
>> def testTwoLvDisksWithMode(self):
>> disks = [
>> (objects.Disk(dev_type=constants.DT_PLAIN,
>> mode=constants.DISK_RDWR),
>> - "/tmp/diskFirst"),
>> + "/tmp/diskFirst",
>> + None),
>> (objects.Disk(dev_type=constants.DT_PLAIN,
>> mode=constants.DISK_RDONLY),
>> - "/tmp/diskLast"),
>> + "/tmp/diskLast",
>> + None),
>> ]
>>
>> result = hv_xen._GetConfigFileDiskData(disks, "hd")
>> @@ -304,16 +308,20 @@ class TestGetConfigFileDiskData(unittest.TestCase):
>> disks = [
>> (objects.Disk(dev_type=constants.DT_FILE, mode=constants.DISK_RDWR,
>> logical_id=[constants.FD_LOOP]),
>> - "/tmp/diskFirst"),
>> + "/tmp/diskFirst",
>> + None),
>> (objects.Disk(dev_type=constants.DT_FILE,
>> mode=constants.DISK_RDONLY,
>> logical_id=[constants.FD_BLKTAP]),
>> - "/tmp/diskTwo"),
>> + "/tmp/diskTwo",
>> + None),
>> (objects.Disk(dev_type=constants.DT_FILE, mode=constants.DISK_RDWR,
>> logical_id=[constants.FD_LOOP]),
>> - "/tmp/diskThree"),
>> + "/tmp/diskThree",
>> + None),
>> (objects.Disk(dev_type=constants.DT_FILE, mode=constants.DISK_RDWR,
>> logical_id=[constants.FD_BLKTAP]),
>> - "/tmp/diskLast"),
>> + "/tmp/diskLast",
>> + None),
>> ]
>>
>> result = hv_xen._GetConfigFileDiskData(disks, "sd")
>> @@ -328,7 +336,8 @@ class TestGetConfigFileDiskData(unittest.TestCase):
>> disks = [
>> (objects.Disk(dev_type=constants.DT_FILE, mode=constants.DISK_RDWR,
>> logical_id=["#unknown#"]),
>> - "/tmp/diskinvalid"),
>> + "/tmp/diskinvalid",
>> + None),
>> ]
>>
>> self.assertRaises(KeyError, hv_xen._GetConfigFileDiskData, disks,
>> "sd")
>> @@ -679,15 +688,18 @@ class _TestXenHypervisor(object):
>>
>> disks = [
>> (objects.Disk(dev_type=constants.DT_PLAIN,
>> mode=constants.DISK_RDWR),
>> - utils.PathJoin(self.tmpdir, "disk0")),
>> + utils.PathJoin(self.tmpdir, "disk0"),
>> + None),
>> (objects.Disk(dev_type=constants.DT_PLAIN,
>> mode=constants.DISK_RDONLY),
>> - utils.PathJoin(self.tmpdir, "disk1")),
>> + utils.PathJoin(self.tmpdir, "disk1"),
>> + None),
>> ]
>>
>> inst = objects.Instance(name="server01.example.com",
>> hvparams=hvp, beparams=bep,
>> osparams={}, nics=[], os="deb1",
>> disks=map(compat.fst, disks))
>> +
>
>
> Spurious new newline?
>
>>
>> inst.UpgradeConfig()
>>
>> return (inst, disks)
>> --
>> 1.7.10.4
>>
>
>
>
> --
> Thomas Thrainer | Software Engineer | [email protected] |
>
> Google Germany GmbH
> Dienerstr. 12
> 80331 München
>
> Registergericht und -nummer: Hamburg, HRB 86891
> Sitz der Gesellschaft: Hamburg
> Geschäftsführer: Graham Law, Christine Elizabeth Flores
--
Raffa Santi
Google Germany GmbH
Dienerstr. 12
80331 München
Registergericht und -nummer: Hamburg, HRB 86891
Sitz der Gesellschaft: Hamburg
Geschäftsführer: Graham Law, Christine Elizabeth Flores