Skip to content

Instantly share code, notes, and snippets.

@kalkin
Last active June 18, 2016 15:28
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kalkin/d2c1f837618294671267 to your computer and use it in GitHub Desktop.
Save kalkin/d2c1f837618294671267 to your computer and use it in GitHub Desktop.
#!/bin/sh
# vim: fdm=marker sw=4 ts=4 tw=80
# Author: Bahtiar `kalkin-` Gadimov <bahtiar@gadimov.de>
set -e
print_help() {
echo "Usage: qls [-1ahrstAHNPT]"
echo "Print QubesVMs. By default only running and transient vms are printed"
echo
echo "Optional arguments:"
echo " -1, --raw Only print names, one on each line"
echo " -a, --all-states Show all"
echo " -h, --help Show this help message and exit"
echo " -r, --running Show running"
echo " -s, --stopped Show stopped"
echo " -t, --source Show AppVMs based on specified TemplateVM"
echo " -A, --app Show AppVMs"
echo " -H, --hvm Show HVMs"
echo " -N, --net Show NetVMs"
echo " -P, --proxy Show ProxyVMs"
echo " -T, --template Show TemplateVMs"
}
print_result(){
if [ "$1" = true ]; then
echo "$2"|cut -d"|" -f1|sort
else
DATA=$(echo "$2" |sort |sed -e 's/.*Halted/■ &/' -e 's/.*Running.*/▶ &/' -e 's/.*Transient.*/⚙ &/')
DATA=" $HEADER
$DATA"
echo "$DATA"|cut -d'|' -f1,3- |column -s'|' -t
fi
}
filter(){
echo "$2"|egrep "$1"
}
TMP=$(getopt --name qls -o 1ahrst:AHNPT --long raw,all,help,running,source:,stopped,app,hvm,net,proxy,template -- "$@")
if [ $? = 0 ]; then
eval set -- "$TMP"
else
exit 1
fi
RAW=false
ALL=false
STATE=
TYPE=
TEMPLATE=
while true; do
case "$1" in
-h | --help ) print_help; exit 0 ;;
-1 | --raw ) RAW=true; shift ;;
-a | --all ) ALL=true; shift ;;
-s | --stopped ) ALL=false; STATE="$STATE|Halted"; shift ;;
-r | --running ) ALL=false; STATE="$STATE|Running|Transient"; shift ;;
-t | --source ) TEMPLATE="$2"; shift 2;;
-A | --app ) TYPE="$TYPE|App"; shift ;;
-H | --hvm ) TYPE="$TYPE|HVM"; shift ;;
-N | --net ) TYPE="$TYPE|Net"; shift ;;
-P | --proxy ) TYPE="$TYPE|Proxy"; shift ;;
-T | --template ) TYPE="$TYPE|Tpl"; shift ;;
-- ) shift; break ;;
* ) break ;;
esac
done
TABLE=$(qvm-ls -m |sed -e '/^[-+]\+$/d' |tr -d ' {}[]<>=' |cut -d '|' -f1,3,5,7,8,9)
HEADER=$(echo "$TABLE" |head -n1)
DATA=$(echo "$TABLE"|tail -n+2)
if [ "$ALL" = false ]; then
if [ -z "$STATE" ]; then
STATE="Running|Transient"
else
STATE=$(echo $STATE|cut -c 2-)
fi
DATA=$(filter "$STATE" "$DATA")
fi
if [ ! -z "$TYPE" ]; then
TYPE=$(echo "$TYPE"|cut -c 2-)
DATA=$(filter "$TYPE" "$DATA")
fi
if [ ! -z "$TEMPLATE" ]; then
echo "$TEMPLATE"
DATA=$(filter "$TEMPLATE" "$DATA"|grep -v "^$TEMPLATE")
fi
print_result "$RAW" "$DATA"
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment