summaryrefslogtreecommitdiff
path: root/Completion/Unix/Command/_zpool
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/Unix/Command/_zpool')
-rw-r--r--Completion/Unix/Command/_zpool201
1 files changed, 201 insertions, 0 deletions
diff --git a/Completion/Unix/Command/_zpool b/Completion/Unix/Command/_zpool
index ae98c2b7f..40628e82c 100644
--- a/Completion/Unix/Command/_zpool
+++ b/Completion/Unix/Command/_zpool
@@ -199,3 +199,204 @@ _zpool() {
}
_zpool "$@"
+#compdef zpool
+
+_zpool() {
+ local -a subcmds fields
+
+ subcmds=(
+ create destroy add remove list iostat status online
+ offline clear attach detach replace scrub import export
+ upgrade history get set
+ )
+
+ fields=(
+ name\:"Pool name" size\:"Total size" used\:"Space used"
+ available\:"Space available" capacity\:"Space used (percentage)"
+ health\:"Health status"
+ )
+
+ properties=(
+ "bootfs:value:"
+ "autoreplace:value:(on off)"
+ "delegation:value:(on off)"
+ )
+ propnames=( ${properties%%:*} )
+
+ import_properties=(
+ xattr
+ copies
+ shareiscsi
+ canmount
+ share
+ sharenfs
+ userprop
+ mount
+ )
+
+ if [[ $service == "zpool" ]]; then
+ _arguments -C -A "-*" \
+ '-\?[Help]' \
+ '*::command:->subcmd' && return 0
+
+ if (( CURRENT == 1 )); then
+ _wanted commands expl "zpool subcommand" compadd -a subcmds
+ return
+ fi
+ service="$words[1]"
+ curcontext="${curcontext%:*}=$service:"
+ fi
+
+ case $service in
+ (clear)
+ _arguments \
+ ':pool name:_zfs_pool' \
+ '*:virtual device:_files'
+ ;;
+
+ (create)
+ # TODO: investigate better vdev handling
+ _arguments -A "-*" \
+ '-f[Force use of in-use devices]' \
+ '-n[Display configuration without creating pool]' \
+ '-R[Use alternate root]:alternate root:_files -/' \
+ '-m[Set mountpoint for root dataset]:mountpoint:' \
+ ':pool name:' \
+ '*:virtual device:_files'
+ ;;
+
+ (destroy)
+ _arguments -A "-*" \
+ '-f[Force active datasets to be unmounted]' \
+ ':pool name:_zfs_pool'
+ ;;
+
+ (add)
+ _arguments -A "-*" \
+ '-f[Force use of in-use devices]' \
+ '-n[Display configuration without modifying pool]' \
+ ':pool name:_zfs_pool' \
+ '*:virtual device:_files'
+ ;;
+
+ (list)
+ _arguments \
+ '-H[Scripted mode]' \
+ '-o[Fields to list]:field:_values -s , "field" ${^fields/\:/[}\]' \
+ '::pool name:_zfs_pool'
+ ;;
+
+ (iostat)
+ _arguments -A "-*" \
+ '-v[Verbose statistics]' \
+ '*::pool name:_zfs_pool' \
+ '::interval:' \
+ '::count:'
+ ;;
+
+ (status)
+ _arguments -A "-*" \
+ '-v[Verbose information]' \
+ '-x[Show only unhealthy pools]' \
+ '*::pool name:_zfs_pool'
+ ;;
+
+ (offline)
+ _arguments -A "-*" \
+ '-t[Offline until next reboot]' \
+ ':pool name:_zfs_pool' \
+ '*:virtual device:_files'
+ ;;
+
+ (online)
+ _arguments \
+ ':pool name:_zfs_pool' \
+ '*:virtual device:_files'
+ ;;
+
+ (attach)
+ # TODO: first device should choose first from existing.
+ _arguments \
+ '-f[Force attach, even if in use]' \
+ ':pool name:_zfs_pool' \
+ ':virtual device:_files' \
+ ':virtual device:_files'
+ ;;
+
+ (detach)
+ _arguments \
+ ':pool name:_zfs_pool' \
+ ':virtual device:_files'
+ ;;
+
+ (replace)
+ _arguments -A "-*" \
+ '-f[Force attach, even if in use]' \
+ ':pool name:_zfs_pool' \
+ ':virtual device:_files' \
+ '::virtual device:_files'
+ ;;
+
+ (scrub)
+ _arguments -A "-*" \
+ '-s[Stop scrubbing]' \
+ '*:pool name:_zfs_pool'
+ ;;
+
+ (export)
+ _arguments -A "-*" \
+ '-f[Forcefully unmount all datasets]' \
+ '*:pool name:_zfs_pool'
+ ;;
+
+ (import)
+ # TODO: -o should complete options
+ _arguments -A "-*" \
+ '*-d[Search for devices or files in directory]:_files -/' \
+ '-D[Destroyed pools]' \
+ '-f[Force import]' \
+ - set1 \
+ '-o[Mount options]' \
+ '-p[Set property]:property:_values -s , "property" $import_properties' \
+ '-R[Alternate root]:_files -/' \
+ '*:pool name or id:_zfs_pool' \
+ '::new pool name:' \
+ - set2 \
+ '-a[All pools]'
+ ;;
+
+ (get)
+ _arguments -A "-*" \
+ ':property:_values -s , "property" $propnames all' \
+ '*:pool name:_zfs_pool'
+ ;;
+
+ (set)
+ _arguments -A "-*" \
+ ':property:_values -s , "property" $properties' \
+ '*:pool name:_zfs_pool'
+ ;;
+
+ (upgrade)
+ _arguments -A "-*" \
+ - set1 \
+ '-v[Display ZFS versions and descriptions]' \
+ - set2 \
+ '-a[Upgrade all pools]' \
+ '*:pool name:_zfs_pool'
+ ;;
+
+ (history)
+ _arguments -A "-*" \
+ '-i[Display internal events]' \
+ '-l[Long format]' \
+ '*:pool name:_zfs_pool'
+ ;;
+
+ (*)
+ _message "unknown zpool subcommand: $service"
+ ;;
+ esac
+}
+
+_zpool "$@"