mirror of
https://github.com/xcat2/xcat-core.git
synced 2025-05-29 17:23:08 +00:00
modified depending on comments
This commit is contained in:
parent
b552a68977
commit
a97149756b
@ -41,7 +41,9 @@ $::BEACON_STATE_ON = "on";
|
||||
# String constants for rpower states
|
||||
$::POWER_STATE_OFF = "off";
|
||||
$::POWER_STATE_ON = "on";
|
||||
$::POWER_STATE_ON_HOSTOFF = "on (Chassis)";
|
||||
$::POWER_STATE_POWERING_OFF = "powering-off";
|
||||
$::POWER_STATE_POWERING_ON = "powering-on";
|
||||
$::POWER_STATE_QUIESCED = "quiesced";
|
||||
$::POWER_STATE_RESET = "reset";
|
||||
$::POWER_STATE_REBOOT = "reboot";
|
||||
@ -418,6 +420,15 @@ sub preprocess_request {
|
||||
} else {
|
||||
$::OPENBMC_FW = $request->{environment}->{XCAT_OPENBMC_FIRMWARE};
|
||||
}
|
||||
|
||||
# Provide a way to turn on and off transition state processing, default to off
|
||||
if (ref($request->{environment}) eq 'ARRAY' and ref($request->{environment}->[0]->{XCAT_OPENBMC_POWER_TRANSITION}) eq 'ARRAY') {
|
||||
$::OPENBMC_PWR = $request->{environment}->[0]->{XCAT_OPENBMC_POWER_TRANSITION}->[0];
|
||||
} elsif (ref($request->{environment}) eq 'ARRAY') {
|
||||
$::OPENBMC_PWR = $request->{environment}->[0]->{XCAT_OPENBMC_POWER_TRANSITION};
|
||||
} else {
|
||||
$::OPENBMC_PWR = $request->{environment}->{XCAT_OPENBMC_POWER_TRANSITION};
|
||||
}
|
||||
##############################################
|
||||
|
||||
$callback = shift;
|
||||
@ -1416,6 +1427,7 @@ sub rpower_response {
|
||||
my $node = shift;
|
||||
my $response = shift;
|
||||
my %new_status = ();
|
||||
my $max_retry_times = 5;
|
||||
|
||||
my $response_info = decode_json $response->content;
|
||||
|
||||
@ -1425,7 +1437,11 @@ sub rpower_response {
|
||||
if ($status_info{RPOWER_ON_RESPONSE}{argv}) {
|
||||
xCAT::SvrUtils::sendmsg("$::POWER_STATE_RESET", $callback, $node);
|
||||
} else {
|
||||
xCAT::SvrUtils::sendmsg("$::POWER_STATE_ON", $callback, $node);
|
||||
if (defined($::OPENBMC_PWR) and ($::OPENBMC_PWR eq "YES")) {
|
||||
xCAT::SvrUtils::sendmsg("$::STATUS_POWERING_ON", $callback, $node);
|
||||
} else {
|
||||
xCAT::SvrUtils::sendmsg("$::POWER_STATE_ON", $callback, $node);
|
||||
}
|
||||
}
|
||||
$new_status{$::STATUS_POWERING_ON} = [$node];
|
||||
}
|
||||
@ -1476,30 +1492,44 @@ sub rpower_response {
|
||||
}
|
||||
}
|
||||
|
||||
# Print this debug only if testing transition states
|
||||
print "$node: DEBUG State CurrentBMCState=$bmc_state\n";
|
||||
print "$node: DEBUG State RequestedBMCTransition=$bmc_transition_state\n";
|
||||
print "$node: DEBUG State CurrentPowerState=$chassis_state\n";
|
||||
print "$node: DEBUG State RequestedPowerTransition=$chassis_transition_state\n";
|
||||
print "$node: DEBUG State CurrentHostState=$host_state\n";
|
||||
print "$node: DEBUG State RequestedHostTransition=$host_transition_state\n";
|
||||
if (defined($::OPENBMC_PWR) and ($::OPENBMC_PWR eq "YES")) {
|
||||
# Print this debug only if testing transition states
|
||||
print "$node: DEBUG State CurrentBMCState=$bmc_state\n";
|
||||
print "$node: DEBUG State RequestedBMCTransition=$bmc_transition_state\n";
|
||||
print "$node: DEBUG State CurrentPowerState=$chassis_state\n";
|
||||
print "$node: DEBUG State RequestedPowerTransition=$chassis_transition_state\n";
|
||||
print "$node: DEBUG State CurrentHostState=$host_state\n";
|
||||
print "$node: DEBUG State RequestedHostTransition=$host_transition_state\n";
|
||||
}
|
||||
|
||||
if (defined $status_info{RPOWER_STATUS_RESPONSE}{argv} and $status_info{RPOWER_STATUS_RESPONSE}{argv} =~ /bmcstate$/) {
|
||||
my $bmc_short_state = (split(/\./, $bmc_state))[-1];
|
||||
xCAT::SvrUtils::sendmsg("BMC $bmc_short_state", $callback, $node);
|
||||
} else {
|
||||
if ($chassis_state =~ /Off$/) {
|
||||
xCAT::SvrUtils::sendmsg("$::POWER_STATE_OFF", $callback, $node) if (!$next_status{ $node_info{$node}{cur_status} });
|
||||
# Chassis state is Off, but check if we can detect transition states
|
||||
if ((defined($::OPENBMC_PWR) and ($::OPENBMC_PWR eq "YES")) and
|
||||
$host_state =~ /Off$/ and $host_transition_state =~ /On$/) {
|
||||
xCAT::SvrUtils::sendmsg("$::POWER_STATE_POWERING_ON", $callback, $node);
|
||||
} else {
|
||||
xCAT::SvrUtils::sendmsg("$::POWER_STATE_OFF", $callback, $node) if (!$next_status{ $node_info{$node}{cur_status} });
|
||||
}
|
||||
$all_status = $::POWER_STATE_OFF;
|
||||
} elsif ($chassis_state =~ /On$/) {
|
||||
if ($host_state =~ /Off$/) {
|
||||
xCAT::SvrUtils::sendmsg("$::POWER_STATE_OFF", $callback, $node) if (!$next_status{ $node_info{$node}{cur_status} });
|
||||
# This is a debug scenario where the chassis is powered on but hostboot is not
|
||||
xCAT::SvrUtils::sendmsg("$::POWER_STATE_ON_HOSTOFF", $callback, $node) if (!$next_status{ $node_info{$node}{cur_status} });
|
||||
$all_status = $::POWER_STATE_OFF;
|
||||
} elsif ($host_state =~ /Quiesced$/) {
|
||||
xCAT::SvrUtils::sendmsg("$::POWER_STATE_QUIESCED", $callback, $node) if (!$next_status{ $node_info{$node}{cur_status} });
|
||||
$all_status = $::POWER_STATE_ON;
|
||||
} elsif ($host_state =~ /Running$/) {
|
||||
xCAT::SvrUtils::sendmsg("$::POWER_STATE_ON", $callback, $node) if (!$next_status{ $node_info{$node}{cur_status} });
|
||||
if ((defined($::OPENBMC_PWR) and ($::OPENBMC_PWR eq "YES")) and
|
||||
$host_transition_state =~ /Off$/ and $chassis_state =~ /On$/) {
|
||||
xCAT::SvrUtils::sendmsg("$::POWER_STATE_POWERING_OFF", $callback, $node);
|
||||
} else {
|
||||
xCAT::SvrUtils::sendmsg("$::POWER_STATE_ON", $callback, $node) if (!$next_status{ $node_info{$node}{cur_status} });
|
||||
}
|
||||
$all_status = $::POWER_STATE_ON;
|
||||
} else {
|
||||
xCAT::SvrUtils::sendmsg("Unexpected host state=$host_state", $callback, $node) if (!$next_status{ $node_info{$node}{cur_status} });
|
||||
@ -1519,7 +1549,7 @@ sub rpower_response {
|
||||
} else {
|
||||
$node_info{$node}{cur_status} = $next_status{ $node_info{$node}{cur_status} }{ON};
|
||||
$node_info{$node}{retry_times}++;
|
||||
if ($node_info{$node}{retry_times} >= 5) {
|
||||
if ($node_info{$node}{retry_times} >= $max_retry_times) {
|
||||
xCAT::SvrUtils::sendmsg("Internal Error, failed to rpower off, please try again", $callback, $node);
|
||||
$node_info{$node}{cur_status} = "";
|
||||
$wait_node_num--;
|
||||
|
Loading…
x
Reference in New Issue
Block a user