mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-10-31 03:12:30 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			120 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/perl
 | |
| ## snmp for monsetting to remove blade settings from blade when trap is recieved
 | |
| ## example:
 | |
| ## 1.  user removes a blade from the chassis
 | |
| ## 2.  snmp trap setup to point here
 | |
| ## 3.  this script removes the blade configuration from xCAT
 | |
| ## 4.  so if blade is placed in new slot or back in then xCAT goes
 | |
| ##     through rediscover process again.
 | |
| 
 | |
| BEGIN
 | |
| {
 | |
|     $::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : '/opt/xcat';
 | |
| }
 | |
| 
 | |
| use lib "$::XCATROOT/lib/perl";
 | |
| use strict;
 | |
| use Socket;    # for name resolution
 | |
| use Getopt::Long;
 | |
| 
 | |
| my $help;
 | |
| GetOptions('h|help' => \$help);
 | |
| if ($help) {
 | |
|     print <<'EOS';
 | |
| Usage: rmblade [-h|--help]
 | |
| 
 | |
| Response to SNMP for monsetting to remove blade from xCAT when trap is recieved.
 | |
| Pipe the MM IP address and blade slot number into this cmd.
 | |
| 
 | |
| Example: 
 | |
|  1.  user removes a blade from the chassis
 | |
|  2.  snmp trap setup to point here
 | |
|  3.  this script removes the blade configuration from xCAT
 | |
|  4.  so if blade is placed in new slot or back in then xCAT goes 
 | |
|      through rediscover process again.
 | |
| 
 | |
| Author:  Jarrod Johnson
 | |
| EOS
 | |
|     exit 0;
 | |
| }
 | |
| 
 | |
| require xCAT::Utils;
 | |
| require xCAT::TableUtils;
 | |
| 
 | |
| my $ip      = '';
 | |
| my $mm      = '';
 | |
| my $slot    = '';
 | |
| my $log     = "/var/log/xcatsnmp";
 | |
| my $tftpdir = xCAT::TableUtils->getTftpDir();
 | |
| 
 | |
| 
 | |
| open(FILE, ">>$log") or die "Can't open log!!!";
 | |
| 
 | |
| my $date = `date`;
 | |
| chomp($date);
 | |
| print FILE "====================  $date  ============================\n";
 | |
| 
 | |
| sub rmblade {
 | |
|     my $blade = shift;
 | |
|     my $hex   = ip2hex($blade);
 | |
|     print FILE "Running: nodech $blade chain.currstate='' chain.currchain=''\n";
 | |
|     `nodech $blade chain.currstate= chain.currchain=`;
 | |
|     print FILE "Running: chtab -d node=$blade mac\n";
 | |
|     `chtab -d node=$blade mac`;
 | |
|     print FILE "Running: makedhcp -d $blade\n";
 | |
|     `makedhcp -d $blade`;
 | |
|     print FILE "Running: rm $tftpdir/pxelinux.cfg/$blade\n";
 | |
|     `rm  $tftpdir/pxelinux.cfg/$blade`;
 | |
| 
 | |
|     if ($hex) {
 | |
|         print FILE "Running: rm $tftpdir/pxelinux.cfg/$hex\n";
 | |
|         `rm $tftpdir/pxelinux.cfg/$hex`;
 | |
|     }
 | |
| }
 | |
| 
 | |
| sub ip2hex {
 | |
|     my $node = shift;
 | |
|     my $ip   = '';
 | |
|     my @quad;
 | |
|     my $hex       = '';
 | |
|     my $packed_ip = gethostbyname($node);
 | |
|     if (defined $packed_ip) {
 | |
|         $ip = inet_ntoa($packed_ip);
 | |
|         print FILE "IP that was removed is $ip\n";
 | |
|         @quad = split('\.', $ip);
 | |
|         $hex = sprintf("%02X%02X%02X%02X", @quad);
 | |
|     }
 | |
|     return $hex;
 | |
| }
 | |
| 
 | |
| foreach (<>) {
 | |
|     if (/ip=UDP/) {
 | |
|         $ip = $_;
 | |
|         chomp($ip);
 | |
|         $ip =~ s/ip=UDP: \[(.*)\]:.*/$1/g;
 | |
|         $mm = gethostbyaddr(inet_aton($ip), AF_INET);
 | |
|     } elsif (/spTrapSourceId=/) {
 | |
|         $slot = $_;
 | |
|         chomp($slot);
 | |
|         $slot =~ s/.*Blade_(\d\d).*/$1/g;
 | |
|         $slot = $slot * 1;    # to get rid of the leading 0's.
 | |
|     }
 | |
| }
 | |
| print "ip: $ip\n";
 | |
| print "host: $mm\n";
 | |
| print "slot: $slot\n";
 | |
| 
 | |
| # we now have slot and amm.  Need to now get which blade this is:
 | |
| my $nlscmd = "nodels mp.id==$slot" . '@' . "mp.mpa==$mm";
 | |
| my $node   = `$nlscmd`;
 | |
| chomp($node);
 | |
| print "node: $node\n";
 | |
| if ($node ne '') {
 | |
|     system("logger -p local4.info -t xcat 'removing $node configuration from xCAT'");
 | |
|     print FILE "removing $node configuration from xCAT\n";
 | |
|     &rmblade($node);
 | |
| } else {
 | |
|     system("logger  -p local4.info -t xcat 'a blade was removed from $mm:$slot but could not be identified'");
 | |
|     print FILE "A blade was removed from $mm:$slot but could not be identified\n";
 | |
| }
 |