Disallow CONF.compute.max_disk_devices_to_attach = 0
The CONF.compute.max_disk_devices_to_attach option controls the maximum number of disk devices allowed to attach to an instance. If it is set to 0, it will literally allow no disk device for instances, preventing them from being able to boot. This adds a note to the config option help to call this out and changes nova-compute to raise InvalidConfiguration during init_host if [compute]max_disk_devices_to_attach has been set to 0. The nova-compute service will fail to start if the option is set to 0. Note: there doesn't appear to be any way to disallow particular values in a oslo.config IntOpt other than the min/max values. Here we need the min value to be -1 to represent unlimited. There is a 'choices' kwarg available but that is only for enumerating valid values and we need to allow any integer >= 1 as well. Closes-Bug: #1897950 Change-Id: I6e30468bc28f661ddc17937ab1de04a706f05063
This commit is contained in:
parent
6c0ceda365
commit
25a632a4e1
|
@ -1403,6 +1403,13 @@ class ComputeManager(manager.Manager):
|
|||
eventlet.semaphore.BoundedSemaphore(
|
||||
CONF.compute.max_concurrent_disk_ops)
|
||||
|
||||
if CONF.compute.max_disk_devices_to_attach == 0:
|
||||
msg = _('[compute]max_disk_devices_to_attach has been set to 0, '
|
||||
'which will prevent instances from being able to boot. '
|
||||
'Set -1 for unlimited or set >= 1 to limit the maximum '
|
||||
'number of disk devices.')
|
||||
raise exception.InvalidConfiguration(msg)
|
||||
|
||||
self.driver.init_host(host=self.host)
|
||||
context = nova.context.get_admin_context()
|
||||
instances = objects.InstanceList.get_by_host(
|
||||
|
|
|
@ -962,10 +962,16 @@ on compute host B.
|
|||
The configured maximum is not enforced on shelved offloaded servers, as they
|
||||
have no compute host.
|
||||
|
||||
.. warning:: If this option is set to 0, the ``nova-compute`` service will fail
|
||||
to start, as 0 disk devices is an invalid configuration that would
|
||||
prevent instances from being able to boot.
|
||||
|
||||
Possible values:
|
||||
|
||||
* -1 means unlimited
|
||||
* Any integer >= 0 represents the maximum allowed
|
||||
* Any integer >= 1 represents the maximum allowed. A value of 0 will cause the
|
||||
``nova-compute`` service to fail to start, as 0 disk devices is an invalid
|
||||
configuration that would prevent instances from being able to boot.
|
||||
"""),
|
||||
cfg.StrOpt('provider_config_location',
|
||||
default='/etc/nova/provider_config/',
|
||||
|
|
|
@ -1109,6 +1109,11 @@ class ComputeManagerUnitTestCase(test.NoDBTestCase,
|
|||
"time this service is starting on this host, then you can ignore "
|
||||
"this warning.", 'fake-node1')
|
||||
|
||||
def test_init_host_disk_devices_configuration_failure(self):
|
||||
self.flags(max_disk_devices_to_attach=0, group='compute')
|
||||
self.assertRaises(exception.InvalidConfiguration,
|
||||
self.compute.init_host)
|
||||
|
||||
@mock.patch.object(objects.InstanceList, 'get_by_host',
|
||||
new=mock.Mock())
|
||||
@mock.patch('nova.compute.manager.ComputeManager.'
|
||||
|
|
Loading…
Reference in New Issue