def _power_status(node): """Get the power status for a node. :param node: a node object. :returns: one of ironic.common.states POWER_OFF, POWER_ON or ERROR. :raises: AMTFailure. :raises: AMTConnectFailure. """ amt_common.awake_amt_interface(node) client = amt_common.get_wsman_client(node) namespace = resource_uris.CIM_AssociatedPowerManagementService try: doc = client.wsman_get(namespace) except (exception.AMTFailure, exception.AMTConnectFailure) as e: with excutils.save_and_reraise_exception(): LOG.exception(_LE("Failed to get power state for node %(node_id)s " "with error: %(error)s."), {'node_id': node.uuid, 'error': e}) item = "PowerState" power_state = amt_common.xml_find(doc, namespace, item).text for state in AMT_POWER_MAP: if power_state == AMT_POWER_MAP[state]: return state return states.ERROR
def _set_boot_device_order(node, boot_device): """Set boot device order configuration of AMT Client. :param node: a node object :param boot_device: the boot device :raises: AMTFailure :raises: AMTConnectFailure """ amt_common.awake_amt_interface(node) client = amt_common.get_wsman_client(node) device = amt_common.BOOT_DEVICES_MAPPING[boot_device] doc = _generate_change_boot_order_input(device) method = 'ChangeBootOrder' options = pywsman.ClientOptions() options.add_selector('InstanceID', 'Intel(r) AMT: Boot Configuration 0') try: client.wsman_invoke(options, resource_uris.CIM_BootConfigSetting, method, doc) except (exception.AMTFailure, exception.AMTConnectFailure) as e: with excutils.save_and_reraise_exception(): LOG.exception(_LE("Failed to set boot device %(boot_device)s for " "node %(node_id)s with error: %(error)s."), {'boot_device': boot_device, 'node_id': node.uuid, 'error': e}) else: LOG.info(_LI("Successfully set boot device %(boot_device)s for " "node %(node_id)s"), {'boot_device': boot_device, 'node_id': node.uuid})
def _set_power_state(node, target_state): """Set power state of the AMT Client. :param node: a node object. :param target_state: desired power state. :raises: AMTFailure :raises: AMTConnectFailure """ amt_common.awake_amt_interface(node) client = amt_common.get_wsman_client(node) method = 'RequestPowerStateChange' options = pywsman.ClientOptions() options.add_selector('Name', 'Intel(r) AMT Power Management Service') doc = _generate_power_action_input(AMT_POWER_MAP[target_state]) try: client.wsman_invoke(options, resource_uris.CIM_PowerManagementService, method, doc) except (exception.AMTFailure, exception.AMTConnectFailure) as e: with excutils.save_and_reraise_exception(): LOG.exception(_LE("Failed to set power state %(state)s for " "node %(node_id)s with error: %(error)s."), {'state': target_state, 'node_id': node.uuid, 'error': e}) else: LOG.info(_LI("Power state set to %(state)s for node %(node_id)s"), {'state': target_state, 'node_id': node.uuid})
def _power_status(node): """Get the power status for a node. :param node: a node object. :returns: one of ironic.common.states POWER_OFF, POWER_ON or ERROR. :raises: AMTFailure. :raises: AMTConnectFailure. """ amt_common.awake_amt_interface(node) client = amt_common.get_wsman_client(node) namespace = resource_uris.CIM_AssociatedPowerManagementService try: doc = client.wsman_get(namespace) except (exception.AMTFailure, exception.AMTConnectFailure) as e: with excutils.save_and_reraise_exception(): LOG.exception( _LE("Failed to get power state for node %(node_id)s " "with error: %(error)s."), { 'node_id': node.uuid, 'error': e }) item = "PowerState" power_state = amt_common.xml_find(doc, namespace, item).text for state in AMT_POWER_MAP: if power_state == AMT_POWER_MAP[state]: return state return states.ERROR
def _set_power_state(node, target_state): """Set power state of the AMT Client. :param node: a node object. :param target_state: desired power state. :raises: AMTFailure :raises: AMTConnectFailure """ amt_common.awake_amt_interface(node) client = amt_common.get_wsman_client(node) method = 'RequestPowerStateChange' options = pywsman.ClientOptions() options.add_selector('Name', 'Intel(r) AMT Power Management Service') doc = _generate_power_action_input(AMT_POWER_MAP[target_state]) try: client.wsman_invoke(options, resource_uris.CIM_PowerManagementService, method, doc) except (exception.AMTFailure, exception.AMTConnectFailure) as e: with excutils.save_and_reraise_exception(): LOG.exception( _LE("Failed to set power state %(state)s for " "node %(node_id)s with error: %(error)s."), { 'state': target_state, 'node_id': node.uuid, 'error': e }) else: LOG.info(_LI("Power state set to %(state)s for node %(node_id)s"), { 'state': target_state, 'node_id': node.uuid })
def _enable_boot_config(node): """Enable boot configuration of AMT Client. :param node: a node object :raises: AMTFailure :raises: AMTConnectFailure """ amt_common.awake_amt_interface(node) client = amt_common.get_wsman_client(node) method = 'SetBootConfigRole' doc = _generate_enable_boot_config_input() options = pywsman.ClientOptions() options.add_selector('Name', 'Intel(r) AMT Boot Service') try: client.wsman_invoke(options, resource_uris.CIM_BootService, method, doc) except (exception.AMTFailure, exception.AMTConnectFailure) as e: with excutils.save_and_reraise_exception(): LOG.exception( _LE("Failed to enable boot config for node " "%(node_id)s with error: %(error)s."), { 'node_id': node.uuid, 'error': e }) else: LOG.info(_LI("Successfully enabled boot config for node %(node_id)s."), {'node_id': node.uuid})
def _enable_boot_config(node): """Enable boot configuration of AMT Client. :param node: a node object :raises: AMTFailure :raises: AMTConnectFailure """ amt_common.awake_amt_interface(node) client = amt_common.get_wsman_client(node) method = 'SetBootConfigRole' doc = _generate_enable_boot_config_input() options = pywsman.ClientOptions() options.add_selector('Name', 'Intel(r) AMT Boot Service') try: client.wsman_invoke(options, resource_uris.CIM_BootService, method, doc) except (exception.AMTFailure, exception.AMTConnectFailure) as e: with excutils.save_and_reraise_exception(): LOG.exception(_LE("Failed to enable boot config for node " "%(node_id)s with error: %(error)s."), {'node_id': node.uuid, 'error': e}) else: LOG.info(_LI("Successfully enabled boot config for node %(node_id)s."), {'node_id': node.uuid})
def test_awake_amt_interface_disable(self, mock_ex): CONF.set_override('awake_interval', 0, 'amt') amt_common.awake_amt_interface(self.node) self.assertFalse(mock_ex.called)
def test_awake_amt_interface_in_cache_time(self, mock_ex): amt_common.AMT_AWAKE_CACHE[self.node.uuid] = time.time() amt_common.awake_amt_interface(self.node) self.assertFalse(mock_ex.called)
def test_awake_amt_interface(self, mock_ex): amt_common.awake_amt_interface(self.node) expected_args = ['ping', '-i', 0.2, '-c', 5, '1.2.3.4'] mock_ex.assert_called_once_with(*expected_args)