in reply to Re^6: Returning more than two arrays to the subroutine
in thread Returning more than two arrays to the subroutine
#!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; }
|
---|