2022-02-08 02:49:02 +08:00
# Fish completions for the ZFS `zpool` command
#
2017-11-23 20:55:59 +08:00
# Possible improvements:
2022-02-08 02:49:02 +08:00
# - Whenever possible, propose designation of vdevs using their GUID.
# - For eligible commands, with arguments of different types, only propose second type completions
# after the first have been selected; for instance, only propose pool members for offline command.
# - This has been written mainly from manpages, which are known to be out-of-sync with the real
# feature set; some discrepancies have been addressed, but it is highly likely that others still
# lie.
2017-11-23 20:55:59 +08:00
2020-05-17 05:01:17 +08:00
set -l OS ""
2022-02-08 02:49:02 +08:00
set -l freebsd_version ""
2017-11-23 20:55:59 +08:00
switch ( uname )
case Linux
2020-03-10 02:36:12 +08:00
set OS Linux
2017-11-23 20:55:59 +08:00
case Darwin
2020-03-10 02:36:12 +08:00
set OS macOS
2017-11-23 20:55:59 +08:00
case FreeBSD
2020-03-10 02:36:12 +08:00
set OS FreeBSD
2022-02-08 02:49:02 +08:00
set freebsd_version ( uname -U )
2017-11-23 20:55:59 +08:00
case SunOS
2020-03-10 02:36:12 +08:00
set OS SunOS
2019-05-05 18:53:09 +08:00
# Others?
2017-11-23 20:55:59 +08:00
case "*"
2020-03-10 02:36:12 +08:00
set OS unknown
2017-11-23 20:55:59 +08:00
end
2022-02-08 02:49:02 +08:00
# Certain functionality is exclusive to platforms using OpenZFS. This used to be just Linux, but it
# now includes FreeBSD 13 and above.
if not type -q __fish_is_openzfs
function __fish_is_openzfs --inherit-variable freebsd_version --inherit-variable OS
test $OS = Linux || test $OS = FreeBSD -a $freebsd_version -gt 1300000
end
end
2017-11-23 20:55:59 +08:00
# Does the current invocation need a command?
function __fish_zpool_needs_command
2019-03-14 20:07:10 +08:00
not __fish_seen_subcommand_from \? add attach clear create destroy detach events get history import iostat labelclear list offline online reguid reopen remove replace scrub set split status upgrade
2017-11-23 20:55:59 +08:00
end
function __fish_zpool_using_command # zpool command whose completions are looked for
2024-01-22 14:42:45 +08:00
set -l cmd ( commandline -xpc )
2017-11-23 20:55:59 +08:00
if test ( count $cmd ) -eq 1 # The token can only be 'zpool', so skip
return 2
end
if test $cmd [ 2 ] = $argv
return 0
else
return 1
end
end
function __fish_zpool_list_used_vdevs -a pool
2019-03-15 00:11:44 +08:00
# See discussion and variants discussed at
# https://github.com/fish-shell/fish-shell/pull/5743#pullrequestreview-217432149
2022-02-08 04:02:16 +08:00
zpool list -Hv $pool | string replace -rf "^\t([^\t]+).*" '$1' | string match -rv '^(spare|log|cache|mirror|raidz.?)'
2017-11-23 20:55:59 +08:00
end
2020-05-17 05:01:17 +08:00
function __fish_zpool_list_available_vdevs -V OS
2020-03-10 02:36:12 +08:00
if test $OS = Linux
find /dev -type b | string replace /dev/ ''
else if test $OS = FreeBSD
2019-03-30 06:43:03 +08:00
sysctl -an kern.disks | string split ' '
2020-03-10 02:36:12 +08:00
else if test $OS = SunOS
find /dev/dsk -type b | string replace /dev/ ''
2017-11-23 20:55:59 +08:00
end
end
function __fish_zpool_complete_vdevs
2022-02-08 02:49:02 +08:00
# As this function is to be called for completions only when necessary, we don't need to verify
# that it is relevant for the specified command; this is to be decided by calling, or not, the
# current function for command completions.
# We can display the physical devices, as they are relevant whereas we are in a vdev definition
2022-02-08 04:02:16 +08:00
# or not. Many operations need this list of vdevs winnowed down to some precondition (mostly
# "vdevs associated with pool" or "vdevs not associated with pool") but it's not really feasible
# to do that here as the situations are highly subcommand-dependent and this function is
# structured to operate backwards only analyzing the subcommand at the very end. Long story
# short, that vdev filtering will need to happen at the call site, at least currently.
2017-11-23 20:55:59 +08:00
__fish_zpool_list_available_vdevs
2022-02-08 04:02:16 +08:00
2017-11-23 20:55:59 +08:00
# First, reverse token list to analyze it from the end
set -l tokens 0
2024-01-22 14:42:45 +08:00
for i in ( commandline -cx ) [ - 1 .. 1 ]
2017-11-23 20:55:59 +08:00
switch $i
case spare log cache # At least 1 item expected
if test $tokens -ge 1
__fish_zpool_list_vdev_types
end
return
case mirror raidz raidz1 # At least 2 items expected
if test $tokens -ge 2
__fish_zpool_list_vdev_types
end
return
case raidz2 # At least 3 items expected
if test $tokens -ge 3
__fish_zpool_list_vdev_types
end
return
case raidz3 # At least 4 items expected
if test $tokens -ge 4
__fish_zpool_list_vdev_types
end
return
2022-02-08 02:49:02 +08:00
# Here, we accept any possible zpool command; this way, the developer will not have
# to augment or reduce the list when adding the current function to or removing it
# from the completions for the said command.
2017-11-23 20:55:59 +08:00
case \? add attach clear create destroy detach events get history import iostat labelclear list offline online reguid reopen remove replace scrub set split status upgrade
__fish_zpool_list_vdev_types
return
case "" # Au cas où
2019-05-05 18:53:09 +08:00
echo "" > /dev/null
2019-03-15 00:11:44 +08:00
case "-*" "*=*" "*,*"
2022-02-08 02:49:02 +08:00
# The token is an option or an option argument; as no option uses a vdev as its
# argument, we can abandon commandline parsing.
2019-03-15 00:11:44 +08:00
__fish_zpool_list_vdev_types
return
2017-11-23 20:55:59 +08:00
end
set tokens ( math $tokens +1 )
end
end
function __fish_zpool_list_get_fields
2020-02-23 17:55:30 +08:00
echo -e "name\tPool full name"
echo -e "property\tProperty"
echo -e "value\tProperty value"
echo -e "source\tProperty value origin"
2017-11-23 20:55:59 +08:00
end
function __fish_zpool_list_vdev_types
2020-02-23 17:55:30 +08:00
echo -e "mirror\tMirror of at least two devices"
echo -e "raidz\tZFS RAID-5 variant, single parity"
echo -e "raidz1\tZFS RAID-5 variant, single parity"
echo -e "raidz2\tZFS RAID-5 variant, double parity"
echo -e "raidz3\tZFS RAID-5 variant, triple parity"
echo -e "spare\tPseudo vdev for pool hot spares"
echo -e "log\tSLOG device"
echo -e "cache\tL2ARC device"
2017-11-23 20:55:59 +08:00
end
2020-05-17 05:01:17 +08:00
function __fish_zpool_list_ro_properties -V OS
2020-02-23 17:55:30 +08:00
echo -e "alloc\tPhysically allocated space"
2017-11-23 20:55:59 +08:00
if contains -- $OS SunOS Linux
2020-02-23 17:55:30 +08:00
echo -e "available\tAvailable space"
echo -e "avail\tAvailable space"
2017-11-23 20:55:59 +08:00
end
2020-03-10 02:36:12 +08:00
if test $OS = SunOS
2020-02-23 17:55:30 +08:00
echo -e "bootsize\tSystem boot partition size"
2017-11-23 20:55:59 +08:00
end
2020-02-23 17:55:30 +08:00
echo -e "capacity\tUsage percentage of pool"
echo -e "dedupratio\tDeduplication ratio"
echo -e "expandsize\tAmount of uninitialized space within the pool"
echo -e "fragmentation\tFragmentation percentage of pool"
echo -e "free\tFree pool space"
echo -e "freeing\tRemaining pool space to be freed"
echo -e "guid\tPool GUID"
echo -e "health\tCurrent pool health"
echo -e "size\tTotal pool space"
echo -e "used\tUsed pool space"
2017-11-23 20:55:59 +08:00
# Unsupported features
2019-03-15 00:11:44 +08:00
zpool list -o all | head -n1 | string replace -ra ' +' '\n' | string lower | string match -r unsupported
2017-11-23 20:55:59 +08:00
end
function __fish_zpool_list_device_properties
2020-02-23 17:55:30 +08:00
echo -e "ashift\tPool sector size exponent (COUNT)"
2017-11-23 20:55:59 +08:00
end
function __fish_zpool_list_writeonce_properties
2020-02-23 17:55:30 +08:00
echo -e "altroot\tAlternate root directory (PATH)"
2017-11-23 20:55:59 +08:00
end
function __fish_zpool_list_importtime_properties
2020-02-23 17:55:30 +08:00
echo -e "altroot\tAlternate root directory (PATH)"
echo -e "readonly\tImport pool in read-only mode (on, off)"
echo -e "rdonly\tImport pool in read-only mode (on, off)"
2017-11-23 20:55:59 +08:00
end
function __fish_zpool_list_rw_properties
2020-02-23 17:55:30 +08:00
echo -e "autoexpand\tAutomatic pool expansion on LUN growing (on, off)"
echo -e "expand\tAutomatic pool expansion on LUN growing (on, off)"
echo -e "autoreplace\tAutomatic use of replacement device (on, off)"
echo -e "replace\tAutomatic use of replacement device (on, off)"
echo -e "bootfs\tDefault bootable dataset (POOL/DATASET)"
echo -e "cachefile\tPool configuration cache (PATH, none, '')"
echo -e "comment\tComment about the pool (COMMENT)"
echo -e "dedupditto\tThreshold for writing a ditto copy of deduplicated blocks (COUNT)"
echo -e "delegation\tAllow rights delegation on the pool (on, off)"
echo -e "failmode\tBehavior in case of catastrophic pool failure (wait, continue, panic)"
echo -e "listsnaps\tDisplay snapshots even if 'zfs list' does not use '-t' (on, off)"
echo -e "version\tOn-disk version of pool (VERSION)"
2017-11-23 20:55:59 +08:00
# Feature properties
2019-03-15 00:11:44 +08:00
zpool list -o all | string replace -ra ' +' '\n' | string lower | string replace -rf '^feature@(.*)' '$1'
2017-11-23 20:55:59 +08:00
end
2020-03-10 02:36:12 +08:00
complete -c zpool -f -n __fish_zpool_needs_command -s '?' -d 'Display a help message'
complete -c zpool -f -n __fish_zpool_needs_command -a add -d 'Add new virtual devices to pool'
complete -c zpool -f -n __fish_zpool_needs_command -a attach -d 'Attach virtual device to a pool device'
complete -c zpool -f -n __fish_zpool_needs_command -a clear -d 'Clear devices errors in pool'
complete -c zpool -f -n __fish_zpool_needs_command -a create -d 'Create a new storage pool'
complete -c zpool -f -n __fish_zpool_needs_command -a destroy -d 'Destroy a storage pool'
complete -c zpool -f -n __fish_zpool_needs_command -a detach -d 'Detach virtual device from a mirroring pool'
2022-02-08 02:49:02 +08:00
if __fish_is_openzfs
2020-03-10 02:36:12 +08:00
complete -c zpool -f -n __fish_zpool_needs_command -a events -d 'Display pool event log'
2017-11-23 20:55:59 +08:00
end
2020-03-10 02:36:12 +08:00
complete -c zpool -f -n __fish_zpool_needs_command -a export -d 'Export a pool'
complete -c zpool -f -n __fish_zpool_needs_command -a get -d 'Get one or several pool properties'
complete -c zpool -f -n __fish_zpool_needs_command -a history -d 'Display pool command history'
complete -c zpool -f -n __fish_zpool_needs_command -a import -d 'List importable pools, or import some'
complete -c zpool -f -n __fish_zpool_needs_command -a iostat -d 'Display pool I/O stats'
complete -c zpool -f -n __fish_zpool_needs_command -a labelclear -d 'Remove ZFS label information from the specified device'
complete -c zpool -f -n __fish_zpool_needs_command -a list -d 'List pools with health status and space usage'
complete -c zpool -f -n __fish_zpool_needs_command -a offline -d 'Take the specified devices offline'
complete -c zpool -f -n __fish_zpool_needs_command -a online -d 'Bring the specified devices back online'
complete -c zpool -f -n __fish_zpool_needs_command -a reguid -d 'Reset pool GUID'
complete -c zpool -f -n __fish_zpool_needs_command -a remove -d 'Remove virtual devices from pool'
complete -c zpool -f -n __fish_zpool_needs_command -a reopen -d 'Reopen pool devices'
complete -c zpool -f -n __fish_zpool_needs_command -a replace -d 'Replace a pool virtual device'
complete -c zpool -f -n __fish_zpool_needs_command -a scrub -d 'Start or stop scrubbing'
complete -c zpool -f -n __fish_zpool_needs_command -a set -d 'Set a pool property'
complete -c zpool -f -n __fish_zpool_needs_command -a split -d 'Create a pool by splitting an existing mirror one'
complete -c zpool -f -n __fish_zpool_needs_command -a status -d 'Display detailed pool health status'
complete -c zpool -f -n __fish_zpool_needs_command -a upgrade -d 'List upgradeable pools, or upgrade one'
2017-11-23 20:55:59 +08:00
# add completions
complete -c zpool -f -n '__fish_zpool_using_command add' -s f -d 'Force use of virtual device'
complete -c zpool -f -n '__fish_zpool_using_command add' -s n -d 'Dry run: only display resulting configuration'
2022-02-08 02:49:02 +08:00
if __fish_is_openzfs
2017-11-23 20:55:59 +08:00
complete -c zpool -f -n '__fish_zpool_using_command add' -s g -d 'Display virtual device GUID instead of device name'
complete -c zpool -f -n '__fish_zpool_using_command add' -s L -d 'Resolve device path symbolic links'
complete -c zpool -f -n '__fish_zpool_using_command add' -s P -d 'Display device full path'
complete -c zpool -x -n '__fish_zpool_using_command add' -s o -d 'Pool property' -a '(__fish_zpool_list_device_properties)'
end
2022-02-09 04:03:16 +08:00
complete -c zpool -x -n '__fish_zpool_using_command add; and __fish_is_nth_token 2' -d 'Pool to add virtual device(s) to' -a '(__fish_complete_zfs_pools)'
# complete -c zpool -x -n '__fish_zpool_using_command add; and not __fish_prev_arg_in add' -d 'Virtual device to add' -a '(__fish_zpool_complete_vdevs)'
# Exclude devices already part of this pool, and devices already in any other pool unless
# `zpool add -f` was used.
2022-02-09 16:46:07 +08:00
complete -c zpool -x -n '__fish_zpool_using_command add; and not __fish_prev_arg_in add' -k -d 'Virtual device to add' -a '(__fish_zpool_complete_vdevs | string match -vr (__fish_zpool_list_used_vdevs (__fish_seen_argument -s f && __fish_nth_token 2) | string escape --style regex | string replace -r \' ( .*) \' \' ^ $1 \\ \\ \\ $\ ' | string join "|"))' # the insane number of backslashes is unfortunate
2017-11-23 20:55:59 +08:00
# attach completions
complete -c zpool -f -n '__fish_zpool_using_command attach' -s f -d 'Force use of virtual device'
2022-02-08 02:49:02 +08:00
if __fish_is_openzfs
2017-11-23 20:55:59 +08:00
complete -c zpool -x -n '__fish_zpool_using_command attach' -s o -d 'Pool property' -a '(__fish_zpool_list_device_properties)'
end
2022-02-08 04:02:16 +08:00
# The ideal behavior for attach is as follows:
# - zpool attach [should list only pools]
# - zpool attach <tank> [should list only devices already part of pool]
# - zpool attach <tank> <da1> [should list only devices not already part of a/the pool]
complete -c zpool -x -n '__fish_zpool_using_command attach; and __fish_is_nth_token 2' -d 'Pool to attach virtual device to' -a '(__fish_complete_zfs_pools)'
2022-02-09 16:46:07 +08:00
complete -c zpool -x -n '__fish_zpool_using_command attach; and __fish_is_nth_token 3' -d 'Existing pool device to attach to' -a '(__fish_zpool_list_used_vdevs (__fish_nth_token 2))'
2022-02-08 04:02:16 +08:00
# Generate a list of devices in the system modulo devices already part of an online zpool.
# These latter can be forcefully added, so we only exclude them if we don't introspect the presence
# of a `-f` argument to `zpool attach` (but still exclude any devices already part of the same pool
# that we're attaching to, "obviously").
2022-02-09 16:46:07 +08:00
complete -c zpool -x -n '__fish_zpool_using_command attach; and __fish_is_nth_token 4' -d 'Device to be attached' -a '(__fish_zpool_list_available_vdevs | string match -vr (__fish_zpool_list_used_vdevs (__fish_seen_argument -s f && __fish_nth_token 2) | string escape --style regex | string replace -r \' ( .*) \' \' ^ $1 \\ \\ \\ $\ ' | string join "|"))' # the insane number of backslashes is unfortunate
2017-11-23 20:55:59 +08:00
# clear completions
2020-03-10 02:36:12 +08:00
if test $OS = FreeBSD
2017-11-23 20:55:59 +08:00
complete -c zpool -f -n '__fish_zpool_using_command clear' -s F -d 'Initiate recovery mode'
complete -c zpool -f -n '__fish_zpool_using_command clear; and __fish_contains_opt -s F' -s n -d 'Dry run: only determine if the recovery is possible, without attempting it'
end
complete -c zpool -x -n '__fish_zpool_using_command clear' -d 'Pool to clear errors on' -a '(__fish_complete_zfs_pools)'
complete -c zpool -f -n '__fish_zpool_using_command clear' -d 'Virtual device to operate on' -a '(__fish_zpool_list_used_vdevs)'
# create completions
2020-03-10 02:36:12 +08:00
if test $OS = SunOS
2017-11-23 20:55:59 +08:00
complete -c zpool -f -n '__fish_zpool_using_command create' -s B -d 'Create whole disk pool with EFI System partition to support booting system with UEFI firmware'
else
complete -c zpool -f -n '__fish_zpool_using_command create' -s f -d 'Force use of virtual device'
end
complete -c zpool -f -n '__fish_zpool_using_command create' -s n -d 'Dry run, only display resulting configuration'
complete -c zpool -f -n '__fish_zpool_using_command create' -s d -d 'Do not enable any feature on the new pool'
complete -c zpool -x -n '__fish_zpool_using_command create' -s o -d 'Pool property' -a '(__fish_zpool_list_writeonce_properties; __fish_zpool_list_rw_properties)'
complete -c zpool -x -n '__fish_zpool_using_command create' -s O -d 'Root filesystem property' -a '(__fish_complete_zfs_ro_properties; __fish_complete_zfs_rw_properties; __fish_complete_zfs_write_once_properties)'
complete -c zpool -r -n '__fish_zpool_using_command create' -s R -d 'Equivalent to "-o cachefile=none,altroot=ROOT"'
complete -c zpool -x -n '__fish_zpool_using_command create' -s m -d 'Root filesystem mountpoint' -a 'legacy none'
2022-02-08 02:49:02 +08:00
if __fish_is_openzfs
2017-11-23 20:55:59 +08:00
complete -c zpool -x -n '__fish_zpool_using_command create' -s t -d 'Set a different in-core pool name'
end
complete -c zpool -x -n '__fish_zpool_using_command create' -d 'Virtual device to add' -a '(__fish_zpool_complete_vdevs)'
# destroy completions
complete -c zpool -f -n '__fish_zpool_using_command destroy' -s f -d 'Force unmounting of all contained datasets'
complete -c zpool -x -n '__fish_zpool_using_command destroy' -d 'Pool to destroy' -a '(__fish_complete_zfs_pools)'
# detach completions
complete -c zpool -x -n '__fish_zpool_using_command clear' -d 'Pool to detach device from' -a '(__fish_complete_zfs_pools)'
complete -c zpool -x -n '__fish_zpool_using_command clear' -d 'Physical device to detach' -a '(__fish_zpool_list_used_vdevs)'
# events completions
2022-02-08 02:49:02 +08:00
if __fish_is_openzfs
2017-11-23 20:55:59 +08:00
complete -c zpool -f -n '__fish_zpool_using_command events' -s v -d 'Print verbose event information'
complete -c zpool -f -n '__fish_zpool_using_command events' -s H -d 'Print output in a machine-parsable format'
complete -c zpool -f -n '__fish_zpool_using_command events' -s f -d 'Output appended data as the log grows'
complete -c zpool -f -n '__fish_zpool_using_command events' -s c -d 'Clear all previous events'
complete -c zpool -f -n '__fish_zpool_using_command events' -d 'Pool to read events from' -a '(__fish_complete_zfs_pools)'
end
# export completions
2022-02-08 02:49:02 +08:00
if __fish_is_openzfs
2017-11-23 20:55:59 +08:00
complete -c zpool -f -n '__fish_zpool_using_command export' -s a -d 'Export all pools'
end
complete -c zpool -f -n '__fish_zpool_using_command export' -s f -d 'Force unmounting of all contained datasets'
complete -c zpool -x -n '__fish_zpool_using_command export' -d 'Pool to export' -a '(__fish_complete_zfs_pools)'
# get completions
complete -c zpool -f -n '__fish_zpool_using_command get' -s p -d 'Print parsable (exact) values for numbers'
complete -c zpool -f -n '__fish_zpool_using_command get' -s H -d 'Print output in a machine-parsable format'
if contains -- $OS FreeBSD SunOS
2019-03-14 20:07:10 +08:00
complete -c zpool -x -n '__fish_zpool_using_command get' -s o -d 'Fields to display' -a '(__fish_append , (__fish_zpool_list_get_fields))'
2017-11-23 20:55:59 +08:00
end
2020-02-23 17:55:30 +08:00
complete -c zpool -x -n '__fish_zpool_using_command get' -d 'Properties to get' -a '(__fish_append , (__fish_zpool_list_importtime_properties; __fish_zpool_list_rw_properties; __fish_zpool_list_writeonce_properties; __fish_zpool_list_ro_properties; __fish_zpool_list_device_properties; echo -e "all\tAll properties"))'
2017-11-23 20:55:59 +08:00
complete -c zpool -x -n '__fish_zpool_using_command get' -d 'Pool to get properties of' -a '(__fish_complete_zfs_pools)'
# history completions
complete -c zpool -f -n '__fish_zpool_using_command history' -s i -d 'Also display internal events'
complete -c zpool -f -n '__fish_zpool_using_command history' -s l -d 'Display log records using long format'
complete -c zpool -f -n '__fish_zpool_using_command history' -d 'Pool to get command history of' -a '(__fish_complete_zfs_pools)'
# import completions
complete -c zpool -r -n '__fish_zpool_using_command import; and __fish_not_contain_opt -s d' -s c -d 'Read configuration from specified cache file'
complete -c zpool -r -n '__fish_zpool_using_command import; and __fish_not_contain_opt -s c' -s d -d 'Search for devices or files in specified directory'
complete -c zpool -f -n '__fish_zpool_using_command import' -s D -d 'List or import destroyed pools only (requires -f for importation)'
2019-03-14 20:07:10 +08:00
complete -c zpool -x -n '__fish_zpool_using_command import' -s o -d 'Mount properties for contained datasets' -a '(__fish_append , (__fish_complete_zfs_mountpoint_properties))'
2017-11-23 20:55:59 +08:00
complete -c zpool -x -n '__fish_zpool_using_command import' -s o -d 'Properties of the imported pool' -a '(__fish_complete_zfs_mountpoint_properties; __fish_zpool_list_importtime_properties; __fish_zpool_list_rw_properties)'
complete -c zpool -f -n '__fish_zpool_using_command import' -s f -d 'Force import'
complete -c zpool -f -n '__fish_zpool_using_command import' -s F -d 'Recovery mode'
complete -c zpool -f -n '__fish_zpool_using_command import' -s a -d 'Search for and import all pools found'
complete -c zpool -f -n '__fish_zpool_using_command import' -s m -d 'Ignore missing log device (risk of loss of last changes)'
complete -c zpool -r -n '__fish_zpool_using_command import' -s R -d 'Equivalent to "-o cachefile=none,altroot=ROOT"'
complete -c zpool -f -n '__fish_zpool_using_command import' -s N -d 'Do not mount contained filesystems'
complete -c zpool -f -n '__fish_zpool_using_command import; and __fish_contains_opt -s F' -s n -d 'Dry run: only determine if the recovery is possible, without attempting it'
2022-02-08 02:49:02 +08:00
if __fish_is_openzfs
2017-11-23 20:55:59 +08:00
complete -c zpool -f -n '__fish_zpool_using_command import; and __fish_contains_opt -s F' -s X -d 'Roll back to a previous TXG (hazardous)'
complete -c zpool -r -n '__fish_zpool_using_command import' -s T -d 'TXG to roll back to (implies -FX)'
complete -c zpool -f -n '__fish_zpool_using_command import' -s t -d 'Specify, as the last argument, a temporary pool name'
end
complete -c zpool -f -n '__fish_zpool_using_command import; and __fish_not_contain_opt -s a' -d 'Pool to import' -a '(__fish_complete_zfs_pools)'
# iostat completions
complete -c zpool -x -n '__fish_zpool_using_command iostat' -s T -d 'Display a timestamp using specified format'
2022-02-08 02:49:02 +08:00
if __fish_is_openzfs
2017-11-23 20:55:59 +08:00
complete -c zpool -f -n '__fish_zpool_using_command iostat' -s g -d 'Display virtual device GUID instead of device name'
complete -c zpool -f -n '__fish_zpool_using_command iostat' -s L -d 'Resolve device path symbolic links'
complete -c zpool -f -n '__fish_zpool_using_command iostat' -s P -d 'Display device full path'
complete -c zpool -f -n '__fish_zpool_using_command iostat' -s y -d 'Omit statistics since boot'
end
complete -c zpool -f -n '__fish_zpool_using_command iostat' -s v -d 'Print verbose statistics'
complete -c zpool -f -n '__fish_zpool_using_command iostat' -d 'Pool to retrieve I/O stats from' -a '(__fish_complete_zfs_pools)'
# labelclear completions
complete -c zpool -f -n '__fish_zpool_using_command labelclear' -s f -d 'Treat exported or foreign devices as inactive'
complete -c zpool -x -n '__fish_zpool_using_command labelclear' -d 'Device to clear ZFS label information from' -a '(__fish_zpool_list_available_vdevs)'
# list completions
complete -c zpool -f -n '__fish_zpool_using_command list' -s H -d 'Print output in a machine-parsable format'
2022-02-08 02:49:02 +08:00
if __fish_is_openzfs
2017-11-23 20:55:59 +08:00
complete -c zpool -f -n '__fish_zpool_using_command list' -s g -d 'Display virtual device GUID instead of device name'
complete -c zpool -f -n '__fish_zpool_using_command list' -s L -d 'Resolve device path symbolic links'
end
complete -c zpool -f -n '__fish_zpool_using_command list' -s P -d 'Display device full path'
complete -c zpool -x -n '__fish_zpool_using_command list' -s T -d 'Display a timestamp using specified format'
complete -c zpool -f -n '__fish_zpool_using_command list' -s v -d 'Print verbose statistics'
2019-03-14 20:07:10 +08:00
complete -c zpool -x -n '__fish_zpool_using_command list' -s o -d 'Property to list' -a '(__fish_append , (__fish_zpool_list_importtime_properties; __fish_zpool_list_rw_properties; __fish_zpool_list_writeonce_properties; __fish_zpool_list_ro_properties; __fish_zpool_list_device_properties))'
2017-11-23 20:55:59 +08:00
complete -c zpool -f -n '__fish_zpool_using_command list' -d 'Pool to list properties of' -a '(__fish_complete_zfs_pools)'
# offline completions
complete -c zpool -f -n '__fish_zpool_using_command offline' -s t -d 'Temporarily offline'
complete -c zpool -x -n '__fish_zpool_using_command offline' -d 'Pool to offline device from' -a '(__fish_complete_zfs_pools)'
complete -c zpool -x -n '__fish_zpool_using_command offline' -d 'Physical device to offline' -a '(__fish_zpool_list_used_vdevs)'
# online completions
complete -c zpool -f -n '__fish_zpool_using_command online' -s e -d 'Expand the device to use all available space'
complete -c zpool -x -n '__fish_zpool_using_command online' -d 'Pool to bring device back online on' -a '(__fish_complete_zfs_pools)'
complete -c zpool -x -n '__fish_zpool_using_command online' -d 'Physical device to bring back online' -a '(__fish_zpool_list_used_vdevs)'
# reguid completions
complete -c zpool -x -n '__fish_zpool_using_command reguid' -d 'Pool which GUID is to be changed' -a '(__fish_complete_zfs_pools)'
# remove completions
complete -c zpool -x -n '__fish_zpool_using_command remove' -d 'Pool to remove device from' -a '(__fish_complete_zfs_pools)'
complete -c zpool -x -n '__fish_zpool_using_command remove' -d 'Physical device to remove' -a '(__fish_zpool_list_used_vdevs)'
# reopen completions
complete -c zpool -x -n '__fish_zpool_using_command reopen' -d 'Pool which devices are to be reopened' -a '(__fish_complete_zfs_pools)'
# replace completions
complete -c zpool -f -n '__fish_zpool_using_command replace' -s f -d 'Force use of virtual device'
2022-02-08 02:49:02 +08:00
if __fish_is_openzfs
2017-11-23 20:55:59 +08:00
complete -c zpool -x -n '__fish_zpool_using_command replace' -s o -d 'Pool property' -a '(__fish_zpool_list_device_properties)'
end
complete -c zpool -x -n '__fish_zpool_using_command replace' -d 'Pool to replace device' -a '(__fish_complete_zfs_pools)'
complete -c zpool -x -n '__fish_zpool_using_command replace' -d 'Pool device to be replaced' -a '(__fish_zpool_list_used_vdevs)'
complete -c zpool -f -n '__fish_zpool_using_command replace' -d 'Device to use for replacement' -a '(__fish_zpool_list_available_vdevs)'
# scrub completions
complete -c zpool -f -n '__fish_zpool_using_command scrub' -s s -d 'Stop scrubbing'
2020-03-10 02:36:12 +08:00
if test $OS = SunOS
2017-11-23 20:55:59 +08:00
complete -c zpool -f -n '__fish_zpool_using_command scrub' -s p -d 'Pause scrubbing'
end
complete -c zpool -x -n '__fish_zpool_using_command scrub' -d 'Pool to start/stop scrubbing' -a '(__fish_complete_zfs_pools)'
# set completions
complete -c zpool -x -n '__fish_zpool_using_command set' -d 'Property to set' -a '(__fish_zpool_list_rw_properties)'
complete -c zpool -x -n '__fish_zpool_using_command set' -d 'Pool which property is to be set' -a '(__fish_complete_zfs_pools)'
# split completions
2022-02-08 02:49:02 +08:00
if __fish_is_openzfs
2017-11-23 20:55:59 +08:00
complete -c zpool -f -n '__fish_zpool_using_command split' -s g -d 'Display virtual device GUID instead of device name'
complete -c zpool -f -n '__fish_zpool_using_command split' -s L -d 'Resolve device path symbolic links'
complete -c zpool -f -n '__fish_zpool_using_command split' -s P -d 'Display device full path'
end
complete -c zpool -f -n '__fish_zpool_using_command split' -s n -d 'Dry run: only display resulting configuration'
complete -c zpool -r -n '__fish_zpool_using_command split' -s R -d 'Set altroot for newpool and automatically import it'
complete -c zpool -x -n '__fish_zpool_using_command split' -s o -d 'Pool property' -a '(__fish_zpool_list_writeonce_properties; __fish_zpool_list_rw_properties)'
2020-03-10 02:36:12 +08:00
if test $OS = FreeBSD
2019-03-14 20:07:10 +08:00
complete -c zpool -x -n '__fish_zpool_using_command split; and __fish_contains_opt -s R' -s o -d 'Mount properties for contained datasets' -a '(__fish_append , (__fish_complete_zfs_mountpoint_properties))'
2017-11-23 20:55:59 +08:00
end
complete -c zpool -x -n '__fish_zpool_using_command split' -d 'Pool to split' -a '(__fish_complete_zfs_pools)'
# status completions
2022-02-08 02:49:02 +08:00
if __fish_is_openzfs
2017-11-23 20:55:59 +08:00
complete -c zpool -f -n '__fish_zpool_using_command status' -s g -d 'Display virtual device GUID instead of device name'
complete -c zpool -f -n '__fish_zpool_using_command status' -s L -d 'Resolve device path symbolic links'
complete -c zpool -f -n '__fish_zpool_using_command status' -s P -d 'Display device full path'
complete -c zpool -f -n '__fish_zpool_using_command status' -s D -d 'Display deduplication histogram'
2020-03-10 02:36:12 +08:00
else if test $OS = SunOS
2017-11-23 20:55:59 +08:00
complete -c zpool -f -n '__fish_zpool_using_command status' -s D -d 'Display deduplication histogram'
end
complete -c zpool -f -n '__fish_zpool_using_command status' -s v -d 'Verbose mode'
complete -c zpool -f -n '__fish_zpool_using_command status' -s x -d 'Only display status for unhealthy or unavailable pools'
complete -c zpool -x -n '__fish_zpool_using_command status' -s T -d 'Display a timestamp using specified format'
complete -c zpool -f -n '__fish_zpool_using_command status' -d 'Pool which status is to be displayed' -a '(__fish_complete_zfs_pools)'
# upgrade completions
complete -c zpool -f -n '__fish_zpool_using_command upgrade' -s a -d 'Upgrade all eligible pools, enabling all supported features'
complete -c zpool -f -n '__fish_zpool_using_command upgrade' -s v -d 'Display upgradeable ZFS versions'
complete -c zpool -x -n '__fish_zpool_using_command upgrade' -s V -d 'Upgrade to the specified legacy version'
complete -c zpool -f -n '__fish_zpool_using_command upgrade; and __fish_not_contain_opt -s a' -d 'Pool which status is to be displayed' -a '(__fish_complete_zfs_pools)'