Hi ,
Please find the complete code
#!C:\Perl\bin\perl.exe
use strict;
use warnings;
#use diagnostics;
# This script is leveraged by an OMW tool and is used to [enable | d
+isable] unplanned outage
# mode on a list of servers. It requires two arguments [action] and
+ [filename].
#=====================================================================
+==========================
&main();
sub main {
my $path = 'E:/scripts/OutageNodes/';
require $path.'omwNodeDetails.pm';
open_log($path.'maintenanceMode_');
my $mode=get_mode();
my ($node_ref,$error_ref)=get_node();
my @nodes=@$node_ref;
my @errorlist=@$error_ref;
if( $mode eq 'enable'){
enable_unplanned_outage(@nodes);
}
elsif($mode eq 'disable'){
disable_unplanned_outage(@nodes);
}
else {
printLog("Error invalid Mode $mode");
}
printLog("There were ".scalar @errorlist." failed servers in serverlis
+t");
# clear serverlist
printLog ("Truncating serverlist");
open( SRV,'>',$path.'serverlist.txt')
or die "Can't open SRV '$path.serverlist': $!";
close SRV;
close_log();
}
sub get_mode {
# expect values 'enable|disable'
my $maintMode = lc $ARGV[0];
chomp($maintMode);
if ($maintMode ne 'enable' && $maintMode ne 'disable'){
$maintMode="error";
}
return $maintMode;
}
sub get_node {
my @errorlist=();
my $sPath='e:/scripts/OutageNodes/';
my $sInFile=$sPath.'serverlist.txt';
my @sContent=();
my $sText;
##checks if the file exists and pulls the info out
if (-e $sInFile){
open INFILE, '<', $sInFile or die "Could not open $sInFile : $!";
while (<INFILE>){
chomp;
$sText="$_";
push @sContent,$sText;
}
close INFILE;
}
else {
printLog("ERROR Cannot open $sInFile");
}
# check serverlist had entries
if (@sContent == 0){
printLog("ERROR No nodes found in serverlist.txt");
close_log();
exit;
}
#get FQDN************
my $hostname;
my $fqdn;
my @serverlist;
for my $NODE (@sContent){
($hostname) = split /\./, $NODE;
$fqdn = getNodeAttributes($hostname,'PrimaryNodeName');
if(length($fqdn) < 1)
{
printLog("No value returned from WMI, node ($NODE) doesn't ex
+ists in OMW.");
push @errorlist,$fqdn;
next;
}
else {
push(@serverlist,$fqdn);
}
}
return(\@serverlist, \@errorlist);
}
sub enable_unplanned_outage {
my @nodelist=@_[0..$#_];
foreach my $FQDN (@nodelist) {
printLog ("===================\n
Putting the server $FQDN into outage.");
my $cmd = "ovownodeutil.cmd -outage_node -unplanned -disable_he
+artbeat -delete_msgs -node_name $FQDN -on ";
my $output =`$cmd`;
`$cmd`;
printLog($output);
}
}
sub disable_unplanned_outage {
my @sContent = @_[0..$#_];
####When the servers is brought out of maintenance the agent has to be
+ recycled to reset all the monitors.
foreach my $FQDN (@sContent) {
printLog ("===================\n
Bringing the server $FQDN out of outage.");
my $cmd = "ovownodeutil.cmd -outage_node -unplanned -disable_
+heartbeat -delete_msgs -node_name $FQDN -off ";
`$cmd`;
my $output=`$cmd`;
printLog($output);
printLog("Restarting the opcmona to reset the monitors");
my $cmdresopcmona = "ovdeploy -cmd \"ovc -restart opcmona\" -
+host $FQDN";
`$cmdresopcmona`;
}
}
sub printLog {
my ($logLine) = @_;
my $time = sprintf "%02d:%02d:%02d",(localtime)[2,1,0];
my $date = sprintf "%04d%02d%02d",$year + 1900 , $month + 1 , $day ;
my $now=$date"\t"$time;
print LOG "$now $logLine\n";
}
sub open_log {
my ($filename) = @_;
my ($day,$month,$year) = (localtime) [3..5];
#my $date = sprintf "%04d%02d%02d",$year + 1900 , $month + 1 , $day
+;
my $logfile = $filename.'.log';
open LOG,'>>',$logfile or die "Can't open LOG '$logfile': $!\n";
print LOG "\n====SCRIPT START====\n";
}
sub close_log {
print LOG "====SCRIPT END====\n";
close LOG;
}
|