mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-10-30 19:02:27 +00:00 
			
		
		
		
	git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@2191 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
		
			
				
	
	
		
			76 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env perl
 | |
| # IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
 | |
| 
 | |
| # This script is used by UpdatexCATNodeStatus event response to handle the node
 | |
| # status changes from the condition NodeReachability and NodeReachability_H
 | |
| 
 | |
| BEGIN
 | |
| {
 | |
|   $::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : '/opt/xcat';
 | |
| }
 | |
| 
 | |
| use strict;
 | |
| use Getopt::Std;
 | |
| use POSIX qw(strftime);
 | |
| 
 | |
| my $cond_name=$ENV{ERRM_COND_NAME};
 | |
| my $node;
 | |
| my $status;
 | |
| 
 | |
| if ($cond_name eq "NodeReachability") {
 | |
|   $node=$ENV{ERRM_RSRC_NAME};  
 | |
|   $status=$ENV{ERRM_VALUE};
 | |
| } elsif ($cond_name eq "NodeReachability_H")  {
 | |
|   # Parse the ERRM_VALUE attribute, which will contain the
 | |
|   # LastEvent structured data variable from the Condition class
 | |
|   # The fields in this structured data variable are documented below where we parse them out.
 | |
|   my $event = $ENV{ERRM_VALUE};
 | |
|   $event =~ s/^\[(.*)\]$/$1/;              # SD variables have square brackets around them
 | |
| 
 | |
|   # This parse the LastEvent
 | |
|   my (                     # split the SD into the following fields:
 | |
| 	$Occurred,           # One if the condition has been triggered
 | |
| 	$ErrNum,             # Non-zero if there was in error in the event registration
 | |
| 	$ErrMsg,             # The string msg related to ErrNum
 | |
| 	$EventFlags,         # Bit mask giving some additional info about the event
 | |
| 	$EventTime,          # Time of event expressed in seconds since 1/1/1970
 | |
| 	$EventTimeMicros,    # Number of microseconds past EventTime
 | |
| 	$ResourceHandle,     # Binary address of the RMC resource that caused the condition to be triggered
 | |
| 	$NodeName,           # The node on which the event occurred.  For conditions that use the management domain scope (4),
 | |
| 	                     # this will be the leaf node.  For conditions that use the local scope (e.g. NodeReachability),
 | |
| 	                     # this will be the FMS.
 | |
| 	$NumAttrs,           # Number of attr values from the resource returned in this event
 | |
| 	$NumAttrsInExpr,     # How many of the above were attributes in the event expression
 | |
| 	$IndexForAttrs,      # The starting index of the array of values.  Until new fixed fields are added
 | |
| 	                     # to LastEvent, this will be the element right after this one.
 | |
| 	$AttrArray           # This list of attribute names, types, and values
 | |
|      ) = split(/,/, $event, 12);
 | |
| 
 | |
|   my @attrArray = split(/,/, $AttrArray);      # Note: parsing this way does not support SDs or SD Arrays that may be in this list
 | |
| 
 | |
|   my $j = 0;      # index into attrArray
 | |
|   for (my $i=0; $i<$NumAttrs; $i++) {
 | |
|     my $attrName = $attrArray[$j++];
 | |
|     my $attrType = $attrArray[$j++];          # Types <= 8 are "simple" types. Types > 8 are SDs and arrays.
 | |
|     my $attrValue = $attrArray[$j++];
 | |
|     if ($attrName eq '"Name"') { $node = $attrValue; }
 | |
|     if ($attrName eq '"Status"') { $status = $attrValue; }
 | |
|   }
 | |
| } else {
 | |
|   `logger xCAT  "[mon]: updatexcatnodestatus: This script does not handle condition $cond_name"`;
 | |
|   exit 1;
 | |
| }
 | |
| my $status_string;
 | |
| if ($status == 1) { $status_string="alive"; }
 | |
| else { $status_string="unreachable"; }
 | |
| 
 | |
| my $result=`$::XCATROOT/bin/nodech $node nodelist.status=$status_string 2>&1`;
 | |
| my $code=$?;
 | |
| if ($code) {
 | |
|   `logger xCAT "[mon]: Error saving node status ($node,$status_string) to xCAT:$result"`;
 | |
|   exit $code;
 | |
| }
 | |
| exit 0
 | |
| 
 | |
| 
 |