# WWN="200000e08b01ced3" # echo $WWN | tr ' ' '\n' | sed 's/../&:/g;s/:$//' | tr 'A-Z' 'a-z' 20:00:00:e0:8b:01:ce:d3
[root@mgmt01 san]# cat list_brocade_switches_ports.sh
#!/bin/bash #set -x #==================================================================== #@(#) Script to generate a HTML report on Brocade SAN switches # format of line before HMTL : # html_tag;nagios_tag;reserved;output #==================================================================== # version 1.0 02-2018 eif # version 1.1 02-2024 eif add port signal strength dir=`dirname $0` #. $dir/.env # global variables for all scripts export sn=`basename $0 | cut -d. -f1` export HOSTNAME=`/bin/hostname` logpath=./logs export logname=$logpath/$sn.log TMPFILE=$logpath/tempo_file month=$(date "+%Y-%m") archpath=/storage/san/backup/$month os=$(uname -s | tr 'A-Z' 'a-z') USER=report listswitch="swsan01 swsan02" # All SAN switches from all fabric separated by space #NAGIOSTAG="0=OK, 1=WARNING, 2=CRITICAL, 3=UNKNOWN" COLOR[0]="#57E964" # green COLOR[1]="#F87217" # orange #F7BE81 COLOR[2]="#FF2400" # red #DF013A COLOR[3]="yellow" # yellow #F3F781 COLOR[4]="#86EFF6" # blue COLOR[5]="#FFFFFF" # white #FFA500 : orange #COLOR[6]="#33CAFF" # Blue SAN blue COLOR[6]=" #85C1E9" # Blue SAN blue COLOR[7]="#E77471" # Light Coral for SAN red TAG=TAG # reserved for future TMPFILE=$logpath/santemp #---------------------------- initialize () { echo "# Initialize" mkdir -p $logpath > /dev/null 2>&1 rm $logpath/*configshow* > /dev/null 2>&1 rm $logpath/*switchshow* > /dev/null 2>&1 rm $logpath/swsan* > /dev/null 2>&1 rm $logpath/san* > /dev/null 2>&1 rm $logpath/san_full* > /dev/null 2>&1 rm $TMPFILE* > /dev/null 2>&1 } #---------------------------- grepp () { x=$1 y=$2 if [ $os == "aix" ] then cat $y | tr -d "\015" | tr -d "\011" | tr -d "\044" | sed 's/^ *$//' | grep -p "$x" else if [ $os == "linux" ] then cat $y | tr -d "\015" | tr -d "\011" | tr -d "\044" | sed 's/^ *$//' | awk -v RS="" "/$x/" else echo "ERROR: Unknown OS" exit 1 fi fi } #---------------------- get_fids () { for sw in $(cat $list) do echo "######## $sw ########" ${SSH}$sw 'lscfg --show' > $logfile fids=$(cat $logfile | grep '|' | sed 's/^\ //' | cut -d' ' -f2- | sed 's/|/\ /g' | tr -s ' ' | tr ' ' '\n' | sort -u | sed '/^$/d' | tr '\n' ' ') echo "FID : $fids" done ### fosexec --fid 2 -cmd "switchshow" } #---------------------------- list_switch_ports_signal () { fabric=fabric for sw in $(echo $listswitch) do echo "######## $sw" ssh $USER@$sw "sfpshow -all" > $logpath/sfpshow_${fabric}.csv done } #---------------------------- list_switch_ports () { fabric=fabric for sw in $(echo $listswitch) do echo "######## $sw" ssh $USER@$sw "configshow" | egrep "^alias|^zone|^cfg|^enable" > $logpath/configshow_${fabric}.csv fabricname=$(grep -i '^enable:' $logpath/configshow_${fabric}.csv | awk -F':' '{print $2}') ssh $USER@$sw "switchshow" | tr -s ' ' | sed 's/\ /;/g' | sed 's/[^A-Za-z0-9_.;:-]//g' | tr -s '\;' ';' > $TMPFILE.tempo switchname=$(grep -i '^switchName:' $TMPFILE.tempo | awk -F':' '{print $2}' | tr 'A-Z' 'a-z') swdomain=$(grep -i '^switchDomain:' $TMPFILE.tempo | awk -F':' '{print $2}') ssh $USER@$sw "sfpshow -all" > $logpath/sfpshow-all_${fabricname}_${switchname}_full cat $logpath/sfpshow-all_${fabricname}_${switchname}_full | egrep 'Slot|Power' | sed 's/^Slot/\n/g' | tr -s ' ' | sed 's/^\ //g' | sed 's/Port\ //' | sed 's/\//;/' | sed 's/:/;/' > $logpath/sfpshow-all_${fabname}_${switchname} ssh $USER@$sw "sfpshow" | tr -s ' ' | sed 's/\ //g' | sed 's/Slot//' | sed 's/Port//' | cut -d':' -f1,5 | sed 's/\//;/' > $logpath/sfpshow_${fabricname}_${switchname} echo "H3;0;TAG;FABRIC: $fabricname SWITCHNAME: $switchname" > $logpath/switchshow_${fabricname}_${switchname}.csv echo "TH;4;TAG;Index;Slot;Port;Speed;State;Protocol;Type;WWN;Alias;Zoned;SFP_speed;RXpower;TXpower" >> $logpath/switchshow_${fabricname}_${switchname}.csv if [ $(grep -qi '^Index;Port;' $TMPFILE.tempo; echo $?) -eq 0 ] then slot=";NA" cat $TMPFILE.tempo | sed -e "/;/ s/;/${slot};/2" | sed 's/^;//' | sed 's/^/;/' | grep -v ";FC;Router" > $logpath/switchshow_${fabricname}_${switchname} rm $TMPFILE.tempo else cat $TMPFILE.tempo | sed 's/^;//' | sed 's/^/;/' | grep -v ";FC;Router" > $logpath/switchshow_${fabricname}_${switchname} rm $TMPFILE.tempo fi for line in $(cat $logpath/switchshow_${fabricname}_${switchname} | grep "FC" | grep -v '^FC' | cut -d';' -f1-4,7-) do port=$(echo $line | cut -d';' -f3,4) sfpspeed=$(grep "^${port}:" $logpath/sfpshow_${fabricname}_${switchname} | cut -d':' -f2 | tr ' ' '\n' | grep _Gbps | sed 's/_Gbps//' | rev | cut -d',' -f1 | rev) if [ "$sfpspeed" == "" ] then sfpspeed="NA" fi ############################ rxpower=$(grepp "^${port};" $logpath/sfpshow-all_${fabricname}_${switchname} | grep "RX Power" | cut -d';' -f2- | sed 's/\ dBm\ /|dBm|/g') txpower=$(grepp "^${port};" $logpath/sfpshow-all_${fabricname}_${switchname} | grep "TX Power" | cut -d';' -f2- | sed 's/\ dBm\ /|dBm|/g') # get color for fabric NAGIOSTAG=0 # for linux suff=$(echo $fabricname | tr [:alpha:] ' ' | awk '{print $1}') suff=$(echo $fabricname | rev | cut -c1) modulo=$(echo $(($suff % 2)) ) if [ "$modulo" -eq 0 ] then NAGIOSTAG=6 else if [ $(echo $fabricname | grep -qi red;echo $?) -eq 0 ] then NAGIOSTAG=7 fi fi TAG=TAG prefix="TD;$NAGIOSTAG;$TAG" zone="no" if [ $(echo $line | cut -d';' -f6 | grep -v "Online" > /dev/null; echo $?) -eq 0 ] then # Ports offline or no FC module begin=$(echo $line | cut -d';' -f1-7) wwn="" alias="" rxpower="" txpower="" echo "${prefix}${begin};;${wwn};${alias};${zone};${sfpspeed};${rxpower};${txpower}" >> $logpath/switchshow_${fabricname}_${switchname}.csv else if [ $(echo $line | egrep "E-Port" > /dev/null; echo $?) -eq 0 ] then line1=$(echo $line | sed 's/;LS;/;/' | sed 's/;LE;/;/' | sed 's/;LD;/;/') # Port type E-Port begin=$(echo $line1 | cut -d';' -f1-8) wwn=$(echo $line1 | cut -d';' -f9) if [ $(echo $wwn | sed 's/[^:]//g' | awk '{ print length }') -eq 7 ] then alias=$(echo $line1 | cut -d';' -f10- | sed 's/;/|/g') else wwn="" alias=$(echo $line1 | cut -d';' -f9- | sed 's/;/|/g') fi echo "${prefix}${begin};${wwn};${alias}(ISL);${zone};${sfpspeed};${rxpower};${txpower}" >> $logpath/switchshow_${fabricname}_${switchname}.csv else if [ $(echo $line | egrep "L-Port|NPIV" > /dev/null; echo $?) -eq 0 ] then # Port type L-Port or N-Port (NPIV) begin=$(echo $line | cut -d';' -f1-8 | sed 's/F\-Port/NPIV/') index=$(echo $line | cut -d';' -f2 | sed 's/;/,/') ssh $USER@$sw "portshow -i $index" > $logpath/portshow_tmp for wwn in $(grepp "portWwn:" $logpath/portshow_tmp | grep -v "portWwn" | awk '{print $1}' | sed '/^$/d' | egrep -vi "port|distance") do if [ $(echo $wwn | tr -s ':' '\n' | wc -l | awk '{print $1}') == 8 ] then zone="no" alias=$(grep "$wwn" $logpath/configshow_${fabric}.csv | grep alias | cut -d':' -f1 | sed 's/alias\.//') if [ $(cat $logpath/configshow_${fabric}.csv | grep '^zone.' | cut -d':' -f2- | sed -e 's/^/;/' -e 's/$/;/' | grep ";${alias};" > /dev/null; echo $?) -eq 0 ] then zone="yes" fi if [ $(echo $alias | tr -s ' ' '\n' | wc -l | awk '{print $1}') -ne 1 ] then alias=$(echo $alias | sed 's/\ /,/g' | sed 's/$/(multiples_alias)/') else if [ -z ${alias} ] then alias="(no_alias)" fi fi echo "${prefix}${begin};${wwn};${alias};${zone};${sfpspeed};${rxpower};${txpower}" >> $logpath/switchshow_${fabricname}_${switchname}.csv fi done rm -f $logpath/portshow_tmp else if [ $(echo $line | grep "F-Port" > /dev/null; echo $?) -eq 0 ] then # Port type F-Port begin=$(echo $line | cut -d';' -f1-8) wwn=$(echo $line | cut -d';' -f9) alias=$(grep "$wwn" $logpath/configshow_${fabric}.csv | grep alias | cut -d':' -f1 | sed 's/alias\.//') if [ $(cat $logpath/configshow_${fabric}.csv | grep '^zone.' | cut -d':' -f2- | sed -e 's/^/;/' -e 's/$/;/' | grep ";${alias};" > /dev/null; echo $?) -eq 0 ] then zone="yes" fi if [ $(echo $alias | tr -s ' ' '\n' | wc -l | awk '{print $1}') -ne 1 ] then alias=$(echo $alias | sed 's/\ /,/g' | sed 's/$/(multiples_alias)/') else if [ -z ${alias} ] then port=$(echo $line | cut -d';' -f2) domport=$(echo "${swdomain},${port}" | rev) alias=$(cat $logpath/configshow_${fabric}.csv | grep alias | rev | grep "^$domport:" | cut -d':' -f2 | cut -d'.' -f1 | rev) if [ $(cat $logpath/configshow_${fabric}.csv | grep '^zone.' | cut -d':' -f2- | sed -e 's/^/;/' -e 's/$/;/' | grep ";${alias};" > /dev/null; echo $?) -eq 0 ] then zone="yes" fi if [ -z ${alias} ] then alias="(no_alias)" fi fi fi echo "${prefix}${begin};${wwn};${alias};${zone};${sfpspeed};${rxpower};${txpower}" >> $logpath/switchshow_${fabricname}_${switchname}.csv else begin=$(echo $line | cut -d';' -f1-8) wwn=$(echo $line | cut -d';' -f9) alias="(unknown_type)" echo "${prefix}${begin};${wwn};${alias};${zone};${sfpspeed};${rxpower};${txpower}" >> $logpath/switchshow_${fabricname}_${switchname}.csv fi fi fi fi done # rm $logpath/switchshow_${fabricname}_${switchname} mv $logpath/switchshow_${fabricname}_${switchname}.csv $logpath/swsan_${fabricname}_switchshow_${switchname}.csv mv $logpath/configshow_${fabric}.csv $logpath/swsan_${fabricname}_configshow_${switchname}.csv done } #---------------------------- alias_unused () { # Alias unused NAGIOSTAG=0 TAG=TAG allfabric="" for fabricname in $(ls $logpath/swsan_*_configshow_*.csv | rev | cut -d'/' -f1 | cut -d'.' -f2 | rev | sed -e 's/swsan_/\ /' -e 's/_configshow_/\ /' | awk '{print $1}' | sort -u) do allfabric=$(echo $allfabric $fabricname) filename=$(ls $logpath/swsan_${fabricname}_configshow_*.csv | head -1) cat /dev/null > $logpath/san_result.csv for i in $(ls $logpath/swsan_${fabricname}_switchshow_*.csv) do cat $i | grep '^TD;' | rev | cut -d';' -f2- | rev >> $logpath/san_result.csv done echo "H3;0;TAG;Alias defined in Fabric ${fabricname} but not connected" | tee $logpath/swsan_${fabricname}_unused.csv echo "TH;4;TAG;alias;number of defined zones;zone name" | tee -a $logpath/swsan_${fabricname}_unused.csv sed '1d' $logpath/san_result.csv | grep ";Online;" | rev | cut -d';' -f2 | rev | sed 's/(no_alias)//' | sed 's/(multiples_alias)//' | sed '/^$/d' | grep -v "(ISL)" | tr ' ' '\n' | sed 's/$/;/' > $logpath/saesult1.csv for alias in $(cat $filename | grep '^alias' | cut -d'.' -f2- | cut -d':' -f1 | sort | uniq) do nb_zone=0 if [ $(grep "^${alias};" $logpath/san_result1.csv > /dev/null 2>&1;echo $?) -ne 0 ] then # Alias no more in use cat $filename | grep "^zone." | sed 's/:/:;/' | sed 's/$/;/' | grep ";${alias};" | cut -d':' -f1 | cut -d'.' -f2 > $logpath/san_result2.csv if [ -z $logpath/san_result2.csv ] then nb_zone=0 else nb_zone=$(cat $logpath/san_result2.csv | tr -s ' ' '/n' | wc -l | awk '{print $1}') fi if [ "$nb_zone" == "0" ] then NAGIOSTAG=3 else NAGIOSTAG=0 fi prefix="TD;$NAGIOSTAG;$TAG" echo "${prefix};$alias;$nb_zone;"$(cat $logpath/san_result2.csv) | tee -a $logpath/swsan_${fabricname}_unused.csv else echo ${alias} >> $logpath/swsan_good.txt fi done done } #---------------------------- list_zones () { echo "====== ZONING ======" echo echo "Generated from "$(hostname -s) $(date "+%d-%m-%Y %H:%M") for fabricname in $(echo $allfabric) do filename=$(ls $logpath/swsan_${fabricname}_configshow_*.csv | head -1) echo echo "===== Zones defined on fabric ${fabricname} =====" echo cat $filename | grep '^zone.' | cut -d'.' -f2- | sed 's/:/\ /' | sed 's/$/\\/' | sed 's/$/\\/' done for fabricname in $(echo $allfabric) do filename=$(ls $logpath/swsan_${fabricname}_configshow_*.csv | head -1) echo cfg=$(cat $filename | grep '^enable:' | cut -d':' -f2) zoning_active=$(grep "^cfg.${cfg}:" $filename | cut -d':' -f2- | sed -e 's/^/;/' -e 's/$/;/') echo "===== Inactives zone in Fabric ${fabricname} =====" echo for zone in $(cat $filename | grep '^zone.' | cut -d'.' -f2- | awk -F':' '{print $1}') do if [ $(echo $zoning_active | grep ";${zone};" > /dev/null;echo $?) -ne 0 ] then echo "${zone}" | sed 's/$/\\/' | sed 's/$/\\/' fi done done for fabricname in $(echo $allfabric) do filename=$(ls $logpath/swsan_${fabricname}_configshow_*.csv | head -1) echo echo "===== Active configuration for fabric ${fabricname} =====" echo cfg=$(cat $filename | grep '^enable:' | cut -d':' -f2) echo ${cfg} echo echo "==== Active zones ====" echo grep "^cfg.${cfg}:" $filename | cut -d':' -f2- | sed 's/;/\ /g' | sed 's/$/\\/' | sed 's/$/\\/' done } #---------------------------- convert_html () { #<TABLE BORDER="1" style="background:#FFFF00"> # <CAPTION> Voici le titre du tableau </CAPTION> # <TR style="background:#80BFFF"><TH> Titre A1 </TH><TH> Titre A2 </TH><TH> Titre A3 </TH><TH> Titre A4 </TH></TR> # <TR style="background:#00FF00"><TH> Titre B1 </TH><TD> Valeur B2 </TD><TD> Valeur B3 </TD><TD> Valeur B4 </TD></TR> # <TR><TH> Titre B1 </TH><TD> Valeur B2 </TD><TD> Valeur B3 </TD><TD> Valeur B4 </TD></TR> #</TABLE> server=$(/bin/hostname -s) echo '<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <h1>SAN SWITCH CONFIG (generated from' $server')' $(date "+%d-%m-%Y %H:%M") '</h1> <body> <br> <h2>SWITCHSHOW</h2> <br> <table border="1"> <tbody>' for filename in $(ls $logpath/swsan_*_switchshow_*.csv) do nb_line=$(cat $filename | wc -l) if [ "$nb_line" -gt "1" ] then fabricname=$(echo $filename | rev | cut -d'/' -f1 | cut -d'.' -f2 | rev | sed -e 's/swsan_/\ /' -e 's/_switchshow_/\ /' | awk '{print $1}') switchname=$(echo $filename | rev | cut -d'/' -f1 | cut -d'.' -f2 | rev | sed -e 's/swsan_/\ /' -e 's/_switchshow_/\ /'| awk '{print $2}') #echo '<h3>Fabric: '$(echo $fabricname)' Switchname: '$(echo $switchname)'</h3><br>' cat $filename | grep '^H3' | sed -e 's/^H3;0;TAG;/\<h3\>/' -e 's/$/\<\/h3\>\<br\>/' cat $filename | grep -v '^H3' > $TMPFILE.tempo for nb in 0 1 2 3 4 5 6 7 8 9 do for begin in TH TD do cat $TMPFILE.tempo | sed "s/^$begin;$nb;TAG;/\<TR\ style=\"background:${COLOR[$nb]}\"><TD>/g" > $TMPFILE.tempo1 mv $TMPFILE.tempo1 $TMPFILE.tempo done done cat $TMPFILE.tempo | sed 's/;/<\/TD><TD>/g' | sed 's/|/\ /g' | sed 's/$/<\/TD><\/TR>/g' echo '</tbody> </table> <table border="1"> <tbody> <BR><BR>' fi done echo ' </body> </html>' } #---------------------------- convert_html_unused () { #<TABLE BORDER="1" style="background:#FFFF00"> # <CAPTION> Voici le titre du tableau </CAPTION> # <TR style="background:#80BFFF"><TH> Titre A1 </TH><TH> Titre A2 </TH><TH> Titre A3 </TH><TH> Titre A4 </TH></TR> # <TR style="background:#00FF00"><TH> Titre B1 </TH><TD> Valeur B2 </TD><TD> Valeur B3 </TD><TD> Valeur B4 </TD></TR> # <TR><TH> Titre B1 </TH><TD> Valeur B2 </TD><TD> Valeur B3 </TD><TD> Valeur B4 </TD></TR> #</TABLE> server=$(/bin/hostname -s) echo '<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <h1>SAN SWITCH UNUSED ports (generated from' $server')' $(date "+%d-%m-%Y %H:%M") '</h1> <body> <br> <h2>ALIAS</h2> <br> <table border="1"> <tbody>' for filename in $(ls $logpath/swsan_*_unused.csv) do nb_line=$(cat $filename | wc -l) if [ "$nb_line" -gt "1" ] then cat $filename | grep '^H3' | sed -e 's/^H3;0;TAG;/\<h3\>/' -e 's/$/\<\/h3\>\<br\>/' cat $filename | grep -v '^H3' > $TMPFILE.tempo for nb in 0 1 2 3 4 5 6 7 8 9 do for begin in TH TD do cat $TMPFILE.tempo | sed "s/^$begin;$nb;TAG;/\<TR\ style=\"background:${COLOR[$nb]}\"><TD>/g" > $TMPFILE.tempo1 mv $TMPFILE.tempo1 $TMPFILE.tempo done done cat $TMPFILE.tempo | sed 's/;/<\/TD><TD>/g' | sed 's/|/\ /g' | sed 's/$/<\/TD><\/TR>/g' echo '</tbody> </table> <table border="1"> <tbody> <BR><BR>' fi done echo ' </body> </html>' } #------------------------------------------------ send_wiki() { dokupath=/var/www/html/archives/inventory/san dokuuser=apache dokugrp=apache for file1 in san_switchshow.html san_unused_alias.html san_full_config.txt do sudo su - root -c "/bin/cp $logpath/$file1 $dokupath" done sudo su - root -c "/bin/chown -R $dokuuser.$dokugrp $dokupath" # Archive if [ ! -e $archpath/san_switchshow.html ] then for file1 in san_switchshow.html san_unused_alias.html san_full_config.txt do cp $logpath/$file1 $archpath done fi } ############################# # Main ############################# main () { date echo "***** initialize" initialize echo "***** Switchshow" list_switch_ports echo "***** Sfpshow" #list_switch_ports_signal echo "***** convert HTML" convert_html > $logpath/san_switchshow.html echo "***** List Unused" alias_unused > $logpath/san_unused_alias.csv echo "***** convert HTML" convert_html_unused > $logpath/san_unused_alias.html echo "***** List FULL config" list_zones > $logpath/san_full_config.txt echo "***** Send to Wiki" send_wiki date } main > $logname 2>&1
[root@mgmt01 san]# cat backup_brocade_config.sh
#!/bin/bash #set -x #==================================================================== #@(#) Script to backup SAN switches #==================================================================== # version 1.0 eif dir=`dirname $0` . $dir/.env os=$(uname -s | tr 'A-Z' 'a-z') USER=report listswitch="san01 san02" # All SAN switches from all fabric separated by space month=$(date "+%Y-%m") archpath=/workdir/san/backup/$month #---------------------------- initialize () { echo "# Initialize" mkdir -p $archpath > /dev/null 2>&1 } #---------------------------- backup_san_switches () { fabric=fabric for sw in $listswitch do echo "######## $sw" ssh $USER@$sw "configshow -all" > $archpath/${sw}.txt done } ############################# # Main ############################# main () { date echo "***** initialize" initialize echo "***** Backup SAN switches" backup_san_switches date } main > $logname 2>&1
[root@mgmt01 san]# cat backup_brocade_switches.sh
#!/bin/ksh # Script to back up SAN configuration using ssh and scp. # Variable declaration RC=0 SUMRC=0 SAN_LIST="SAN_SW1 SAN_SW2 SAN_SW3" BCKSRV="IP_OF_BACKUP_SERVER|" BCK_DIRECTORY="/directory/where/to/backup" BCK_USER=BACKUP_SERVER_USER #TODAY=`date +"%Y%m%d"` for san in $SAN_LIST do echo "Backing up SAN switch config data..." $san ssh admin@$san "configupload -all -p sftp $BCKSRV,$BCK_USER,$BCK_DIRECTORY/$san.cfg" RC=$? echo "RC = " $RC SUMRC=$((SUMRC+RC)) done #TSM backup echo "Archiving configuration of all SAN switches..." dsmc archive "$BCK_DIRECTORY/*" -archmc=MC_NAME RC=$? echo "RC = " $RC SUMRC=$((SUMRC+RC)) exit $SUMRC
list all Virtual FID
$ ssh usr1@san1 'lscfg --show' | grep '^FID' | sed 's/FID//' | tr '|' '\n' | awk '{print $1}' | sed '/^$/d' | sort -u
Example of commands on vFID
$ fosexec --fid 10 -cmd "switchshow"
List error count
check_porterrshow.sh
#!/bin/bash #set -x # #@(#) Send error on SAN switches ports # # version: 1.0 2014 # version: 1.1 02-2020 Manu # dir=`dirname $0` . $dir/.env # Variables destination="bp.san@test.lu" #destination="myemail@test.lu" user_repoting="readonly" SSH="ssh -o ConnectTimeout=10 -o ConnectionAttempts=1 -o BatchMode=yes ${user_repoting}@" logfile=$logpath/porterrshow.txt errfile=$logpath/porterrshow.err list=$dir/sansw_list.txt server=$(hostname -s) # clear log if [[ -f $logfile ]] then rm $logfile > /dev/null 2>&1 fi if [[ -f $errfile ]] then rm $errfile > /dev/null 2>&1 fi #---------------------- get_fids () { for sw in $(cat $list) do echo "######## $sw ########" ${SSH}$sw 'lscfg --show' > $logfile if [ "$?" -ne "0" ] then echo "Connection error on san switch: ${SSH}$sw" >> $errfile fi fids=$(cat $logfile | grep '|' | sed 's/^\ //' | cut -d' ' -f2- | sed 's/|/\ /g' | tr -s ' ' | tr ' ' '\n' | sort -u | sed '/^$/d' | tr '\n' ' ') echo "FID : $fids" done ### fosexec --fid 2 -cmd "switchshow" } #---------------------- porterrshow () { echo "====== Porterrshow on SAN switches (generated from $server) "$(date "+%d-%m-%Y %H:%M")" ======" > $logfile echo >> $logfile for sw in $(cat $list) do echo "######## $sw ########" echo "===== $sw =====" >> $logfile ${SSH}$sw "porterrshow" > $logfile.1 cat $logfile.1 | tr '\t' ' ' | sed 's/\ /;/g' | tr -s ';' | grep -v ';0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;' | sed 's/^;frames;/index;frames;frames;/' | sed 's/;c3timeout;/;c3timeout;c3timeout;/' | sed 's/^;tx;/index;tx;/' | sed 's/;sig;tx;/;sig;\ ;\ ;tx;/' | sed 's/^;//' | rev | sed 's/^;//' | rev | sed 's/^/;/' | sed 's/$/;/' | sed '/^;index;/s/;/^/g' | sed 's/;/|/g' >> $logfile echo >> $logfile done } #---------------------- sendemail () { if [[ -s $errfile ]] then cat $errfile | mailx -s "Connection error Porterrshow SAN" $destination fi } #---------------------- send_wiki () { dokupath=/var/www/html/archives/inventory/san dokuuser=apache dokugrp=apache for file1 in $logfile do sudo su - root -c "/bin/cp $file1 $dokupath" done sudo su - root -c "/bin/chown -R $dokuuser.$dokugrp $dokupath" } ######################### # Main ######################### main () { date echo "FIDs" get_fids echo "porterrshow" porterrshow echo "sendemail" sendemail echo "Add to wiki" send_wiki } main > $logname 2>&1