Bash: Collect HBA/HCA information for facter
#!/bin/bash | |
# Produce custom facts about HBA/HCA cards for facter | |
# This file should be executable in /etc/facter/facts.d/ | |
# Look for Mellanox, Emulex, and QLogic cards | |
varq=$(lspci | awk '/[Mm]ellanox/ { | |
printf "mellanox=%s\n", $1 } | |
/[Ee]mulex/ { | |
printf "emulex=%s\n", $1 } | |
/[Qq][Ll]ogic/ { | |
printf "qlogic=%s\n", $1 }') | |
# Convert to array | |
qarr=($varq) | |
if [ ${#qarr[@]} -eq 0 ]; then | |
exit 0 | |
fi | |
function vitalinfo() { | |
#Need to pass HBA, Address, and Counter | |
hbca=$1 | |
addy=$2 | |
counter=$3 | |
echo "hba_${hbca}${counter}_address=$addy" | |
# The gsub() are just thee to strip off the leading space | |
lspci -vv -s $addy | awk -v ctr=$counter -v hba=$hbca -F: ' | |
/Product Name/ { | |
gsub(/^ /, "", $2) | |
printf "hba_%s%d_name=%s\n", hba, ctr, $2 } | |
/Part number/ { | |
gsub(/^ /, "", $2) | |
printf "hba_%s%d_part=%s\n", hba, ctr, $2 } | |
/Serial number/ { | |
gsub(/^ /, "", $2) | |
printf "hba_%s%d_serial=%s\n",hba, ctr, $2 }' | |
} | |
counter=0 | |
for i in ${qarr[@]}; do | |
# If this is the first occurrence of a new HBA, reset counter to 0 | |
if [[ $hba != ${i%=*} ]]; then | |
counter=0 | |
fi | |
# Sprinkle some pattern-matching magic on it | |
hba=${i%=*} | |
addr=${i#*=} | |
# The idea here is to only check the first function | |
# of a PCIe card (XX:XX.0) | |
if [[ ${addr:(-1)} -eq 0 ]]; then | |
vitalinfo $hba $addr $counter | |
((counter++)) | |
fi | |
done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment