Beispiel #1
0
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)
Beispiel #2
0
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)
Beispiel #3
0
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())
Beispiel #4
0
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
    )
Beispiel #5
0
 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
Beispiel #6
0
 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))
Beispiel #7
0
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)