summaryrefslogtreecommitdiff
path: root/ironic/tests/unit/drivers/modules/test_pxe.py
diff options
context:
space:
mode:
Diffstat (limited to 'ironic/tests/unit/drivers/modules/test_pxe.py')
-rw-r--r--ironic/tests/unit/drivers/modules/test_pxe.py227
1 files changed, 141 insertions, 86 deletions
diff --git a/ironic/tests/unit/drivers/modules/test_pxe.py b/ironic/tests/unit/drivers/modules/test_pxe.py
index 3f314c486..3e67a0341 100644
--- a/ironic/tests/unit/drivers/modules/test_pxe.py
+++ b/ironic/tests/unit/drivers/modules/test_pxe.py
@@ -19,6 +19,7 @@ import filecmp
import os
import shutil
import tempfile
+import uuid
from ironic_lib import utils as ironic_utils
import mock
@@ -145,6 +146,14 @@ class PXEPrivateMethodsTestCase(db_base.DbTestCase):
self.node.save()
self._test__get_instance_image_info()
+ @mock.patch('ironic.drivers.modules.deploy_utils.get_boot_option',
+ return_value='local')
+ def test__get_instance_image_info_localboot(self, boot_opt_mock):
+ self.node.driver_internal_info['is_whole_disk_image'] = False
+ self.node.save()
+ image_info = pxe._get_instance_image_info(self.node, self.context)
+ self.assertEqual({}, image_info)
+
@mock.patch.object(base_image_service.BaseImageService, '_show',
autospec=True)
def test__get_instance_image_info_whole_disk_image(self, show_mock):
@@ -154,11 +163,14 @@ class PXEPrivateMethodsTestCase(db_base.DbTestCase):
image_info = pxe._get_instance_image_info(self.node, self.context)
self.assertEqual({}, image_info)
+ @mock.patch('ironic.common.image_service.GlanceImageService',
+ autospec=True)
@mock.patch.object(pxe_utils, '_build_pxe_config', autospec=True)
- def _test_build_pxe_config_options(self, build_pxe_mock,
+ def _test_build_pxe_config_options(self, build_pxe_mock, glance_mock,
whle_dsk_img=False,
ipxe_enabled=False,
- ipxe_timeout=0):
+ ipxe_timeout=0,
+ ipxe_use_swift=False):
self.config(pxe_append_params='test_param', group='pxe')
# NOTE: right '/' should be removed from url string
self.config(api_url='http://192.168.122.184:6385', group='conductor')
@@ -175,11 +187,18 @@ class PXEPrivateMethodsTestCase(db_base.DbTestCase):
http_url = 'http://192.1.2.3:1234'
self.config(ipxe_enabled=True, group='pxe')
self.config(http_url=http_url, group='deploy')
-
- deploy_kernel = os.path.join(http_url, self.node.uuid,
- 'deploy_kernel')
- deploy_ramdisk = os.path.join(http_url, self.node.uuid,
- 'deploy_ramdisk')
+ if ipxe_use_swift:
+ self.config(ipxe_use_swift=True, group='pxe')
+ glance = mock.Mock()
+ glance_mock.return_value = glance
+ glance.swift_temp_url.side_effect = [
+ deploy_kernel, deploy_ramdisk] = [
+ 'swift_kernel', 'swift_ramdisk']
+ else:
+ deploy_kernel = os.path.join(http_url, self.node.uuid,
+ 'deploy_kernel')
+ deploy_ramdisk = os.path.join(http_url, self.node.uuid,
+ 'deploy_ramdisk')
kernel = os.path.join(http_url, self.node.uuid, 'kernel')
ramdisk = os.path.join(http_url, self.node.uuid, 'ramdisk')
root_dir = CONF.deploy.http_root
@@ -194,9 +213,44 @@ class PXEPrivateMethodsTestCase(db_base.DbTestCase):
'ramdisk')
root_dir = CONF.pxe.tftp_root
- if whle_dsk_img:
- ramdisk = 'no_ramdisk'
- kernel = 'no_kernel'
+ if ipxe_use_swift:
+ image_info = {
+ 'deploy_kernel': (str(uuid.uuid4()),
+ os.path.join(root_dir,
+ self.node.uuid,
+ 'deploy_kernel')),
+ 'deploy_ramdisk': (str(uuid.uuid4()),
+ os.path.join(root_dir,
+ self.node.uuid,
+ 'deploy_ramdisk'))
+ }
+ else:
+ image_info = {
+ 'deploy_kernel': ('deploy_kernel',
+ os.path.join(root_dir,
+ self.node.uuid,
+ 'deploy_kernel')),
+ 'deploy_ramdisk': ('deploy_ramdisk',
+ os.path.join(root_dir,
+ self.node.uuid,
+ 'deploy_ramdisk'))
+ }
+
+ if (whle_dsk_img or
+ deploy_utils.get_boot_option(self.node) == 'local'):
+ ramdisk = 'no_ramdisk'
+ kernel = 'no_kernel'
+ else:
+ image_info.update({
+ 'kernel': ('kernel_id',
+ os.path.join(root_dir,
+ self.node.uuid,
+ 'kernel')),
+ 'ramdisk': ('ramdisk_id',
+ os.path.join(root_dir,
+ self.node.uuid,
+ 'ramdisk'))
+ })
ipxe_timeout_in_ms = ipxe_timeout * 1000
@@ -210,23 +264,6 @@ class PXEPrivateMethodsTestCase(db_base.DbTestCase):
'ipxe_timeout': ipxe_timeout_in_ms,
}
- image_info = {'deploy_kernel': ('deploy_kernel',
- os.path.join(root_dir,
- self.node.uuid,
- 'deploy_kernel')),
- 'deploy_ramdisk': ('deploy_ramdisk',
- os.path.join(root_dir,
- self.node.uuid,
- 'deploy_ramdisk')),
- 'kernel': ('kernel_id',
- os.path.join(root_dir,
- self.node.uuid,
- 'kernel')),
- 'ramdisk': ('ramdisk_id',
- os.path.join(root_dir,
- self.node.uuid,
- 'ramdisk'))}
-
with task_manager.acquire(self.context, self.node.uuid,
shared=True) as task:
options = pxe._build_pxe_config_options(task, image_info)
@@ -236,76 +273,48 @@ class PXEPrivateMethodsTestCase(db_base.DbTestCase):
self._test_build_pxe_config_options(whle_dsk_img=True,
ipxe_enabled=False)
+ def test__build_pxe_config_options_local_boot(self):
+ del self.node.driver_internal_info['is_whole_disk_image']
+ i_info = self.node.instance_info
+ i_info.update({'capabilities': {'boot_option': 'local'}})
+ self.node.instance_info = i_info
+ self.node.save()
+ self._test_build_pxe_config_options(whle_dsk_img=False,
+ ipxe_enabled=False)
+
def test__build_pxe_config_options_ipxe(self):
self._test_build_pxe_config_options(whle_dsk_img=True,
ipxe_enabled=True)
- def test__build_pxe_config_options_without_is_whole_disk_image(self):
+ def test__build_pxe_config_options_ipxe_local_boot(self):
del self.node.driver_internal_info['is_whole_disk_image']
+ i_info = self.node.instance_info
+ i_info.update({'capabilities': {'boot_option': 'local'}})
+ self.node.instance_info = i_info
self.node.save()
self._test_build_pxe_config_options(whle_dsk_img=False,
- ipxe_enabled=False)
+ ipxe_enabled=True)
- def test__build_pxe_config_options_ipxe_and_ipxe_timeout(self):
+ def test__build_pxe_config_options_ipxe_swift_wdi(self):
self._test_build_pxe_config_options(whle_dsk_img=True,
ipxe_enabled=True,
- ipxe_timeout=120)
-
- @mock.patch.object(pxe_utils, '_build_pxe_config', autospec=True)
- def test__build_pxe_config_options_whole_disk_image(self,
- build_pxe_mock,
- ipxe_enabled=False):
- self.config(pxe_append_params='test_param', group='pxe')
- # NOTE: right '/' should be removed from url string
- self.config(api_url='http://192.168.122.184:6385', group='conductor')
+ ipxe_use_swift=True)
- tftp_server = CONF.pxe.tftp_server
-
- if ipxe_enabled:
- http_url = 'http://192.1.2.3:1234'
- self.config(ipxe_enabled=True, group='pxe')
- self.config(http_url=http_url, group='deploy')
-
- deploy_kernel = os.path.join(http_url, self.node.uuid,
- 'deploy_kernel')
- deploy_ramdisk = os.path.join(http_url, self.node.uuid,
- 'deploy_ramdisk')
- root_dir = CONF.deploy.http_root
- else:
- deploy_kernel = os.path.join(CONF.pxe.tftp_root, self.node.uuid,
- 'deploy_kernel')
- deploy_ramdisk = os.path.join(CONF.pxe.tftp_root, self.node.uuid,
- 'deploy_ramdisk')
- root_dir = CONF.pxe.tftp_root
-
- expected_options = {
- 'deployment_ari_path': deploy_ramdisk,
- 'pxe_append_params': 'test_param',
- 'deployment_aki_path': deploy_kernel,
- 'tftp_server': tftp_server,
- 'aki_path': 'no_kernel',
- 'ari_path': 'no_ramdisk',
- 'ipxe_timeout': 0,
- }
+ def test__build_pxe_config_options_ipxe_swift_partition(self):
+ self._test_build_pxe_config_options(whle_dsk_img=False,
+ ipxe_enabled=True,
+ ipxe_use_swift=True)
- image_info = {'deploy_kernel': ('deploy_kernel',
- os.path.join(root_dir,
- self.node.uuid,
- 'deploy_kernel')),
- 'deploy_ramdisk': ('deploy_ramdisk',
- os.path.join(root_dir,
- self.node.uuid,
- 'deploy_ramdisk')),
- }
- driver_internal_info = self.node.driver_internal_info
- driver_internal_info['is_whole_disk_image'] = True
- self.node.driver_internal_info = driver_internal_info
+ def test__build_pxe_config_options_without_is_whole_disk_image(self):
+ del self.node.driver_internal_info['is_whole_disk_image']
self.node.save()
+ self._test_build_pxe_config_options(whle_dsk_img=False,
+ ipxe_enabled=False)
- with task_manager.acquire(self.context, self.node.uuid,
- shared=True) as task:
- options = pxe._build_pxe_config_options(task, image_info)
- self.assertEqual(expected_options, options)
+ def test__build_pxe_config_options_ipxe_and_ipxe_timeout(self):
+ self._test_build_pxe_config_options(whle_dsk_img=True,
+ ipxe_enabled=True,
+ ipxe_timeout=120)
def test__build_pxe_config_options_no_kernel_no_ramdisk(self):
del self.node.driver_internal_info['is_whole_disk_image']
@@ -655,20 +664,38 @@ class PXEBootTestCase(db_base.DbTestCase):
mock_deploy_img_info,
mock_instance_img_info,
dhcp_factory_mock, uefi=False,
- cleaning=False):
+ cleaning=False,
+ ipxe_use_swift=False,
+ whole_disk_image=False):
mock_build_pxe.return_value = {}
mock_deploy_img_info.return_value = {'deploy_kernel': 'a'}
- mock_instance_img_info.return_value = {'kernel': 'b'}
+ if whole_disk_image:
+ mock_instance_img_info.return_value = {}
+ else:
+ mock_instance_img_info.return_value = {'kernel': 'b'}
mock_pxe_config.return_value = None
mock_cache_r_k.return_value = None
provider_mock = mock.MagicMock()
dhcp_factory_mock.return_value = provider_mock
+ driver_internal_info = self.node.driver_internal_info
+ driver_internal_info['is_whole_disk_image'] = whole_disk_image
+ self.node.driver_internal_info = driver_internal_info
+ self.node.save()
with task_manager.acquire(self.context, self.node.uuid) as task:
dhcp_opts = pxe_utils.dhcp_options_for_instance(task)
task.driver.boot.prepare_ramdisk(task, {'foo': 'bar'})
mock_deploy_img_info.assert_called_once_with(task.node)
provider_mock.update_dhcp.assert_called_once_with(task, dhcp_opts)
- if cleaning is False:
+ if ipxe_use_swift:
+ if whole_disk_image:
+ self.assertFalse(mock_cache_r_k.called)
+ else:
+ mock_cache_r_k.assert_called_once_with(
+ self.context, task.node,
+ {'kernel': 'b'})
+ mock_instance_img_info.assert_called_once_with(task.node,
+ self.context)
+ elif cleaning is False:
mock_cache_r_k.assert_called_once_with(
self.context, task.node,
{'deploy_kernel': 'a', 'kernel': 'b'})
@@ -749,6 +776,34 @@ class PXEBootTestCase(db_base.DbTestCase):
self._test_prepare_ramdisk()
self.assertFalse(copyfile_mock.called)
+ @mock.patch.object(shutil, 'copyfile', autospec=True)
+ def test_prepare_ramdisk_ipxe_swift(self, copyfile_mock):
+ self.node.provision_state = states.DEPLOYING
+ self.node.save()
+ self.config(group='pxe', ipxe_enabled=True)
+ self.config(group='pxe', ipxe_use_swift=True)
+ self.config(group='deploy', http_url='http://myserver')
+ self._test_prepare_ramdisk(ipxe_use_swift=True)
+ copyfile_mock.assert_called_once_with(
+ CONF.pxe.ipxe_boot_script,
+ os.path.join(
+ CONF.deploy.http_root,
+ os.path.basename(CONF.pxe.ipxe_boot_script)))
+
+ @mock.patch.object(shutil, 'copyfile', autospec=True)
+ def test_prepare_ramdisk_ipxe_swift_whole_disk_image(self, copyfile_mock):
+ self.node.provision_state = states.DEPLOYING
+ self.node.save()
+ self.config(group='pxe', ipxe_enabled=True)
+ self.config(group='pxe', ipxe_use_swift=True)
+ self.config(group='deploy', http_url='http://myserver')
+ self._test_prepare_ramdisk(ipxe_use_swift=True, whole_disk_image=True)
+ copyfile_mock.assert_called_once_with(
+ CONF.pxe.ipxe_boot_script,
+ os.path.join(
+ CONF.deploy.http_root,
+ os.path.basename(CONF.pxe.ipxe_boot_script)))
+
def test_prepare_ramdisk_cleaning(self):
self.node.provision_state = states.CLEANING
self.node.save()