diff --git a/xCAT-server/lib/xcat/plugins/openbmc.pm b/xCAT-server/lib/xcat/plugins/openbmc.pm index 0a5c12690..aec38ee58 100644 --- a/xCAT-server/lib/xcat/plugins/openbmc.pm +++ b/xCAT-server/lib/xcat/plugins/openbmc.pm @@ -72,6 +72,7 @@ $::RPOWER_CHECK_INTERVAL = 2; $::RPOWER_CHECK_ON_INTERVAL = 12; $::RPOWER_ON_MAX_RETRY = 5; $::RPOWER_MAX_RETRY = 30; +$::RPOWER_CHECK_ON_TIME = 1; $::BMC_MAX_RETRY = 20; $::BMC_CHECK_INTERVAL = 15; @@ -2410,6 +2411,11 @@ sub deal_with_response { delete $handle_id_node{$handle_id}; + if ($::UPLOAD_ACTIVATE_STREAM) { + my $rflash_log_file = xCAT::Utils->full_path($node.".log", $::XCAT_LOG_RFLASH_DIR); + open (RFLASH_LOG_FILE_HANDLE, ">> $rflash_log_file"); + } + if ($xcatdebugmode) { my $debug_info = lc ($node_info{$node}{cur_status}) . " " . $response->status_line; process_debug_info($node, $debug_info); @@ -2448,6 +2454,8 @@ sub deal_with_response { my $infomsg = "BMC $::POWER_STATE_REBOOT"; xCAT::SvrUtils::sendmsg($infomsg, $callback, $node); if ($::UPLOAD_ACTIVATE_STREAM) { + print RFLASH_LOG_FILE_HANDLE "BMC $::POWER_STATE_REBOOT\n"; + close (RFLASH_LOG_FILE_HANDLE); retry_after($node, "RPOWER_BMC_CHECK_REQUEST", 15); return; }else{ @@ -2629,8 +2637,10 @@ sub rpower_response { my %new_status = (); my $response_info = decode_json $response->content; - - + if ($::UPLOAD_ACTIVATE_STREAM) { + my $rflash_log_file = xCAT::Utils->full_path($node.".log", $::XCAT_LOG_RFLASH_DIR); + open (RFLASH_LOG_FILE_HANDLE, ">> $rflash_log_file"); + } if ($node_info{$node}{cur_status} eq "RPOWER_ON_RESPONSE") { if ($response_info->{'message'} eq $::RESPONSE_OK) { if ($status_info{RPOWER_ON_RESPONSE}{argv}) { @@ -2639,6 +2649,9 @@ sub rpower_response { } else { $node_info{$node}{power_state_rest} = 1; xCAT::SvrUtils::sendmsg("$::POWER_STATE_RESET", $callback, $node); + if ($::UPLOAD_ACTIVATE_STREAM) { + print RFLASH_LOG_FILE_HANDLE "Power on host in reset : RPOWER_ON_RESPONSE $::POWER_STATE_RESET\n"; + } } } else { if (defined($::OPENBMC_PWR) and ($::OPENBMC_PWR eq "YES")) { @@ -2657,6 +2670,12 @@ sub rpower_response { if ($node_info{$node}{cur_status} eq "RPOWER_SOFTOFF_RESPONSE") { $power_state = "$::POWER_STATE_POWERING_OFF"; } + if ($::UPLOAD_ACTIVATE_STREAM) { + print RFLASH_LOG_FILE_HANDLE "Power reset host ...\n"; + print RFLASH_LOG_FILE_HANDLE "Power off host in reset: RPOWER_OFF_RESPONSE power_state $power_state\n"; + print RFLASH_LOG_FILE_HANDLE "Wait for 13 seconds ...\n"; + sleep(13); + } xCAT::SvrUtils::sendmsg("$power_state", $callback, $node) if (!$next_status{ $node_info{$node}{cur_status} }); $new_status{$::STATUS_POWERING_OFF} = [$node]; } @@ -2667,6 +2686,7 @@ sub rpower_response { if (defined $status_info{RPOWER_RESET_RESPONSE}{argv} and $status_info{RPOWER_RESET_RESPONSE}{argv} =~ /bmcreboot$/) { xCAT::SvrUtils::sendmsg("BMC $::POWER_STATE_REBOOT", $callback, $node); if ($::UPLOAD_ACTIVATE_STREAM) { + print RFLASH_LOG_FILE_HANDLE "BMC $::POWER_STATE_REBOOT\n"; retry_after($node, "RPOWER_BMC_CHECK_REQUEST", 15); return; } @@ -2680,6 +2700,11 @@ sub rpower_response { my $all_status; #get host $all_status for RPOWER_CHECK_ON_RESPONSE if ($node_info{$node}{cur_status} eq "RPOWER_STATUS_RESPONSE" or $node_info{$node}{cur_status} eq "RPOWER_CHECK_RESPONSE" or $node_info{$node}{cur_status} eq "RPOWER_BMC_STATUS_RESPONSE" or $node_info{$node}{cur_status} eq "RPOWER_CHECK_ON_RESPONSE") { + if ($::UPLOAD_ACTIVATE_STREAM and $node_info{$node}{cur_status} eq "RPOWER_CHECK_ON_RESPONSE" and $::RPOWER_CHECK_ON_TIME == 1 ) { + print RFLASH_LOG_FILE_HANDLE "After power on in reset, wait for 13 seconds ...\n"; + sleep(13); + $::RPOWER_CHECK_ON_TIME = 0; + } my $bmc_state = ""; my $bmc_transition_state = ""; my $chassis_state = ""; @@ -2710,6 +2735,15 @@ sub rpower_response { print "$node: DEBUG State CurrentHostState=$host_state\n"; print "$node: DEBUG State RequestedHostTransition=$host_transition_state\n"; } + if ($::UPLOAD_ACTIVATE_STREAM and $node_info{$node}{cur_status} eq "RPOWER_CHECK_RESPONSE") { + print RFLASH_LOG_FILE_HANDLE "check power state: RPOWER_CHECK_RESPONSE\n"; + print RFLASH_LOG_FILE_HANDLE "DEBUG State CurrentBMCState=$bmc_state\n"; + print RFLASH_LOG_FILE_HANDLE "DEBUG State RequestedBMCTransition=$bmc_transition_state\n"; + print RFLASH_LOG_FILE_HANDLE "DEBUG State CurrentPowerState=$chassis_state\n"; + print RFLASH_LOG_FILE_HANDLE "DEBUG State RequestedPowerTransition=$chassis_transition_state\n"; + print RFLASH_LOG_FILE_HANDLE "DEBUG State CurrentHostState=$host_state\n"; + print RFLASH_LOG_FILE_HANDLE "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); @@ -2734,6 +2768,9 @@ sub rpower_response { } } xCAT::SvrUtils::sendmsg("BMC $bmc_short_state", $callback, $node); + if ($::UPLOAD_ACTIVATE_STREAM) { + print RFLASH_LOG_FILE_HANDLE "BMC $bmc_short_state\n"; + } } else { if ($chassis_state =~ /Off$/) { @@ -2789,6 +2826,9 @@ sub rpower_response { if ($next_status{ $node_info{$node}{cur_status} }) { if ($node_info{$node}{cur_status} eq "RPOWER_CHECK_RESPONSE") { + if ($::UPLOAD_ACTIVATE_STREAM) { + print RFLASH_LOG_FILE_HANDLE "RPOWER_CHECK_RESPONSE,all_status $all_status\n"; + } if ($all_status eq "$::POWER_STATE_OFF") { $node_info{$node}{cur_status} = $next_status{ $node_info{$node}{cur_status} }{OFF}; } else { @@ -2823,6 +2863,7 @@ sub rpower_response { #in order to make sure host is reboot successfully #if rpower reset host and host state is always off, retry to set RPOWER_CHECK_ON_REQUEST to run rpower on the host #1. if host power state is on, do nothing, and return + print RFLASH_LOG_FILE_HANDLE "Check power state in RPOWER_CHECK_ON_RESPONSE:all_status $all_status.\n"; if ($all_status eq "$::POWER_STATE_ON") { $node_info{$node}{cur_status} = ""; $wait_node_num--; @@ -2837,6 +2878,7 @@ sub rpower_response { $node_info{$node}{wait_on_start} = time(); } #retry to set RPOWER_CHECK_ON_REQUEST after wait for $::RPOWER_CHECK_ON_INTERVAL + print RFLASH_LOG_FILE_HANDLE "retry to set RPOWER_CHECK_ON_REQUEST after wait for $::RPOWER_CHECK_ON_INTERVAL\n"; retry_after($node, $next_status{ $node_info{$node}{cur_status} }{OFF}, $::RPOWER_CHECK_ON_INTERVAL); return; } else { @@ -2855,7 +2897,9 @@ sub rpower_response { } else { $wait_node_num--; } - + if ($::UPLOAD_ACTIVATE_STREAM) { + close (RFLASH_LOG_FILE_HANDLE); + } return; } @@ -4577,7 +4621,6 @@ sub rflash_response { xCAT::SvrUtils::sendmsg("$activating_progress_msg", $callback, $node); } print RFLASH_LOG_FILE_HANDLE "$activating_progress_msg\n"; - close (RFLASH_LOG_FILE_HANDLE); # Activation still going, sleep for a bit, then print the progress value # Set next state to come back here to chect the activation status again. retry_after($node, "RFLASH_UPDATE_CHECK_STATE_REQUEST", 15);