summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2016-01-04 21:03:44 +0000
committerGerrit Code Review <review@openstack.org>2016-01-04 21:03:44 +0000
commit4b48b5ea6c3a674fdd1b40d1ae7e0762b90e3502 (patch)
tree9deedb165f4c0b3e4851508cc725572852973750
parentc66f95ec55d5854539d2d55586562ced8f9616fe (diff)
parent49baa2cc8bdd88341f062a16bdf237108080e011 (diff)
downloadironic-4b48b5ea6c3a674fdd1b40d1ae7e0762b90e3502.tar.gz
Merge "take_over() for iscsi_ilo doesnt recreate boot iso" into stable/liberty
-rw-r--r--ironic/drivers/modules/ilo/deploy.py7
-rw-r--r--ironic/tests/drivers/ilo/test_deploy.py67
2 files changed, 73 insertions, 1 deletions
diff --git a/ironic/drivers/modules/ilo/deploy.py b/ironic/drivers/modules/ilo/deploy.py
index 788dff201..14542b329 100644
--- a/ironic/drivers/modules/ilo/deploy.py
+++ b/ironic/drivers/modules/ilo/deploy.py
@@ -156,7 +156,12 @@ def _get_boot_iso(task, root_uuid):
# Option 1 - Check if user has provided ilo_boot_iso in node's
# instance_info
- if task.node.instance_info.get('ilo_boot_iso'):
+ driver_internal_info = task.node.driver_internal_info
+ boot_iso_created_in_web_server = (
+ driver_internal_info.get('boot_iso_created_in_web_server'))
+
+ if (task.node.instance_info.get('ilo_boot_iso')
+ and not boot_iso_created_in_web_server):
LOG.debug("Using ilo_boot_iso provided in node's instance_info")
boot_iso = task.node.instance_info['ilo_boot_iso']
if not service_utils.is_glance_image(boot_iso):
diff --git a/ironic/tests/drivers/ilo/test_deploy.py b/ironic/tests/drivers/ilo/test_deploy.py
index 5f761a98e..06014bb40 100644
--- a/ironic/tests/drivers/ilo/test_deploy.py
+++ b/ironic/tests/drivers/ilo/test_deploy.py
@@ -281,6 +281,73 @@ class IloDeployPrivateMethodsTestCase(db_base.DbTestCase):
copy_file_mock.assert_called_once_with(fileobj_mock.name,
'abcdef')
+ @mock.patch.object(ilo_common, 'copy_image_to_web_server', spec_set=True,
+ autospec=True)
+ @mock.patch.object(tempfile, 'NamedTemporaryFile', spec_set=True,
+ autospec=True)
+ @mock.patch.object(images, 'create_boot_iso', spec_set=True, autospec=True)
+ @mock.patch.object(ilo_deploy, '_get_boot_iso_object_name', spec_set=True,
+ autospec=True)
+ @mock.patch.object(driver_utils, 'get_node_capability', spec_set=True,
+ autospec=True)
+ @mock.patch.object(images, 'get_image_properties', spec_set=True,
+ autospec=True)
+ @mock.patch.object(ilo_deploy, '_parse_deploy_info', spec_set=True,
+ autospec=True)
+ def test__get_boot_iso_recreate_boot_iso_use_webserver(
+ self, deploy_info_mock, image_props_mock,
+ capability_mock, boot_object_name_mock,
+ create_boot_iso_mock, tempfile_mock,
+ copy_file_mock):
+ CONF.ilo.use_web_server_for_images = True
+ CONF.deploy.http_url = "http://10.10.1.30/httpboot"
+ CONF.deploy.http_root = "/httpboot"
+ CONF.pxe.pxe_append_params = 'kernel-params'
+
+ fileobj_mock = mock.MagicMock(spec=file)
+ fileobj_mock.name = 'tmpfile'
+ mock_file_handle = mock.MagicMock(spec=file)
+ mock_file_handle.__enter__.return_value = fileobj_mock
+ tempfile_mock.return_value = mock_file_handle
+
+ ramdisk_href = "http://10.10.1.30/httpboot/ramdisk"
+ kernel_href = "http://10.10.1.30/httpboot/kernel"
+ deploy_info_mock.return_value = {'image_source': 'image-uuid',
+ 'ilo_deploy_iso': 'deploy_iso_uuid'}
+ image_props_mock.return_value = {'boot_iso': None,
+ 'kernel_id': kernel_href,
+ 'ramdisk_id': ramdisk_href}
+ boot_object_name_mock.return_value = 'new_boot_iso'
+ create_boot_iso_mock.return_value = '/path/to/boot-iso'
+ capability_mock.return_value = 'uefi'
+ copy_file_mock.return_value = "http://10.10.1.30/httpboot/new_boot_iso"
+
+ with task_manager.acquire(self.context, self.node.uuid,
+ shared=False) as task:
+ driver_internal_info = task.node.driver_internal_info
+ driver_internal_info['boot_iso_created_in_web_server'] = True
+ instance_info = task.node.instance_info
+ old_boot_iso = 'http://10.10.1.30/httpboot/old_boot_iso'
+ instance_info['ilo_boot_iso'] = old_boot_iso
+ boot_iso_actual = ilo_deploy._get_boot_iso(task, 'root-uuid')
+ deploy_info_mock.assert_called_once_with(task.node)
+ image_props_mock.assert_called_once_with(
+ task.context, 'image-uuid',
+ ['boot_iso', 'kernel_id', 'ramdisk_id'])
+ boot_object_name_mock.assert_called_once_with(task.node)
+ create_boot_iso_mock.assert_called_once_with(task.context,
+ 'tmpfile',
+ kernel_href,
+ ramdisk_href,
+ 'deploy_iso_uuid',
+ 'root-uuid',
+ 'kernel-params',
+ 'uefi')
+ boot_iso_expected = 'http://10.10.1.30/httpboot/new_boot_iso'
+ self.assertEqual(boot_iso_expected, boot_iso_actual)
+ copy_file_mock.assert_called_once_with(fileobj_mock.name,
+ 'new_boot_iso')
+
@mock.patch.object(ilo_deploy, '_get_boot_iso_object_name', spec_set=True,
autospec=True)
@mock.patch.object(swift, 'SwiftAPI', spec_set=True, autospec=True)