Advertisement
adziavitski

IBM Storwize V7000 attributes collection script

Aug 5th, 2015
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 6.91 KB | None | 0 0
  1. #!/bin/bash
  2. #Createt by Artsiom Dziavitski
  3. #https://goo.gl/0UvFOl
  4. #https://drive.google.com/folderview?id=0B3BCpTmQPhq5fk9HcW1aeDBaamIwcFZNU3VOd3ZqOU5WVFRpbTFFXzhNamt1WGZvYkdKVjg&usp=sharing
  5.  
  6.  
  7. #readonly set v7k_addr=$1
  8. #readonly v7k_login=$2
  9. v7k_addr=""
  10. v7k_login=""
  11. readonly script_dir=`dirname "$BASH_SOURCE"`
  12. v7k_enc_id="0"
  13.  
  14. function func_first_connect(){
  15.     local ffc_addr=$1
  16.     local ffc_lgn=$2
  17.     if [ ! -f "$ffc_lgn"_"$ffc_addr".key ]
  18.         then {
  19.         ssh-keygen -b 2048 -t rsa -f "$script_dir"/"$ffc_lgn"_"$ffc_addr".key -q -N ""
  20.         chmod 600 "$script_dir"/"$ffc_lgn"_"$ffc_addr".key
  21.         chmod 600 "$script_dir"/"$ffc_lgn"_"$ffc_addr".key.pub
  22.         if [ -f "$ffc_lgn"_"$ffc_addr".key ]
  23.             then {
  24.             echo "Temp key-file created"
  25.             scp "$script_dir"/"$ffc_lgn"_"$ffc_addr".key.pub ""$ffc_lgn@$ffc_addr:/tmp/
  26.             ssh $ffc_lgn@$ffc_addr << EOF
  27.             chcurrentuser -keyfile /tmp/"$ffc_lgn"_"$ffc_addr".key.pub
  28. EOF
  29.             }
  30.             else {
  31.             echo "Key file not created"
  32.             exit 1
  33.             }      
  34.             fi
  35.         }
  36.         fi
  37. }
  38.  
  39. function func_get_enc(){
  40.     local fge_addr=$1
  41.     local fge_lgn=$2
  42. #   local fge_pss=$3
  43.     #local fge_fname=.fge_buf
  44.     local fge_top=""
  45.     local fge_counter="1"
  46.     ssh $fge_lgn@$fge_addr -i "$script_dir"/"$fge_lgn"_"$fge_addr".key > $script_dir/.enc_buf_$fge_addr << EOF
  47.         lsenclosure
  48. EOF
  49.     fge_top=`cat  "$script_dir"/.enc_buf_"$fge_addr"|wc -l`
  50.     rm -f
  51.     while read line
  52.     do
  53.        if [ $fge_counter -eq 1 ]
  54.        then {
  55.              echo ""
  56.           }
  57.        else {
  58.              echo $line | awk '{print $1}' >>  "$script_dir"/.enc_ids_"$fge_addr"
  59.              }
  60.        fi
  61.        let "fge_counter += 1"
  62.     done < $script_dir/.enc_buf_$fge_addr
  63.  
  64.    
  65.     #rm $script_dir/.enc_buf
  66. }
  67.  
  68. function func_get_enc_drives() {
  69.     local fged_addr=$1
  70.     local fged_lgn=$2
  71.     local fged_encid=$3
  72.     local fged_fname=.fged_buf
  73.     local fged_counter=1
  74.    
  75.     function fged_lsdrive() {
  76.         local fl_addr=$1
  77.         local fl_lgn=$2
  78.         local fl_encid=$3
  79.         ssh "$fl_lgn"@"$fl_addr" -i "$script_dir"/"$fl_lgn"_"$fl_addr".key > "$script_dir"/.drives_buf_"$fl_addr"_"$fl_encid" << EOF
  80.         lsdrive -filtervalue enclosure_id=$fl_encid
  81. EOF
  82.     }
  83.     function fged_drive(){
  84.         local fd_addr=$1
  85.         local fd_lgn=$2
  86.         local fd_driveid=$3
  87.         local fd_encid=$4
  88.         ssh "$fd_lgn"@"$fd_addr" -i "$script_dir"/"$fd_lgn"_"$fd_addr".key > "$script_dir"/.drives_buf_"$fd_addr"_"$fd_encid"_"$fd_driveid" << EOF
  89.         lsdrive $fd_driveid
  90. EOF
  91.  
  92.     }
  93.     fged_lsdrive $fged_addr $fged_lgn $fged_encid
  94.     fged_top=`cat "$script_dir"/.drives_buf_"$fged_addr"_"$fged_encid"|wc -l`
  95.     while read drive
  96.     do
  97.         if [ $fged_counter -eq 1 ]
  98.         then {
  99.                 echo ""
  100.         }
  101.         else {
  102.                 #echo "time to rock"
  103.                 drive_id=`echo "$drive" | awk '{print $1}'`
  104.                 #echo $fged_addr $fged_lgn $drive_id $fged_encid
  105.                 fged_drive $fged_addr $fged_lgn $drive_id $fged_encid
  106.         }
  107.         fi
  108.         let "fged_counter += 1"
  109.     done < "$script_dir"/.drives_buf_"$fged_addr"_"$fged_encid"
  110. }
  111.  
  112. function func_report(){
  113.     local fr_addr=$1
  114.     local fr_lgn=$2
  115.     local fr_repfile="$script_dir"/report_"$fr_addr".html
  116.     local fr_counter_enc="1"
  117.     local fr_top_enc=`cat  "$script_dir"/.enc_buf_"$fr_addr"|wc -l`
  118.     ####create HTML File
  119. #   echo "<html>" > $fr_repfile
  120. #   echo "<head>" >>
  121. cat > $fr_repfile <<- EOF
  122. <html>
  123. <head>
  124.     <title>V7000 Hardware configuration</title>
  125. </head>
  126.   <style>
  127.    p {
  128.     text-indent: 40px;
  129.     line-height: 0.5em;
  130.    }
  131.   </style>
  132. <body>
  133.     <br>
  134.     <br>
  135.     <br>
  136.     <p><b><span style="margin-left:2em"> V7000 Hardware configuration</span><br></b></p>
  137. EOF
  138.  
  139.  
  140.     while read fr_enc
  141.         do
  142.        
  143.         if [ $fr_counter_enc -eq 1 ]
  144.        then {
  145.              echo ""
  146.           }
  147.        else {
  148.                 fr_eid=`echo "$fr_enc" | awk '{print $1}'`
  149.                 fr_mach=`echo "$fr_enc" | awk '{print $7}'`
  150.                 fr_serial=`echo "$fr_enc" | awk '{print $8}'`
  151.                
  152.                 cat >> $fr_repfile <<- EOF
  153.                 <br>
  154.                 <font size="3"><p><b><span style="margin-left:2em"> Enclosure ID</span><span style="margin-left:4em">Machine</span><span style="margin-left:4em">Serial Number</span><br></b></p></font>
  155.                 <font size="3"><p><b><span style="margin-left:5em">$fr_eid</span><span style="margin-left:6em">$fr_mach</span><span style="margin-left:5em">$fr_serial</span><br></b></p></font>
  156. EOF
  157.                     local fr_dfiles="$script_dir"/.drives_buf_"$fr_addr"_"$fr_eid"_*
  158.                     local fr_dfile_counter=1
  159.                     for fr_dfile in $fr_dfiles
  160.                     do
  161.                         fr_dparam1=`cat $fr_dfile |grep slot_id | awk '{print $2}'`
  162.                         fr_dparam2=`cat $fr_dfile |grep FRU_part_number | awk '{print $2}'`
  163.                         fr_dparam3=`cat $fr_dfile |grep firmware_level | awk '{print $2}'`
  164.                         echo "$fr_dparam1   $fr_dparam2 $fr_dparam3" >> "$script_dir"/.drives_"$fr_addr"_"$fr_eid"
  165.                         if [ "$fr_dfile_counter" -eq `ls -a ./.drives_buf_"$fr_addr"_"$fr_eid"_* |wc -l` ]
  166.                         then {
  167.                             cat "$script_dir"/.drives_"$fr_addr"_"$fr_eid" | sort -n >> "$script_dir"/.drives_"$fr_addr"_"$fr_eid"_
  168.                         }
  169.                         fi
  170.                         let "fr_dfile_counter += 1"
  171.                         if [ -f "$script_dir"/.drives_"$fr_addr"_"$fr_eid"_ ]
  172.                         then {
  173.                             cat >> $fr_repfile <<- EOF
  174.                             <br>
  175.                             <font size="2"><p><b><span style="margin-left:5em">Disk Slot</span><span style="margin-left:3em">FRU</span><span style="margin-left:3em">Firmware</span><br></b></p></font>
  176. EOF
  177.                             while read disk
  178.                             do
  179.                             cat >> $fr_repfile <<- EOF
  180.                             <font size="2"><p><b><span style="margin-left:7em">`echo $disk | awk '{print $1}'`</span><span style="margin-left:3em">`echo $disk | awk '{print $2}'`</span><span style="margin-left:3em">`echo $disk | awk '{print $3}'`</span><br></b></p></font>
  181. EOF
  182.                             done <"$script_dir"/.drives_"$fr_addr"_"$fr_eid"_
  183.                         }
  184.                     fi
  185.                     done
  186.                 }
  187.                
  188.        fi
  189.        let "fr_counter_enc += 1"
  190.         done <"$script_dir"/.enc_buf_"$fr_addr"
  191.         fr_counter_enc=1
  192.  
  193. cat >> $fr_repfile <<- EOF
  194. </body>
  195. </html>
  196. EOF
  197.  
  198. }
  199.  
  200. if [ -z $v7k_addr ]
  201. then {
  202.     read -p "Enter IP or hostname of V7000: " v7k_addr
  203.     v7k_addr=${v7k_addr:-localhost}
  204.     echo "v7k_addr: $v7k_addr"
  205.     if [ -z $v7k_addr ] || [ $v7k_addr == "localhost" ]
  206.     then {
  207.         echo "Wrong address. v7k_addr: " $v7k_addr
  208.         exit 1
  209.     }
  210.     fi
  211. }
  212. else {
  213.     echo "v7k_addr: $v7k_addr"
  214. }
  215. fi
  216. echo $v7k_login
  217. if [ -z $v7k_login ]
  218. then {
  219.     read -p "Enter user name of V7000: " v7k_login
  220.     v7k_login=${v7k_login:-dev_test}
  221.     echo "v7k_login: $v7k_login"
  222.     if [ -z $v7k_login ] || [ $v7k_login == "superuser" ]
  223.     then {
  224.         echo "Wrong login! Do not try to login by superuser! Create new user on V7000, script use dev_test user by default"
  225.         exit 1
  226.     }
  227.     fi
  228. }
  229. fi
  230. func_first_connect $v7k_addr $v7k_login
  231. func_get_enc $v7k_addr $v7k_login  2> /dev/null
  232.    
  233. while read enc_id
  234. do
  235.     func_get_enc_drives $v7k_addr $v7k_login $enc_id  2> /dev/null
  236. done <  "$script_dir"/.enc_ids_"$v7k_addr"
  237. func_report $v7k_addr $v7k_login
  238. rm -f .*_"$v7k_addr"*
  239.  
  240. if [ -f "$script_dir"/report_"$v7k_addr".html ]
  241. then {
  242.     echo "Report file created."
  243.     echo ""$script_dir"/report_"$v7k_addr".html"
  244. }
  245. else {
  246.     echo "Report file not created."
  247.     echo "Check IP address and credentials."
  248.     }
  249. fi
  250.  
  251.  
  252. exit
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement