def validate(self, task, **kwargs): """Validates the inputs for a vendor passthru. This method checks whether the vendor passthru method is a valid one, and then validates whether the required information for executing the vendor passthru has been provided or not. :param task: a TaskManager instance containing the node to act on. :param kwargs: kwargs containins the method name and its parameters. :raises: InvalidParameterValue if method is invalid or any parameters to the method is invalid. """ iscsi_deploy.get_deploy_info(task.node, **kwargs)
def validate(self, task, method, **kwargs): """Validates the inputs for a vendor passthru. This method checks whether the vendor passthru method is a valid one, and then validates whether the required information for executing the vendor passthru has been provided or not. :param task: a TaskManager instance containing the node to act on. :param method: method to be validated. :param kwargs: kwargs containins the method's parameters. :raises: InvalidParameterValue if any parameters is invalid. """ driver_utils.validate_boot_option_capability(task.node) iscsi_deploy.get_deploy_info(task.node, **kwargs)
def validate(self, task, **kwargs): """Validate vendor-specific actions. Checks if a valid vendor passthru method was passed and validates the parameters for the vendor passthru method. :param task: a TaskManager instance containing the node to act on. :param kwargs: kwargs containing the vendor passthru method and its parameters. :raises: MissingParameterValue, if some required parameters were not passed. :raises: InvalidParameterValue, if any of the parameters have invalid value. """ iscsi_deploy.get_deploy_info(task.node, **kwargs)
def test_continue_deploy_unexpected_fail( self, deploy_mock, power_mock, mock_image_cache, mock_disk_layout, mock_collect_logs): kwargs = {'address': '123456', 'iqn': 'aaa-bbb'} deploy_mock.side_effect = KeyError('boom') self.node.provision_state = states.DEPLOYWAIT self.node.target_provision_state = states.ACTIVE self.node.save() with task_manager.acquire(self.context, self.node.uuid, shared=False) as task: params = iscsi_deploy.get_deploy_info(task.node, **kwargs) self.assertRaisesRegex(exception.InstanceDeployFailure, "Deploy failed.*Error: 'boom'", iscsi_deploy.continue_deploy, task, **kwargs) self.assertEqual(states.DEPLOYFAIL, task.node.provision_state) self.assertEqual(states.ACTIVE, task.node.target_provision_state) self.assertIsNotNone(task.node.last_error) deploy_mock.assert_called_once_with(**params) power_mock.assert_called_once_with(task, states.POWER_OFF) mock_image_cache.assert_called_once_with() mock_image_cache.return_value.clean_up.assert_called_once_with() self.assertFalse(mock_disk_layout.called) mock_collect_logs.assert_called_once_with(task.node)
def test_get_deploy_info_boot_option_default(self): instance_info = self.node.instance_info instance_info['deploy_key'] = 'key' self.node.instance_info = instance_info kwargs = {'address': '1.1.1.1', 'iqn': 'target-iqn', 'key': 'key'} ret_val = iscsi_deploy.get_deploy_info(self.node, **kwargs) self.assertEqual('1.1.1.1', ret_val['address']) self.assertEqual('target-iqn', ret_val['iqn']) self.assertEqual('netboot', ret_val['boot_option'])
def test_get_deploy_info_whole_disk_image(self): instance_info = self.node.instance_info instance_info['configdrive'] = 'My configdrive' self.node.instance_info = instance_info self.node.driver_internal_info['is_whole_disk_image'] = True kwargs = {'address': '1.1.1.1', 'iqn': 'target-iqn'} ret_val = iscsi_deploy.get_deploy_info(self.node, **kwargs) self.assertEqual('1.1.1.1', ret_val['address']) self.assertEqual('target-iqn', ret_val['iqn']) self.assertEqual('My configdrive', ret_val['configdrive'])
def test_get_deploy_info_localboot(self): instance_info = self.node.instance_info instance_info['deploy_key'] = 'key' instance_info['capabilities'] = {'boot_option': 'local'} self.node.instance_info = instance_info kwargs = {'address': '1.1.1.1', 'iqn': 'target-iqn', 'key': 'key'} ret_val = iscsi_deploy.get_deploy_info(self.node, **kwargs) self.assertEqual('1.1.1.1', ret_val['address']) self.assertEqual('target-iqn', ret_val['iqn']) self.assertEqual('local', ret_val['boot_option'])
def validate(self, task, method, **kwargs): """Validates the inputs for a vendor passthru. If invalid, raises an exception; otherwise returns None. Valid methods: * pass_deploy_info * pass_bootloader_install_info :param task: a TaskManager instance containing the node to act on. :param method: method to be validated. :param kwargs: kwargs containins the method's parameters. :raises: InvalidParameterValue if any parameters is invalid. """ if method == 'pass_deploy_info': deploy_utils.validate_capabilities(task.node) iscsi_deploy.get_deploy_info(task.node, **kwargs) elif method == 'pass_bootloader_install_info': iscsi_deploy.validate_pass_bootloader_info_input(task, kwargs)
def validate(self, task, **kwargs): """Validates the inputs for a vendor passthru. This method checks whether the vendor passthru method is a valid one, and then validates whether the required information for executing the vendor passthru has been provided or not. :param task: a TaskManager instance containing the node to act on. :param kwargs: kwargs containins the method name and its parameters. :raises: InvalidParameterValue if method is invalid or any parameters to the method is invalid. """ method = kwargs['method'] if method == 'pass_deploy_info': iscsi_deploy.get_deploy_info(task.node, **kwargs) else: raise exception.InvalidParameterValue(_( "Unsupported method (%s) passed to PXE driver.") % method)
def validate(self, task, method, **kwargs): """Validate vendor-specific actions. Checks if a valid vendor passthru method was passed and validates the parameters for the vendor passthru method. :param task: a TaskManager instance containing the node to act on. :param method: method to be validated. :param kwargs: kwargs containing the vendor passthru method's parameters. :raises: MissingParameterValue, if some required parameters were not passed. :raises: InvalidParameterValue, if any of the parameters have invalid value. """ if method == 'pass_deploy_info': iscsi_deploy.get_deploy_info(task.node, **kwargs) elif method == 'pass_bootloader_install_info': iscsi_deploy.validate_pass_bootloader_info_input(task, kwargs)
def validate(self, task, **kwargs): """Checks if a valid vendor passthru method was passed and validates the parameters for the vendor passthru method. :param task: a TaskManager instance containing the node to act on. :param kwargs: kwargs containing the vendor passthru method and its parameters. :raises: MissingParameterValue, if some required parameters were not passed. :raises: InvalidParameterValue, if any of the parameters have invalid value. """ method = kwargs['method'] if method == 'pass_deploy_info': iscsi_deploy.get_deploy_info(task.node, **kwargs) else: raise exception.InvalidParameterValue(_( "Unsupported method (%s) passed to iLO driver.") % method)
def _test_get_deploy_info(self, extra_instance_info=None): if extra_instance_info is None: extra_instance_info = {} instance_info = self.node.instance_info instance_info.update(extra_instance_info) self.node.instance_info = instance_info kwargs = {'address': '1.1.1.1', 'iqn': 'target-iqn'} ret_val = iscsi_deploy.get_deploy_info(self.node, **kwargs) self.assertEqual('1.1.1.1', ret_val['address']) self.assertEqual('target-iqn', ret_val['iqn']) return ret_val
def test_continue_deploy_fail_empty_root_uuid( self, deploy_mock, power_mock, mock_image_cache): kwargs = {'address': '123456', 'iqn': 'aaa-bbb', 'key': 'fake-56789'} deploy_mock.return_value = {'root uuid': ''} self.node.provision_state = states.DEPLOYWAIT self.node.target_provision_state = states.ACTIVE self.node.save() with task_manager.acquire(self.context, self.node.uuid, shared=False) as task: params = iscsi_deploy.get_deploy_info(task.node, **kwargs) self.assertRaises(exception.InstanceDeployFailure, iscsi_deploy.continue_deploy, task, **kwargs) self.assertEqual(states.DEPLOYFAIL, task.node.provision_state) self.assertEqual(states.ACTIVE, task.node.target_provision_state) self.assertIsNotNone(task.node.last_error) deploy_mock.assert_called_once_with(**params) power_mock.assert_called_once_with(task, states.POWER_OFF) mock_image_cache.assert_called_once_with() mock_image_cache.return_value.clean_up.assert_called_once_with()
def test_continue_deploy_fail_no_root_uuid_or_disk_id( self, deploy_mock, power_mock, mock_image_cache, mock_disk_layout): kwargs = {'address': '123456', 'iqn': 'aaa-bbb', 'key': 'fake-56789'} deploy_mock.return_value = {} self.node.provision_state = states.DEPLOYWAIT self.node.target_provision_state = states.ACTIVE self.node.save() with task_manager.acquire(self.context, self.node.uuid, shared=False) as task: params = iscsi_deploy.get_deploy_info(task.node, **kwargs) self.assertRaises(exception.InstanceDeployFailure, iscsi_deploy.continue_deploy, task, **kwargs) self.assertEqual(states.DEPLOYFAIL, task.node.provision_state) self.assertEqual(states.ACTIVE, task.node.target_provision_state) self.assertIsNotNone(task.node.last_error) deploy_mock.assert_called_once_with(**params) power_mock.assert_called_once_with(task, states.POWER_OFF) mock_image_cache.assert_called_once_with() mock_image_cache.return_value.clean_up.assert_called_once_with() self.assertFalse(mock_disk_layout.called)