mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-09-29 06:51:03 +02:00
125 lines
2.8 KiB
Text
125 lines
2.8 KiB
Text
#compdef fmadm
|
|
|
|
_fm_modules() {
|
|
compadd "$@" - ${${(f)"$(_call_program modules fmadm config)"}[2,-1]// */}
|
|
}
|
|
|
|
_fm_faulted_fmris() {
|
|
compadd "$@" - $(fmadm faulty -r 2> /dev/null | awk '{print $1}')
|
|
}
|
|
|
|
_fm_faulted_uuids() {
|
|
compadd "$@" - $(fmadm faulty -s 2> /dev/null | tail +4 | awk '{print $4}')
|
|
}
|
|
|
|
_fm_faulted_labels() {
|
|
local line q='"'
|
|
compadd "$@" - $(fmadm faulty -f 2> /dev/null | while read line; do
|
|
if [[ $line == "----"* ]]; then
|
|
read line
|
|
if [[ $line == '"'* ]]; then
|
|
print ${${line[(r)$q,(rn:2:)$q]}[2,-2]}
|
|
fi
|
|
fi
|
|
done)
|
|
}
|
|
|
|
local curcontext="$curcontext" state line expl ret=1
|
|
local -A opt_args
|
|
local -a subcmds args
|
|
|
|
# TODO: lookup-alias and remove-alias need completion based on the
|
|
# output of list-alias, but I have no examples of that output.
|
|
|
|
subcmds=(
|
|
faulty list acquit replaced repaired list-alert clear
|
|
list-defect list-fault
|
|
add-alias remove-alias lookup-alias list-alias sync-alias
|
|
config load unload reset rotate flush
|
|
)
|
|
|
|
_arguments -C -A "-*" \
|
|
'-q[quiet mode]' \
|
|
'1:fmadm subcommand:compadd -M "r:|-=* r:|=*" -a subcmds' \
|
|
'*::command:->subcmd' && ret=0
|
|
|
|
[[ -z $state ]] && return ret
|
|
service="$words[1]"
|
|
curcontext="${curcontext%:*}-$service:"
|
|
|
|
case $service in
|
|
(faulty|list|list-alert|list-defect|list-fault)
|
|
args+=(
|
|
'-f[display faulty FRUs]'
|
|
'-i[display persistent cache IDs]'
|
|
'-p[page output]'
|
|
'-r[display resources]'
|
|
'-s[display one-line summaries]'
|
|
'-u[only display fault with given uuid]:uuid:_fm_faulted_uuids'
|
|
'-v[display full output]'
|
|
)
|
|
;|
|
|
|
|
(list|faulty)
|
|
_arguments -A "-*" $args \
|
|
'-a[display all faults]' \
|
|
'-g[group faults]' \
|
|
'-n[limit output to specified number of entries]:number'
|
|
;;
|
|
|
|
(list-alert|list-defect|list-fault)
|
|
_arguments -A "-*" $args \
|
|
'-a[display all resources]'
|
|
;;
|
|
|
|
(acquit)
|
|
_alternative \
|
|
'fmadm-acquit-label:label:_fm_faulted_labels' \
|
|
'fmadm-acquit-uuid:uuid:_fm_faulted_uuids' \
|
|
'fmadm-acquit-fmri:fmri:_fm_faulted_fmris' && ret=0
|
|
;;
|
|
|
|
(repaired|replaced)
|
|
_alternative \
|
|
'fmadm-acquit-label:label:_fm_faulted_labels' \
|
|
'fmadm-acquit-fmri:fmri:_fm_faulted_fmris' && ret=0
|
|
;;
|
|
|
|
(add-alias)
|
|
_arguments :chassis :alias-id :comment && ret=0
|
|
;;
|
|
|
|
(remove-alias|lookup-alias)
|
|
_message -e aliases 'chassis or alias-id'
|
|
;;
|
|
|
|
(load)
|
|
_directories && ret=0
|
|
;;
|
|
|
|
(unload)
|
|
_fm_modules && ret=0
|
|
;;
|
|
|
|
(reset)
|
|
_arguments -A "-*" \
|
|
'-s[reset named SERD]:serd' \
|
|
':module:_fm_modules' && ret=0
|
|
;;
|
|
|
|
(rotate)
|
|
_values 'logfile' errlog fltlog infolog infolog_hival && ret=0
|
|
;;
|
|
|
|
(flush)
|
|
_fm_faulted_fmris && ret=0
|
|
;;
|
|
|
|
(list-alias|config|sync-aliases) _message 'no more arguments' ;;
|
|
|
|
(*) # fallback to defaults for any new or unhandled subcommand
|
|
_default && ret=0
|
|
;;
|
|
esac
|
|
|
|
return ret
|