Merge "Make boot_mode more consistent with other capabilities"
This commit is contained in:
commit
4e5c034187
@ -266,7 +266,7 @@ Populating instance_info
|
|||||||
#. :ref:`Boot mode <boot_mode_support>` can be specified per instance::
|
#. :ref:`Boot mode <boot_mode_support>` can be specified per instance::
|
||||||
|
|
||||||
baremetal node set $NODE_UUID \
|
baremetal node set $NODE_UUID \
|
||||||
--instance-info deploy_boot_mode=uefi
|
--instance-info capabilities='{"boot_mode": "uefi"}'
|
||||||
|
|
||||||
Otherwise, the ``boot_mode`` capability from the node's ``properties`` will
|
Otherwise, the ``boot_mode`` capability from the node's ``properties`` will
|
||||||
be used.
|
be used.
|
||||||
@ -275,9 +275,9 @@ Populating instance_info
|
|||||||
The two settings must not contradict each other.
|
The two settings must not contradict each other.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
The ``boot_mode`` capability is only used in the node's ``properties``,
|
This capability was introduced in the Wallaby release series,
|
||||||
not in ``instance_info`` like most other capabilities. Use the separate
|
previously ironic used a separate ``instance_info/deploy_boot_mode``
|
||||||
``instance_info/deploy_boot_mode`` field instead.
|
field instead.
|
||||||
|
|
||||||
#. To override the :ref:`boot option <local-boot-partition-images>` used for
|
#. To override the :ref:`boot option <local-boot-partition-images>` used for
|
||||||
this instance, set the ``boot_option`` capability::
|
this instance, set the ``boot_option`` capability::
|
||||||
|
@ -224,27 +224,35 @@ def get_boot_mode_for_deploy(node):
|
|||||||
# NOTE(etingof):
|
# NOTE(etingof):
|
||||||
# The search for a boot mode should be in the priority order:
|
# The search for a boot mode should be in the priority order:
|
||||||
#
|
#
|
||||||
# 1) instance_info
|
# 1) instance_info.capabilities
|
||||||
# 2) properties.capabilities
|
# 2) instance_info.deploy_boot_mode (deprecated in Wallaby)
|
||||||
# 3) driver_internal_info
|
# 3) properties.capabilities
|
||||||
|
# 4) driver_internal_info.deploy_boot_mode (internal)
|
||||||
#
|
#
|
||||||
# Because:
|
# Because:
|
||||||
#
|
#
|
||||||
# (1) can be deleted before teardown
|
# (1) and (2) are deleted during teardown
|
||||||
# (3) will never be touched if node properties/capabilities
|
# (4) will never be touched if node properties/capabilities
|
||||||
# are still present.
|
# are still present.
|
||||||
# (2) becomes operational default as the last resort
|
# (3) becomes operational default as the last resort
|
||||||
|
|
||||||
instance_info = node.instance_info
|
|
||||||
|
|
||||||
|
inst_boot_mode = (
|
||||||
|
common_utils.parse_instance_info_capabilities(node).get('boot_mode')
|
||||||
|
)
|
||||||
cap_boot_mode = driver_utils.get_node_capability(node, 'boot_mode')
|
cap_boot_mode = driver_utils.get_node_capability(node, 'boot_mode')
|
||||||
|
|
||||||
boot_mode = instance_info.get('deploy_boot_mode')
|
old_boot_mode = node.instance_info.get('deploy_boot_mode')
|
||||||
if boot_mode is None:
|
if old_boot_mode:
|
||||||
boot_mode = cap_boot_mode
|
LOG.warning('Using instance_info/deploy_boot_mode is deprecated, '
|
||||||
if cap_boot_mode is None:
|
'please use instance_info/capabilities with boot mode '
|
||||||
driver_internal_info = node.driver_internal_info
|
'for node %s', node.uuid)
|
||||||
boot_mode = driver_internal_info.get('deploy_boot_mode')
|
|
||||||
|
boot_mode = (
|
||||||
|
inst_boot_mode
|
||||||
|
or old_boot_mode
|
||||||
|
or cap_boot_mode
|
||||||
|
or node.driver_internal_info.get('deploy_boot_mode')
|
||||||
|
)
|
||||||
|
|
||||||
if not boot_mode:
|
if not boot_mode:
|
||||||
return
|
return
|
||||||
|
@ -69,6 +69,49 @@ class GetBootModeTestCase(tests_base.TestCase):
|
|||||||
self.assertEqual(boot_modes.UEFI, boot_mode)
|
self.assertEqual(boot_modes.UEFI, boot_mode)
|
||||||
self.assertEqual(0, mock_log.warning.call_count)
|
self.assertEqual(0, mock_log.warning.call_count)
|
||||||
|
|
||||||
|
def test_get_boot_mode_for_deploy_using_capabilities(self):
|
||||||
|
properties = {'capabilities': 'boot_mode:uefi,cap2:value2'}
|
||||||
|
self.node.properties = properties
|
||||||
|
|
||||||
|
result = boot_mode_utils.get_boot_mode_for_deploy(self.node)
|
||||||
|
self.assertEqual('uefi', result)
|
||||||
|
|
||||||
|
def test_get_boot_mode_for_deploy_using_instance_info_secure_boot(self):
|
||||||
|
instance_info = {'capabilities': {'secure_boot': 'True'}}
|
||||||
|
self.node.instance_info = instance_info
|
||||||
|
|
||||||
|
result = boot_mode_utils.get_boot_mode_for_deploy(self.node)
|
||||||
|
self.assertEqual('uefi', result)
|
||||||
|
|
||||||
|
instance_info = {'capabilities': {'trusted_boot': 'True'}}
|
||||||
|
self.node.instance_info = instance_info
|
||||||
|
|
||||||
|
result = boot_mode_utils.get_boot_mode_for_deploy(self.node)
|
||||||
|
self.assertEqual('bios', result)
|
||||||
|
|
||||||
|
instance_info = {'capabilities': {'trusted_boot': 'True',
|
||||||
|
'secure_boot': 'True'}}
|
||||||
|
self.node.instance_info = instance_info
|
||||||
|
|
||||||
|
result = boot_mode_utils.get_boot_mode_for_deploy(self.node)
|
||||||
|
self.assertEqual('uefi', result)
|
||||||
|
|
||||||
|
def test_get_boot_mode_for_deploy_using_instance_info_cap(self):
|
||||||
|
instance_info = {'capabilities': {'boot_mode': 'uefi'}}
|
||||||
|
self.node.instance_info = instance_info
|
||||||
|
|
||||||
|
result = boot_mode_utils.get_boot_mode_for_deploy(self.node)
|
||||||
|
self.assertEqual('uefi', result)
|
||||||
|
|
||||||
|
@mock.patch.object(boot_mode_utils.LOG, 'warning', autospec=True)
|
||||||
|
def test_get_boot_mode_for_deploy_using_instance_info(self, mock_log):
|
||||||
|
instance_info = {'deploy_boot_mode': 'bios'}
|
||||||
|
self.node.instance_info = instance_info
|
||||||
|
|
||||||
|
result = boot_mode_utils.get_boot_mode_for_deploy(self.node)
|
||||||
|
self.assertEqual('bios', result)
|
||||||
|
self.assertTrue(mock_log.called)
|
||||||
|
|
||||||
|
|
||||||
@mock.patch.object(fake.FakeManagement, 'set_secure_boot_state', autospec=True)
|
@mock.patch.object(fake.FakeManagement, 'set_secure_boot_state', autospec=True)
|
||||||
class SecureBootTestCase(db_base.DbTestCase):
|
class SecureBootTestCase(db_base.DbTestCase):
|
||||||
|
@ -31,7 +31,6 @@ from ironic.common import states
|
|||||||
from ironic.common import utils as common_utils
|
from ironic.common import utils as common_utils
|
||||||
from ironic.conductor import task_manager
|
from ironic.conductor import task_manager
|
||||||
from ironic.conductor import utils as manager_utils
|
from ironic.conductor import utils as manager_utils
|
||||||
from ironic.drivers.modules import boot_mode_utils
|
|
||||||
from ironic.drivers.modules import deploy_utils as utils
|
from ironic.drivers.modules import deploy_utils as utils
|
||||||
from ironic.drivers.modules import fake
|
from ironic.drivers.modules import fake
|
||||||
from ironic.drivers.modules import image_cache
|
from ironic.drivers.modules import image_cache
|
||||||
@ -955,40 +954,6 @@ class ParseInstanceInfoCapabilitiesTestCase(tests_base.TestCase):
|
|||||||
self.node.instance_info = {'capabilities': {"trusted_boot": "invalid"}}
|
self.node.instance_info = {'capabilities': {"trusted_boot": "invalid"}}
|
||||||
self.assertFalse(utils.is_trusted_boot_requested(self.node))
|
self.assertFalse(utils.is_trusted_boot_requested(self.node))
|
||||||
|
|
||||||
def test_get_boot_mode_for_deploy_using_capabilities(self):
|
|
||||||
properties = {'capabilities': 'boot_mode:uefi,cap2:value2'}
|
|
||||||
self.node.properties = properties
|
|
||||||
|
|
||||||
result = boot_mode_utils.get_boot_mode_for_deploy(self.node)
|
|
||||||
self.assertEqual('uefi', result)
|
|
||||||
|
|
||||||
def test_get_boot_mode_for_deploy_using_instance_info_cap(self):
|
|
||||||
instance_info = {'capabilities': {'secure_boot': 'True'}}
|
|
||||||
self.node.instance_info = instance_info
|
|
||||||
|
|
||||||
result = boot_mode_utils.get_boot_mode_for_deploy(self.node)
|
|
||||||
self.assertEqual('uefi', result)
|
|
||||||
|
|
||||||
instance_info = {'capabilities': {'trusted_boot': 'True'}}
|
|
||||||
self.node.instance_info = instance_info
|
|
||||||
|
|
||||||
result = boot_mode_utils.get_boot_mode_for_deploy(self.node)
|
|
||||||
self.assertEqual('bios', result)
|
|
||||||
|
|
||||||
instance_info = {'capabilities': {'trusted_boot': 'True',
|
|
||||||
'secure_boot': 'True'}}
|
|
||||||
self.node.instance_info = instance_info
|
|
||||||
|
|
||||||
result = boot_mode_utils.get_boot_mode_for_deploy(self.node)
|
|
||||||
self.assertEqual('uefi', result)
|
|
||||||
|
|
||||||
def test_get_boot_mode_for_deploy_using_instance_info(self):
|
|
||||||
instance_info = {'deploy_boot_mode': 'bios'}
|
|
||||||
self.node.instance_info = instance_info
|
|
||||||
|
|
||||||
result = boot_mode_utils.get_boot_mode_for_deploy(self.node)
|
|
||||||
self.assertEqual('bios', result)
|
|
||||||
|
|
||||||
def test_validate_boot_mode_capability(self):
|
def test_validate_boot_mode_capability(self):
|
||||||
prop = {'capabilities': 'boot_mode:uefi,cap2:value2'}
|
prop = {'capabilities': 'boot_mode:uefi,cap2:value2'}
|
||||||
self.node.properties = prop
|
self.node.properties = prop
|
||||||
|
@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
Supports setting boot mode via an ``instance_info`` capability.
|
||||||
|
deprecations:
|
||||||
|
- |
|
||||||
|
Using ``instance_info/deploy_boot_mode`` is deprecated, use the
|
||||||
|
``boot_mode`` capability in ``instance_info/capabilities`` instead.
|
Loading…
x
Reference in New Issue
Block a user