def power_change_success(system_id, hostname, power_change): """Report about a successful node power state change. This updates the region's record of the node's power state, logs to the MAAS log, and appends to the node's event log. :param system_id: The system ID for the node. :param hostname: The node's hostname, used in messages. :param power_change: "on" or "off". """ assert power_change in ["on", "off"], ("Unknown power change: %s" % power_change) yield power_state_update(system_id, power_change) maaslog.info( "Changed power state (%s) of node: %s (%s)", power_change, hostname, system_id, ) # Emit success event. if power_change == "on": event_type = EVENT_TYPES.NODE_POWERED_ON elif power_change == "off": event_type = EVENT_TYPES.NODE_POWERED_OFF yield send_node_event(event_type, system_id, hostname)
def power_change_starting(system_id, hostname, power_change): """Report about a node power state change starting. This logs to the MAAS log, and appends to the node's event log. :param system_id: The system ID for the node. :param hostname: The node's hostname, used in messages. :param power_change: "on", "off", or "cycle". """ assert power_change in ["on", "off", "cycle" ], ("Unknown power change: %s" % power_change) maaslog.info( "Changing power state (%s) of node: %s (%s)", power_change, hostname, system_id, ) # Emit starting event. if power_change == "on": event_type = EVENT_TYPES.NODE_POWER_ON_STARTING elif power_change == "off": event_type = EVENT_TYPES.NODE_POWER_OFF_STARTING elif power_change == "cycle": event_type = EVENT_TYPES.NODE_POWER_CYCLE_STARTING yield send_node_event(event_type, system_id, hostname)
def power_query_failure(system_id, hostname, failure): """Report a node that for which power querying has failed.""" maaslog.error("%s: Power state could not be queried: %s" % (hostname, failure.getErrorMessage())) yield power_state_update(system_id, 'error') yield send_node_event(EVENT_TYPES.NODE_POWER_QUERY_FAILED, system_id, hostname, failure.getErrorMessage())
def power_query_success(system_id, hostname, state): """Report a node that for which power querying has succeeded.""" message = "Power state queried: %s" % state yield power_state_update(system_id, state) yield send_node_event( EVENT_TYPES.NODE_POWER_QUERIED_DEBUG, system_id, hostname, message )
def power_query(self, system_id, context): try: return self._issue_ipmi_command("query", **context) except PowerAuthError as e: if (context.get("k_g") and str(e) == IPMI_ERRORS["k_g invalid"]["message"]): send_node_event( EVENT_TYPES.NODE_POWER_QUERY_FAILED, system_id, None, "Incorrect K_g key, trying again without K_g key", ) context.pop("k_g") return self._issue_ipmi_command("query", **context) else: raise e
def test__calls_singleton_hub_logByID_directly(self): self.patch(nodeEventHub, "logByID").return_value = sentinel.d result = send_node_event( sentinel.event_type, sentinel.system_id, sentinel.hostname, sentinel.description) self.assertThat(result, Is(sentinel.d)) self.assertThat(nodeEventHub.logByID, MockCalledOnceWith( sentinel.event_type, sentinel.system_id, sentinel.description))
def power_change_failure(system_id, hostname, power_change, message): """Report a node that for which power control has failed.""" assert power_change in ['on', 'off', 'cycle' ], ("Unknown power change: %s" % power_change) maaslog.error("Error changing power state (%s) of node: %s (%s)", power_change, hostname, system_id) client = getRegionClient() yield client( MarkNodeFailed, system_id=system_id, error_description=message, ) if power_change == 'on': event_type = EVENT_TYPES.NODE_POWER_ON_FAILED elif power_change == 'off': event_type = EVENT_TYPES.NODE_POWER_OFF_FAILED elif power_change == 'cycle': event_type = EVENT_TYPES.NODE_POWER_CYCLE_FAILED yield send_node_event(event_type, system_id, hostname, message)