summaryrefslogtreecommitdiff
path: root/ironic
diff options
context:
space:
mode:
Diffstat (limited to 'ironic')
-rw-r--r--ironic/drivers/ilo.py6
-rw-r--r--ironic/drivers/modules/ilo/boot.py19
-rw-r--r--ironic/drivers/modules/ilo/deploy.py116
-rw-r--r--ironic/tests/unit/conductor/test_manager.py4
-rw-r--r--ironic/tests/unit/drivers/modules/ilo/test_boot.py72
-rw-r--r--ironic/tests/unit/drivers/modules/ilo/test_deploy.py316
-rw-r--r--ironic/tests/unit/drivers/test_ilo.py6
7 files changed, 80 insertions, 459 deletions
diff --git a/ironic/drivers/ilo.py b/ironic/drivers/ilo.py
index 8f64e67fd..0163ac6a4 100644
--- a/ironic/drivers/ilo.py
+++ b/ironic/drivers/ilo.py
@@ -23,11 +23,11 @@ from ironic.drivers import base
from ironic.drivers.modules import agent
from ironic.drivers.modules.ilo import boot
from ironic.drivers.modules.ilo import console
-from ironic.drivers.modules.ilo import deploy
from ironic.drivers.modules.ilo import inspect
from ironic.drivers.modules.ilo import management
from ironic.drivers.modules.ilo import power
from ironic.drivers.modules.ilo import vendor
+from ironic.drivers.modules import iscsi_deploy
class IloVirtualMediaIscsiDriver(base.BaseDriver):
@@ -48,7 +48,7 @@ class IloVirtualMediaIscsiDriver(base.BaseDriver):
self.power = power.IloPower()
self.boot = boot.IloVirtualMediaBoot()
- self.deploy = deploy.IloVirtualMediaIscsiDeploy()
+ self.deploy = iscsi_deploy.ISCSIDeploy()
self.console = console.IloConsoleInterface()
self.management = management.IloManagement()
self.vendor = vendor.VendorPassthru()
@@ -74,7 +74,7 @@ class IloVirtualMediaAgentDriver(base.BaseDriver):
self.power = power.IloPower()
self.boot = boot.IloVirtualMediaBoot()
- self.deploy = deploy.IloVirtualMediaAgentDeploy()
+ self.deploy = agent.AgentDeploy()
self.console = console.IloConsoleInterface()
self.management = management.IloManagement()
self.inspect = inspect.IloInspect()
diff --git a/ironic/drivers/modules/ilo/boot.py b/ironic/drivers/modules/ilo/boot.py
index b8e1f2e6a..47bdc14cc 100644
--- a/ironic/drivers/modules/ilo/boot.py
+++ b/ironic/drivers/modules/ilo/boot.py
@@ -248,7 +248,7 @@ def _parse_deploy_info(node):
return info
-def validate_driver_info(task):
+def _validate_driver_info(task):
"""Validate the prerequisites for virtual media based boot.
This method validates whether the 'driver_info' property of the
@@ -397,6 +397,7 @@ class IloVirtualMediaBoot(base.BootInterface):
"""
_validate_instance_image_info(task)
+ _validate_driver_info(task)
@METRICS.timer('IloVirtualMediaBoot.prepare_ramdisk')
def prepare_ramdisk(self, task, ramdisk_params):
@@ -427,6 +428,13 @@ class IloVirtualMediaBoot(base.BootInterface):
node.provision_state != states.CLEANING):
return
+ # Powering off the Node before initiating boot for node cleaning.
+ # If node is in system POST, setting boot device fails.
+ manager_utils.node_power_action(task, states.POWER_OFF)
+
+ if task.node.provision_state == states.DEPLOYING:
+ prepare_node_for_deploy(task)
+
# Clear ilo_boot_iso if it's a glance image to force recreate
# another one again (or use existing one in glance).
# This is mainly for rebuild scenario.
@@ -483,6 +491,10 @@ class IloVirtualMediaBoot(base.BootInterface):
else:
LOG.warning(_LW("The UUID for the root partition could not "
"be found for node %s"), node.uuid)
+ # Set boot mode
+ ilo_common.update_boot_mode(task)
+ # Need to enable secure boot, if being requested
+ ilo_common.update_secure_boot_mode(task, True)
@METRICS.timer('IloVirtualMediaBoot.clean_up_instance')
def clean_up_instance(self, task):
@@ -496,6 +508,10 @@ class IloVirtualMediaBoot(base.BootInterface):
:raises: IloOperationError, if some operation on iLO failed.
"""
+ LOG.debug("Cleaning up the instance.")
+ manager_utils.node_power_action(task, states.POWER_OFF)
+ disable_secure_boot_if_supported(task)
+
_clean_up_boot_iso_for_instance(task.node)
driver_internal_info = task.node.driver_internal_info
@@ -518,6 +534,7 @@ class IloVirtualMediaBoot(base.BootInterface):
:raises: IloOperationError, if some operation on iLO failed.
"""
+ LOG.debug("Cleaning up the ironic ramdisk.")
ilo_common.cleanup_vmedia_boot(task)
def _configure_vmedia_boot(self, task, root_uuid):
diff --git a/ironic/drivers/modules/ilo/deploy.py b/ironic/drivers/modules/ilo/deploy.py
index 099ae7ad6..7cb900c59 100644
--- a/ironic/drivers/modules/ilo/deploy.py
+++ b/ironic/drivers/modules/ilo/deploy.py
@@ -22,7 +22,6 @@ from ironic.common import boot_devices
from ironic.common import states
from ironic.conductor import task_manager
from ironic.conductor import utils as manager_utils
-from ironic.drivers.modules import agent
from ironic.drivers.modules.ilo import boot as ilo_boot
from ironic.drivers.modules.ilo import common as ilo_common
from ironic.drivers.modules import iscsi_deploy
@@ -46,7 +45,6 @@ class IloIscsiDeployMixin(object):
:returns: deploy state DELETED.
:raises: IloOperationError, if some operation on iLO failed.
"""
-
manager_utils.node_power_action(task, states.POWER_OFF)
ilo_boot.disable_secure_boot_if_supported(task)
return super(IloIscsiDeployMixin, self).tear_down(task)
@@ -80,120 +78,6 @@ class IloIscsiDeployMixin(object):
super(IloIscsiDeployMixin, self).continue_deploy(task, **kwargs)
-class IloVirtualMediaIscsiDeploy(IloIscsiDeployMixin,
- iscsi_deploy.ISCSIDeploy):
-
- @METRICS.timer('IloVirtualMediaIscsiDeploy.validate')
- def validate(self, task):
- """Validate the prerequisites for virtual media based deploy.
-
- This method validates whether the 'driver_info' property of the
- supplied node contains the required information for this driver.
-
- :param task: a TaskManager instance containing the node to act on.
- :raises: InvalidParameterValue if any parameters are incorrect
- :raises: MissingParameterValue if some mandatory information
- is missing on the node
- """
- ilo_boot.validate_driver_info(task)
- super(IloVirtualMediaIscsiDeploy, self).validate(task)
-
- @METRICS.timer('IloVirtualMediaIscsiDeploy.prepare')
- def prepare(self, task):
- """Prepare the deployment environment for this task's node.
-
- :param task: a TaskManager instance containing the node to act on.
- :raises: IloOperationError, if some operation on iLO failed.
- """
- if task.node.provision_state == states.DEPLOYING:
- ilo_boot.prepare_node_for_deploy(task)
-
- super(IloVirtualMediaIscsiDeploy, self).prepare(task)
-
-
-class IloVirtualMediaAgentDeploy(agent.AgentDeploy):
- """Interface for deploy-related actions."""
-
- def get_properties(self):
- """Return the properties of the interface.
-
- :returns: dictionary of <property name>:<property description> entries.
- """
- return ilo_boot.COMMON_PROPERTIES
-
- @METRICS.timer('IloVirtualMediaAgentDeploy.validate')
- def validate(self, task):
- """Validate the prerequisites for virtual media based deploy.
-
- This method validates whether the 'driver_info' property of the
- supplied node contains the required information for this driver.
-
- :param task: a TaskManager instance containing the node to act on.
- :raises: InvalidParameterValue if any parameters are incorrect
- :raises: MissingParameterValue if some mandatory information
- is missing on the node
- """
- ilo_boot.validate_driver_info(task)
- super(IloVirtualMediaAgentDeploy, self).validate(task)
-
- @METRICS.timer('IloVirtualMediaAgentDeploy.tear_down')
- @task_manager.require_exclusive_lock
- def tear_down(self, task):
- """Tear down a previous deployment on the task's node.
-
- :param task: a TaskManager instance.
- :returns: states.DELETED
- :raises: IloOperationError, if some operation on iLO failed.
- """
- manager_utils.node_power_action(task, states.POWER_OFF)
- ilo_boot.disable_secure_boot_if_supported(task)
- return super(IloVirtualMediaAgentDeploy, self).tear_down(task)
-
- @METRICS.timer('IloVirtualMediaAgentDeploy.prepare')
- def prepare(self, task):
- """Prepare the deployment environment for this node.
-
- :param task: a TaskManager instance.
- :raises: IloOperationError, if some operation on iLO failed.
- """
- if task.node.provision_state == states.DEPLOYING:
- ilo_boot.prepare_node_for_deploy(task)
-
- super(IloVirtualMediaAgentDeploy, self).prepare(task)
-
- @METRICS.timer('IloVirtualMediaAgentDeploy.prepare_cleaning')
- def prepare_cleaning(self, task):
- """Boot into the agent to prepare for cleaning.
-
- :param task: a TaskManager object containing the node
- :returns: states.CLEANWAIT to signify an asynchronous prepare.
- :raises: NodeCleaningFailure, NetworkError if the previous cleaning
- ports cannot be removed or if new cleaning ports cannot be created
- :raises: IloOperationError, if some operation on iLO failed.
- """
- # Powering off the Node before initiating boot for node cleaning.
- # If node is in system POST, setting boot device fails.
- manager_utils.node_power_action(task, states.POWER_OFF)
- return super(IloVirtualMediaAgentDeploy, self).prepare_cleaning(task)
-
- @METRICS.timer('IloVirtualMediaAgentDeploy.reboot_to_instance')
- def reboot_to_instance(self, task):
- node = task.node
- LOG.debug('Preparing to reboot to instance for node %s',
- node.uuid)
-
- error = self.check_deploy_success(node)
- if error is None:
- # Set boot mode
- ilo_common.update_boot_mode(task)
-
- # Need to enable secure boot, if being requested
- ilo_common.update_secure_boot_mode(task, True)
-
- super(IloVirtualMediaAgentDeploy,
- self).reboot_to_instance(task)
-
-
class IloPXEDeploy(IloIscsiDeployMixin, iscsi_deploy.ISCSIDeploy):
@METRICS.timer('IloPXEDeploy.prepare')
diff --git a/ironic/tests/unit/conductor/test_manager.py b/ironic/tests/unit/conductor/test_manager.py
index 82e0c163d..1e60cec07 100644
--- a/ironic/tests/unit/conductor/test_manager.py
+++ b/ironic/tests/unit/conductor/test_manager.py
@@ -4836,7 +4836,9 @@ class ManagerTestProperties(mgr_utils.ServiceSetUpMixin,
'console_port', 'ilo_change_password',
'ca_file', 'snmp_auth_user', 'snmp_auth_prot_password',
'snmp_auth_priv_password', 'snmp_auth_protocol',
- 'snmp_auth_priv_protocol']
+ 'snmp_auth_priv_protocol', 'deploy_forces_oob_reboot',
+ 'deploy_kernel', 'deploy_ramdisk', 'image_http_proxy',
+ 'image_https_proxy', 'image_no_proxy']
self._check_driver_properties("agent_ilo", expected)
def test_driver_properties_fail(self):
diff --git a/ironic/tests/unit/drivers/modules/ilo/test_boot.py b/ironic/tests/unit/drivers/modules/ilo/test_boot.py
index 36310ee21..d607c000b 100644
--- a/ironic/tests/unit/drivers/modules/ilo/test_boot.py
+++ b/ironic/tests/unit/drivers/modules/ilo/test_boot.py
@@ -429,26 +429,26 @@ class IloBootPrivateMethodsTestCase(db_base.DbTestCase):
@mock.patch.object(ilo_common, 'parse_driver_info', spec_set=True,
autospec=True)
- def test_validate_driver_info_MissingParam(self, mock_parse_driver_info):
+ def test__validate_driver_info_MissingParam(self, mock_parse_driver_info):
with task_manager.acquire(self.context, self.node.uuid,
shared=False) as task:
self.assertRaisesRegex(exception.MissingParameterValue,
"Missing 'ilo_deploy_iso'",
- ilo_boot.validate_driver_info, task)
+ ilo_boot._validate_driver_info, task)
mock_parse_driver_info.assert_called_once_with(task.node)
@mock.patch.object(service_utils, 'is_glance_image', spec_set=True,
autospec=True)
@mock.patch.object(ilo_common, 'parse_driver_info', spec_set=True,
autospec=True)
- def test_validate_driver_info_valid_uuid(self, mock_parse_driver_info,
- mock_is_glance_image):
+ def test__validate_driver_info_valid_uuid(self, mock_parse_driver_info,
+ mock_is_glance_image):
mock_is_glance_image.return_value = True
with task_manager.acquire(self.context, self.node.uuid,
shared=False) as task:
deploy_iso = '8a81759a-f29b-454b-8ab3-161c6ca1882c'
task.node.driver_info['ilo_deploy_iso'] = deploy_iso
- ilo_boot.validate_driver_info(task)
+ ilo_boot._validate_driver_info(task)
mock_parse_driver_info.assert_called_once_with(task.node)
mock_is_glance_image.assert_called_once_with(deploy_iso)
@@ -458,9 +458,9 @@ class IloBootPrivateMethodsTestCase(db_base.DbTestCase):
autospec=True)
@mock.patch.object(ilo_common, 'parse_driver_info', spec_set=True,
autospec=True)
- def test_validate_driver_info_InvalidParam(self, mock_parse_driver_info,
- mock_is_glance_image,
- mock_validate_href):
+ def test__validate_driver_info_InvalidParam(self, mock_parse_driver_info,
+ mock_is_glance_image,
+ mock_validate_href):
deploy_iso = 'http://abc.org/image/qcow2'
mock_validate_href.side_effect = exception.ImageRefValidationFailed(
image_href='http://abc.org/image/qcow2', reason='fail')
@@ -470,7 +470,7 @@ class IloBootPrivateMethodsTestCase(db_base.DbTestCase):
task.node.driver_info['ilo_deploy_iso'] = deploy_iso
self.assertRaisesRegex(exception.InvalidParameterValue,
"Virtual media boot accepts",
- ilo_boot.validate_driver_info, task)
+ ilo_boot._validate_driver_info, task)
mock_parse_driver_info.assert_called_once_with(task.node)
mock_validate_href.assert_called_once_with(mock.ANY, deploy_iso)
@@ -480,15 +480,15 @@ class IloBootPrivateMethodsTestCase(db_base.DbTestCase):
autospec=True)
@mock.patch.object(ilo_common, 'parse_driver_info', spec_set=True,
autospec=True)
- def test_validate_driver_info_valid_url(self, mock_parse_driver_info,
- mock_is_glance_image,
- mock_validate_href):
+ def test__validate_driver_info_valid_url(self, mock_parse_driver_info,
+ mock_is_glance_image,
+ mock_validate_href):
deploy_iso = 'http://abc.org/image/deploy.iso'
mock_is_glance_image.return_value = False
with task_manager.acquire(self.context, self.node.uuid,
shared=False) as task:
task.node.driver_info['ilo_deploy_iso'] = deploy_iso
- ilo_boot.validate_driver_info(task)
+ ilo_boot._validate_driver_info(task)
mock_parse_driver_info.assert_called_once_with(task.node)
mock_validate_href.assert_called_once_with(mock.ANY, deploy_iso)
@@ -676,9 +676,12 @@ class IloVirtualMediaBootTestCase(db_base.DbTestCase):
self.node = obj_utils.create_test_node(
self.context, driver='iscsi_ilo', driver_info=INFO_DICT)
+ @mock.patch.object(ilo_boot, '_validate_driver_info',
+ spec_set=True, autospec=True)
@mock.patch.object(ilo_boot, '_validate_instance_image_info',
spec_set=True, autospec=True)
- def test_validate(self, mock_val_instance_image_info):
+ def test_validate(self, mock_val_instance_image_info,
+ mock_val_driver_info):
instance_info = self.node.instance_info
instance_info['ilo_boot_iso'] = 'deploy-iso'
instance_info['image_source'] = '6b2f0c0c-79e8-4db6-842e-43c9764204af'
@@ -690,7 +693,12 @@ class IloVirtualMediaBootTestCase(db_base.DbTestCase):
task.node.driver_info['ilo_deploy_iso'] = 'deploy-iso'
task.driver.boot.validate(task)
mock_val_instance_image_info.assert_called_once_with(task)
+ mock_val_driver_info.assert_called_once_with(task)
+ @mock.patch.object(ilo_boot, 'prepare_node_for_deploy',
+ spec_set=True, autospec=True)
+ @mock.patch.object(manager_utils, 'node_power_action',
+ spec_set=True, autospec=True)
@mock.patch.object(ilo_common, 'eject_vmedia_devices',
spec_set=True, autospec=True)
@mock.patch.object(ilo_common, 'setup_vmedia', spec_set=True,
@@ -698,7 +706,9 @@ class IloVirtualMediaBootTestCase(db_base.DbTestCase):
@mock.patch.object(deploy_utils, 'get_single_nic_with_vif_port_id',
spec_set=True, autospec=True)
def _test_prepare_ramdisk(self, get_nic_mock, setup_vmedia_mock,
- eject_mock, ilo_boot_iso, image_source,
+ eject_mock, node_power_mock,
+ prepare_node_for_deploy_mock,
+ ilo_boot_iso, image_source,
ramdisk_params={'a': 'b'}):
instance_info = self.node.instance_info
instance_info['ilo_boot_iso'] = ilo_boot_iso
@@ -714,6 +724,9 @@ class IloVirtualMediaBootTestCase(db_base.DbTestCase):
task.driver.boot.prepare_ramdisk(task, ramdisk_params)
+ node_power_mock.assert_called_once_with(task, states.POWER_OFF)
+ if task.node.provision_state == states.DEPLOYING:
+ prepare_node_for_deploy_mock.assert_called_once_with(task)
eject_mock.assert_called_once_with(task)
expected_ramdisk_opts = {'a': 'b', 'BOOTIF': '12:34:56:78:90:ab'}
get_nic_mock.assert_called_once_with(task)
@@ -821,12 +834,17 @@ class IloVirtualMediaBootTestCase(db_base.DbTestCase):
self.assertFalse(setup_vmedia_mock.called)
self.assertFalse(set_boot_device_mock.called)
+ @mock.patch.object(ilo_common, 'update_secure_boot_mode', spec_set=True,
+ autospec=True)
+ @mock.patch.object(manager_utils, 'node_power_action', spec_set=True,
+ autospec=True)
@mock.patch.object(ilo_common, 'cleanup_vmedia_boot', spec_set=True,
autospec=True)
@mock.patch.object(ilo_boot, '_clean_up_boot_iso_for_instance',
spec_set=True, autospec=True)
def test_clean_up_instance(self, cleanup_iso_mock,
- cleanup_vmedia_mock):
+ cleanup_vmedia_mock, node_power_mock,
+ update_secure_boot_mode_mock):
with task_manager.acquire(self.context, self.node.uuid,
shared=False) as task:
driver_internal_info = task.node.driver_internal_info
@@ -842,6 +860,9 @@ class IloVirtualMediaBootTestCase(db_base.DbTestCase):
self.assertNotIn('boot_iso_created_in_web_server',
driver_internal_info)
self.assertNotIn('root_uuid_or_disk_id', driver_internal_info)
+ node_power_mock.assert_called_once_with(task,
+ states.POWER_OFF)
+ update_secure_boot_mode_mock.assert_called_once_with(task, False)
@mock.patch.object(ilo_common, 'cleanup_vmedia_boot', spec_set=True,
autospec=True)
@@ -851,12 +872,17 @@ class IloVirtualMediaBootTestCase(db_base.DbTestCase):
task.driver.boot.clean_up_ramdisk(task)
cleanup_vmedia_mock.assert_called_once_with(task)
+ @mock.patch.object(ilo_common, 'update_secure_boot_mode', spec_set=True,
+ autospec=True)
+ @mock.patch.object(ilo_common, 'update_boot_mode', spec_set=True,
+ autospec=True)
@mock.patch.object(manager_utils, 'node_set_boot_device', spec_set=True,
autospec=True)
@mock.patch.object(ilo_common, 'cleanup_vmedia_boot', spec_set=True,
autospec=True)
def _test_prepare_instance_whole_disk_image(
- self, cleanup_vmedia_boot_mock, set_boot_device_mock):
+ self, cleanup_vmedia_boot_mock, set_boot_device_mock,
+ update_boot_mode_mock, update_secure_boot_mode_mock):
self.node.driver_internal_info = {'is_whole_disk_image': True}
self.node.save()
with task_manager.acquire(self.context, self.node.uuid,
@@ -867,6 +893,8 @@ class IloVirtualMediaBootTestCase(db_base.DbTestCase):
set_boot_device_mock.assert_called_once_with(task,
boot_devices.DISK,
persistent=True)
+ update_boot_mode_mock.assert_called_once_with(task)
+ update_secure_boot_mode_mock.assert_called_once_with(task, True)
def test_prepare_instance_whole_disk_image_local(self):
self.node.instance_info = {'capabilities': '{"boot_option": "local"}'}
@@ -876,14 +904,18 @@ class IloVirtualMediaBootTestCase(db_base.DbTestCase):
def test_prepare_instance_whole_disk_image(self):
self._test_prepare_instance_whole_disk_image()
+ @mock.patch.object(ilo_common, 'update_secure_boot_mode', spec_set=True,
+ autospec=True)
+ @mock.patch.object(ilo_common, 'update_boot_mode', spec_set=True,
+ autospec=True)
@mock.patch.object(ilo_boot.IloVirtualMediaBoot,
'_configure_vmedia_boot', spec_set=True,
autospec=True)
@mock.patch.object(ilo_common, 'cleanup_vmedia_boot', spec_set=True,
autospec=True)
def test_prepare_instance_partition_image(
- self, cleanup_vmedia_boot_mock,
- configure_vmedia_mock):
+ self, cleanup_vmedia_boot_mock, configure_vmedia_mock,
+ update_boot_mode_mock, update_secure_boot_mode_mock):
self.node.driver_internal_info = {'root_uuid_or_disk_id': (
"12312642-09d3-467f-8e09-12385826a123")}
self.node.save()
@@ -894,3 +926,5 @@ class IloVirtualMediaBootTestCase(db_base.DbTestCase):
cleanup_vmedia_boot_mock.assert_called_once_with(task)
configure_vmedia_mock.assert_called_once_with(
mock.ANY, task, "12312642-09d3-467f-8e09-12385826a123")
+ update_boot_mode_mock.assert_called_once_with(task)
+ update_secure_boot_mode_mock.assert_called_once_with(task, True)
diff --git a/ironic/tests/unit/drivers/modules/ilo/test_deploy.py b/ironic/tests/unit/drivers/modules/ilo/test_deploy.py
index 1a8bd9ccc..e33f6f1ef 100644
--- a/ironic/tests/unit/drivers/modules/ilo/test_deploy.py
+++ b/ironic/tests/unit/drivers/modules/ilo/test_deploy.py
@@ -23,7 +23,6 @@ from ironic.common import states
from ironic.conductor import task_manager
from ironic.conductor import utils as manager_utils
from ironic.conf import CONF
-from ironic.drivers.modules import agent
from ironic.drivers.modules.ilo import boot as ilo_boot
from ironic.drivers.modules.ilo import common as ilo_common
from ironic.drivers.modules import iscsi_deploy
@@ -40,321 +39,6 @@ if six.PY3:
INFO_DICT = db_utils.get_test_ilo_info()
-class IloVirtualMediaIscsiDeployTestCase(db_base.DbTestCase):
-
- def setUp(self):
- super(IloVirtualMediaIscsiDeployTestCase, self).setUp()
- mgr_utils.mock_the_extension_manager(driver="iscsi_ilo")
- self.node = obj_utils.create_test_node(
- self.context, driver='iscsi_ilo', driver_info=INFO_DICT)
-
- @mock.patch.object(iscsi_deploy.ISCSIDeploy, 'validate', spec_set=True,
- autospec=True)
- @mock.patch.object(ilo_boot, 'validate_driver_info', spec_set=True,
- autospec=True)
- def test_validate(self,
- mock_validate_driver_info,
- iscsi_validate):
- with task_manager.acquire(self.context, self.node.uuid,
- shared=False) as task:
- task.driver.deploy.validate(task)
- mock_validate_driver_info.assert_called_once_with(task)
- iscsi_validate.assert_called_once_with(mock.ANY, task)
-
- @mock.patch.object(ilo_common, 'update_secure_boot_mode', spec_set=True,
- autospec=True)
- @mock.patch.object(iscsi_deploy.ISCSIDeploy, 'tear_down', spec_set=True,
- autospec=True)
- @mock.patch.object(manager_utils, 'node_power_action', spec_set=True,
- autospec=True)
- def test_tear_down(self,
- node_power_action_mock,
- iscsi_tear_down_mock,
- update_secure_boot_mode_mock):
- with task_manager.acquire(self.context, self.node.uuid,
- shared=False) as task:
- iscsi_tear_down_mock.return_value = states.DELETED
- returned_state = task.driver.deploy.tear_down(task)
- node_power_action_mock.assert_called_once_with(task,
- states.POWER_OFF)
- update_secure_boot_mode_mock.assert_called_once_with(task, False)
- iscsi_tear_down_mock.assert_called_once_with(mock.ANY, task)
- self.assertEqual(states.DELETED, returned_state)
-
- @mock.patch.object(ilo_boot.LOG, 'warning',
- spec_set=True, autospec=True)
- @mock.patch.object(ilo_boot, 'exception', spec_set=True, autospec=True)
- @mock.patch.object(iscsi_deploy.ISCSIDeploy, 'tear_down', spec_set=True,
- autospec=True)
- @mock.patch.object(ilo_common, 'update_secure_boot_mode', spec_set=True,
- autospec=True)
- @mock.patch.object(manager_utils, 'node_power_action', spec_set=True,
- autospec=True)
- def test_tear_down_handle_exception(self,
- node_power_action_mock,
- update_secure_boot_mode_mock,
- iscsi_tear_down_mock,
- exception_mock,
- mock_log):
- with task_manager.acquire(self.context, self.node.uuid,
- shared=False) as task:
- iscsi_tear_down_mock.return_value = states.DELETED
- exception_mock.IloOperationNotSupported = Exception
- update_secure_boot_mode_mock.side_effect = Exception
- returned_state = task.driver.deploy.tear_down(task)
- node_power_action_mock.assert_called_once_with(task,
- states.POWER_OFF)
- update_secure_boot_mode_mock.assert_called_once_with(task, False)
- iscsi_tear_down_mock.assert_called_once_with(mock.ANY, task)
- self.assertTrue(mock_log.called)
- self.assertEqual(states.DELETED, returned_state)
-
- @mock.patch.object(iscsi_deploy.ISCSIDeploy, 'deploy',
- spec_set=True, autospec=True)
- def test_deploy(self, iscsi_deploy_mock):
- with task_manager.acquire(self.context, self.node.uuid,
- shared=False) as task:
- task.driver.deploy.deploy(task)
- iscsi_deploy_mock.assert_called_once_with(mock.ANY, task)
-
- @mock.patch.object(iscsi_deploy.ISCSIDeploy, 'prepare',
- spec_set=True, autospec=True)
- @mock.patch.object(ilo_boot, 'prepare_node_for_deploy', spec_set=True,
- autospec=True)
- def test_prepare(self, func_prepare_node_for_deploy,
- iscsi_deploy_prepare_mock):
- self.node.provision_state = states.DEPLOYING
- self.node.save()
- with task_manager.acquire(self.context, self.node.uuid,
- shared=False) as task:
- task.driver.deploy.prepare(task)
- func_prepare_node_for_deploy.assert_called_once_with(task)
- iscsi_deploy_prepare_mock.assert_called_once_with(mock.ANY, task)
-
- @mock.patch.object(iscsi_deploy.ISCSIDeploy, 'prepare',
- spec_set=True, autospec=True)
- @mock.patch.object(ilo_boot, 'prepare_node_for_deploy', spec_set=True,
- autospec=True)
- def test_prepare_active_node(self, func_prepare_node_for_deploy,
- iscsi_deploy_prepare_mock):
- """Ensure nodes in running states are not inadvertently changed"""
- test_states = list(states.STABLE_STATES)
- test_states.extend([states.CLEANING,
- states.CLEANWAIT,
- states.INSPECTING])
- for state in test_states:
- self.node.provision_state = state
- self.node.save()
- func_prepare_node_for_deploy.reset_mock()
- iscsi_deploy_prepare_mock.reset_mock()
- with task_manager.acquire(self.context, self.node.uuid,
- shared=False) as task:
- task.driver.deploy.prepare(task)
- self.assertFalse(func_prepare_node_for_deploy.called)
- iscsi_deploy_prepare_mock.assert_called_once_with(
- mock.ANY, task)
-
- @mock.patch.object(iscsi_deploy.ISCSIDeploy, 'prepare_cleaning',
- spec_set=True, autospec=True)
- @mock.patch.object(manager_utils, 'node_power_action', spec_set=True,
- autospec=True)
- def test_prepare_cleaning(self, node_power_action_mock,
- iscsi_prep_clean_mock):
- iscsi_prep_clean_mock.return_value = states.CLEANWAIT
- with task_manager.acquire(self.context, self.node.uuid,
- shared=False) as task:
- ret = task.driver.deploy.prepare_cleaning(task)
- self.assertEqual(states.CLEANWAIT, ret)
- node_power_action_mock.assert_called_once_with(task,
- states.POWER_OFF)
- iscsi_prep_clean_mock.assert_called_once_with(mock.ANY, task)
-
- @mock.patch.object(iscsi_deploy.ISCSIDeploy, 'continue_deploy',
- spec_set=True, autospec=True)
- @mock.patch.object(ilo_common, 'update_secure_boot_mode', autospec=True)
- @mock.patch.object(ilo_common, 'update_boot_mode', autospec=True)
- def test_continue_deploy(self,
- func_update_boot_mode,
- func_update_secure_boot_mode,
- pxe_vendorpassthru_mock):
- with task_manager.acquire(self.context, self.node.uuid,
- shared=False) as task:
- task.node.provision_state = states.DEPLOYWAIT
- task.node.target_provision_state = states.ACTIVE
- task.driver.deploy.continue_deploy(task)
- func_update_boot_mode.assert_called_once_with(task)
- func_update_secure_boot_mode.assert_called_once_with(task, True)
- pxe_vendorpassthru_mock.assert_called_once_with(
- mock.ANY, task)
-
-
-class IloVirtualMediaAgentDeployTestCase(db_base.DbTestCase):
-
- def setUp(self):
- super(IloVirtualMediaAgentDeployTestCase, self).setUp()
- mgr_utils.mock_the_extension_manager(driver="agent_ilo")
- self.node = obj_utils.create_test_node(
- self.context, driver='agent_ilo', driver_info=INFO_DICT)
-
- @mock.patch.object(agent.AgentDeploy, 'validate', spec_set=True,
- autospec=True)
- @mock.patch.object(ilo_boot, 'validate_driver_info', spec_set=True,
- autospec=True)
- def test_validate(self,
- mock_validate_driver_info,
- agent_validate):
- with task_manager.acquire(self.context, self.node.uuid,
- shared=False) as task:
- task.driver.deploy.validate(task)
- mock_validate_driver_info.assert_called_once_with(task)
- agent_validate.assert_called_once_with(mock.ANY, task)
-
- @mock.patch.object(agent.AgentDeploy, 'tear_down', spec_set=True,
- autospec=True)
- @mock.patch.object(ilo_common, 'update_secure_boot_mode', spec_set=True,
- autospec=True)
- @mock.patch.object(manager_utils, 'node_power_action', spec_set=True,
- autospec=True)
- def test_tear_down(self,
- node_power_action_mock,
- update_secure_boot_mode_mock,
- agent_teardown_mock):
- with task_manager.acquire(self.context, self.node.uuid,
- shared=False) as task:
- agent_teardown_mock.return_value = states.DELETED
- returned_state = task.driver.deploy.tear_down(task)
- node_power_action_mock.assert_called_once_with(task,
- states.POWER_OFF)
- update_secure_boot_mode_mock.assert_called_once_with(task, False)
- self.assertEqual(states.DELETED, returned_state)
-
- @mock.patch.object(agent.AgentDeploy, 'tear_down', spec_set=True,
- autospec=True)
- @mock.patch.object(ilo_boot.LOG, 'warning', spec_set=True, autospec=True)
- @mock.patch.object(ilo_boot, 'exception', spec_set=True, autospec=True)
- @mock.patch.object(ilo_common, 'update_secure_boot_mode', spec_set=True,
- autospec=True)
- @mock.patch.object(manager_utils, 'node_power_action', spec_set=True,
- autospec=True)
- def test_tear_down_handle_exception(self,
- node_power_action_mock,
- update_secure_boot_mode_mock,
- exception_mock,
- mock_log,
- agent_teardown_mock):
- with task_manager.acquire(self.context, self.node.uuid,
- shared=False) as task:
- agent_teardown_mock.return_value = states.DELETED
- exception_mock.IloOperationNotSupported = Exception
- update_secure_boot_mode_mock.side_effect = Exception
- returned_state = task.driver.deploy.tear_down(task)
- node_power_action_mock.assert_called_once_with(task,
- states.POWER_OFF)
- update_secure_boot_mode_mock.assert_called_once_with(task, False)
- agent_teardown_mock.assert_called_once_with(mock.ANY, task)
- self.assertTrue(mock_log.called)
- self.assertEqual(states.DELETED, returned_state)
-
- @mock.patch.object(ilo_boot, 'prepare_node_for_deploy', spec_set=True,
- autospec=True)
- @mock.patch.object(agent.AgentDeploy, 'prepare', spec_set=True,
- autospec=True)
- def test_prepare(self,
- agent_prepare_mock,
- func_prepare_node_for_deploy):
- self.node.provision_state = states.DEPLOYING
- self.node.save()
- with task_manager.acquire(self.context, self.node.uuid,
- shared=False) as task:
- task.driver.deploy.prepare(task)
- func_prepare_node_for_deploy.assert_called_once_with(task)
- agent_prepare_mock.assert_called_once_with(mock.ANY, task)
-
- @mock.patch.object(agent.AgentDeploy, 'prepare', spec_set=True,
- autospec=True)
- @mock.patch.object(ilo_boot, 'prepare_node_for_deploy', spec_set=True,
- autospec=True)
- def test_prepare_active_node(self,
- func_prepare_node_for_deploy,
- agent_prepare_mock):
- """Ensure nodes in running states are not inadvertently changed"""
- test_states = list(states.STABLE_STATES)
- test_states.extend([states.CLEANING,
- states.CLEANWAIT,
- states.INSPECTING])
- for state in test_states:
- self.node.provision_state = state
- self.node.save()
- func_prepare_node_for_deploy.reset_mock()
- agent_prepare_mock.reset_mock()
- with task_manager.acquire(self.context, self.node.uuid,
- shared=False) as task:
- task.driver.deploy.prepare(task)
- self.assertFalse(func_prepare_node_for_deploy.called)
- agent_prepare_mock.assert_called_once_with(mock.ANY, task)
-
- @mock.patch.object(agent.AgentDeploy, 'prepare_cleaning', spec_set=True,
- autospec=True)
- @mock.patch.object(manager_utils, 'node_power_action', spec_set=True,
- autospec=True)
- def test_prepare_cleaning(self, node_power_action_mock,
- agent_prep_clean_mock):
- agent_prep_clean_mock.return_value = states.CLEANWAIT
- with task_manager.acquire(self.context, self.node.uuid,
- shared=False) as task:
- ret = task.driver.deploy.prepare_cleaning(task)
- self.assertEqual(states.CLEANWAIT, ret)
- node_power_action_mock.assert_called_once_with(task,
- states.POWER_OFF)
- agent_prep_clean_mock.assert_called_once_with(mock.ANY, task)
-
- @mock.patch.object(agent.AgentDeploy, 'reboot_to_instance',
- spec_set=True, autospec=True)
- @mock.patch.object(agent.AgentDeploy, 'check_deploy_success',
- spec_set=True, autospec=True)
- @mock.patch.object(ilo_common, 'update_boot_mode', spec_set=True,
- autospec=True)
- @mock.patch.object(ilo_common, 'update_secure_boot_mode', spec_set=True,
- autospec=True)
- def test_reboot_to_instance(self, func_update_secure_boot_mode,
- func_update_boot_mode,
- check_deploy_success_mock,
- agent_reboot_to_instance_mock):
- check_deploy_success_mock.return_value = None
- with task_manager.acquire(self.context, self.node.uuid,
- shared=False) as task:
- task.driver.deploy.reboot_to_instance(task)
- check_deploy_success_mock.assert_called_once_with(
- mock.ANY, task.node)
- func_update_boot_mode.assert_called_once_with(task)
- func_update_secure_boot_mode.assert_called_once_with(task, True)
- agent_reboot_to_instance_mock.assert_called_once_with(
- mock.ANY, task)
-
- @mock.patch.object(agent.AgentDeploy, 'reboot_to_instance',
- spec_set=True, autospec=True)
- @mock.patch.object(agent.AgentDeploy, 'check_deploy_success',
- spec_set=True, autospec=True)
- @mock.patch.object(ilo_common, 'update_boot_mode', spec_set=True,
- autospec=True)
- @mock.patch.object(ilo_common, 'update_secure_boot_mode', spec_set=True,
- autospec=True)
- def test_reboot_to_instance_deploy_fail(self, func_update_secure_boot_mode,
- func_update_boot_mode,
- check_deploy_success_mock,
- agent_reboot_to_instance_mock):
- check_deploy_success_mock.return_value = "Error"
- with task_manager.acquire(self.context, self.node.uuid,
- shared=False) as task:
- task.driver.deploy.reboot_to_instance(task)
- check_deploy_success_mock.assert_called_once_with(
- mock.ANY, task.node)
- self.assertFalse(func_update_boot_mode.called)
- self.assertFalse(func_update_secure_boot_mode.called)
- agent_reboot_to_instance_mock.assert_called_once_with(
- mock.ANY, task)
-
-
class IloPXEDeployTestCase(db_base.DbTestCase):
def setUp(self):
diff --git a/ironic/tests/unit/drivers/test_ilo.py b/ironic/tests/unit/drivers/test_ilo.py
index 73d8b2f3c..ba3df3315 100644
--- a/ironic/tests/unit/drivers/test_ilo.py
+++ b/ironic/tests/unit/drivers/test_ilo.py
@@ -24,11 +24,11 @@ from ironic.drivers import ilo
from ironic.drivers.modules import agent
from ironic.drivers.modules.ilo import boot
from ironic.drivers.modules.ilo import console
-from ironic.drivers.modules.ilo import deploy
from ironic.drivers.modules.ilo import inspect
from ironic.drivers.modules.ilo import management
from ironic.drivers.modules.ilo import power
from ironic.drivers.modules.ilo import vendor
+from ironic.drivers.modules import iscsi_deploy
@mock.patch.object(ilo.importutils, 'try_import', spec_set=True,
@@ -42,7 +42,7 @@ class IloVirtualMediaIscsiDriversTestCase(testtools.TestCase):
self.assertIsInstance(driver.power, power.IloPower)
self.assertIsInstance(driver.boot, boot.IloVirtualMediaBoot)
- self.assertIsInstance(driver.deploy, deploy.IloVirtualMediaIscsiDeploy)
+ self.assertIsInstance(driver.deploy, iscsi_deploy.ISCSIDeploy)
self.assertIsInstance(driver.console, console.IloConsoleInterface)
self.assertIsInstance(driver.management, management.IloManagement)
self.assertIsInstance(driver.vendor, vendor.VendorPassthru)
@@ -67,7 +67,7 @@ class IloVirtualMediaAgentDriversTestCase(testtools.TestCase):
self.assertIsInstance(driver.power, power.IloPower)
self.assertIsInstance(driver.boot, boot.IloVirtualMediaBoot)
- self.assertIsInstance(driver.deploy, deploy.IloVirtualMediaAgentDeploy)
+ self.assertIsInstance(driver.deploy, agent.AgentDeploy)
self.assertIsInstance(driver.console, console.IloConsoleInterface)
self.assertIsInstance(driver.management, management.IloManagement)
self.assertIsInstance(driver.inspect, inspect.IloInspect)