summaryrefslogtreecommitdiff
path: root/ironic/tests/unit/drivers/modules/test_ipxe.py
diff options
context:
space:
mode:
Diffstat (limited to 'ironic/tests/unit/drivers/modules/test_ipxe.py')
-rw-r--r--ironic/tests/unit/drivers/modules/test_ipxe.py328
1 files changed, 11 insertions, 317 deletions
diff --git a/ironic/tests/unit/drivers/modules/test_ipxe.py b/ironic/tests/unit/drivers/modules/test_ipxe.py
index d9dd126b3..ef37e3fc4 100644
--- a/ironic/tests/unit/drivers/modules/test_ipxe.py
+++ b/ironic/tests/unit/drivers/modules/test_ipxe.py
@@ -169,16 +169,6 @@ class iPXEBootTestCase(db_base.DbTestCase):
task.driver.boot.validate(task)
mock_boot_option.assert_called_with(task.node)
- @mock.patch('ironic.drivers.modules.deploy_utils.get_boot_option',
- return_value='netboot', autospec=True)
- def test_validate_fail_missing_image_source(self, mock_boot_option):
- with task_manager.acquire(self.context, self.node.uuid,
- shared=True) as task:
- del task.node['instance_info']['image_source']
- self.assertRaises(exception.MissingParameterValue,
- task.driver.boot.validate, task)
- mock_boot_option.assert_called_with(task.node)
-
def test_validate_fail_no_port(self):
new_node = obj_utils.create_test_node(
self.context,
@@ -190,48 +180,6 @@ class iPXEBootTestCase(db_base.DbTestCase):
self.assertRaises(exception.MissingParameterValue,
task.driver.boot.validate, task)
- @mock.patch.object(image_service.GlanceImageService, 'show',
- autospec=True)
- def test_validate_fail_no_image_kernel_ramdisk_props(self, mock_glance):
- instance_info = {"boot_option": "netboot"}
- mock_glance.return_value = {'properties': {}}
- with task_manager.acquire(self.context, self.node.uuid,
- shared=True) as task:
- task.node.instance_info['capabilities'] = instance_info
- self.assertRaises(exception.MissingParameterValue,
- task.driver.boot.validate,
- task)
-
- @mock.patch('ironic.drivers.modules.deploy_utils.get_boot_option',
- return_value='netboot', autospec=True)
- @mock.patch.object(image_service.GlanceImageService, 'show',
- autospec=True)
- def test_validate_fail_glance_image_doesnt_exists(self, mock_glance,
- mock_boot_option):
- mock_glance.side_effect = exception.ImageNotFound('not found')
- with task_manager.acquire(self.context, self.node.uuid,
- shared=True) as task:
- self.assertRaises(exception.InvalidParameterValue,
- task.driver.boot.validate, task)
- mock_boot_option.assert_called_with(task.node)
-
- @mock.patch('ironic.drivers.modules.deploy_utils.get_boot_option',
- return_value='netboot', autospec=True)
- @mock.patch.object(image_service.GlanceImageService, 'show',
- autospec=True)
- def test_validate_fail_glance_conn_problem(self, mock_glance,
- mock_boot_option):
- exceptions = (exception.GlanceConnectionFailed('connection fail'),
- exception.ImageNotAuthorized('not authorized'),
- exception.Invalid('invalid'))
- mock_glance.side_effect = exceptions
- for exc in exceptions:
- with task_manager.acquire(self.context, self.node.uuid,
- shared=True) as task:
- self.assertRaises(exception.InvalidParameterValue,
- task.driver.boot.validate, task)
- mock_boot_option.assert_called_with(task.node)
-
def test_validate_inspection(self):
with task_manager.acquire(self.context, self.node.uuid) as task:
task.driver.boot.validate_inspection(task)
@@ -563,94 +511,6 @@ class iPXEBootTestCase(db_base.DbTestCase):
self.node.save()
self._test_clean_up_ramdisk(mode='rescue')
- @mock.patch.object(manager_utils, 'node_set_boot_device', autospec=True)
- @mock.patch.object(deploy_utils, 'switch_pxe_config', autospec=True)
- @mock.patch.object(dhcp_factory, 'DHCPFactory', autospec=True)
- @mock.patch.object(pxe_utils, 'cache_ramdisk_kernel', autospec=True)
- @mock.patch.object(pxe_utils, 'get_instance_image_info', autospec=True)
- def test_prepare_instance_netboot(
- self, get_image_info_mock, cache_mock,
- dhcp_factory_mock, switch_pxe_config_mock,
- set_boot_device_mock):
- provider_mock = mock.MagicMock()
- dhcp_factory_mock.return_value = provider_mock
- image_info = {'kernel': ('', '/path/to/kernel'),
- 'ramdisk': ('', '/path/to/ramdisk')}
- instance_info = {"boot_option": "netboot"}
- get_image_info_mock.return_value = image_info
- with task_manager.acquire(self.context, self.node.uuid) as task:
- dhcp_opts = pxe_utils.dhcp_options_for_instance(
- task, ipxe_enabled=True)
- dhcp_opts += pxe_utils.dhcp_options_for_instance(
- task, ipxe_enabled=True, ip_version=6)
- pxe_config_path = pxe_utils.get_pxe_config_file_path(
- task.node.uuid, ipxe_enabled=True)
- task.node.properties['capabilities'] = 'boot_mode:uefi'
- task.node.instance_info['capabilities'] = instance_info
- task.node.driver_internal_info['root_uuid_or_disk_id'] = (
- "30212642-09d3-467f-8e09-21685826ab50")
- task.node.driver_internal_info['is_whole_disk_image'] = False
-
- task.driver.boot.prepare_instance(task)
-
- get_image_info_mock.assert_called_once_with(
- task, ipxe_enabled=True)
- cache_mock.assert_called_once_with(task, image_info,
- ipxe_enabled=True)
- provider_mock.update_dhcp.assert_called_once_with(task, dhcp_opts)
- switch_pxe_config_mock.assert_called_once_with(
- pxe_config_path, "30212642-09d3-467f-8e09-21685826ab50",
- 'uefi', False, iscsi_boot=False, ramdisk_boot=False,
- ipxe_enabled=True, anaconda_boot=False)
- set_boot_device_mock.assert_called_once_with(task,
- boot_devices.PXE,
- persistent=True)
-
- @mock.patch.object(manager_utils, 'node_set_boot_device', autospec=True)
- @mock.patch.object(deploy_utils, 'switch_pxe_config', autospec=True)
- @mock.patch.object(dhcp_factory, 'DHCPFactory', autospec=True)
- @mock.patch.object(pxe_utils, 'cache_ramdisk_kernel', autospec=True)
- @mock.patch.object(pxe_utils, 'get_instance_image_info', autospec=True)
- def test_prepare_instance_netboot_bios(
- self, get_image_info_mock, cache_mock,
- dhcp_factory_mock, switch_pxe_config_mock,
- set_boot_device_mock):
- provider_mock = mock.MagicMock()
- dhcp_factory_mock.return_value = provider_mock
- image_info = {'kernel': ('', '/path/to/kernel'),
- 'ramdisk': ('', '/path/to/ramdisk')}
- instance_info = {"boot_option": "netboot",
- "boot_mode": "bios"}
- get_image_info_mock.return_value = image_info
- with task_manager.acquire(self.context, self.node.uuid) as task:
- task.node.properties['capabilities'] = 'boot_mode:bios'
- task.node.instance_info['capabilities'] = instance_info
- task.node.driver_internal_info['root_uuid_or_disk_id'] = (
- "30212642-09d3-467f-8e09-21685826ab50")
- task.node.driver_internal_info['is_whole_disk_image'] = False
-
- dhcp_opts = pxe_utils.dhcp_options_for_instance(
- task, ipxe_enabled=True)
- dhcp_opts += pxe_utils.dhcp_options_for_instance(
- task, ipxe_enabled=True, ip_version=6)
- pxe_config_path = pxe_utils.get_pxe_config_file_path(
- task.node.uuid, ipxe_enabled=True)
-
- task.driver.boot.prepare_instance(task)
-
- get_image_info_mock.assert_called_once_with(
- task, ipxe_enabled=True)
- cache_mock.assert_called_once_with(task, image_info,
- ipxe_enabled=True)
- provider_mock.update_dhcp.assert_called_once_with(task, dhcp_opts)
- switch_pxe_config_mock.assert_called_once_with(
- pxe_config_path, "30212642-09d3-467f-8e09-21685826ab50",
- 'bios', False, iscsi_boot=False, ramdisk_boot=False,
- ipxe_enabled=True, anaconda_boot=False)
- set_boot_device_mock.assert_called_once_with(task,
- boot_devices.PXE,
- persistent=True)
-
@mock.patch.object(pxe_utils, 'create_pxe_config', autospec=True)
@mock.patch.object(manager_utils, 'node_set_boot_device', autospec=True)
@mock.patch.object(deploy_utils, 'switch_pxe_config', autospec=True)
@@ -665,8 +525,7 @@ class iPXEBootTestCase(db_base.DbTestCase):
dhcp_factory_mock.return_value = provider_mock
image_info = {'kernel': ('', '/path/to/kernel'),
'ramdisk': ('', '/path/to/ramdisk')}
- i_info_caps = {"boot_option": "ramdisk",
- "boot_mode": "bios"}
+ i_info_caps = {"boot_mode": "bios"}
kernel_arg = "meow"
get_image_info_mock.return_value = image_info
@@ -676,6 +535,7 @@ class iPXEBootTestCase(db_base.DbTestCase):
i_info['capabilities'] = i_info_caps
i_info['kernel_append_params'] = kernel_arg
task.node.instance_info = i_info
+ task.node.deploy_interface = 'ramdisk'
task.node.save()
dhcp_opts = pxe_utils.dhcp_options_for_instance(
task, ipxe_enabled=True)
@@ -721,15 +581,14 @@ class iPXEBootTestCase(db_base.DbTestCase):
dhcp_factory_mock.return_value = provider_mock
image_info = {'kernel': ('', '/path/to/kernel'),
'ramdisk': ('', '/path/to/ramdisk')}
- i_info_caps = {"boot_option": "ramdisk"}
kernel_arg = "meow"
get_image_info_mock.return_value = image_info
with task_manager.acquire(self.context, self.node.uuid) as task:
i_info = task.node.instance_info
- i_info['capabilities'] = i_info_caps
i_info['kernel_append_params'] = kernel_arg
task.node.instance_info = i_info
+ task.node.deploy_interface = 'ramdisk'
task.node.save()
dhcp_opts = pxe_utils.dhcp_options_for_instance(
task, ipxe_enabled=True)
@@ -761,160 +620,6 @@ class iPXEBootTestCase(db_base.DbTestCase):
mock_create_pxe_config.assert_called_once_with(
task, expected_params, mock.ANY, ipxe_enabled=True)
- @mock.patch('os.path.isfile', return_value=False, autospec=True)
- @mock.patch.object(pxe_utils, 'create_pxe_config', autospec=True)
- @mock.patch.object(manager_utils, 'node_set_boot_device', autospec=True)
- @mock.patch.object(deploy_utils, 'switch_pxe_config', autospec=True)
- @mock.patch.object(dhcp_factory, 'DHCPFactory', autospec=True)
- @mock.patch.object(pxe_utils, 'cache_ramdisk_kernel', autospec=True)
- @mock.patch.object(pxe_utils, 'get_instance_image_info', autospec=True)
- def test_prepare_instance_netboot_active(
- self, get_image_info_mock, cache_mock,
- dhcp_factory_mock, switch_pxe_config_mock,
- set_boot_device_mock, create_pxe_config_mock, isfile_mock):
- provider_mock = mock.MagicMock()
- dhcp_factory_mock.return_value = provider_mock
- image_info = {'kernel': ('', '/path/to/kernel'),
- 'ramdisk': ('', '/path/to/ramdisk')}
- instance_info = {"boot_option": "netboot"}
- get_image_info_mock.return_value = image_info
- self.node.provision_state = states.ACTIVE
- self.node.save()
- with task_manager.acquire(self.context, self.node.uuid) as task:
- task.node.properties['capabilities'] = 'boot_mode:bios'
- task.node.instance_info['capabilities'] = instance_info
- task.node.driver_internal_info['root_uuid_or_disk_id'] = (
- "30212642-09d3-467f-8e09-21685826ab50")
- task.node.driver_internal_info['is_whole_disk_image'] = False
-
- dhcp_opts = pxe_utils.dhcp_options_for_instance(
- task, ipxe_enabled=True)
- dhcp_opts += pxe_utils.dhcp_options_for_instance(
- task, ipxe_enabled=True, ip_version=6)
- pxe_config_path = pxe_utils.get_pxe_config_file_path(
- task.node.uuid, ipxe_enabled=True)
-
- task.driver.boot.prepare_instance(task)
-
- get_image_info_mock.assert_called_once_with(
- task, ipxe_enabled=True)
- cache_mock.assert_called_once_with(task, image_info,
- ipxe_enabled=True)
- provider_mock.update_dhcp.assert_called_once_with(task, dhcp_opts)
- create_pxe_config_mock.assert_called_once_with(
- task, mock.ANY, CONF.pxe.ipxe_config_template,
- ipxe_enabled=True)
- switch_pxe_config_mock.assert_called_once_with(
- pxe_config_path, "30212642-09d3-467f-8e09-21685826ab50",
- 'bios', False, iscsi_boot=False, ramdisk_boot=False,
- ipxe_enabled=True, anaconda_boot=False)
- self.assertFalse(set_boot_device_mock.called)
-
- @mock.patch.object(manager_utils, 'node_set_boot_device', autospec=True)
- @mock.patch.object(deploy_utils, 'switch_pxe_config', autospec=True)
- @mock.patch.object(dhcp_factory, 'DHCPFactory', autospec=True)
- @mock.patch.object(pxe_utils, 'cache_ramdisk_kernel', autospec=True)
- @mock.patch.object(pxe_utils, 'get_instance_image_info', autospec=True)
- def test_prepare_instance_netboot_missing_root_uuid(
- self, get_image_info_mock, cache_mock,
- dhcp_factory_mock, switch_pxe_config_mock,
- set_boot_device_mock):
- provider_mock = mock.MagicMock()
- dhcp_factory_mock.return_value = provider_mock
- image_info = {'kernel': ('', '/path/to/kernel'),
- 'ramdisk': ('', '/path/to/ramdisk')}
- get_image_info_mock.return_value = image_info
- instance_info = {"boot_option": "netboot"}
- with task_manager.acquire(self.context, self.node.uuid) as task:
- task.node.properties['capabilities'] = 'boot_mode:bios'
- task.node.instance_info['capabilities'] = instance_info
- task.node.driver_internal_info['is_whole_disk_image'] = False
- dhcp_opts = pxe_utils.dhcp_options_for_instance(
- task, ipxe_enabled=True, ip_version=4)
- dhcp_opts += pxe_utils.dhcp_options_for_instance(
- task, ipxe_enabled=True, ip_version=6)
-
- task.driver.boot.prepare_instance(task)
-
- get_image_info_mock.assert_called_once_with(
- task, ipxe_enabled=True)
- cache_mock.assert_called_once_with(task, image_info,
- ipxe_enabled=True)
- provider_mock.update_dhcp.assert_called_once_with(task, dhcp_opts)
- self.assertFalse(switch_pxe_config_mock.called)
- self.assertFalse(set_boot_device_mock.called)
-
- @mock.patch.object(manager_utils, 'node_set_boot_device', autospec=True)
- @mock.patch.object(deploy_utils, 'switch_pxe_config', autospec=True)
- @mock.patch.object(dhcp_factory, 'DHCPFactory', autospec=True)
- @mock.patch.object(pxe_utils, 'cache_ramdisk_kernel', autospec=True)
- @mock.patch.object(pxe_utils, 'get_instance_image_info', autospec=True)
- def test_prepare_instance_netboot_missing_root_uuid_default(
- self, get_image_info_mock, cache_mock,
- dhcp_factory_mock, switch_pxe_config_mock,
- set_boot_device_mock):
- provider_mock = mock.MagicMock()
- dhcp_factory_mock.return_value = provider_mock
- image_info = {'kernel': ('', '/path/to/kernel'),
- 'ramdisk': ('', '/path/to/ramdisk')}
- get_image_info_mock.return_value = image_info
- instance_info = self.node.instance_info
- instance_info['capabilities'] = {"boot_option": "netboot"}
- self.node.instance_info = instance_info
- self.node.save()
- with task_manager.acquire(self.context, self.node.uuid) as task:
- task.node.driver_internal_info['is_whole_disk_image'] = False
- dhcp_opts = pxe_utils.dhcp_options_for_instance(
- task, ipxe_enabled=True, ip_version=4)
- dhcp_opts += pxe_utils.dhcp_options_for_instance(
- task, ipxe_enabled=True, ip_version=6)
-
- task.driver.boot.prepare_instance(task)
-
- get_image_info_mock.assert_called_once_with(
- task, ipxe_enabled=True)
- cache_mock.assert_called_once_with(task, image_info,
- ipxe_enabled=True)
- provider_mock.update_dhcp.assert_called_once_with(task, dhcp_opts)
- self.assertFalse(switch_pxe_config_mock.called)
- self.assertFalse(set_boot_device_mock.called)
-
- # NOTE(TheJulia): The log mock below is attached to the iPXE interface
- # which directly logs the warning that is being checked for.
- @mock.patch.object(pxe_base.LOG, 'warning', autospec=True)
- @mock.patch.object(pxe_utils, 'clean_up_pxe_config', autospec=True)
- @mock.patch.object(manager_utils, 'node_set_boot_device', autospec=True)
- @mock.patch.object(dhcp_factory, 'DHCPFactory', autospec=True)
- @mock.patch.object(pxe_utils, 'cache_ramdisk_kernel', autospec=True)
- @mock.patch.object(pxe_utils, 'get_instance_image_info', autospec=True)
- def test_prepare_instance_whole_disk_image_missing_root_uuid(
- self, get_image_info_mock, cache_mock,
- dhcp_factory_mock, set_boot_device_mock,
- clean_up_pxe_mock, log_mock):
- provider_mock = mock.MagicMock()
- dhcp_factory_mock.return_value = provider_mock
- get_image_info_mock.return_value = {}
- instance_info = {"boot_option": "netboot",
- "boot_mode": "bios"}
- with task_manager.acquire(self.context, self.node.uuid) as task:
- task.node.properties['capabilities'] = 'boot_mode:bios'
- task.node.instance_info['capabilities'] = instance_info
- task.node.driver_internal_info['is_whole_disk_image'] = True
- dhcp_opts = pxe_utils.dhcp_options_for_instance(
- task, ipxe_enabled=True)
- dhcp_opts += pxe_utils.dhcp_options_for_instance(
- task, ipxe_enabled=True, ip_version=6)
-
- task.driver.boot.prepare_instance(task)
- get_image_info_mock.assert_called_once_with(
- task, ipxe_enabled=True)
- cache_mock.assert_called_once_with(task, {}, ipxe_enabled=True)
- provider_mock.update_dhcp.assert_called_once_with(task, dhcp_opts)
- self.assertTrue(log_mock.called)
- clean_up_pxe_mock.assert_called_once_with(task, ipxe_enabled=True)
- set_boot_device_mock.assert_called_once_with(
- task, boot_devices.DISK, persistent=True)
-
@mock.patch('os.path.isfile', lambda filename: False)
@mock.patch.object(pxe_utils, 'create_pxe_config', autospec=True)
@mock.patch.object(deploy_utils, 'is_iscsi_boot', lambda task: True)
@@ -1037,8 +742,8 @@ class iPXEBootTestCase(db_base.DbTestCase):
self.config(http_url=http_url, group='deploy')
provider_mock = mock.MagicMock()
dhcp_factory_mock.return_value = provider_mock
- self.node.instance_info = {'boot_iso': 'http://1.2.3.4:1234/boot.iso',
- 'capabilities': {'boot_option': 'ramdisk'}}
+ self.node.deploy_interface = 'ramdisk'
+ self.node.instance_info = {'boot_iso': 'http://1.2.3.4:1234/boot.iso'}
image_info = {'kernel': ('', '/path/to/kernel'),
'deploy_kernel': ('', '/path/to/kernel'),
'ramdisk': ('', '/path/to/ramdisk'),
@@ -1075,7 +780,7 @@ class iPXEBootTestCase(db_base.DbTestCase):
@mock.patch.object(dhcp_factory, 'DHCPFactory', autospec=True)
@mock.patch.object(pxe_utils, 'cache_ramdisk_kernel', autospec=True)
@mock.patch.object(pxe_utils, 'get_instance_image_info', autospec=True)
- def test_prepare_instance_netboot_ramdisk_with_kernel_arg(
+ def test_prepare_instance_ramdisk_with_kernel_arg(
self, get_image_info_mock, cache_mock,
dhcp_factory_mock, switch_pxe_config_mock,
set_boot_device_mock, create_pxe_config_mock):
@@ -1130,14 +835,9 @@ class iPXEBootTestCase(db_base.DbTestCase):
autospec=True)
@mock.patch.object(manager_utils, 'node_set_boot_device', autospec=True)
@mock.patch.object(pxe_utils, 'clean_up_pxe_config', autospec=True)
- def test_prepare_instance_localboot(self, clean_up_pxe_config_mock,
- set_boot_device_mock,
- secure_boot_mock):
+ def test_prepare_instance(self, clean_up_pxe_config_mock,
+ set_boot_device_mock, secure_boot_mock):
with task_manager.acquire(self.context, self.node.uuid) as task:
- instance_info = task.node.instance_info
- instance_info['capabilities'] = {'boot_option': 'local'}
- task.node.instance_info = instance_info
- task.node.save()
task.driver.boot.prepare_instance(task)
clean_up_pxe_config_mock.assert_called_once_with(
task, ipxe_enabled=True)
@@ -1148,15 +848,11 @@ class iPXEBootTestCase(db_base.DbTestCase):
@mock.patch.object(manager_utils, 'node_set_boot_device', autospec=True)
@mock.patch.object(pxe_utils, 'clean_up_pxe_config', autospec=True)
- def test_prepare_instance_localboot_active(self, clean_up_pxe_config_mock,
- set_boot_device_mock):
+ def test_prepare_instance_active(self, clean_up_pxe_config_mock,
+ set_boot_device_mock):
self.node.provision_state = states.ACTIVE
self.node.save()
with task_manager.acquire(self.context, self.node.uuid) as task:
- instance_info = task.node.instance_info
- instance_info['capabilities'] = {'boot_option': 'local'}
- task.node.instance_info = instance_info
- task.node.save()
task.driver.boot.prepare_instance(task)
clean_up_pxe_config_mock.assert_called_once_with(
task, ipxe_enabled=True)
@@ -1168,14 +864,12 @@ class iPXEBootTestCase(db_base.DbTestCase):
@mock.patch.object(dhcp_factory, 'DHCPFactory', autospec=True)
@mock.patch.object(pxe_utils, 'cache_ramdisk_kernel', autospec=True)
@mock.patch.object(pxe_utils, 'get_instance_image_info', autospec=True)
- def test_prepare_instance_localboot_with_fallback(
+ def test_prepare_instance_with_fallback(
self, get_image_info_mock, cache_mock,
dhcp_factory_mock, switch_pxe_config_mock,
clean_up_pxe_config_mock, set_boot_device_mock):
self.config(enable_netboot_fallback=True, group='pxe')
with task_manager.acquire(self.context, self.node.uuid) as task:
- task.node.instance_info = task.node.instance_info
- task.node.instance_info['capabilities'] = {'boot_option': 'local'}
task.node.driver_internal_info['root_uuid_or_disk_id'] = (
"30212642-09d3-467f-8e09-21685826ab50")
task.node.driver_internal_info['is_whole_disk_image'] = False