1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 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 "$@"
|