199505c28b
git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/branches/2.8@15491 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
116 lines
3.1 KiB
Perl
Executable File
116 lines
3.1 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.
|
|
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";
|
|
}
|