mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-09-03 10:21:46 +02:00
201 lines
3.9 KiB
Text
201 lines
3.9 KiB
Text
#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 "$@"
|