#!/bin/sh
#
# Print some common lsblk values
#
# Any (lowercased) name symlinked to the lsblk script will be passed to lsblk
# as one of its --output names.  Here's a partial list of --output names
# from the lsblk binary:
#
# Available columns (for --output):
#        NAME  device name
#       KNAME  internal kernel device name
#     MAJ:MIN  major:minor device number
#      FSTYPE  filesystem type
#  MOUNTPOINT  where the device is mounted
#       LABEL  filesystem LABEL
#        UUID  filesystem UUID
#          RA  read-ahead of the device
#          RO  read-only device
#          RM  removable device
#       MODEL  device identifier
#        SIZE  size of the device
#       STATE  state of the device
#       OWNER  user name
#       GROUP  group name
#        MODE  device node permissions
#   ALIGNMENT  alignment offset
#      MIN-IO  minimum I/O size
#      OPT-IO  optimal I/O size
#     PHY-SEC  physical sector size
#     LOG-SEC  logical sector size
#        ROTA  rotational device
#       SCHED  I/O scheduler name
#     RQ-SIZE  request queue size
#        TYPE  device type
#    DISC-ALN  discard alignment offset
#   DISC-GRAN  discard granularity
#    DISC-MAX  discard max bytes
#   DISC-ZERO  discard zeroes data
#
# If the script is run as just 'lsblk' then print out disk size, vendor,
# and model number.


helpstr="
label:	Show filesystem label.
model:	Show disk model number.
size:	Show the disk capacity.
vendor:	Show the disk vendor.
lsblk:	Show the disk size, vendor, and model number."

script="${0##*/}"

if [ "$1" = "-h" ] ; then
        echo "$helpstr" | grep "$script:" | tr -s '\t' | cut -f 2-
        exit
fi

if [ "$script" = "lsblk" ] ; then
	list="size vendor model"
else
	list=$(echo "$script" | tr '[:upper:]' '[:lower:]')
fi

# Older versions of lsblk don't support all these values (like SERIAL).
for i in $list ; do

	# Special case: Looking up the size of a file-based vdev can't
	# be done with lsblk.
	if [ "$i" = "size" ] && [ -f "$VDEV_UPATH" ] ; then
		size=$(du -h --apparent-size "$VDEV_UPATH" | cut -f 1)
		echo "size=$size"
		continue
	fi


	val=""
	if val=$(eval "lsblk -dl -n -o $i $VDEV_UPATH 2>/dev/null") ; then
		# Remove leading/trailing whitespace from value
		val=$(echo "$val" | sed -e 's/^[[:space:]]*//' \
		     -e 's/[[:space:]]*$//')
	fi
	echo "$i=$val"
done
