mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-11-04 05:12:30 +00:00 
			
		
		
		
	Merge pull request #1429 from xuweibj/powering-on
add powering-on status for PPC-HMC
This commit is contained in:
		@@ -596,6 +596,10 @@ sub rnetboot {
 | 
			
		||||
    #
 | 
			
		||||
    #####################################
 | 
			
		||||
    if ( $data =~ /Finished/) {
 | 
			
		||||
        my $newstat = $::STATUS_POWERING_ON;
 | 
			
		||||
        my %newnodestatus=();
 | 
			
		||||
        $newnodestatus{$newstat}=[$node];
 | 
			
		||||
        xCAT_monitoring::monitorctrl::setNodeStatusAttributes(\%newnodestatus, 1);
 | 
			
		||||
        return( [[$node,"Success",$Rc]] );
 | 
			
		||||
    }
 | 
			
		||||
    #####################################
 | 
			
		||||
 
 | 
			
		||||
@@ -8,6 +8,9 @@ use xCAT::Usage;
 | 
			
		||||
use xCAT::MsgUtils;
 | 
			
		||||
use xCAT::FSPpower;
 | 
			
		||||
 | 
			
		||||
use xCAT::GlobalDef;
 | 
			
		||||
use xCAT_monitoring::monitorctrl;
 | 
			
		||||
 | 
			
		||||
##########################################################################
 | 
			
		||||
# Parse the command line for options and operands
 | 
			
		||||
##########################################################################
 | 
			
		||||
@@ -183,6 +186,9 @@ sub powercmd_boot {
 | 
			
		||||
    my $Rc = shift(@$stat);
 | 
			
		||||
    my $data = @$stat[0];
 | 
			
		||||
 | 
			
		||||
    my $newstat;
 | 
			
		||||
    my %newnodestatus = ();
 | 
			
		||||
 | 
			
		||||
    while (my ($name,$d) = each(%$hash) ) { 
 | 
			
		||||
        ##################################
 | 
			
		||||
        # Look up by lparid
 | 
			
		||||
@@ -197,6 +203,7 @@ sub powercmd_boot {
 | 
			
		||||
            push @output, [$name,$data,$Rc];
 | 
			
		||||
            next;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ##################################
 | 
			
		||||
        # Node not found 
 | 
			
		||||
        ##################################
 | 
			
		||||
@@ -210,6 +217,10 @@ sub powercmd_boot {
 | 
			
		||||
        my $state = power_status($data->{$id});
 | 
			
		||||
        my $op    = ($state =~ /^off$/) ? "on" : "reset";
 | 
			
		||||
 | 
			
		||||
        if ($state =~ /^off$/) {
 | 
			
		||||
            $newstat = $::STATUS_POWERING_ON;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        # Attribute powerinterval in site table,
 | 
			
		||||
        # to control the rpower forking speed
 | 
			
		||||
        if ((defined($request->{op})) && ($request->{op} ne 'stat') && ($request->{op} ne 'status') 
 | 
			
		||||
@@ -225,6 +236,9 @@ sub powercmd_boot {
 | 
			
		||||
                            $exp,
 | 
			
		||||
                            $op,
 | 
			
		||||
                            $d );
 | 
			
		||||
        unless (@$result[0] != SUCCESS) {
 | 
			
		||||
            $newnodestatus{$newstat}=[$name] if ($newstat);
 | 
			
		||||
        }
 | 
			
		||||
        push @output, [$name,@$result[1],@$result[0]];
 | 
			
		||||
    }
 | 
			
		||||
    if (defined($request->{opt}->{m})) {
 | 
			
		||||
@@ -283,6 +297,8 @@ sub powercmd_boot {
 | 
			
		||||
             }
 | 
			
		||||
        }
 | 
			
		||||
     }
 | 
			
		||||
 | 
			
		||||
    xCAT_monitoring::monitorctrl::setNodeStatusAttributes(\%newnodestatus, 1);
 | 
			
		||||
    return( \@output );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -298,6 +314,14 @@ sub powercmd {
 | 
			
		||||
    my @result  = ();
 | 
			
		||||
    my $callback = $request->{'callback'};
 | 
			
		||||
 | 
			
		||||
    my ($name) = keys %$hash;
 | 
			
		||||
    my $mtms   = @{$hash->{$name}}[2];
 | 
			
		||||
    my $stat = enumerate( $exp, $hash, $mtms );
 | 
			
		||||
    my $Rc = shift(@$stat);
 | 
			
		||||
    my $data = @$stat[0];
 | 
			
		||||
 | 
			
		||||
    my $newstat;
 | 
			
		||||
    my %newnodestatus=();
 | 
			
		||||
 | 
			
		||||
    ####################################
 | 
			
		||||
    # Power commands are grouped by CEC 
 | 
			
		||||
@@ -305,6 +329,7 @@ sub powercmd {
 | 
			
		||||
    ####################################
 | 
			
		||||
 | 
			
		||||
    while (my ($name,$d) = each(%$hash) ) {
 | 
			
		||||
        $newstat = "";        
 | 
			
		||||
        # Attribute powerinterval in site table,
 | 
			
		||||
        # to control the rpower forking speed
 | 
			
		||||
        if ((defined($request->{op})) && ($request->{op} ne 'stat') && ($request->{op} ne 'status') 
 | 
			
		||||
@@ -313,6 +338,21 @@ sub powercmd {
 | 
			
		||||
                Time::HiRes::sleep($request->{'powerinterval'});
 | 
			
		||||
            }    
 | 
			
		||||
        } 
 | 
			
		||||
        if (($request->{op} eq 'off') || ($request->{op} ne 'softoff')) {
 | 
			
		||||
            $newstat = $::STATUS_POWERING_OFF;
 | 
			
		||||
        }
 | 
			
		||||
        if ($request->{op} eq 'on') {
 | 
			
		||||
            $newstat = $::STATUS_POWERING_ON;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if ($request->{op} eq 'reset') {
 | 
			
		||||
            my $type = @$d[4];
 | 
			
		||||
            my $id   = ($type=~/^(fsp|bpa|frame|cec)$/) ? $type : @$d[0];
 | 
			
		||||
            my $state = power_status($data->{$id});
 | 
			
		||||
            if ($state !~ /^off$/) {
 | 
			
		||||
                $newstat = $::STATUS_POWERING_ON;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        ################################
 | 
			
		||||
        # Send command to each LPAR
 | 
			
		||||
        ################################
 | 
			
		||||
@@ -320,7 +360,13 @@ sub powercmd {
 | 
			
		||||
                            $exp,
 | 
			
		||||
                            $request->{op},
 | 
			
		||||
                            $d );
 | 
			
		||||
        my $Rc = shift(@$values);
 | 
			
		||||
        my $Rc = shift(@$values); 
 | 
			
		||||
  
 | 
			
		||||
        unless ($Rc != SUCCESS) {
 | 
			
		||||
            if ($newstat) {
 | 
			
		||||
                $newnodestatus{$newstat}=[$name];
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ################################
 | 
			
		||||
        # Return result
 | 
			
		||||
@@ -371,6 +417,7 @@ sub powercmd {
 | 
			
		||||
             }
 | 
			
		||||
        }
 | 
			
		||||
     }
 | 
			
		||||
    xCAT_monitoring::monitorctrl::setNodeStatusAttributes(\%newnodestatus, 1);
 | 
			
		||||
    return( \@result );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -250,32 +250,6 @@ sub process_command {
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            #print "oldstatus:" . Dumper(\%oldnodestatus);
 | 
			
		||||
 | 
			
		||||
            #set the new status to the nodelist.status
 | 
			
		||||
            my %newnodestatus=(); 
 | 
			
		||||
            my $newstat;
 | 
			
		||||
            if (($subcommand eq 'off') || ($subcommand eq 'softoff')) { 
 | 
			
		||||
                my $newstat=$::STATUS_POWERING_OFF; 
 | 
			
		||||
                $newnodestatus{$newstat}=\@allnodes;
 | 
			
		||||
            } else {
 | 
			
		||||
                #get the current nodeset stat
 | 
			
		||||
                if (@allnodes>0) {
 | 
			
		||||
                    my $nsh={};
 | 
			
		||||
                    my ($ret, $msg)=xCAT::SvrUtils->getNodesetStates(\@allnodes, $nsh);
 | 
			
		||||
                    if (!$ret) { 
 | 
			
		||||
                        foreach (keys %$nsh) {
 | 
			
		||||
                            my $newstat=xCAT_monitoring::monitorctrl->getNodeStatusFromNodesetState($_, $command);
 | 
			
		||||
                            $newnodestatus{$newstat}=$nsh->{$_};
 | 
			
		||||
                        }
 | 
			
		||||
                    } else {
 | 
			
		||||
                        trace( $request, $msg );
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            #donot update node provision status (installing or netbooting) here
 | 
			
		||||
            xCAT::Utils->filter_nostatusupdate(\%newnodestatus);
 | 
			
		||||
            #print "newstatus" . Dumper(\%newnodestatus);
 | 
			
		||||
            xCAT_monitoring::monitorctrl::setNodeStatusAttributes(\%newnodestatus, 1);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -3074,7 +3074,6 @@ sub power {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $newnodestatus{$newstat}=[$node];
 | 
			
		||||
    xCAT::Utils->filter_nostatusupdate(\%newnodestatus);
 | 
			
		||||
    xCAT_monitoring::monitorctrl::setNodeStatusAttributes(\%newnodestatus, 1);
 | 
			
		||||
 | 
			
		||||
    unless ($retstring =~ /reset/) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user