diff --git a/xCAT-server/lib/xcat/monitoring/gangliamon.pm b/xCAT-server/lib/xcat/monitoring/gangliamon.pm index f76daf667..b02440516 100755 --- a/xCAT-server/lib/xcat/monitoring/gangliamon.pm +++ b/xCAT-server/lib/xcat/monitoring/gangliamon.pm @@ -232,10 +232,13 @@ sub confGmond print "cluster is: $hostname \n"; print "checking gmond settings \n"; - `/bin/grep "xCAT gmond settings done" /etc/gmond.conf`; - print "result is $? \n"; + if (-e "/etc/ganglia") + { #opening if 3.1.0 + print "ganglia version 3.1.0 \n"; + `/bin/grep "xCAT gmond settings done" /etc/ganglia/gmond.conf`; + print "result in V3.1.0 is $? \n"; - if($?) + if($?) { #openinf if ? if($callback) { my $resp={}; @@ -243,6 +246,90 @@ sub confGmond $callback->($resp); } else { xCAT::MsgUtils->message('S', "Gmond not configured $? \n"); } + #backup the original file + print "backing up original gmond file \n"; + `/bin/cp -f /etc/ganglia/gmond.conf /etc/ganglia/gmond.conf.orig`; + print "original file backed up \n"; + my $master=xCAT::Utils->get_site_Master(); + print "obtained site master: $master \n"; + open(FILE1, "/etc/ganglia/gmond.conf.tmp"); + print "files opened for config \n"; + my $fname = "/etc/ganglia/gmond.conf"; + unless ( open( CONF, $fname )) + { + return(0); + } + + my @raw_data = ; + close( CONF ); + print "trying to pattern matching \n"; + my $str = join('',@raw_data); + $str =~ s/setuid = yes/setuid = no/; + $str =~ s/bind/#bind/; + $str =~ s/mcast_join = .*/host = $master/; + print "Phase 1 pattern matching done and trying to use monitoctrl \n"; + my $pPairHash=xCAT_monitoring::monitorctrl->getMonServer($noderef); + print "pair has obtained \n"; + print "pairHash: $pPairHash \n"; + #identification of this node + my @hostinfo=xCAT::Utils->determinehostname(); + print "host:@hostinfo\n"; + my $isSV=xCAT::Utils->isServiceNode(); + my %iphash=(); + foreach(@hostinfo) {$iphash{$_}=1;} + if (!$isSV) { $iphash{'noservicenode'}=1;} + + # my @children; + foreach my $key (keys (%$pPairHash)) + { #opening for each + my @key_a=split(',', $key); + if (! $iphash{$key_a[0]}) { next;} + print "a[0] is: $key_a[0] \n"; + print "a[1] is: $key_a[1] \n"; + my $pattern = '^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})'; + if ( $key_a[0]!~/$pattern/ ) + { + my $cluster = $key_a[0]; + print "it workrd cluster is: $cluster \n"; + if (-e "/etc/xCATSN") + { + $str =~ s/name = "unspecified"/name="$cluster"/; + } + } + + } #closing for each + + $str =~ s/name = "unspecified"/name="$hostname"/; + $str =~ s/mcast_join/# mcast_join/; + print FILE $str; + print FILE "# xCAT gmond settings done \n"; + print "Gmond conf succ \n"; + close(FILE1); + close(FILE); + print "files closed \n"; + `/bin/cp -f /etc/ganglia/gmond.conf.tmp /etc/ganglia/gmond.conf`; + + # } #closing for each + + } #closing if ? + + } #closing if 3.1.0 + + else + { #opening if 3.0.7 + print "ganglia version 3.0.7 \n"; + `/bin/grep "xCAT gmond settings done" /etc/gmond.conf`; + print "result in V3.0.7 is $? \n"; + + if($?) + { #openinf if ? + if($callback) { + my $resp={}; + $resp->{data}->[0]="$localhost: $?"; + $callback->($resp); + } else { xCAT::MsgUtils->message('S', "Gmond not configured $? \n"); } + #backup the original file print "backing up original gmond file \n"; `/bin/cp -f /etc/gmond.conf /etc/gmond.conf.orig`; @@ -310,6 +397,10 @@ sub confGmond # } #closing for each } #closing if ? + + } #closing if 3.0.7 + + if ($scope) {#opening if scope of confGmond @@ -419,10 +510,117 @@ sub confGmetad print "cluster is: $hostname \n"; print "checking gmetad settings \n"; - `/bin/grep "xCAT gmetad settings done" /etc/gmetad.conf`; - print "result is $? \n"; + if (-e "/etc/ganglia") + { #opening if 3.1.0 + print "ganglia version 3.1.0 \n"; + `/bin/grep "xCAT gmetad settings done" /etc/ganglia/gmetad.conf`; + print "result V3.1.0 is $? \n"; if($?) + { #openinf if ? + if($callback) { + my $resp={}; + $resp->{data}->[0]="$localhost: $?"; + $callback->($resp); + } else { xCAT::MsgUtils->message('S', "Gmetad not configured $? \n"); } + # backup the original file + print "backing up original gmetad file \n"; + `/bin/cp -f /etc/ganglia/gmetad.conf /etc/ganglia/gmetad.conf.orig`; + + open(FILE1, "/etc/ganglia/gmetad.conf.tmp"); + + while (readline(FILE1)) + { + # print STDERR "READ = $_\n"; + s/data_source/#data_source/g; + # print STDERR "POST-READ = $_\n"; + print FILE $_; + } + close(FILE1); + close(FILE); + `/bin/cp -f /etc/ganglia/gmetad.conf.tmp /etc/ganglia/gmetad.conf`; + + open(OUTFILE,"+>>/etc/ganglia/gmetad.conf") + or die ("Cannot open file \n"); + print(OUTFILE "# Setting up GMETAD configuration file \n"); + + if (-e "/etc/xCATMN") + { + print "\n Managmt node \n"; + print(OUTFILE "data_source \"$hostname\" localhost \n"); + } + my $noderef=xCAT_monitoring::monitorctrl->getMonHierarchy(); + my @hostinfo=xCAT::Utils->determinehostname(); + print "host:@hostinfo\n"; + my $isSV=xCAT::Utils->isServiceNode(); + my %iphash=(); + foreach(@hostinfo) {$iphash{$_}=1;} + if (!$isSV) { $iphash{'noservicenode'}=1;} + + my @children; + my $cluster; + foreach my $key (keys (%$noderef)) + { + my @key_g=split(',', $key); + # print "a[0] is: $key_g[0] \n"; + if (! $iphash{$key_g[0]}) { next;} + my $mon_nodes=$noderef->{$key}; + print "a[0] is hi: $key_g[0] \n"; + my $pattern = '^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})'; + if ( $key_g[0]!~/$pattern/ ) + { + no warnings; + $cluster = $key_g[0]; + print "found cluster: $cluster \n"; + } + foreach(@$mon_nodes) + { + my $node=$_->[0]; + my $nodetype=$_->[1]; + print "node=$node, nodetype=$nodetype\n"; + if (($nodetype) && ($nodetype =~ /$::NODETYPE_OSI/)) + { + push(@children,$node); + } + } + + } + print "children:@children\n"; + my $num=@children; + print "the number of children is: $num \n"; + if (-e "/etc/xCATSN") + { + print "cluster hi is $cluster \n"; + for (my $i = 0; $i < $num; $i++) + { + print "childred is $children[ $i ] \n"; + print ( OUTFILE "data_source \"$cluster\" $children[ $i ] \n"); + print "children printed \n"; + } + } + + else + { + for (my $j = 0; $j < $num; $j++) + { + print "childred is $children[ $j ] \n"; + print ( OUTFILE "data_source \"$children[ $j ]\" $children[ $j ] \n"); + print "children printed \n"; + } + } + print(OUTFILE "# xCAT gmetad settings done \n"); + close(OUTFILE); + + } #closing if? loop + } # closing if 3.1.0 +else + + {#opening if 3.0.7 + print "ganglia version 3.0.7 \n"; + `/bin/grep "xCAT gmetad settings done" /etc/gmetad.conf`; + print "result in V3.0.7 is $? \n"; + if($?) { #openinf if ? if($callback) { my $resp={}; @@ -520,6 +718,10 @@ sub confGmetad } #closing if? loop + } #closing if 3.0.7 + + + } # closing subrouting @@ -584,18 +786,38 @@ sub deconfGmond my $localhost=hostname(); print "saving configured Gmond file \n"; - `/bin/cp -f /etc/gmond.conf /etc/gmond.conf.save`; - print "deconfiguring Ganglia Gmond \n"; - my $decon_gmond=`/bin/cp -f /etc/gmond.conf.orig /etc/gmond.conf`; - if($?) + if (-e "/etc/ganglia") + { #opening if V3.1.0 + print "Ganglia V 3.1.0 \n"; + `/bin/cp -f /etc/ganglia/gmond.conf /etc/ganglia/gmond.conf.save`; + print "deconfiguring Ganglia Gmond \n"; + my $decon_gmond=`/bin/cp -f /etc/ganglia/gmond.conf.orig /etc/ganglia/gmond.conf`; + if($?) { #openinf if ? if($callback) { my $resp={}; $resp->{data}->[0]="$localhost:$decon_gmond"; $callback->($resp); } else { xCAT::MsgUtils->message('S', "Gmond not deconfigured $decon_gmond \n"); } - } - + } # closing if ? + } #closing if V3.1.0 + + else + { #opening V3.0.7 + print "Ganglia V 3.0.7 \n"; + `/bin/cp -f /etc/gmond.conf /etc/gmond.conf.save`; + print "deconfiguring Ganglia Gmond \n"; + my $decon_gmond=`/bin/cp -f /etc/gmond.conf.orig /etc/gmond.conf`; + if($?) + { #openinf if ? + if($callback) { + my $resp={}; + $resp->{data}->[0]="$localhost:$decon_gmond"; + $callback->($resp); + } else { xCAT::MsgUtils->message('S', "Gmond not deconfigured $decon_gmond \n"); } + } # closing if? + } #closing V3.0.7 + if ($scope) {#opening if scope of confGmond print "opening scope \n"; @@ -635,10 +857,13 @@ sub deconfGmond my $node = join(',',@children); print "the children are: $node \n"; print "saving the configured Gmond file in childern \n"; - my $res_sv = `XCATBYPASS=Y $::XCATROOT/bin/xdsh $node /bin/cp -f /etc/gmond.conf /etc/gmond.conf.save`; + if (-e "/etc/ganglia") + { # opening if V3.1.0 + print "Ganglia V 3.1.0 \n"; + my $res_sv = `XCATBYPASS=Y $::XCATROOT/bin/xdsh $node /bin/cp -f /etc/ganglia/gmond.conf /etc/ganglia/gmond.conf.save`; - my $res_cp = `XCATBYPASS=Y $::XCATROOT/bin/xdsh $node /bin/cp -f /etc/gmond.conf.orig /etc/gmond.conf`; - if($?) + my $res_cp = `XCATBYPASS=Y $::XCATROOT/bin/xdsh $node /bin/cp -f /etc/ganglia/gmond.conf.orig /etc/ganglia/gmond.conf`; + if($?) { #openinf if ? if($callback) { @@ -648,6 +873,25 @@ sub deconfGmond } else { xCAT::MsgUtils->message('S', "Gmond not deconfigured: $res_cp \n"); } } #closing if ? + } # closing if V3.1.0 + + else + { + print "Ganglia V 3.0.7 \n"; + my $res_sv = `XCATBYPASS=Y $::XCATROOT/bin/xdsh $node /bin/cp -f /etc/gmond.conf /etc/gmond.conf.save`; + + my $res_cp = `XCATBYPASS=Y $::XCATROOT/bin/xdsh $node /bin/cp -f /etc/gmond.conf.orig /etc/gmond.conf`; + if($?) + { #openinf if ? + if($callback) + { + my $resp={}; + $resp->{data}->[0]="$localhost: $res_cp"; + $callback->($resp); + } + else { xCAT::MsgUtils->message('S', "Gmond not deconfigured: $res_cp \n"); } + } #closing if ? + } # closing if V3.1.0 } # closing for each } # closing if scope @@ -683,9 +927,12 @@ sub deconfGmetad my $localhost=hostname(); print "saving configured Gmetad file \n"; - `/bin/cp -f /etc/gmetad.conf /etc/gmetad.conf.save`; + if (-e "/etc/ganglia") + { #opening V3.1.0 + print "Ganglia V 3.1.0 \n"; + `/bin/cp -f /etc/ganglia/gmetad.conf /etc/ganglia/gmetad.conf.save`; print "deconfiguring Ganglia Gmetad \n"; - my $decon_gmetad=`/bin/cp -f /etc/gmetad.conf.orig /etc/gmetad.conf`; + my $decon_gmetad=`/bin/cp -f /etc/ganglia/gmetad.conf.orig /etc/ganglia/gmetad.conf`; if($?) { #openinf if ? if($callback) { @@ -694,6 +941,24 @@ sub deconfGmetad $callback->($resp); } else { xCAT::MsgUtils->message('S', "Gmetadd not deconfigured $decon_gmetad \n"); } } + } #closing V3.1.0 + + else + { #opening V3.0.7 + print "Ganglia V 3.0.7 \n"; + `/bin/cp -f /etc/gmetad.conf /etc/gmetad.conf.save`; + print "deconfiguring Ganglia Gmetad \n"; + my $decon_gmetad=`/bin/cp -f /etc/gmetad.conf.orig /etc/gmetad.conf`; + if($?) + { #openinf if ? + if($callback) { + my $resp={}; + $resp->{data}->[0]="$localhost: $decon_gmetad"; + $callback->($resp); + } else { xCAT::MsgUtils->message('S', "Gmetadd not deconfigured $decon_gmetad \n"); } + } + } #closing 3.0.7 + } # closing subroutine #-------------------------------------------------------------------------------- diff --git a/xCAT/postscripts/confGang b/xCAT/postscripts/confGang index d42f6f602..007e10488 100755 --- a/xCAT/postscripts/confGang +++ b/xCAT/postscripts/confGang @@ -20,12 +20,13 @@ CLUSTER=\"$MONSERVER\" MASTER=$ms_ip #echo "The new IP is: $NEW_IP" #echo "I will replace now.... -gmond_conf="/etc/gmond.conf" +gmond_conf="/etc/ganglia/gmond.conf" +gmond_conf_old="/etc/gmond.conf" if [ -f $gmond_conf ]; then grep "xCAT gmond settings done" $gmond_conf if [ $? -gt 0 ]; then - /bin/cp -f $gmond_conf /etc/gmond.conf.orig + /bin/cp -f $gmond_conf /etc/ganglia/gmond.conf.orig sed -i 's/setuid = yes/setuid = no/1' $gmond_conf sed -i 's/name = "unspecified"/name='$CLUSTER'/1' $gmond_conf sed -e "1,40s/mcast_join = .*/host = $MASTER/" $gmond_conf > /etc/temp.conf @@ -35,6 +36,21 @@ gmond_conf="/etc/gmond.conf" echo "# xCAT gmond settings done sh" >> $gmond_conf fi fi + + if [ -f $gmond_conf_old ]; then + grep "xCAT gmond settings done" $gmond_conf_old + if [ $? -gt 0 ]; then + /bin/cp -f $gmond_conf_old /etc/gmond.conf.orig + sed -i 's/setuid = yes/setuid = no/1' $gmond_conf_old + sed -i 's/name = "unspecified"/name='$CLUSTER'/1' $gmond_conf_old + sed -e "1,40s/mcast_join = .*/host = $MASTER/" $gmond_conf_old > /etc/temp.conf + /bin/cp -f /etc/temp.conf $gmond_conf_old + sed -i 's/mcast_join/#/g' $gmond_conf_old + sed -i 's/bind/#/g' $gmond_conf_old + echo "# xCAT gmond settings done sh_old" >> $gmond_conf_old + fi + fi + if [ ! -f $gmond_conf ]; then # echo "file not found"