< Concord
Content added Content deleted
imported>DrOwl No edit summary |
imported>mutante mNo edit summary |
||
Line 261: | Line 261: | ||
[[Category:Concord]] |
[[Category:Concord]] |
||
[[Category:Networking]] |
|||
[[Category:Computer]] |
[[Category:Computer]] |
||
[[Category:English]] |
[[Category:English]] |
Latest revision as of 09:19, 10 September 2006
autoDiscover[edit]
this is a ruff Perl script for "auto discovering" Cisco routers in a ATM network. it has basic support for one wan port and a number of ATM PVS for which it sets groop, main name, alias name, and speed.
i need to clean this up a bit i have an extra cli varible thats not needed (or should be but =)
NOTE: you will have to be the network health user to use this script,
and you will ahve to have "run" the relavent nethealth rc file ie `/$NH_HOME/nethealthrc.ksh`
#!/usr/local/bin/perl # use strict; use warnings; ############################################################ # main discover # Parameters : # autoDiscover.pl discover.csv "Service" # csv file must be in the correct format ie:- (with as many PVC's as needed) # IPAddress,String,SiteName,Group,WanAliasName,WanSpeed:NumberOfPVCs:DLCI1,Alias1,Name1,Speed1;DLCI2,Alias2,Name2,Speed2; # # ver0.1.2 04/03/2004: Removed ( -nmsSource \"NH:Discover\") from the nhAutoDiscover command ############################################################ my ($dataFileName)=$ARGV[0] || die "Missing Args Should be: autoDiscover.pl discover.csv \"Service\" $!"; # get file name of discover file my ($SdtArfName)=$ARGV[1] || die "Missing Args Should be: autoDiscover.pl discover.csv \"Service\" $!"; # get std rule name open DFILE, "$dataFileName" # open datafile and read in or die or die "no file specified command format is \"autoDiscover FILE-NAME Server \" $!"; my (@dataFile) = <DFILE>; close DFILE; foreach my $site (@dataFile) { # loop for each line/site in dataFile chomp $site ; my ($siteIP,$siteString)=makeArf("$site","$SdtArfName"); # make ARF file then return IP and Cominity String print " Discovering $siteIP with $siteString \n "; `nhAutoDiscover -l \"$siteIP\" -c \"$siteString\" -mode \"lanwan,router\" -dciRule \"tmp/$siteIP.arf\" > tmp\/$siteIP.Results.temp`; # this is the command used to do the discover checkResults("$siteIP"); # run the results sub }; sub checkResults { ############################################################ # Function Check Discover Results # Parameters : # Ip Address of site to be found : x.x.x.x # Poller Cfg file : this is the data file # should be in the $NH_HOME/poller dir # Returns : # # Ver0.1.2 04/03/2004: clear out the $segmentFields vars at start of loop ( to stop KeyValue passing on to next segment ) # put Speach marks around $siteIPAdd (next unless /\"$siteIPAdd\"/;) as it was finging extra segments ie not just .5 but .51 ############################################################ my $NH_HOME= "/nethealth1/poller/"; # point to the poller CFG file NOTE replace this with ENV[NH_HOME] my($segmentFieldKey, $segmentFieldValue, %segmentFields, $nullVar); my($siteIPAdd)=$_[0]; # read in IP from parent NOTE make a check for this local $/ = "}\n"; # set delimiter open(DISCOVERLOG, ">>tmp/discover.log.temp") || die "can not open : $!"; open(POLLER, "$NH_HOME/poller.cfg") || die "can not open : $!"; while(<POLLER>) { ($segmentFields{segment}, $segmentFields{deviceSpeed2}, $segmentFields{sysName}, $segmentFields{aliasName}, $segmentFields{mibTranslationFile})=("","","","",""); next unless /\s+segment/; next unless /\"$siteIPAdd\"/; s/\n\s+\}\n//g; s/["{]//g; foreach (split(/\n/)) { ($nullVar,$segmentFieldKey,$segmentFieldValue)=split(/\s+/,$_,3); $segmentFields { $segmentFieldKey } = $segmentFieldValue ; } print DISCOVERLOG "$segmentFields{segment}, $segmentFields{deviceSpeed2}, $segmentFields{sysName}, $segmentFields{aliasName}, $segmentFields{mibTranslationFile}\n" ; } close POLLER; close DISCOVERLOG; } sub makeArf { # Start of sub that makes arf files ############################################################ # this function creates a arf rule file from input Data # Version 0.1 6/11/03 original # 0.2 21/11/03 tryed to convert to sub # 0.3 42/11/03 finished converting to sub # 0.4 12/03 worked on results sub # 0.5 20/1/2004 tweeked rule order ############################################################ my ($csvData)="$_[0]"; my ($siteLink,$siteNoOfPVCs,$siteAllPVCs)=split(/:/,$csvData,3); #split up main / pvc info my ($siteIP,$siteString,$siteName,$siteGroup,$siteCCTReff,$siteACRate)=split(/,/,$siteLink,6); #split up main info my @sitePVCs = split(/;/,$siteAllPVCs,$siteNoOfPVCs); my $siteARFFILE = "$siteIP.arf"; open ARFFILE, ">tmp/$siteARFFILE" or die "can not open '$siteARFFILE': $!"; # print header print ARFFILE <<EOF; ###################################################################### # Discover Rule auto genarated by autoDiscover.pl # IP: $siteIP # SiteName: $siteName # Companny: $siteGroup # Energis CCT Reff: $siteCCTReff ###################################################################### \n EOF # open standard file and print my ($standardFile)="standard.$_[1].txt"; open IN, "$standardFile" # open file with standard bits or die "can not open standard arf rules file: $! "; my @standardRules = <IN>; close IN; print ARFFILE "@standardRules\n"; #print standard bits # print -BRI rule print ARFFILE <<EOF; name matches ".*-BRI.*": { exclude () ; }\n EOF # print -BVI rule print ARFFILE <<EOF; name matches ".*-BVI.*": { exclude () ; }\n EOF # print -Dialer rule print ARFFILE <<EOF; name matches ".*-Dialer.*": { exclude () ; }\n EOF # print -PPP rule print ARFFILE <<EOF; ifType matches "ppp": { exclude () ; }\n EOF # print -Cpu- rule print ARFFILE <<EOF; name matches ".*-Cpu-.*": { setName ("$siteName-cpu"); setGroup ("$siteGroup"); setAlias ("\$1-\$2") ; }\n EOF # print Ethernet rule print ARFFILE <<EOF; name matches ".*Ethernet.*": { setName ("$siteName-lan\$2") ; setGroup ("$siteGroup") ; setAlias ("\$1Lan\$2") ; }\n EOF foreach my $PVC (@sitePVCs){ # loop for each PVC my ($PVCdlci,$PCVreff,$PVCname,$PVCcir)=split(/,/,$PVC,4); # split out pvc info # print PVC rules print ARFFILE <<EOF; name matches ".*-Serial.*-dlci-$PVCdlci": { setName ("$siteName-$PVCname") ; setGroup ("$siteGroup") ; setAlias ("\$1-S\$2-$PCVreff") ; setSpeedIn ("$PVCcir") ; setSpeedOut ("$PVCcir") ; setDeviceSpeedIn ("$PVCcir") ; setDeviceSpeedOut ("$PVCcir") ; }\n EOF } # print dlci drop out rule print ARFFILE <<EOF; name matches ".*-dlci-.*": { exclude () ; }\n EOF # print -Serial*:* rule print ARFFILE <<EOF; name matches ".*-Serial.*:.*":{ setName ("$siteName-wan\$2:\$3") ; setGroup ("$siteGroup") ; setAlias ("\$1-s\$2:\$3-$siteCCTReff") ; setSpeedIn ("$siteACRate") ; setSpeedOut ("$siteACRate") ; setDeviceSpeedIn ("$siteACRate") ; setDeviceSpeedOut ("$siteACRate") ; }\n EOF # print -Serial rule print ARFFILE <<EOF; name matches ".*-Serial.*":{ setName ("$siteName-wan\$2") ; setGroup ("$siteGroup") ; setAlias ("\$1-S\$2-$siteCCTReff") ; setSpeedIn ("$siteACRate") ; setSpeedOut ("$siteACRate") ; setDeviceSpeedIn ("$siteACRate") ; setDeviceSpeedOut ("$siteACRate") ; }\n EOF # print -RH rule print ARFFILE <<EOF; name matches ".*-RH\$": { setName ("$siteName-rh") ; setGroup ("$siteGroup") ; setAlias ("\$1-rh") ; }\n EOF # print drop out rule print ARFFILE <<EOF; name matches ".*": { exclude () ; }\n EOF # print footer rule print ARFFILE <<EOF; ###################################################################### # End of Discover Rule ######################################################################\n EOF close(ARFFILE) or die("can not close '$siteARFFILE': $!"); return ($siteIP,$siteString); # return the IP and comunity string to main ruteen }; #end of makeArf Sub