Hi Stevieb,
I corrected the errors but when i am trying to execute the script its giving me the error:
E:\scripts\OutageNodes>perl outage_nodes.pl disable
Can't open LOG 'e:\scripts\OutageNodes\maintenanceMode_201584 14:45:16.log': Inv
alid argument
Below is my updated code:
#!C:\Perl\bin\perl.exe
use strict;
use warnings;
#use diagnostics;
#
# This script is created to put the servers
# in unplanned outage as part of the tasks that
# are received to stop the monitoring on the servers
# due to some maintenance activity on the servers.
# Author : ROHIT SHARMA (INYROHS)
my $path = 'E:/scripts/OutageNodes/';
require $path.'omwNodeDetails.pm';
&main();
sub main {
#my ($mode,@nodes);
my $mode=get_mode();
my @nodes=get_node();
if( $mode eq 'enable'){
enable_unplanned_outage(@nodes);
}
elsif($mode eq 'disable'){
disable_unplanned_outage(@nodes);
}
else {
printLog("Error invalid Mode $mode");
}
# clear serverlist
printLog ("Truncating serverlist");
open( SRV,'>',$path.'serverlist.txt')
or die "Can't open SRV '$path.serverlist': $!";
close SRV;
}
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 ($sPath,$sFile,$sInFile,$sText, @sContent,@serverlist,$hostname,$f
+qdn);
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");
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");
# exit;
#}
#get FQDN************
my $hostname;
my $fqdn;
my @serverlist;
foreach 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
+its in OMW.");
next;
}
push(@serverlist,$fqdn);
}
return(@serverlist);
}
sub enable_unplanned_outage {
#my ($FQDN,$cmd);
my @nodelist=@_[0..$#_];
foreach my $FQDN (@nodelist) {
my $cmd = "ovownodeutil.cmd -outage_node -unplanned -disable_he
+artbeat -delete_msgs -node_name $FQDN -on ";
printLog("Putting the server $FQDN into outage");
`$cmd`;
printLog(`cmd`);
}
}
sub disable_unplanned_outage {
#my ($FQDN, $mode, $cmd, $cmdresopcmona, @sContent,$output);
my @sContent = @_[0..$#_];
####When the servers is brough out of maintenance the agent has to be
+recycled to reset all the monitors.
foreach my $FQDN (@sContent) {
my $cmd = "ovownodeutil.cmd -outage_node -unplanned -disable_h
+eartbeat -delete_msgs -node_name $FQDN -off ";
printLog("Node $FQDN >>> off");
my $cmdresopcmona = "ovdeploy -cmd \"ovc -restart opcmona\" -host
+$FQDN";
my $output=`$cmd`;
printLog($cmd);
`$cmd`;
printLog($output);
printLog($cmdresopcmona);
`$cmdresopcmona`;
}
}
sub printLog {
#my ($sPath, $logFile, $sOutFile, $sText, $date_time, $SEC, $MIN, $
+HOUR, $DAY, $MON, $YEAR,$now,$logLine,$now);
#get date/time
my($SEC, $MIN, $HOUR, $DAY, $MON, $YEAR) = (localtime) [0..6];
my $date_time = $YEAR + 1900 . $MON + 1 . $DAY . " " . $HOUR . "
+:" . $MIN . ":" . $SEC;
#get log file parameters
my $sPath = "e:\\scripts\\OutageNodes\\"; #revi
+ew - change to a standard location
my $logFile=$sPath."maintenanceMode_$date_time.log";
my ($logLine) = @_;
my $now = sprintf "%02d:%02d:%02d",(localtime)[2,1,0];
open (LOG,'>>',$logFile) or die "Can't open LOG '$logFile': $!
+\n";
print LOG "$now $logLine\n";
close LOG;
}
|