summaryrefslogtreecommitdiff
path: root/bash-completion/addons/beadm
diff options
context:
space:
mode:
Diffstat (limited to 'bash-completion/addons/beadm')
-rw-r--r--bash-completion/addons/beadm129
1 files changed, 129 insertions, 0 deletions
diff --git a/bash-completion/addons/beadm b/bash-completion/addons/beadm
new file mode 100644
index 0000000..cf0a73a
--- /dev/null
+++ b/bash-completion/addons/beadm
@@ -0,0 +1,129 @@
+# *** Public Domain ***
+#
+# Uncomment if do not have zfs bash completion:
+#__zfs_get_editable_properties()
+#{
+# zfs get 2>&1 | awk '$2 == "YES" {printf("%s=\n", $1)}'
+#}
+#
+#__zpool_list_pools()
+#{
+# zpool list -H -o name
+#}
+
+__beadm_be_list () {
+ beadm list -H 2>/dev/null | nawk -F';' '{print $1}'
+}
+
+__beadm_be_at_list () {
+ beadm list -H 2>/dev/null | nawk -F';' '{print $1"@"}'
+}
+
+# List of mounted BE and mount points (for unmount command)
+__beadm_unmount_list () {
+ beadm list -H 2>/dev/null | nawk -F';' '$4 != "/" && $4 != "" {print $1" "$4}'
+}
+
+__beadm_nonactive_list () {
+ beadm list -H 2>/dev/null | nawk -F';' '$3 !~ "N" {print $1}'
+}
+
+__beadm_nonactive_reboot_list () {
+ beadm list -H 2>/dev/null | nawk -F';' '$3 !~ "R" {print $1}'
+}
+
+__beadm_snapshot_list () {
+ beadm list -s -H 2>/dev/null | nawk -F';' '{print $2}'
+}
+
+_beadm () {
+ local cur prev opts line
+ COMPREPLY=()
+
+ # Allow @ (at-sign) for snapshots:
+ shopt -u hostcomplete
+
+ cur=${COMP_WORDS[COMP_CWORD]}
+ prev="${COMP_WORDS[COMP_CWORD-1]}"
+ line="${COMP_LINE}"
+ cmd="${COMP_WORDS[1]}"
+
+ if [[ ${COMP_CWORD} -eq 1 ]]; then
+ COMPREPLY=( $(compgen -W "create destroy list mount \
+ unmount rename activate rollback" -- $cur) )
+ return
+ fi
+
+ case "$cmd" in
+ create)
+ case "$prev" in
+ -e)
+ COMPREPLY=( $(compgen -W "$(__beadm_nonactive_list) $(__beadm_snapshot_list)" -- $cur) )
+ ;;
+ -p)
+ COMPREPLY=( $(compgen -W "$(__zpool_list_pools)" -- $cur) )
+ ;;
+ -o)
+ COMPREPLY=( $(compgen -W "$(__zfs_get_editable_properties)" -- $cur) )
+ ;;
+ *)
+ COMPREPLY=( $(compgen -W "-a -d -e -o -p -v $(__beadm_be_at_list)" -- $cur) )
+ if [[ ${#COMPREPLY[@]} == 1 && ${COMPREPLY[0]} != -* ]]; then
+ compopt -o nospace
+ fi
+ ;;
+ esac
+ ;;
+ destroy)
+ case "$line" in
+ *"-s "*)
+ COMPREPLY=( $(compgen -W "$(__beadm_nonactive_list) -f -F -v" -- $cur) )
+ ;;
+ *)
+ COMPREPLY=( $(compgen -W "$(__beadm_snapshot_list) $(__beadm_nonactive_list) -f -s -F -v" -- $cur) )
+ ;;
+ esac
+ ;;
+ list)
+ case "$line" in
+ *"-a "*)
+ COMPREPLY=( $(compgen -W "$(__beadm_be_list) -H -v" -- $cur) )
+ ;;
+ *"-d "*)
+ COMPREPLY=( $(compgen -W "$(__beadm_be_list) -s -H -v" -- $cur) )
+ ;;
+ *"-s "*)
+ COMPREPLY=( $(compgen -W "$(__beadm_be_list) -d -H -v" -- $cur) )
+ ;;
+ *)
+ COMPREPLY=( $(compgen -W "$(__beadm_be_list) -a -d -s -H -v" -- $cur) )
+ ;;
+ esac
+ ;;
+ mount)
+ case "$prev" in
+ mount)
+ COMPREPLY=( $(compgen -W "$(__beadm_be_list) -v" -- $cur) )
+ ;;
+ -v)
+ COMPREPLY=( $(compgen -W "$(__beadm_be_list)" -- $cur) )
+ ;;
+ *)
+ _cd
+ ;;
+ esac
+ ;;
+ unmount)
+ COMPREPLY=( $(compgen -W "$(__beadm_unmount_list) -v -f" -- $cur) )
+ ;;
+ rollback)
+ COMPREPLY=( $(compgen -W "$(__beadm_snapshot_list) -v" -- $cur) )
+ ;;
+ activate)
+ COMPREPLY=( $(compgen -W "$(__beadm_nonactive_reboot_list) -v" -- $cur) )
+ ;;
+ esac
+
+}
+
+complete -F _beadm beadm