commit 23c04ea9624d68ce2be3b683cd4744b8a31e88e0
Merge: dbe4681 51620a2
Author: Klaus Aehlig <[email protected]>
Date: Thu Dec 4 15:56:45 2014 +0100
Merge branch 'stable-2.13' into master
* stable-2.13
kvm: Delegate socket handling to monitor module
kvm: Use vhostfds obtained by OpenTap
hotplug: Retry VerifyHotplugCommand up to 5 times
Update hotplug design doc
qa: Re-enable NIC hotplug tests
qmp: Log qmp commands and responses
hotplug: Is not supported for QEMU < 1.7
hotplug: Remove unused code after refacoring
hotplug: Use QMP during HotDelDevice
hotplug: Use QMP during HotAddDevice
kvm: Use the new interface during instance start
monitor: Extend HotAddNic() for advanced features
kvm: Refactor _GetNetworkDeviceFeatures() helper
netdev: Refactor OpenTap for future use
hotplug: Use QMP in VerifyHotplugCommand
hotplug: Use QMP in VerifyHotplugSupport
monitor: Close socket fd if already connected
kvm: New _with_qmp decorator
qmp: Add Disk hotplugging related method
qmp: Add NIC hotplugging related methods
qmp: Helper methods for parsing query-pci outpu
qmp: Add helper methods to verify hotplug support
qmp: Add GetFd() wrapper around getfd command
qmp: Refactor of add-fd and remove-fd commands
utils: Introduce GetFreeSlot() function
kvm: Minor refactor of MonitorSocket
* stable-2.12
Check disk size ipolicy during "gnt-instance grow-disk"
Test function ComputeIPolicyDiskSizesViolation
Add a helper function for checking the disk size ipolicy
Add "ignore-ipolicy" option to gnt-instance grow-disk
Fix the installation instructions for the DRBD module
Update install docs - DRBD module parameters
* stable-2.11
(no changes)
* stable-2.10
Fix hlint warnings found by hlint 1.9.11
Only check header for non-generated files
Signed-off-by: Klaus Aehlig <[email protected]>
diff --cc lib/cmdlib/instance_storage.py
index 865b241,6251c7e..7cf9510
--- a/lib/cmdlib/instance_storage.py
+++ b/lib/cmdlib/instance_storage.py
@@@ -1729,9 -1707,11 +1730,11 @@@ class LUInstanceGrowDisk(LogicalUnit)
self._CheckDiskSpace(node_uuids, self.disk.ComputeGrowth(self.delta))
+ self._CheckIPolicy(self.target)
+
def _CheckDiskSpace(self, node_uuids, req_vgspace):
- template = self.instance.disk_template
- if (template not in (constants.DTS_NO_FREE_SPACE_CHECK) and
+ template = self.disk.dev_type
+ if (template not in constants.DTS_NO_FREE_SPACE_CHECK and
not any(self.node_es_flags.values())):
# TODO: check the free disk space for file, when that feature will be
# supported
diff --cc test/py/cmdlib/cmdlib_unittest.py
index 17bccb8,30cbd83..8428efa
--- a/test/py/cmdlib/cmdlib_unittest.py
+++ b/test/py/cmdlib/cmdlib_unittest.py
@@@ -558,6 -556,105 +558,7 @@@ class TestComputeIPolicySpecViolation(u
ipolicy1[constants.IPOLICY_DTS] = ["another_template"]
AssertComputeViolation(ipolicy1, 1)
+
-class TestComputeIPolicyDiskSizesViolation(unittest.TestCase):
- # Minimal policy accepted by _ComputeIPolicyDiskSizesViolation()
- _MICRO_IPOL = {
- constants.IPOLICY_DTS: [constants.DT_PLAIN, constants.DT_DISKLESS],
- constants.ISPECS_MINMAX: [NotImplemented],
- }
-
- def test(self):
- compute_fn = _ValidateComputeMinMaxSpec
- ret = common.ComputeIPolicyDiskSizesViolation(self._MICRO_IPOL, [1024],
- constants.DT_PLAIN,
- _compute_fn=compute_fn)
- self.assertEqual(ret, [])
-
- def testDiskFull(self):
- compute_fn = _NoDiskComputeMinMaxSpec
- ret = common.ComputeIPolicyDiskSizesViolation(self._MICRO_IPOL, [1024],
- constants.DT_PLAIN,
- _compute_fn=compute_fn)
- self.assertEqual(ret, [constants.ISPEC_DISK_COUNT])
-
- def testDiskLess(self):
- compute_fn = _NoDiskComputeMinMaxSpec
- ret = common.ComputeIPolicyDiskSizesViolation(self._MICRO_IPOL, [1024],
- constants.DT_DISKLESS,
- _compute_fn=compute_fn)
- self.assertEqual(ret, [])
-
- def testWrongTemplates(self):
- compute_fn = _ValidateComputeMinMaxSpec
- ret = common.ComputeIPolicyDiskSizesViolation(self._MICRO_IPOL, [1024],
- constants.DT_DRBD8,
- _compute_fn=compute_fn)
- self.assertEqual(len(ret), 1)
- self.assertTrue("Disk template" in ret[0])
-
- def _AssertComputeViolation(self, ipolicy, disk_sizes, disk_template,
- violations):
- ret = common.ComputeIPolicyDiskSizesViolation(ipolicy, disk_sizes,
- disk_template)
- self.assertEqual(len(ret), violations)
-
- def testWithIPolicy(self):
- mem_size = 2048
- cpu_count = 2
- disk_count = 1
- disk_sizes = [512]
- nic_count = 1
- spindle_use = 4
- disk_template = "mytemplate"
- ispec = {
- constants.ISPEC_MEM_SIZE: mem_size,
- constants.ISPEC_CPU_COUNT: cpu_count,
- constants.ISPEC_DISK_COUNT: disk_count,
- constants.ISPEC_DISK_SIZE: disk_sizes[0],
- constants.ISPEC_NIC_COUNT: nic_count,
- constants.ISPEC_SPINDLE_USE: spindle_use,
- }
-
- ipolicy = {
- constants.ISPECS_MINMAX: [{
- constants.ISPECS_MIN: ispec,
- constants.ISPECS_MAX: ispec,
- }],
- constants.IPOLICY_DTS: [disk_template],
- }
-
- self._AssertComputeViolation(ipolicy, [512], disk_template, 0)
- self._AssertComputeViolation(ipolicy, [], disk_template, 1)
- self._AssertComputeViolation(ipolicy, [512, 512], disk_template, 1)
- self._AssertComputeViolation(ipolicy, [511], disk_template, 1)
- self._AssertComputeViolation(ipolicy, [513], disk_template, 1)
-
-
-class _StubComputeIPolicySpecViolation:
- def __init__(self, mem_size, cpu_count, disk_count, nic_count, disk_sizes,
- spindle_use, disk_template):
- self.mem_size = mem_size
- self.cpu_count = cpu_count
- self.disk_count = disk_count
- self.nic_count = nic_count
- self.disk_sizes = disk_sizes
- self.spindle_use = spindle_use
- self.disk_template = disk_template
-
- def __call__(self, _, mem_size, cpu_count, disk_count, nic_count,
disk_sizes,
- spindle_use, disk_template):
- assert self.mem_size == mem_size
- assert self.cpu_count == cpu_count
- assert self.disk_count == disk_count
- assert self.nic_count == nic_count
- assert self.disk_sizes == disk_sizes
- assert self.spindle_use == spindle_use
- assert self.disk_template == disk_template
-
- return []
-
-
class _FakeConfigForComputeIPolicyInstanceViolation:
def __init__(self, be, excl_stor):
self.cluster = objects.Cluster(beparams={"default": be})
--
Klaus Aehlig
Google Germany GmbH, Dienerstr. 12, 80331 Muenchen
Registergericht und -nummer: Hamburg, HRB 86891
Sitz der Gesellschaft: Hamburg
Geschaeftsfuehrer: Graham Law, Christine Elizabeth Flores