diff options
Diffstat (limited to 'Completion/Unix/Command/_zpool')
-rw-r--r-- | Completion/Unix/Command/_zpool | 201 |
1 files changed, 201 insertions, 0 deletions
diff --git a/Completion/Unix/Command/_zpool b/Completion/Unix/Command/_zpool new file mode 100644 index 000000000..ae98c2b7f --- /dev/null +++ b/Completion/Unix/Command/_zpool @@ -0,0 +1,201 @@ +#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 "$@" |