def set_power_state(self, task, power_state): """Turn the current power state on or off. :param task: a TaskManager instance. :param node: The Node. :param power_state: The desired power state POWER_ON, POWER_OFF or REBOOT from :mod:`ironic.common.states`. :raises: InvalidParameterValue if an invalid power state was specified. :raises: PowerStateFailure if the power couldn't be set to power_state. :raises: OneViewError if OneView fails setting the power state. """ oneview_info = common.get_oneview_info(task.node) oneview_client = common.get_oneview_client() LOG.debug( "Setting power state of node %(node_uuid)s to " "%(power_state)s", {"node_uuid": task.node.uuid, "power_state": power_state}, ) try: if power_state == states.POWER_ON: oneview_client.power_on(oneview_info) elif power_state == states.POWER_OFF: oneview_client.power_off(oneview_info) elif power_state == states.REBOOT: oneview_client.power_off(oneview_info) oneview_client.power_on(oneview_info) else: raise exception.InvalidParameterValue( _("set_power_state called with invalid power state %s.") % power_state ) except oneview_exceptions.OneViewException as exc: raise exception.OneViewError(_("Error setting power state: %s") % exc)
def test_get_oneview_info_missing_sh(self): driver_info = db_utils.get_test_oneview_driver_info() del driver_info["server_hardware_uri"] properties = db_utils.get_test_oneview_properties() properties["capabilities"] = ( "server_hardware_type_uri:fake_sht_uri," "enclosure_group_uri:fake_eg_uri," "server_profile_template_uri:fake_spt_uri" ) self.node.driver_info = driver_info self.node.properties = properties incomplete_node = self.node expected_node_info = { 'server_hardware_uri': None, 'server_hardware_type_uri': 'fake_sht_uri', 'enclosure_group_uri': 'fake_eg_uri', 'server_profile_template_uri': 'fake_spt_uri', } self.assertEqual( expected_node_info, common.get_oneview_info(incomplete_node) )
def set_boot_device(self, task, device, persistent=False): """Sets the boot device for a node. Sets the boot device to use on next reboot of the node. :param task: a task from TaskManager. :param device: the boot device, one of the supported devices listed in :mod:`ironic.common.boot_devices`. :param persistent: Boolean value. True if the boot device will persist to all future boots, False if not. Default: False. :raises: InvalidParameterValue if an invalid boot device is specified. :raises: OperationNotPermitted if the server has no server profile or if the server is already powered on. :raises: OneViewError if the communication with OneView fails """ oneview_info = common.get_oneview_info(task.node) if device not in self.get_supported_boot_devices(task): raise exception.InvalidParameterValue( _("Invalid boot device %s specified.") % device) LOG.debug("Setting boot device to %(device)s for node %(node)s", {"device": device, "node": task.node.uuid}) try: device_to_oneview = BOOT_DEVICE_MAPPING_TO_OV.get(device) self.oneview_client.set_boot_device(oneview_info, device_to_oneview) except oneview_exceptions.OneViewException as oneview_exc: msg = (_( "Error setting boot device on OneView. Error: %s") % oneview_exc ) raise exception.OneViewError(error=msg)
def test_get_oneview_info(self): complete_node = self.node expected_node_info = { 'server_hardware_uri': 'fake_sh_uri', 'server_hardware_type_uri': 'fake_sht_uri', 'enclosure_group_uri': 'fake_eg_uri', 'server_profile_template_uri': 'fake_spt_uri', } self.assertEqual( expected_node_info, common.get_oneview_info(complete_node) )
def set_boot_device(task): """Sets the boot device for a node. Sets the boot device to use on next reboot of the node. :param task: a task from TaskManager. :raises: InvalidParameterValue if an invalid boot device is specified. :raises: OperationNotPermitted if the server has no server profile or if the server is already powered on. :raises: OneViewError if the communication with OneView fails """ oneview_client = common.get_oneview_client() common.has_server_profile(task, oneview_client) driver_internal_info = task.node.driver_internal_info next_boot_device = driver_internal_info.get('next_boot_device') if next_boot_device: boot_device = next_boot_device.get('boot_device') persistent = next_boot_device.get('persistent') if boot_device not in sorted(BOOT_DEVICE_MAPPING_TO_OV): raise exception.InvalidParameterValue( _("Invalid boot device %s specified.") % boot_device) LOG.debug("Setting boot device to %(boot_device)s and " "persistent to %(persistent)s for node %(node)s", {"boot_device": boot_device, "persistent": persistent, "node": task.node.uuid}) try: oneview_info = common.get_oneview_info(task.node) device_to_oneview = BOOT_DEVICE_MAPPING_TO_OV.get(boot_device) oneview_client.set_boot_device(oneview_info, device_to_oneview, onetime=not persistent) driver_internal_info.pop('next_boot_device', None) task.node.driver_internal_info = driver_internal_info task.node.save() except oneview_exceptions.OneViewException as oneview_exc: msg = (_( "Error setting boot device on OneView. Error: %s") % oneview_exc ) raise exception.OneViewError(error=msg) else: LOG.debug("Not going to set boot device because there is no " "'next_boot_device' on driver_internal_info " "for the %(node)s", {"node": task.node.uuid})
def setUp(self): super(OneViewDeployUtilsTestCase, self).setUp() self.config(manager_url='https://1.2.3.4', group='oneview') self.config(username='******', group='oneview') self.config(password='******', group='oneview') mgr_utils.mock_the_extension_manager(driver='fake_oneview') self.driver = driver_factory.get_driver('fake_oneview') self.node = obj_utils.create_test_node( self.context, driver='fake_oneview', properties=db_utils.get_test_oneview_properties(), driver_info=db_utils.get_test_oneview_driver_info(), ) self.info = common.get_oneview_info(self.node)
def get_boot_device(self, task): """Get the current boot device from the node. Gets the boot device from the node 'next_boot_device on driver_internal_info namespace if exists. Gets through a request to OneView otherwise. :param task: a task from TaskManager. :returns: a dictionary containing: :boot_device: the boot device, one of :mod:`ironic.common.boot_devices` [PXE, DISK, CDROM] :persistent: Whether the boot device will persist to all future boots or not, None if it is unknown. :raises: OperationNotPermitted if no Server Profile is associated with the node :raises: InvalidParameterValue if the boot device is unknown :raises: OneViewError if the communication with OneView fails """ driver_internal_info = task.node.driver_internal_info next_boot_device = driver_internal_info.get('next_boot_device') if next_boot_device: return next_boot_device oneview_info = common.get_oneview_info(task.node) try: boot_order = self.oneview_client.get_boot_order(oneview_info) except oneview_exceptions.OneViewException as oneview_exc: msg = (_( "Error getting boot device from OneView. Error: %s") % oneview_exc ) raise exception.OneViewError(msg) primary_device = boot_order[0] if primary_device not in BOOT_DEVICE_OV_TO_GENERIC: raise exception.InvalidParameterValue( _("Unsupported boot Device %(device)s for Node: %(node)s") % {"device": primary_device, "node": task.node.uuid} ) boot_device = { 'boot_device': BOOT_DEVICE_OV_TO_GENERIC.get(primary_device), 'persistent': True, } return boot_device
def setUp(self): super(OneViewManagementDriverTestCase, self).setUp() self.config(manager_url='https://1.2.3.4', group='oneview') self.config(username='******', group='oneview') self.config(password='******', group='oneview') self.config(tls_cacert_file='ca_file', group='oneview') self.config(allow_insecure_connections=False, group='oneview') self.config(enabled_drivers=['fake_oneview']) self.driver = driver_factory.get_driver("fake_oneview") self.node = obj_utils.create_test_node( self.context, driver='fake_oneview', properties=db_utils.get_test_oneview_properties(), driver_info=db_utils.get_test_oneview_driver_info(), ) self.info = common.get_oneview_info(self.node)
def setUp(self): super(OneViewDeployUtilsTestCase, self).setUp() self.config(manager_url='https://1.2.3.4', group='oneview') self.config(username='******', group='oneview') self.config(password='******', group='oneview') mgr_utils.mock_the_extension_manager(driver='fake_oneview') self.driver = driver_factory.get_driver('fake_oneview') self.node = obj_utils.create_test_node( self.context, driver='fake_oneview', properties=db_utils.get_test_oneview_properties(), driver_info=db_utils.get_test_oneview_driver_info(), ) self.info = common.get_oneview_info(self.node) deploy_utils.is_node_in_use_by_oneview = mock.Mock(return_value=False) deploy_utils.is_node_in_use_by_ironic = mock.Mock(return_value=True)
def get_boot_device(self, task): """Get the current boot device for the task's node. Provides the current boot device of the node. :param task: a task from TaskManager. :returns: a dictionary containing: :boot_device: the boot device, one of :mod:`ironic.common.boot_devices` [PXE, DISK, CDROM] :persistent: Whether the boot device will persist to all future boots or not, None if it is unknown. :raises: OperationNotPermitted if no Server Profile is associated with the node :raises: InvalidParameterValue if the boot device is unknown :raises: OneViewError if the communication with OneView fails """ oneview_info = common.get_oneview_info(task.node) try: oneview_client = common.get_oneview_client() boot_order = oneview_client.get_boot_order(oneview_info) except oneview_exceptions.OneViewException as oneview_exc: msg = (_( "Error getting boot device from OneView. Error: %s") % oneview_exc ) LOG.error(msg) raise exception.OneViewError(msg) primary_device = boot_order[0] if primary_device not in BOOT_DEVICE_OV_TO_GENERIC: raise exception.InvalidParameterValue( _("Unsupported boot Device %(device)s for Node: %(node)s") % {"device": primary_device, "node": task.node.uuid} ) boot_device = { 'boot_device': BOOT_DEVICE_OV_TO_GENERIC.get(primary_device), 'persistent': True, } return boot_device
def setUp(self): super(OneViewAgentDeployTestCase, self).setUp() self.config(manager_url='https://1.2.3.4', group='oneview') self.config(username='******', group='oneview') self.config(password='******', group='oneview') mgr_utils.mock_the_extension_manager(driver='agent_pxe_oneview') self.driver = driver_factory.get_driver('agent_pxe_oneview') OV_DRV_INFO_DICT = db_utils.get_test_oneview_driver_info() OV_DRV_INFO_DICT.update(PXE_DRV_INFO_DICT) self.node = obj_utils.create_test_node( self.context, driver='agent_pxe_oneview', properties=db_utils.get_test_oneview_properties(), driver_info=OV_DRV_INFO_DICT, instance_info=PXE_INST_INFO_DICT, ) self.port = obj_utils.create_test_port(self.context, node_id=self.node.id) self.info = common.get_oneview_info(self.node)
def test_get_oneview_info_missing_spt(self): driver_info = db_utils.get_test_oneview_driver_info() properties = db_utils.get_test_oneview_properties() properties["capabilities"] = ("server_hardware_type_uri:fake_sht_uri," "enclosure_group_uri:fake_eg_uri") self.node.driver_info = driver_info self.node.properties = properties incomplete_node = self.node expected_node_info = { 'server_hardware_uri': 'fake_sh_uri', 'server_hardware_type_uri': 'fake_sht_uri', 'enclosure_group_uri': 'fake_eg_uri', 'server_profile_template_uri': None, 'applied_server_profile_uri': None, } self.assertEqual(expected_node_info, common.get_oneview_info(incomplete_node))
def test_deprecated_spt_in_driver_info_and_in_capabilites(self): # information in capabilities precedes driver_info driver_info = db_utils.get_test_oneview_driver_info() driver_info['server_profile_template_uri'] = 'unused_fake_spt_uri' self.node.driver_info = driver_info deprecated_node = self.node expected_node_info = { 'server_hardware_uri': 'fake_sh_uri', 'server_hardware_type_uri': 'fake_sht_uri', 'enclosure_group_uri': 'fake_eg_uri', 'server_profile_template_uri': 'fake_spt_uri', } self.assertEqual(expected_node_info, common.get_oneview_info(deprecated_node)) # must be valid common.verify_node_info(deprecated_node)
def setUp(self): super(OneViewAgentDeployTestCase, self).setUp() self.config(manager_url='https://1.2.3.4', group='oneview') self.config(username='******', group='oneview') self.config(password='******', group='oneview') mgr_utils.mock_the_extension_manager(driver='agent_pxe_oneview') self.driver = driver_factory.get_driver('agent_pxe_oneview') OV_DRV_INFO_DICT = db_utils.get_test_oneview_driver_info() OV_DRV_INFO_DICT.update(PXE_DRV_INFO_DICT) self.node = obj_utils.create_test_node( self.context, driver='agent_pxe_oneview', properties=db_utils.get_test_oneview_properties(), driver_info=OV_DRV_INFO_DICT, instance_info=PXE_INST_INFO_DICT, ) self.port = obj_utils.create_test_port(self.context, node_id=self.node.id) self.info = common.get_oneview_info(self.node)
def _check_applied_server_profile(node, predicate, positive, negative): """Check if node is in use by ironic in OneView. :param node: an ironic node object :returns: Boolean value. True if node is in use by ironic, False otherwise. :raises OneViewError: if not possible to get OneView's information for the given node, if not possible to retrieve Server Hardware from OneView. """ oneview_info = common.get_oneview_info(node) oneview_client = common.get_oneview_client() sh_uuid = oneview_utils.get_uuid_from_uri( oneview_info.get("server_hardware_uri") ) try: server_hardware = oneview_client.get_server_hardware_by_uuid( sh_uuid ) except oneview_exception.OneViewResourceNotFoundError as e: msg = (_("Error while obtaining Server Hardware from node " "%(node_uuid)s. Error: %(error)s") % {'node_uuid': node.uuid, 'error': e}) raise exception.OneViewError(error=msg) applied_sp_uri = ( node.driver_info.get('applied_server_profile_uri') ) result = predicate(server_hardware, applied_sp_uri) if result: LOG.debug(positive) else: LOG.debug(negative) return result
def _check_applied_server_profile(oneview_client, node, predicate, positive, negative): """Check if node is in use by ironic in OneView. :param oneview_client: an instance of the OneView client :param node: an ironic node object :returns: Boolean value. True if node is in use by ironic, False otherwise. :raises OneViewError: if not possible to get OneView's information for the given node, if not possible to retrieve Server Hardware from OneView. """ oneview_info = common.get_oneview_info(node) sh_uuid = oneview_utils.get_uuid_from_uri( oneview_info.get("server_hardware_uri") ) try: server_hardware = oneview_client.get_server_hardware_by_uuid( sh_uuid ) except oneview_exception.OneViewResourceNotFoundError as e: msg = (_("Error while obtaining Server Hardware from node " "%(node_uuid)s. Error: %(error)s") % {'node_uuid': node.uuid, 'error': e}) raise exception.OneViewError(error=msg) applied_sp_uri = ( node.driver_info.get('applied_server_profile_uri') ) result = predicate(server_hardware, applied_sp_uri) if result: LOG.debug(positive) else: LOG.debug(negative) return result
def deallocate_server_hardware_from_ironic(oneview_client, node): """Deallocate Server Hardware from ironic. :param oneview_client: an instance of the OneView client :param node: an ironic node object :raises OneViewError: if an error occurs while deallocating the Server Hardware to ironic """ if is_node_in_use_by_ironic(oneview_client, node): oneview_info = common.get_oneview_info(node) server_profile_uuid = oneview_utils.get_uuid_from_uri( oneview_info.get('applied_server_profile_uri')) try: oneview_client.power_off(oneview_info) oneview_client.delete_server_profile(server_profile_uuid) _del_applied_server_profile_uri_field(node) LOG.info( _LI("Server Profile %(server_profile_uuid)s was deleted " "from node %(node_uuid)s in OneView."), { 'server_profile_uuid': server_profile_uuid, 'node_uuid': node.uuid }) except (ValueError, oneview_exception.OneViewException) as e: msg = (_("Error while deleting applied Server Profile from node " "%(node_uuid)s. Error: %(error)s") % { 'node_uuid': node.uuid, 'error': e }) raise exception.OneViewError(error=msg) else: LOG.warning( _LW("Cannot deallocate node %(node_uuid)s " "in OneView because it is not in use by " "ironic."), {'node_uuid': node.uuid})
def set_power_state(self, task, power_state): """Turn the current power state on or off. :param task: a TaskManager instance. :param power_state: The desired power state POWER_ON, POWER_OFF or REBOOT from :mod:`ironic.common.states`. :raises: InvalidParameterValue if an invalid power state was specified. :raises: PowerStateFailure if the power couldn't be set to power_state. :raises: OneViewError if OneView fails setting the power state. """ if deploy_utils.is_node_in_use_by_oneview(self.oneview_client, task.node): raise exception.PowerStateFailure(_( "Cannot set power state '%(power_state)s' to node %(node)s. " "The node is in use by OneView.") % {'power_state': power_state, 'node': task.node.uuid}) oneview_info = common.get_oneview_info(task.node) LOG.debug('Setting power state of node %(node_uuid)s to ' '%(power_state)s', {'node_uuid': task.node.uuid, 'power_state': power_state}) try: if power_state == states.POWER_ON: self.oneview_client.power_on(oneview_info) elif power_state == states.POWER_OFF: self.oneview_client.power_off(oneview_info) elif power_state == states.REBOOT: self.oneview_client.power_off(oneview_info) self.oneview_client.power_on(oneview_info) else: raise exception.InvalidParameterValue( _("set_power_state called with invalid power state %s.") % power_state) except oneview_exceptions.OneViewException as exc: raise exception.OneViewError( _("Error setting power state: %s") % exc )
def set_power_state(self, task, power_state): """Turn the current power state on or off. :param task: a TaskManager instance. :param power_state: The desired power state POWER_ON, POWER_OFF or REBOOT from :mod:`ironic.common.states`. :raises: InvalidParameterValue if an invalid power state was specified. :raises: PowerStateFailure if the power couldn't be set to power_state. :raises: OneViewError if OneView fails setting the power state. """ if deploy_utils.is_node_in_use_by_oneview(self.oneview_client, task.node): raise exception.PowerStateFailure(_( "Cannot set power state '%(power_state)s' to node %(node)s. " "The node is in use by OneView.") % {'power_state': power_state, 'node': task.node.uuid}) oneview_info = common.get_oneview_info(task.node) LOG.debug('Setting power state of node %(node_uuid)s to ' '%(power_state)s', {'node_uuid': task.node.uuid, 'power_state': power_state}) try: if power_state == states.POWER_ON: self.oneview_client.power_on(oneview_info) elif power_state == states.POWER_OFF: self.oneview_client.power_off(oneview_info) elif power_state == states.REBOOT: self.oneview_client.power_off(oneview_info) self.oneview_client.power_on(oneview_info) else: raise exception.InvalidParameterValue( _("set_power_state called with invalid power state %s.") % power_state) except oneview_exceptions.OneViewException as exc: raise exception.OneViewError( _("Error setting power state: %s") % exc )
def test_deprecated_spt_in_driver_info_and_in_capabilites(self): # information in capabilities precedes driver_info driver_info = db_utils.get_test_oneview_driver_info() driver_info['server_profile_template_uri'] = 'unused_fake_spt_uri' self.node.driver_info = driver_info deprecated_node = self.node expected_node_info = { 'server_hardware_uri': 'fake_sh_uri', 'server_hardware_type_uri': 'fake_sht_uri', 'enclosure_group_uri': 'fake_eg_uri', 'server_profile_template_uri': 'fake_spt_uri', } self.assertEqual( expected_node_info, common.get_oneview_info(deprecated_node) ) # must be valid common.verify_node_info(deprecated_node)
def get_power_state(self, task): """Gets the current power state. :param task: a TaskManager instance. :param node: The Node. :returns: one of :mod:`ironic.common.states` POWER_OFF, POWER_ON or ERROR. :raises: OneViewError if fails to retrieve power state of OneView resource """ oneview_info = common.get_oneview_info(task.node) oneview_client = common.get_oneview_client() try: power_state = oneview_client.get_node_power_state(oneview_info) except oneview_exceptions.OneViewException as oneview_exc: LOG.error( _LE("Error getting power state for node %(node)s. Error:" "%(error)s"), {"node": task.node.uuid, "error": oneview_exc}, ) raise exception.OneViewError(error=oneview_exc) return common.translate_oneview_power_state(power_state)
def deallocate_server_hardware_from_ironic(task): """Deallocate Server Hardware from ironic. :param task: a TaskManager object :raises OneViewError: if an error occurs while deallocating the Server Hardware to ironic """ node = task.node oneview_client = common.get_hponeview_client() if is_node_in_use_by_ironic(node): oneview_info = common.get_oneview_info(node) server_profile_uri = oneview_info.get('applied_server_profile_uri') try: task.driver.power.set_power_state(task, states.POWER_OFF) oneview_client.server_profiles.delete(server_profile_uri) _del_applied_server_profile_uri_field(node) LOG.info( "Server Profile %(server_profile_uri)s was deleted " "from node %(node_uuid)s in OneView.", { 'server_profile_uri': server_profile_uri, 'node_uuid': node.uuid }) except client_exception.HPOneViewException as e: msg = (_("Error while deleting applied Server Profile from node " "%(node_uuid)s. Error: %(error)s") % { 'node_uuid': node.uuid, 'error': e }) raise exception.OneViewError(error=msg) else: LOG.warning( "Cannot deallocate node %(node_uuid)s " "in OneView because it is not in use by " "ironic.", {'node_uuid': node.uuid})
def get_power_state(self, task): """Gets the current power state. :param task: a TaskManager instance. :param node: The Node. :returns: one of :mod:`ironic.common.states` POWER_OFF, POWER_ON or ERROR. :raises: OneViewError if fails to retrieve power state of OneView resource """ oneview_info = common.get_oneview_info(task.node) oneview_client = common.get_oneview_client() try: power_state = oneview_client.get_node_power_state(oneview_info) except oneview_exceptions.OneViewException as oneview_exc: LOG.error( _LE("Error getting power state for node %(node)s. Error:" "%(error)s"), {'node': task.node.uuid, 'error': oneview_exc} ) raise exception.OneViewError(error=oneview_exc) return common.translate_oneview_power_state(power_state)
def set_boot_device(self, task, device, persistent=False): """Sets the boot device for a node. Sets the boot device to use on next reboot of the node. :param task: a task from TaskManager. :param device: the boot device, one of the supported devices listed in :mod:`ironic.common.boot_devices`. :param persistent: Boolean value. True if the boot device will persist to all future boots, False if not. Default: False. :raises: InvalidParameterValue if an invalid boot device is specified. :raises: OperationNotPermitted if the server has no server profile or if the server is already powered on. :raises: OneViewError if the communication with OneView fails """ oneview_info = common.get_oneview_info(task.node) if device not in self.get_supported_boot_devices(task): raise exception.InvalidParameterValue( _("Invalid boot device %s specified.") % device) LOG.debug("Setting boot device to %(device)s for node %(node)s", {"device": device, "node": task.node.uuid}) try: oneview_client = common.get_oneview_client() device_to_oneview = BOOT_DEVICE_MAPPING_TO_OV.get(device) oneview_client.set_boot_device(oneview_info, device_to_oneview) except oneview_exceptions.OneViewException as oneview_exc: msg = (_( "Error setting boot device on OneView. Error: %s") % oneview_exc ) LOG.error(msg) raise exception.OneViewError(error=msg)
def test_deprecated_spt_in_driver_info(self, log_mock): # the current model has server_profile_template_uri in # properties/capabilities instead of driver_info driver_info = db_utils.get_test_oneview_driver_info() driver_info['server_profile_template_uri'] = 'fake_spt_uri' properties = db_utils.get_test_oneview_properties() properties["capabilities"] = ("server_hardware_type_uri:fake_sht_uri," "enclosure_group_uri:fake_eg_uri") self.node.driver_info = driver_info self.node.properties = properties deprecated_node = self.node expected_node_info = { 'server_hardware_uri': 'fake_sh_uri', 'server_hardware_type_uri': 'fake_sht_uri', 'enclosure_group_uri': 'fake_eg_uri', 'server_profile_template_uri': 'fake_spt_uri', } self.assertEqual( expected_node_info, common.get_oneview_info(deprecated_node) ) # must be valid common.verify_node_info(deprecated_node) log_mock.warning.assert_called_once_with( "Using 'server_profile_template_uri' in driver_info is " "now deprecated and will be ignored in future releases. " "Node %s should have it in its properties/capabilities " "instead.", self.node.uuid )
def deallocate_server_hardware_from_ironic(oneview_client, node): """Deallocate Server Hardware from ironic. :param oneview_client: an instance of the OneView client :param node: an ironic node object :raises OneViewError: if an error occurs while deallocating the Server Hardware to ironic """ oneview_info = common.get_oneview_info(node) oneview_client.power_off(oneview_info) applied_sp_uuid = oneview_utils.get_uuid_from_uri( oneview_info.get('applied_server_profile_uri') ) try: oneview_client.delete_server_profile(applied_sp_uuid) _del_applied_server_profile_uri_field(node) LOG.info( _LI("Server Profile %(server_profile_uuid)s was successfully" " deleted from node %(node_uuid)s." ), {"node_uuid": node.uuid, "server_profile_uuid": applied_sp_uuid} ) except oneview_exception.OneViewException as e: msg = (_("Error while deleting applied Server Profile from node " "%(node_uuid)s. Error: %(error)s") % {'node_uuid': node.uuid, 'error': e}) raise exception.OneViewError( node=node.uuid, reason=msg )
def deallocate_server_hardware_from_ironic(node): """Deallocate Server Hardware from ironic. :param node: an ironic node object :raises OneViewError: if an error occurs while deallocating the Server Hardware to ironic """ oneview_info = common.get_oneview_info(node) oneview_client = common.get_oneview_client() oneview_client.power_off(oneview_info) applied_sp_uuid = oneview_utils.get_uuid_from_uri( oneview_info.get('applied_server_profile_uri') ) try: oneview_client.delete_server_profile(applied_sp_uuid) _del_applied_server_profile_uri_field(node) LOG.info( _LI("Server Profile %(server_profile_uuid)s was successfully" " deleted from node %(node_uuid)s." ), {"node_uuid": node.uuid, "server_profile_uuid": applied_sp_uuid} ) except oneview_exception.OneViewException as e: msg = (_("Error while deleting applied Server Profile from node " "%(node_uuid)s. Error: %(error)s") % {'node_uuid': node.uuid, 'error': e}) raise exception.OneViewError( node=node.uuid, reason=msg )
def setUp(self): super(OneViewManagementDriverFunctionsTestCase, self).setUp() self.config(manager_url='https://1.2.3.4', group='oneview') self.config(username='******', group='oneview') self.config(password='******', group='oneview') self.info = common.get_oneview_info(self.node)
def allocate_server_hardware_to_ironic(oneview_client, node, server_profile_name): """Allocate Server Hardware to ironic. :param oneview_client: an instance of the OneView client :param node: an ironic node object :param server_profile_name: a formatted string with the Server Profile name :raises OneViewError: if an error occurs while allocating the Server Hardware to ironic """ node_in_use_by_oneview = is_node_in_use_by_oneview(oneview_client, node) if not node_in_use_by_oneview: oneview_info = common.get_oneview_info(node) applied_sp_uri = node.driver_info.get('applied_server_profile_uri') sh_uuid = oneview_utils.get_uuid_from_uri( oneview_info.get("server_hardware_uri") ) spt_uuid = oneview_utils.get_uuid_from_uri( oneview_info.get("server_profile_template_uri") ) server_hardware = oneview_client.get_server_hardware_by_uuid(sh_uuid) # Don't have Server Profile on OneView but has # `applied_server_profile_uri` on driver_info if (server_hardware.server_profile_uri in (None, '') and applied_sp_uri is not (None, '')): _del_applied_server_profile_uri_field(node) LOG.info(_LI( "Inconsistent 'applied_server_profile_uri' parameter " "value in driver_info. There is no Server Profile " "applied to node %(node_uuid)s. Value deleted."), {"node_uuid": node.uuid} ) # applied_server_profile_uri exists and is equal to Server profile # applied on Hardware. Do not apply again. if (applied_sp_uri and server_hardware.server_profile_uri and server_hardware.server_profile_uri == applied_sp_uri): LOG.info(_LI( "The Server Profile %(applied_sp_uri)s was already applied " "by ironic on node %(node_uuid)s. Reusing."), {"node_uuid": node.uuid, "applied_sp_uri": applied_sp_uri} ) return try: applied_profile = oneview_client.clone_template_and_apply( server_profile_name, sh_uuid, spt_uuid ) _add_applied_server_profile_uri_field(node, applied_profile) LOG.info( _LI("Server Profile %(server_profile_uuid)s was successfully" " applied to node %(node_uuid)s."), {"node_uuid": node.uuid, "server_profile_uuid": applied_profile.uri} ) except oneview_exception.OneViewServerProfileAssignmentError as e: LOG.error(_LE("An error occurred during allocating server " "hardware to ironic during prepare: %s"), e) raise exception.OneViewError(error=e) else: msg = (_("Node %s is already in use by OneView.") % node.uuid) raise exception.OneViewError(error=msg)
def allocate_server_hardware_to_ironic(oneview_client, node, server_profile_name): """Allocate Server Hardware to ironic. :param oneview_client: an instance of the OneView client :param node: an ironic node object :param server_profile_name: a formatted string with the Server Profile name :raises OneViewError: if an error occurs while allocating the Server Hardware to ironic """ node_in_use_by_oneview = is_node_in_use_by_oneview(oneview_client, node) if not node_in_use_by_oneview: oneview_info = common.get_oneview_info(node) applied_sp_uri = node.driver_info.get('applied_server_profile_uri') sh_uuid = oneview_utils.get_uuid_from_uri( oneview_info.get("server_hardware_uri")) spt_uuid = oneview_utils.get_uuid_from_uri( oneview_info.get("server_profile_template_uri")) server_hardware = oneview_client.get_server_hardware_by_uuid(sh_uuid) # Don't have Server Profile on OneView but has # `applied_server_profile_uri` on driver_info if (server_hardware.server_profile_uri in (None, '') and applied_sp_uri is not (None, '')): _del_applied_server_profile_uri_field(node) LOG.info( "Inconsistent 'applied_server_profile_uri' parameter " "value in driver_info. There is no Server Profile " "applied to node %(node_uuid)s. Value deleted.", {"node_uuid": node.uuid}) # applied_server_profile_uri exists and is equal to Server profile # applied on Hardware. Do not apply again. if (applied_sp_uri and server_hardware.server_profile_uri and server_hardware.server_profile_uri == applied_sp_uri): LOG.info( "The Server Profile %(applied_sp_uri)s was already applied " "by ironic on node %(node_uuid)s. Reusing.", { "node_uuid": node.uuid, "applied_sp_uri": applied_sp_uri }) return try: applied_profile = oneview_client.clone_template_and_apply( server_profile_name, sh_uuid, spt_uuid) _add_applied_server_profile_uri_field(node, applied_profile) LOG.info( "Server Profile %(server_profile_uuid)s was successfully" " applied to node %(node_uuid)s.", { "node_uuid": node.uuid, "server_profile_uuid": applied_profile.uri }) except oneview_exception.OneViewServerProfileAssignmentError as e: LOG.error( "An error occurred during allocating server " "hardware to ironic during prepare: %s", e) raise exception.OneViewError(error=e) else: msg = (_("Node %s is already in use by OneView.") % node.uuid) raise exception.OneViewError(error=msg)
def allocate_server_hardware_to_ironic(node, server_profile_name): """Allocate Server Hardware to ironic. :param node: an ironic node object. :param server_profile_name: a formatted string with the Server Profile name. :raises OneViewError: if an error occurs while allocating the Server Hardware to ironic or the node is already in use by OneView. """ oneview_client = common.get_hponeview_client() node_in_use_by_oneview = is_node_in_use_by_oneview(node) if not node_in_use_by_oneview: oneview_info = common.get_oneview_info(node) applied_sp_uri = node.driver_info.get('applied_server_profile_uri') sh_uri = oneview_info.get("server_hardware_uri") spt_uri = oneview_info.get("server_profile_template_uri") server_hardware = oneview_client.server_hardware.get(sh_uri) if not server_hardware: msg = _("An error occurred during allocating server hardware to " "ironic. Server hardware: %s not found.") % sh_uri raise exception.OneViewError(error=msg) # Don't have Server Profile on OneView but has # `applied_server_profile_uri` on driver_info if not server_hardware.get('serverProfileUri') and applied_sp_uri: _del_applied_server_profile_uri_field(node) LOG.info( "Inconsistent 'applied_server_profile_uri' parameter " "value in driver_info. There is no Server Profile " "applied to node %(node_uuid)s. Value deleted.", {"node_uuid": node.uuid}) # applied_server_profile_uri exists and is equal to Server profile # applied on Hardware. Do not apply again. if (applied_sp_uri and server_hardware.get('serverProfileUri') == applied_sp_uri): LOG.info( "The Server Profile %(applied_sp_uri)s was already applied " "by ironic on node %(node_uuid)s. Reusing.", { "node_uuid": node.uuid, "applied_sp_uri": applied_sp_uri }) return try: applied_profile = _create_profile_from_template( oneview_client, server_profile_name, sh_uri, spt_uri) _add_applied_server_profile_uri_field(node, applied_profile) LOG.info( "Server Profile %(server_profile_uuid)s was successfully" " applied to node %(node_uuid)s.", { "node_uuid": node.uuid, "server_profile_uuid": applied_profile.get('uri') }) except client_exception.HPOneViewInvalidResource as e: LOG.error( "An error occurred during allocating server " "hardware to ironic during prepare: %s", e) raise exception.OneViewError(error=e) else: msg = _("Node %s is already in use by OneView.") % node.uuid raise exception.OneViewError(error=msg)