changes in monitoring plug-in infrastructure to better fit the xCAT env
git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@1978 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
parent
739ca852f7
commit
9621c2854c
File diff suppressed because it is too large
Load Diff
@ -46,7 +46,7 @@ sub regMonitoringNotif {
|
||||
my $tab = xCAT::Table->new('notification');
|
||||
my $regged=0;
|
||||
if ($tab) {
|
||||
(my $ref) = $tab->getAttribs({filename => qw(montbhandler.pm)}, tables);
|
||||
(my $ref) = $tab->getAttribs({filename => qw(montbhandler.pm)}, 'tables');
|
||||
if ($ref and $ref->{tables}) {
|
||||
$regged=1;
|
||||
}
|
||||
@ -54,7 +54,7 @@ sub regMonitoringNotif {
|
||||
}
|
||||
|
||||
if (!$regged) {
|
||||
xCAT_plugin::notification::regNotification([qw(montbhandler.pm monitoring,monsetting -o a,u,d)]);
|
||||
xCAT_plugin::notification::regNotification([qw(montbhandler.pm monsetting -o a,u,d)]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6,11 +6,12 @@ BEGIN
|
||||
$::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : '/opt/xcat';
|
||||
}
|
||||
use lib "$::XCATROOT/lib/perl";
|
||||
use strict;
|
||||
use IO::File;
|
||||
use xCAT::Utils;
|
||||
use xCAT::MsgUtils;
|
||||
use xCAT_monitoring::monitorctrl;
|
||||
|
||||
use Sys::Hostname;
|
||||
|
||||
#print "xCAT_monitoring::snmpmon loaded\n";
|
||||
1;
|
||||
@ -27,61 +28,334 @@ use xCAT_monitoring::monitorctrl;
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
=head3 start
|
||||
This function gets called by the monitorctrl module
|
||||
when xcatd starts.
|
||||
This function gets called by the monitorctrl module when monstart command
|
||||
gets called and when xcatd starts.
|
||||
Arguments:
|
||||
None.
|
||||
p_nodes -- a pointer to an arrays of nodes to be monitored. null means all.
|
||||
scope -- the action scope, it indicates the node type the action will take place.
|
||||
0 means localhost only.
|
||||
2 means both localhost and nodes,
|
||||
callback -- the callback pointer for error and status displaying. It can be null.
|
||||
Returns:
|
||||
(return code, message)
|
||||
(return code, message)
|
||||
if the callback is set, use callback to display the status and error.
|
||||
=cut
|
||||
#--------------------------------------------------------------------------------
|
||||
sub start {
|
||||
#print "snmpmon::start called\n";
|
||||
print "snmpmon:start called\n";
|
||||
my $noderef=shift;
|
||||
if ($noderef =~ /xCAT_monitoring::snmpmon/) {
|
||||
$noderef=shift;
|
||||
}
|
||||
my $scope=shift;
|
||||
my $callback=shift;
|
||||
|
||||
# do not turn it on on the service node
|
||||
#if (xCAT::Utils->isServiceNode()) { return (0, "");}
|
||||
my $localhostname=hostname();
|
||||
|
||||
# unless we are running on linux, exit.
|
||||
#unless($^O eq "linux"){
|
||||
# exit;
|
||||
# }
|
||||
# get the PID of the currently running snmptrapd if it is running.
|
||||
# then stop it and restart it again so that it reads our new
|
||||
# snmptrapd.conf configuration file. Then the process
|
||||
my $pid;
|
||||
chomp($pid= `/bin/ps -ef | /bin/grep snmptrapd | /bin/grep -v grep | /bin/awk '{print \$2}'`);
|
||||
if($pid){
|
||||
`/bin/kill -9 $pid`;
|
||||
}
|
||||
# start it up again!
|
||||
system("/usr/sbin/snmptrapd -m ALL");
|
||||
|
||||
# get the PID of the currently running snmpd if it is running.
|
||||
# if it's running then we just leave. Otherwise, if we don't get A PID, then we
|
||||
# assume that it isn't running, and start it up again!
|
||||
chomp($pid= `/bin/ps -ef | /bin/grep snmpd | /bin/grep -v grep | /bin/awk '{print \$2}'`);
|
||||
unless($pid){
|
||||
# start it up!
|
||||
system("/usr/sbin/snmpd");
|
||||
}
|
||||
|
||||
if ($scope) {
|
||||
#enable alerts on the nodes
|
||||
#enable bmcs if any
|
||||
if ($callback) {
|
||||
my $rsp={};
|
||||
$rsp->{data}->[0]="$localhostname: enabling SNMP alert on BMCs and MMs...";
|
||||
$callback->($rsp);
|
||||
}
|
||||
configBMC(1, $noderef, $callback);
|
||||
|
||||
#enable MMAs if any
|
||||
configMPA(1, $noderef, $callback);
|
||||
}
|
||||
|
||||
if ($callback) {
|
||||
my $rsp={};
|
||||
$rsp->{data}->[0]="$localhostname: started.";
|
||||
$callback->($rsp);
|
||||
}
|
||||
|
||||
return (0, "started")
|
||||
}
|
||||
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
=head3 stop
|
||||
This function gets called by the monitorctrl module when monstop command gets called.
|
||||
Arguments:
|
||||
p_nodes -- a pointer to an arrays of nodes to be stoped for monitoring. null means all.
|
||||
scope -- the action scope, it indicates the node type the action will take place.
|
||||
0 means localhost only.
|
||||
2 means both monservers and nodes,
|
||||
callback -- the callback pointer for error and status displaying. It can be null.
|
||||
Returns:
|
||||
(return code, message)
|
||||
if the callback is set, use callback to display the status and error.
|
||||
=cut
|
||||
#--------------------------------------------------------------------------------
|
||||
sub stop {
|
||||
print "snmpmon:stop called\n";
|
||||
my $noderef=shift;
|
||||
if ($noderef =~ /xCAT_monitoring::snmpmon/) {
|
||||
$noderef=shift;
|
||||
}
|
||||
my $scope=shift;
|
||||
my $callback=shift;
|
||||
|
||||
my $localhostname=hostname();
|
||||
|
||||
if ($scope) {
|
||||
if ($callback) {
|
||||
my $rsp={};
|
||||
$rsp->{data}->[0]="$localhostname: disabling SNMP alert on BMCs and MMs...";
|
||||
$callback->($rsp);
|
||||
}
|
||||
#disable MMAs if any
|
||||
configMPA(0, $noderef, $callback);
|
||||
|
||||
#disable BMC so that it stop senging alerts (PETs) to this node
|
||||
configBMC(0, $noderef, $callback);
|
||||
}
|
||||
|
||||
|
||||
# now check to see if the daemon is running. If it is then we need to resart or stop?
|
||||
# it with the new snmptrapd.conf file that will not forward events to RMC.
|
||||
chomp(my $pid= `/bin/ps -ef | /bin/grep snmptrapd | /bin/grep -v grep | /bin/awk '{print \$2}'`);
|
||||
if($pid){
|
||||
`/bin/kill -9 $pid`;
|
||||
# start it up again!
|
||||
#system("/usr/sbin/snmptrapd");
|
||||
}
|
||||
|
||||
if ($callback) {
|
||||
my $rsp={};
|
||||
$rsp->{data}->[0]="$localhostname: stopped.";
|
||||
$callback->($rsp);
|
||||
}
|
||||
|
||||
return (0, "stopped");
|
||||
}
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
=head3 supportNodeStatusMon
|
||||
This function is called by the monitorctrl module to check
|
||||
if SNMP can help monitoring and returning the node status.
|
||||
SNMP does not support this function.
|
||||
|
||||
Arguments:
|
||||
none
|
||||
Returns:
|
||||
0
|
||||
=cut
|
||||
#--------------------------------------------------------------------------------
|
||||
sub supportNodeStatusMon {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
=head3 startNodeStatusMon
|
||||
This function is called by the monitorctrl module when monstart gets called and
|
||||
when xcatd starts. It starts monitoring the node status and feed them back
|
||||
to xCAT.
|
||||
Arguments:
|
||||
p_nodes -- a pointer to an arrays of nodes to be monitored. null means all.
|
||||
scope -- the action scope, it indicates the node type the action will take place.
|
||||
0 means loca lhost only.
|
||||
2 means both localhost and nodes,
|
||||
callback -- the callback pointer for error and status displaying. It can be null.
|
||||
note: p_nodes and scope are ignored by this plugin.
|
||||
Returns:
|
||||
(return code, message)
|
||||
if the callback is set, use callback to display the status and error.
|
||||
This function is called by the monitorctrl module to tell
|
||||
=cut
|
||||
#--------------------------------------------------------------------------------
|
||||
sub startNodeStatusMon {
|
||||
return (1, "This function is not supported.");
|
||||
}
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
=head3 stopNodeStatusMon
|
||||
This function is called by the monitorctrl module when monstop command is issued.
|
||||
It stops feeding the node status info back to xCAT.
|
||||
Arguments:
|
||||
p_nodes -- a pointer to an arrays of nodes to stoped for monitoring. null means all.
|
||||
scope -- the action scope, it indicates the node type the action will take place.
|
||||
0 means local host only.
|
||||
2 means both local host and nodes,
|
||||
callback -- the callback pointer for error and status displaying. It can be null.
|
||||
note: p_nodes and scope are ignored by this plugin.
|
||||
Returns:
|
||||
(return code, message)
|
||||
if the callback is set, use callback to display the status and error.
|
||||
=cut
|
||||
#--------------------------------------------------------------------------------
|
||||
sub stopNodeStatusMon {
|
||||
return (1, "This function is not supported.");
|
||||
}
|
||||
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
=head3 config
|
||||
This function configures the cluster for the given nodes.
|
||||
This function is called when monconfig command is issued or when xcatd starts
|
||||
on the service node. It will configure the cluster to include the given nodes within
|
||||
the monitoring doamin.
|
||||
Arguments:
|
||||
p_nodes -- a pointer to an arrays of nodes to be added for monitoring. none means all.
|
||||
scope -- the action scope, it indicates the node type the action will take place.
|
||||
0 means localhost only.
|
||||
2 means localhost and nodes,
|
||||
callback -- the callback pointer for error and status displaying. It can be null.
|
||||
Returns:
|
||||
(error code, error message)
|
||||
=cut
|
||||
#--------------------------------------------------------------------------------
|
||||
sub config {
|
||||
print "snmpmon:config called\n";
|
||||
my $noderef=shift;
|
||||
if ($noderef =~ /xCAT_monitoring::snmpmon/) {
|
||||
$noderef=shift;
|
||||
}
|
||||
my $scope=shift;
|
||||
my $callback=shift;
|
||||
|
||||
my $localhostname=hostname();
|
||||
|
||||
# check supported snmp package
|
||||
my $cmd;
|
||||
my @snmpPkg = `/bin/rpm -qa | grep snmp`;
|
||||
my $pkginstalled = grep(/net-snmp/, @snmpPkg);
|
||||
|
||||
if ($pkginstalled) {
|
||||
if (!$pkginstalled) {
|
||||
if ($callback) {
|
||||
my $rsp={};
|
||||
$rsp->{data}->[0]="$localhostname: net-snmp is not installed.";
|
||||
$callback->($rsp);
|
||||
}
|
||||
return (1, "net-snmp is not installed")
|
||||
} else {
|
||||
my ($ret, $err)=configSNMP();
|
||||
if ($ret != 0) { return ($ret, $err);}
|
||||
} else {
|
||||
return (1, "net-snmp is not installed")
|
||||
}
|
||||
|
||||
#enable bmcs if any
|
||||
configBMC(1);
|
||||
|
||||
#enable MMAs if any
|
||||
configMPA(1);
|
||||
|
||||
#configure mail to enabling receiving mails from trap handler
|
||||
configMail();
|
||||
|
||||
return (0, "started")
|
||||
if ($scope) {
|
||||
if ($callback) {
|
||||
my $rsp={};
|
||||
$rsp->{data}->[0]="$localhostname: setting up SNMP alert destination for BMCs and MMs ....";
|
||||
$callback->($rsp);
|
||||
}
|
||||
#enable bmcs if any
|
||||
configBMC(2, $noderef, $callback);
|
||||
|
||||
#enable MMAs if any
|
||||
configMPA(2, $noderef, $callback);
|
||||
}
|
||||
|
||||
if ($callback) {
|
||||
my $rsp={};
|
||||
$rsp->{data}->[0]="$localhostname: done.";
|
||||
$callback->($rsp);
|
||||
}
|
||||
|
||||
return (0, "")
|
||||
}
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
=head3 deconfig
|
||||
This function de-configures the cluster for the given nodes.
|
||||
This function is called by the monitorctrl module when nodes are removed
|
||||
from the xCAT cluster. It should remove the nodes from the product for monitoring.
|
||||
Arguments:
|
||||
p_nodes -- a pointer to an arrays of nodes to be removed for monitoring. none means all.
|
||||
scope -- the action scope, it indicates the node type the action will take place.
|
||||
0 means local host only.
|
||||
2 means both local host and nodes,
|
||||
callback -- the callback pointer for error and status displaying. It can be null.
|
||||
Returns:
|
||||
(error code, error message)
|
||||
=cut
|
||||
#--------------------------------------------------------------------------------
|
||||
sub deconfig {
|
||||
print "snmpmon:deconfig called\n";
|
||||
my $noderef=shift;
|
||||
if ($noderef =~ /xCAT_monitoring::snmpmon/) {
|
||||
$noderef=shift;
|
||||
}
|
||||
my $scope=shift;
|
||||
my $callback=shift;
|
||||
my $localhostname=hostname();
|
||||
|
||||
if (-f "/usr/share/snmp/snmptrapd.conf.orig"){
|
||||
# copy back the old one
|
||||
`mv -f /usr/share/snmp/snmptrapd.conf.orig /usr/share/snmp/snmptrapd.conf`;
|
||||
} else {
|
||||
if (-f "/usr/share/snmp/snmptrapd.conf"){
|
||||
|
||||
# if the file exists, delete all entries that have xcat_traphandler
|
||||
my $cmd = "grep -v xcat_traphandler /usr/share/snmp/snmptrapd.conf ";
|
||||
$cmd .= "> /usr/share/snmp/snmptrapd.conf.unconfig ";
|
||||
`$cmd`;
|
||||
|
||||
# move it back to the snmptrapd.conf file.
|
||||
`mv -f /usr/share/snmp/snmptrapd.conf.unconfig /usr/share/snmp/snmptrapd.conf`;
|
||||
}
|
||||
}
|
||||
|
||||
if ($callback) {
|
||||
my $rsp={};
|
||||
$rsp->{data}->[0]="$localhostname: done.";
|
||||
$callback->($rsp);
|
||||
}
|
||||
|
||||
return (0, "");
|
||||
}
|
||||
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
=head3 configBMC
|
||||
This function configures BMC to setup the snmp destination, enable/disable
|
||||
PEF policy table entry number 1.
|
||||
Arguments:
|
||||
actioon -- 1 enable PEF policy table. 0 disable PEF policy table.
|
||||
actioon -- 0 disable alert. 1 enable alert. 2 setup snmp destination
|
||||
|
||||
p_nodes -- a pointer to an arrays of nodes to be monitored. null means all.
|
||||
callback -- the callback pointer for error and status displaying. It can be null.
|
||||
Returns:
|
||||
(return code, message)
|
||||
=cut
|
||||
#--------------------------------------------------------------------------------
|
||||
sub configBMC {
|
||||
my $action=shift;
|
||||
my $noderef=shift;
|
||||
my $callback=shift;
|
||||
|
||||
my $ret_text="";
|
||||
my $ret_val=0;
|
||||
@ -89,22 +363,24 @@ sub configBMC {
|
||||
#the identification of this node
|
||||
my @hostinfo=xCAT::Utils->determinehostname();
|
||||
my $isSV=xCAT::Utils->isServiceNode();
|
||||
%iphash=();
|
||||
my %iphash=();
|
||||
foreach(@hostinfo) {$iphash{$_}=1;}
|
||||
if (!$isSV) { $iphash{'noservicenode'}=1;}
|
||||
|
||||
|
||||
|
||||
my $pPairHash=xCAT_monitoring::monitorctrl->getNodeMonServerPair($noderef, 0);
|
||||
|
||||
my %masterhash=();
|
||||
my @node_a=();
|
||||
my $table=xCAT::Table->new("ipmi");
|
||||
if ($table) {
|
||||
my @tmp1=$table->getAllNodeAttribs(['node','bmc']);
|
||||
if (defined(@tmp1) && (@tmp1 > 0)) {
|
||||
if (@tmp1 > 0) {
|
||||
foreach(@tmp1) {
|
||||
my $node=$_->{node};
|
||||
my $bmc=$_->{bmc};
|
||||
if (! exists($pPairHash->{$node})) {next;}
|
||||
|
||||
my $pairs=xCAT_monitoring::monitorctrl->getNodeMonServerPair($node);
|
||||
my $pairs=$pPairHash->{$node};
|
||||
my @a_temp=split(',',$pairs);
|
||||
my $monserver=$a_temp[0];
|
||||
my $master=$a_temp[1];
|
||||
@ -132,17 +408,22 @@ sub configBMC {
|
||||
|
||||
#now doing the real thing: enable PEF alert policy table
|
||||
my $noderange=join(',',@node_a );
|
||||
my $actionstring="en";
|
||||
if ($action==0) {$actionstring="dis";}
|
||||
#print "XCATBYPASS=Y rspconfig $noderange alert=$actionstring\n";
|
||||
my $result = `XCATBYPASS=Y rspconfig $noderange alert=$actionstring 2>&1`;
|
||||
if ($?) {
|
||||
xCAT::MsgUtils->message('S', "[mon]: Changeing SNMP PEF policy for IPMI nodes $noderange:\n $result\n");
|
||||
$ret_tex .= "Changeing SNMP PEF policy for IPMI nodes $noderange:\n $result\n";
|
||||
}
|
||||
|
||||
#setup the snmp destination
|
||||
if ($action==1) {
|
||||
if ($action==0) {
|
||||
print "XCATBYPASS=Y rspconfig $noderange alert=dis\n";
|
||||
my $result = `XCATBYPASS=Y rspconfig $noderange alert=dis 2>&1`;
|
||||
if ($?) {
|
||||
xCAT::MsgUtils->message('S', "[mon]: Changeing SNMP PEF policy for IPMI nodes $noderange:\n $result\n");
|
||||
$ret_text .= "Changeing SNMP PEF policy for IPMI nodes $noderange:\n $result\n";
|
||||
}
|
||||
} elsif ($action==1) {
|
||||
print "XCATBYPASS=Y rspconfig $noderange alert=en\n";
|
||||
my $result = `XCATBYPASS=Y rspconfig $noderange alert=en 2>&1`;
|
||||
if ($?) {
|
||||
xCAT::MsgUtils->message('S', "[mon]: Changeing SNMP PEF policy for IPMI nodes $noderange:\n $result\n");
|
||||
$ret_text .= "Changeing SNMP PEF policy for IPMI nodes $noderange:\n $result\n";
|
||||
}
|
||||
} else {
|
||||
#setup the snmp destination
|
||||
foreach (keys(%masterhash)) {
|
||||
my $ref2=$masterhash{$_};
|
||||
if (@$ref2==0) { next;}
|
||||
@ -154,16 +435,24 @@ sub configBMC {
|
||||
$ret_val=1;
|
||||
$ret_text .= "Converting to IP: $ptmp->[1]\n";
|
||||
} else {
|
||||
#print "XCATBYPASS=Y rspconfig $nr2 snmpdest=$ptmp->[1]\n";
|
||||
print "XCATBYPASS=Y rspconfig $nr2 snmpdest=$ptmp->[1]\n";
|
||||
my $result2 = `XCATBYPASS=Y rspconfig $nr2 snmpdest=$ptmp->[1] 2>&1`;
|
||||
if ($?) {
|
||||
xCAT::MsgUtils->message('S', "[mon]: Changing SNMP destination for IPMI nodes $nr2:\n $result2\n");
|
||||
$ret_tex .= "Changing SNMP destination for IPMI nodes $nr2:\n $result2\n";
|
||||
$ret_text .= "Changing SNMP destination for IPMI nodes $nr2:\n $result2\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($callback) {
|
||||
my $rsp={};
|
||||
if ($ret_val) {
|
||||
$rsp->{data}->[0]="$ret_text";
|
||||
}
|
||||
$callback->($rsp);
|
||||
}
|
||||
|
||||
return ($ret_val, $ret_text);
|
||||
|
||||
}
|
||||
@ -174,13 +463,18 @@ sub configBMC {
|
||||
This function configures Blade Center Management Module to setup the snmp destination,
|
||||
enable/disable remote alert notification.
|
||||
Arguments:
|
||||
actioon -- 1 enable remote alert notification. 0 disable remote alert notification.
|
||||
actioon -- 1 enable remote alert notification. 0 disable remote alert notification.
|
||||
2 setting up snmp destination.
|
||||
p_nodes -- a pointer to an arrays of nodes to be monitored. null means all.
|
||||
callback -- the callback pointer for error and status displaying. It can be null.
|
||||
Returns:
|
||||
(return code, message)
|
||||
=cut
|
||||
#--------------------------------------------------------------------------------
|
||||
sub configMPA {
|
||||
my $action=shift;
|
||||
my $noderef=shift;
|
||||
my $callback=shift;
|
||||
|
||||
my $ret_val=0;
|
||||
my $ret_text="";
|
||||
@ -188,25 +482,35 @@ sub configMPA {
|
||||
#the identification of this node
|
||||
my @hostinfo=xCAT::Utils->determinehostname();
|
||||
my $isSV=xCAT::Utils->isServiceNode();
|
||||
%iphash=();
|
||||
my %iphash=();
|
||||
foreach(@hostinfo) {$iphash{$_}=1;}
|
||||
if (!$isSV) { $iphash{'noservicenode'}=1;}
|
||||
|
||||
my $all=0;
|
||||
my %nodehash=();
|
||||
if ((!$noderef) || (@$noderef==0)) {$all=1;}
|
||||
else {
|
||||
foreach(@$noderef) { $nodehash{$_}=1;}
|
||||
}
|
||||
|
||||
my %mpa_hash=();
|
||||
my %masterhash=();
|
||||
my @node_a=();
|
||||
my $table=xCAT::Table->new("mp");
|
||||
if ($table) {
|
||||
my @tmp1=$table->getAllNodeAttribs(['mpa']);
|
||||
if (defined(@tmp1) && (@tmp1 > 0)) {
|
||||
my @tmp1=$table->getAllNodeAttribs(['node','mpa']);
|
||||
if (@tmp1 > 0) {
|
||||
foreach(@tmp1) {
|
||||
my $node=$_->{node};
|
||||
my $mpa=$_->{mpa};
|
||||
if ((!$all) && (!exists($nodehash{$node})) && (!exists($nodehash{$mpa}))) {next;}
|
||||
|
||||
if ($mpa_hash{$mpa}) { next;} #already handled
|
||||
|
||||
$mpa_hash{$mpa}=1;
|
||||
|
||||
my $pairs=xCAT_monitoring::monitorctrl->getNodeMonServerPair($mpa);
|
||||
my $pHash=xCAT_monitoring::monitorctrl->getNodeMonServerPair([$mpa], 0);
|
||||
my $pairs=$pHash->{$mpa};
|
||||
my @a_temp=split(',',$pairs);
|
||||
my $monserver=$a_temp[0];
|
||||
my $master=$a_temp[1];
|
||||
@ -235,19 +539,22 @@ sub configMPA {
|
||||
|
||||
#now doing the real thing: enable PEF alert policy table
|
||||
my $noderange=join(',',@node_a );
|
||||
#print "noderange=@noderange\n";
|
||||
my $actionstring="en";
|
||||
if ($action==0) {$actionstring="dis";}
|
||||
|
||||
#print "XCATBYPASS=Y rspconfig $noderange alert=$actionstring\n";
|
||||
my $result = `XCATBYPASS=Y rspconfig $noderange alert=$actionstring 2>&1`;
|
||||
if ($?) {
|
||||
xCAT::MsgUtils->message('S', "[mon]: Changeing SNMP remote alert profile for Blade Center MM $noderange:\n $result\n");
|
||||
$ret_text .= "Changeing SNMP remote alert profile for Blade Center MM $noderange:\n $result\n";
|
||||
}
|
||||
|
||||
#setup the snmp destination
|
||||
if ($action==1) {
|
||||
if ($action==0) {
|
||||
print "XCATBYPASS=Y rspconfig $noderange alert=dis\n";
|
||||
my $result = `XCATBYPASS=Y rspconfig $noderange alert=dis 2>&1`;
|
||||
if ($?) {
|
||||
xCAT::MsgUtils->message('S', "[mon]: Changeing SNMP remote alert profile for Blade Center MM $noderange:\n $result\n");
|
||||
$ret_text .= "Changeing SNMP remote alert profile for Blade Center MM $noderange:\n $result\n";
|
||||
}
|
||||
} elsif ($action==1) {
|
||||
print "XCATBYPASS=Y rspconfig $noderange alert=en\n";
|
||||
my $result = `XCATBYPASS=Y rspconfig $noderange alert=en 2>&1`;
|
||||
if ($?) {
|
||||
xCAT::MsgUtils->message('S', "[mon]: Changeing SNMP remote alert profile for Blade Center MM $noderange:\n $result\n");
|
||||
$ret_text .= "Changeing SNMP remote alert profile for Blade Center MM $noderange:\n $result\n";
|
||||
}
|
||||
} else {
|
||||
#setup the snmp destination
|
||||
foreach (keys(%masterhash)) {
|
||||
my $ref2=$masterhash{$_};
|
||||
if (@$ref2==0) { next;}
|
||||
@ -259,7 +566,7 @@ sub configMPA {
|
||||
$ret_val=1;
|
||||
$ret_text .= "Converting to IP: $ptmp->[1]\n";
|
||||
} else {
|
||||
#print "XCATBYPASS=Y rspconfig $nr2 snmpdest=$ptmp->[1]\n";
|
||||
print "XCATBYPASS=Y rspconfig $nr2 snmpdest=$ptmp->[1]\n";
|
||||
my $result2 = `XCATBYPASS=Y rspconfig $nr2 snmpdest=$ptmp->[1] 2>&1`;
|
||||
if ($?) {
|
||||
xCAT::MsgUtils->message('S', "[mon]: Changing SNMP destination for Blade Center MM $nr2:\n $result2\n");
|
||||
@ -269,6 +576,14 @@ sub configMPA {
|
||||
}
|
||||
}
|
||||
|
||||
if ($callback) {
|
||||
my $rsp={};
|
||||
if ($ret_val) {
|
||||
$rsp->{data}->[0]="$ret_text";
|
||||
}
|
||||
$callback->($rsp);
|
||||
}
|
||||
|
||||
return ($ret_val, $ret_text);
|
||||
}
|
||||
|
||||
@ -324,7 +639,7 @@ sub configSNMP {
|
||||
s/\s*forward/\#forward/; #comment out the old one
|
||||
if (!$forward_handled) {
|
||||
print FILE "forward default $master\n";
|
||||
$forward_handle=1;
|
||||
$forward_handled=1;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -350,6 +665,7 @@ sub configSNMP {
|
||||
}
|
||||
else { # The snmptrapd.conf file does not exists
|
||||
# create the file:
|
||||
my $handle = new IO::File;
|
||||
open($handle, ">/usr/share/snmp/snmptrapd.conf");
|
||||
print $handle "authCommunity log,execute,net public\n";
|
||||
if ($isSN) {
|
||||
@ -361,27 +677,7 @@ sub configSNMP {
|
||||
}
|
||||
|
||||
# TODO: put the mib files to /usr/share/snmp/mibs
|
||||
|
||||
# get the PID of the currently running snmptrapd if it is running.
|
||||
# then stop it and restart it again so that it reads our new
|
||||
# snmptrapd.conf configuration file. Then the process
|
||||
chomp(my $pid= `/bin/ps -ef | /bin/grep snmptrapd | /bin/grep -v grep | /bin/awk '{print \$2}'`);
|
||||
if($pid){
|
||||
`/bin/kill -9 $pid`;
|
||||
}
|
||||
# start it up again!
|
||||
system("/usr/sbin/snmptrapd -m ALL");
|
||||
|
||||
# get the PID of the currently running snmpd if it is running.
|
||||
# if it's running then we just leave. Otherwise, if we don't get A PID, then we
|
||||
# assume that it isn't running, and start it up again!
|
||||
chomp(my $pid= `/bin/ps -ef | /bin/grep snmpd | /bin/grep -v grep | /bin/awk '{print \$2}'`);
|
||||
unless($pid){
|
||||
# start it up again!
|
||||
system("/usr/sbin/snmpd");
|
||||
}
|
||||
|
||||
return (0, "started");
|
||||
return (0, "");
|
||||
}
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
@ -414,175 +710,7 @@ sub configMail {
|
||||
}
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
=head3 stop
|
||||
This function gets called by the monitorctrl module when
|
||||
xcatd stops.
|
||||
Arguments:
|
||||
none
|
||||
Returns:
|
||||
(return code, message)
|
||||
=cut
|
||||
#--------------------------------------------------------------------------------
|
||||
sub stop {
|
||||
#print "snmpmon::stop called\n";
|
||||
|
||||
# do not turn it on on the service node
|
||||
#if (xCAT::Utils->isServiceNode()) { return (0, "");}
|
||||
|
||||
#disable MMAs if any
|
||||
configMPA(0);
|
||||
|
||||
#disable BMC so that it stop senging alerts (PETs) to this node
|
||||
configBMC(0);
|
||||
|
||||
if (-f "/usr/share/snmp/snmptrapd.conf.orig"){
|
||||
# copy back the old one
|
||||
`mv -f /usr/share/snmp/snmptrapd.conf.orig /usr/share/snmp/snmptrapd.conf`;
|
||||
} else {
|
||||
if (-f "/usr/share/snmp/snmptrapd.conf"){
|
||||
|
||||
# if the file exists, delete all entries that have xcat_traphandler
|
||||
my $cmd = "grep -v xcat_traphandler /usr/share/snmp/snmptrapd.conf ";
|
||||
$cmd .= "> /usr/share/snmp/snmptrapd.conf.unconfig ";
|
||||
`$cmd`;
|
||||
|
||||
# move it back to the snmptrapd.conf file.
|
||||
`mv -f /usr/share/snmp/snmptrapd.conf.unconfig /usr/share/snmp/snmptrapd.conf`;
|
||||
}
|
||||
}
|
||||
|
||||
# now check to see if the daemon is running. If it is then we need to resart or stop?
|
||||
# it with the new snmptrapd.conf file that will not forward events to RMC.
|
||||
chomp(my $pid= `/bin/ps -ef | /bin/grep snmptrapd | /bin/grep -v grep | /bin/awk '{print \$2}'`);
|
||||
if($pid){
|
||||
`/bin/kill -9 $pid`;
|
||||
# start it up again!
|
||||
#system("/usr/sbin/snmptrapd");
|
||||
}
|
||||
|
||||
return (0, "stopped");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
=head3 supportNodeStatusMon
|
||||
This function is called by the monitorctrl module to check
|
||||
if SNMP can help monitoring and returning the node status.
|
||||
SNMP does not support this function.
|
||||
|
||||
Arguments:
|
||||
none
|
||||
Returns:
|
||||
1
|
||||
=cut
|
||||
#--------------------------------------------------------------------------------
|
||||
sub supportNodeStatusMon {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
=head3 startNodeStatusMon
|
||||
This function is called by the monitorctrl module to tell
|
||||
SNMP to start monitoring the node status and feed them back
|
||||
to xCAT. SNMP does not have this support.
|
||||
|
||||
Arguments:
|
||||
None.
|
||||
Returns:
|
||||
(return code, message)
|
||||
|
||||
=cut
|
||||
#--------------------------------------------------------------------------------
|
||||
sub startNodeStatusMon {
|
||||
return (1, "This function is not supported.");
|
||||
}
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
=head3 stopNodeStatusMon
|
||||
This function is called by the monitorctrl module to tell
|
||||
SNMP to stop feeding the node status info back to xCAT.
|
||||
SNMP does not support this function.
|
||||
|
||||
Arguments:
|
||||
none
|
||||
Returns:
|
||||
(return code, message)
|
||||
=cut
|
||||
#--------------------------------------------------------------------------------
|
||||
sub stopNodeStatusMon {
|
||||
return (1, "This function is not supported.");
|
||||
}
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
=head3 addNodes
|
||||
This function adds the nodes into the SNMP domain.
|
||||
Arguments:
|
||||
nodes --nodes to be added. It is a pointer to an array. If the next argument is
|
||||
1, each element is a ref to an array of [nodes, status]. For example:
|
||||
[['node1', 'active'], ['node2', 'booting']..].
|
||||
if the next argument is 0, each element is a node name to be added.
|
||||
boolean -- 1, or 0.
|
||||
Returns:
|
||||
(error code, error message)
|
||||
=cut
|
||||
#--------------------------------------------------------------------------------
|
||||
sub addNodes {
|
||||
# print "snmpmon::addNodes\n";
|
||||
# $noderef=shift;
|
||||
# if ($noderef =~ /xCAT_monitoring::snmpmon/) {
|
||||
# $noderef=shift;
|
||||
# }
|
||||
# my $info=shift;
|
||||
# if ($info) {
|
||||
# foreach(@$noderef) {
|
||||
# my $node_info=$_;
|
||||
# print " node=$node_info->[0], status=$node_info->[1]\n";
|
||||
# }
|
||||
# } else {
|
||||
# print "noderef=@$noderef\n";
|
||||
# }
|
||||
|
||||
return (0, "ok");
|
||||
}
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
=head3 removeNodes
|
||||
This function removes the nodes from the SNMP domain.
|
||||
Arguments:
|
||||
nodes --nodes to be added. It is a pointer to an array. If the next argument is
|
||||
1, each element is a ref to an array of [nodes, status]. For example:
|
||||
[['node1', 'active'], ['node2', 'booting']..].
|
||||
if the next argument is 0, each element is a node name to be added.
|
||||
boolean -- 1, or 0.
|
||||
Returns:
|
||||
(error code, error message)
|
||||
=cut
|
||||
#--------------------------------------------------------------------------------
|
||||
sub removeNodes {
|
||||
# print "snmpmon::removeNodes\n";
|
||||
# $noderef=shift;
|
||||
# if ($noderef =~ /xCAT_monitoring::snmpmon/) {
|
||||
# $noderef=shift;
|
||||
# }
|
||||
# my $info=shift;
|
||||
# if ($info) {
|
||||
# foreach(@$noderef) {
|
||||
# my $node_info=$_;
|
||||
# print " node=$node_info->[0], status=$node_info->[1]\n";
|
||||
# }
|
||||
# } else {
|
||||
# print "noderef=@$noderef\n";
|
||||
# }
|
||||
|
||||
return (0, "ok");
|
||||
}
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
=head3 processSettingChanges
|
||||
@ -646,3 +774,101 @@ sub getDescription {
|
||||
system events.\n"
|
||||
}
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
=head3 getNodesMonServers
|
||||
This function checks the given nodes, if they are bmc/ipmi nodes, the monserver pairs of
|
||||
the nodes will be returned. If the nodes are managed by MM, the monserver pairs of their
|
||||
mpa will be returned.
|
||||
Arguments:
|
||||
p_nodes -- a pointer to an arrays of nodes to be added for monitoring. none means all.
|
||||
callback -- the callback pointer for error and status displaying. It can be null.
|
||||
Returns:
|
||||
A pointer to a hash table with monserver pairs as the key and an array
|
||||
pointer of nodes as the value.
|
||||
For example: { "sv1,ma1"=>[node1,node2], "sv2,ma2"=>node3...}
|
||||
The pair is in the format of "monserver,monmaser". First one is the monitoring service
|
||||
node ip/hostname that faces the mn and the second one is the monitoring service
|
||||
node ip/hostname that faces the cn.
|
||||
The value of the first one can be "noservicenode" meaning that there is no service node
|
||||
for that node. In this case the second one is the site master.
|
||||
=cut
|
||||
#--------------------------------------------------------------------------------
|
||||
sub getNodesMonServers
|
||||
{
|
||||
print "snmpmon:getNodesMonServer called\n";
|
||||
my $noderef=shift;
|
||||
if ($noderef =~ /xCAT_monitoring::snmpmon/) {
|
||||
$noderef=shift;
|
||||
}
|
||||
my $callback=shift;
|
||||
|
||||
my $ret={};
|
||||
my $localhostname=hostname();
|
||||
my $pPairHash=xCAT_monitoring::monitorctrl->getNodeMonServerPair($noderef, 0);
|
||||
|
||||
#check for blades, only returns the MPAs and their monservers
|
||||
my %mpa_hash=();
|
||||
my $table=xCAT::Table->new("mp");
|
||||
if ($table) {
|
||||
my @tmp1=$table->getAllNodeAttribs(['node','mpa']);
|
||||
if (@tmp1 > 0) {
|
||||
foreach(@tmp1) {
|
||||
my $node=$_->{node};
|
||||
my $mpa=$_->{mpa};
|
||||
if ((!exists($pPairHash->{$node})) && (!exists($pPairHash->{$mpa}))) {next;} #not in input
|
||||
|
||||
#if (exists($pPairHash->{$node})) { delete($pPairHash->{$node}); }
|
||||
if ($mpa_hash{$mpa}) { next;} #already handled
|
||||
|
||||
$mpa_hash{$mpa}=1;
|
||||
|
||||
my $pairs;
|
||||
if (exists($pPairHash->{$mpa})) {
|
||||
$pairs=$pPairHash->{$mpa};
|
||||
} else {
|
||||
my $pHash=xCAT_monitoring::monitorctrl->getNodeMonServerPair([$mpa], 0);
|
||||
$pairs=$pHash->{$mpa};
|
||||
}
|
||||
|
||||
if (exists($ret->{$pairs})) {
|
||||
my $pa=$ret->{$pairs};
|
||||
push(@$pa, $mpa);
|
||||
}
|
||||
else {
|
||||
$ret->{$pairs}=[$mpa];
|
||||
}
|
||||
|
||||
#if (exists($pPairHash->{$mpa}))) { delete($pPairHash->{$mpa}); }
|
||||
} #foreach
|
||||
}
|
||||
$table->close();
|
||||
}
|
||||
|
||||
|
||||
#check BMC/IPMI nodes
|
||||
$table=xCAT::Table->new("ipmi");
|
||||
if ($table) {
|
||||
my @tmp1=$table->getAllNodeAttribs(['node','bmc']);
|
||||
if (@tmp1 > 0) {
|
||||
foreach(@tmp1) {
|
||||
my $node=$_->{node};
|
||||
my $bmc=$_->{bmc};
|
||||
if (! exists($pPairHash->{$node})) {next;}
|
||||
my $pairs=$pPairHash->{$node};
|
||||
|
||||
if (exists($ret->{$pairs})) {
|
||||
my $pa=$ret->{$pairs};
|
||||
push(@$pa, $node);
|
||||
}
|
||||
else {
|
||||
$ret->{$pairs}=[$node];
|
||||
}
|
||||
|
||||
#delete($pPairHash->{$node});
|
||||
} #foreach
|
||||
}
|
||||
$table->close();
|
||||
}
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
@ -6,10 +6,11 @@ BEGIN
|
||||
$::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : '/opt/xcat';
|
||||
}
|
||||
use lib "$::XCATROOT/lib/perl";
|
||||
use strict;
|
||||
use xCAT::Utils;
|
||||
use xCAT::GlobalDef;
|
||||
use xCAT_monitoring::monitorctrl;
|
||||
|
||||
use Sys::Hostname;
|
||||
|
||||
|
||||
1;
|
||||
@ -24,16 +25,23 @@ use xCAT_monitoring::monitorctrl;
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
=head3 start
|
||||
This function gets called by the monitorctrl module
|
||||
when xcatd starts.
|
||||
This function gets called by the monitorctrl module when monstart command
|
||||
gets called and when xcatd starts.
|
||||
|
||||
Arguments:
|
||||
None.
|
||||
p_nodes -- a pointer to an arrays of nodes to be monitored. null means all.
|
||||
scope -- the action scope, it indicates the node type the action will take place.
|
||||
0 means localhost only.
|
||||
2 means both monservers and nodes,
|
||||
callback -- the callback pointer for error and status displaying. It can be null.
|
||||
Returns:
|
||||
(return code, message)
|
||||
(return code, message)
|
||||
if the callback is set, use callback to display the status and error.
|
||||
|
||||
=cut
|
||||
#--------------------------------------------------------------------------------
|
||||
sub start {
|
||||
#print "xcatmon.start\n";
|
||||
print "xcatmon.start\n";
|
||||
|
||||
return (0, "started");
|
||||
}
|
||||
@ -42,15 +50,20 @@ sub start {
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
=head3 stop
|
||||
This function gets called by the monitorctrl module when
|
||||
xcatd stops.
|
||||
This function gets called by the monitorctrl module when monstop command gets called.
|
||||
Arguments:
|
||||
none
|
||||
p_nodes -- a pointer to an arrays of nodes to be stoped for monitoring. null means all.
|
||||
scope -- the action scope, it indicates the node type the action will take place.
|
||||
0 means localhost only.
|
||||
2 means both monservers and nodes,
|
||||
callback -- the callback pointer for error and status displaying. It can be null.
|
||||
Returns:
|
||||
(return code, message)
|
||||
(return code, message)
|
||||
if the callback is set, use callback to display the status and error.
|
||||
=cut
|
||||
#--------------------------------------------------------------------------------
|
||||
sub stop {
|
||||
print "xcatmon.stop\n";
|
||||
|
||||
return (0, "stopped");
|
||||
}
|
||||
@ -78,23 +91,30 @@ sub supportNodeStatusMon {
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
=head3 startNodeStatusMon
|
||||
This function is called by the monitorctrl module to tell
|
||||
the product to start monitoring the node status and feed them back
|
||||
This function is called by the monitorctrl module when monstart gets called and
|
||||
when xcatd starts. It starts monitoring the node status and feed them back
|
||||
to xCAT.
|
||||
Arguments:
|
||||
None.
|
||||
p_nodes -- a pointer to an arrays of nodes to be monitored. null means all.
|
||||
scope -- the action scope, it indicates the node type the action will take place.
|
||||
0 means localhost only.
|
||||
2 means both monservers and nodes,
|
||||
callback -- the callback pointer for error and status displaying. It can be null.
|
||||
note: p_nodes and scope are ignored by this plugin.
|
||||
Returns:
|
||||
(return code, message)
|
||||
|
||||
(return code, message)
|
||||
if the callback is set, use callback to display the status and error.
|
||||
=cut
|
||||
#--------------------------------------------------------------------------------
|
||||
sub startNodeStatusMon {
|
||||
my $temp=shift;
|
||||
if ($temp =~ /xCAT_monitoring::xcatmon/) {
|
||||
$temp=shift;
|
||||
sub startNodeStatusMon
|
||||
{
|
||||
print "xcatmon.startNodeStatusMon\n";
|
||||
my $noderef=shift;
|
||||
if ($noderef =~ /xCAT_monitoring::xcatmon/) {
|
||||
$noderef=shift;
|
||||
}
|
||||
|
||||
#print "xcatmon.startNodeStatusMon\n";
|
||||
my $scope=shift;
|
||||
my $callback=shift;
|
||||
|
||||
#run the command first to update the status,
|
||||
my $cmd="$::XCATROOT/sbin/xcatnodemon";
|
||||
@ -134,71 +154,112 @@ sub startNodeStatusMon {
|
||||
$newentry="*/$value * * * * XCATROOT=$::XCATROOT PATH=$ENV{'PATH'} XCATCFG='$ENV{'XCATCFG'}' $cmd";
|
||||
}
|
||||
my ($code, $msg)=xCAT::Utils::add_cron_job($newentry);
|
||||
if ($code==0) { return (0, "started"); }
|
||||
else { return ($code, $msg); }
|
||||
my $localhostname=hostname();
|
||||
if ($code==0) {
|
||||
if ($callback) {
|
||||
my $rsp={};
|
||||
$rsp->{data}->[0]="$localhostname: started. Refresh interval is $value minute(s).";
|
||||
$callback->($rsp);
|
||||
}
|
||||
return (0, "started"); }
|
||||
else {
|
||||
if ($callback) {
|
||||
my $rsp={};
|
||||
$rsp->{data}->[0]="$localhostname: $code $msg";
|
||||
$callback->($rsp);
|
||||
}
|
||||
return ($code, $msg);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
=head3 stopNodeStatusMon
|
||||
This function is called by the monitorctrl module to tell
|
||||
the product to stop feeding the node status info back to xCAT.
|
||||
|
||||
This function is called by the monitorctrl module when monstop command is issued.
|
||||
It stops feeding the node status info back to xCAT.
|
||||
Arguments:
|
||||
none
|
||||
p_nodes -- a pointer to an arrays of nodes to stoped for monitoring. null means all.
|
||||
scope -- the action scope, it indicates the node type the action will take place.
|
||||
0 means localhost only.
|
||||
2 means both monservers and nodes,
|
||||
callback -- the callback pointer for error and status displaying. It can be null.
|
||||
note: p_nodes and scope are ignored by this plugin.
|
||||
Returns:
|
||||
(return code, message)
|
||||
(return code, message)
|
||||
if the callback is set, use callback to display the status and error.
|
||||
=cut
|
||||
#--------------------------------------------------------------------------------
|
||||
sub stopNodeStatusMon {
|
||||
#TODO: turn off the node status monitoring.
|
||||
print "xcatmon.stopNodeStatusMon\n";
|
||||
my $noderef=shift;
|
||||
if ($noderef =~ /xCAT_monitoring::xcatmon/) {
|
||||
$noderef=shift;
|
||||
}
|
||||
my $scope=shift;
|
||||
my $callback=shift;
|
||||
|
||||
my $job="$::XCATROOT/sbin/xcatnodemon";
|
||||
my ($code, $msg)=xCAT::Utils::remove_cron_job($job);
|
||||
if ($code==0) { return (0, "stopped"); }
|
||||
else { return ($code, $msg); }
|
||||
|
||||
my $localhostname=hostname();
|
||||
if ($code==0) {
|
||||
if ($callback) {
|
||||
my $rsp={};
|
||||
$rsp->{data}->[0]="$localhostname: stopped.";
|
||||
$callback->($rsp);
|
||||
}
|
||||
return (0, "stopped"); }
|
||||
else {
|
||||
if ($callback) {
|
||||
my $rsp={};
|
||||
$rsp->{data}->[0]="$localhostname: $code $msg";
|
||||
$callback->($rsp);
|
||||
}
|
||||
return ($code, $msg);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
=head3 addNodes
|
||||
This function is called by the monitorctrl module when new nodes are added
|
||||
to the xCAT cluster. It should add the nodes into the product for monitoring.
|
||||
=head3 config
|
||||
This function configures the cluster for the given nodes.
|
||||
This function is called by when monconfig command is issued or when xcatd starts
|
||||
on the service node. It will configure the cluster to include the given nodes within
|
||||
the monitoring doamin.
|
||||
Arguments:
|
||||
nodes --nodes to be added. It is a pointer to an array. If the next argument is
|
||||
1, each element is a ref to an array of [nodes, status]. For example:
|
||||
[['node1', 'active'], ['node2', 'booting']..].
|
||||
if the next argument is 0, each element is a node name to be added.
|
||||
boolean -- 1, or 0.
|
||||
p_nodes -- a pointer to an arrays of nodes to be added for monitoring. none means all.
|
||||
scope -- the action scope, it indicates the node type the action will take place.
|
||||
0 means localhost only.
|
||||
2 means both monservers and nodes,
|
||||
callback -- the callback pointer for error and status displaying. It can be null.
|
||||
Returns:
|
||||
(error code, error message)
|
||||
=cut
|
||||
#--------------------------------------------------------------------------------
|
||||
sub addNodes {
|
||||
sub config {
|
||||
|
||||
#print "xcatmon:addNodes called\n";
|
||||
print "xcatmon:config called\n";
|
||||
|
||||
return (0, "ok");
|
||||
}
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
=head3 removeNodes
|
||||
=head3 deconfig
|
||||
This function de-configures the cluster for the given nodes.
|
||||
This function is called by the monitorctrl module when nodes are removed
|
||||
from the xCAT cluster. It should remove the nodes from the product for monitoring.
|
||||
Arguments:
|
||||
nodes --nodes to be added. It is a pointer to an array. If the next argument is
|
||||
1, each element is a ref to an array of [nodes, status]. For example:
|
||||
[['node1', 'active'], ['node2', 'booting']..].
|
||||
if the next argument is 0, each element is a node name to be added.
|
||||
boolean -- 1, or 0.
|
||||
p_nodes -- a pointer to an arrays of nodes to be removed for monitoring. none means all.
|
||||
scope -- the action scope, it indicates the node type the action will take place.
|
||||
0 means localhost only.
|
||||
2 means both monservers and nodes,
|
||||
callback -- the callback pointer for error and status displaying. It can be null.
|
||||
Returns:
|
||||
(error code, error message)
|
||||
=cut
|
||||
#--------------------------------------------------------------------------------
|
||||
sub removeNodes {
|
||||
sub deconfig {
|
||||
|
||||
#print "xcatmon:removeNodes called\n";
|
||||
print "xcatmon:deconfig called\n";
|
||||
|
||||
return (0, "ok");
|
||||
}
|
||||
@ -216,7 +277,7 @@ sub removeNodes {
|
||||
=cut
|
||||
#--------------------------------------------------------------------------------
|
||||
sub getMonNodesStatus {
|
||||
%status=();
|
||||
my %status=();
|
||||
my @inactive_nodes=();
|
||||
my @active_nodes=();
|
||||
my @unknown_nodes=();
|
||||
@ -262,9 +323,8 @@ sub getMonNodesStatus {
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
=head3 processNodeStatusChanges
|
||||
This function will update the status column of the
|
||||
nodelist table with the new node status.
|
||||
=head3 setNodeStatusAttributes
|
||||
This function will update the status column of the nodelist table with the new node status.
|
||||
Arguments:
|
||||
status -- a hash pointer of the node status. A key is a status string. The value is
|
||||
an array pointer of nodes that have the same status.
|
||||
@ -274,12 +334,12 @@ sub getMonNodesStatus {
|
||||
non-0 for not successful.
|
||||
=cut
|
||||
#--------------------------------------------------------------------------------
|
||||
sub processNodeStatusChanges {
|
||||
sub setNodeStatusAttributes {
|
||||
my $temp=shift;
|
||||
if ($temp =~ /xCAT_monitoring::xcatmon/) {
|
||||
$temp=shift;
|
||||
}
|
||||
return xCAT_monitoring::monitorctrl->processNodeStatusChanges($temp);
|
||||
return xCAT_monitoring::monitorctrl->setNodeStatusAttributes($temp);
|
||||
}
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
@ -295,8 +355,8 @@ sub processNodeStatusChanges {
|
||||
#--------------------------------------------------------------------------------
|
||||
sub processSettingChanges {
|
||||
#restart the cron job
|
||||
xCAT_monitoring::xcatmon->stopNodeStatusMon();
|
||||
xCAT_monitoring::xcatmon->startNodeStatusMon();
|
||||
xCAT_monitoring::xcatmon->stopNodeStatusMon([], 0);
|
||||
xCAT_monitoring::xcatmon->startNodeStatusMon([], 0);
|
||||
}
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
|
@ -144,18 +144,6 @@ sub process_request
|
||||
}
|
||||
|
||||
my $errored = 0;
|
||||
sub pass_along {
|
||||
my $resp = shift;
|
||||
$::callback->($resp);
|
||||
if ($resp and ($resp->{errorcode} and $resp->{errorcode}->[0]) or ($resp->{error} and $resp->{error}->[0])) {
|
||||
$errored=1;
|
||||
}
|
||||
foreach (@{$resp->{node}}) {
|
||||
if ($_->{error} or $_->{errorcode}) {
|
||||
$errored=1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
@ -539,16 +527,7 @@ ll~;
|
||||
my $rsp;
|
||||
push @{$rsp->{data}}, "AIX/NIM nodes were initialized.\n";
|
||||
xCAT::MsgUtils->message("I", $rsp, $callback);
|
||||
###################
|
||||
#give monitoring code a chance to prepare the master for the node deployment
|
||||
#push @{$rsp->{data}}, "Initializing for the node monitoring.\n";
|
||||
#xCAT::MsgUtils->message("I", $rsp, $callback);
|
||||
my %new_request = (
|
||||
command => ['moncfgmaster'],
|
||||
node => \@nodelist
|
||||
);
|
||||
$sub_req->(\%new_request, \&pass_along);
|
||||
###################
|
||||
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
@ -3003,16 +2982,7 @@ ll~;
|
||||
my $rsp;
|
||||
push @{$rsp->{data}}, "AIX/NIM diskless nodes were initialized.\n";
|
||||
xCAT::MsgUtils->message("I", $rsp, $callback);
|
||||
#################
|
||||
#give monitoring code a chance to prepare the master for the node deployment
|
||||
#push @{$rsp->{data}}, "Initializing for the node monitoring.\n";
|
||||
#xCAT::MsgUtils->message("I", $rsp, $callback);
|
||||
my %new_request = (
|
||||
command => ['moncfgmaster'],
|
||||
node => \@nodelist
|
||||
);
|
||||
$sub_req->(\%new_request, \&pass_along);
|
||||
#################
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -295,15 +295,6 @@ sub process_request {
|
||||
}
|
||||
}
|
||||
|
||||
##################################
|
||||
#give monitoring code a chance to prepare the master for the node deployment
|
||||
my %new_request = (
|
||||
command => ['moncfgmaster'],
|
||||
node => \@rnodes
|
||||
);
|
||||
$sub_req->(\%new_request, \&pass_along);
|
||||
##################################
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -282,14 +282,6 @@ sub process_request {
|
||||
node=>\@breaknetboot,
|
||||
arg=>['-s','filename = \"xcat/nonexistant_file_to_intentionally_break_netboot_for_localboot_to_work\";']},$callback);
|
||||
|
||||
#####################################
|
||||
# give monitoring code a chance to prepare the master for the node deployment
|
||||
my %new_request = (
|
||||
command => ['moncfgmaster'],
|
||||
node => \@rnodes
|
||||
);
|
||||
$sub_req->(\%new_request, \&pass_along);
|
||||
#####################################
|
||||
}
|
||||
|
||||
|
||||
|
@ -56,7 +56,7 @@ if (@changed_inactive>0) {
|
||||
|
||||
#only set the node status for the changed ones
|
||||
if (keys(%node_status) > 0) {
|
||||
xCAT_monitoring::xcatmon::processNodeStatusChanges(\%node_status);
|
||||
xCAT_monitoring::xcatmon::setNodeStatusAttributes(\%node_status);
|
||||
}
|
||||
|
||||
#($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
|
||||
|
Loading…
Reference in New Issue
Block a user