about summary refs log tree commit diff
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
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 "$@"