summaryrefslogtreecommitdiff
path: root/Completion/Solaris/Command/_fmadm
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/Solaris/Command/_fmadm')
-rw-r--r--Completion/Solaris/Command/_fmadm188
1 files changed, 101 insertions, 87 deletions
diff --git a/Completion/Solaris/Command/_fmadm b/Completion/Solaris/Command/_fmadm
index 56dac4f96..54e22bde4 100644
--- a/Completion/Solaris/Command/_fmadm
+++ b/Completion/Solaris/Command/_fmadm
@@ -1,8 +1,7 @@
#compdef fmadm
-# Synced with the Nevada build 168 man page
_fm_modules() {
- compadd "$@" - $(fmadm config 2> /dev/null | awk 'NR == 1 {continue} {print $1}')
+ compadd "$@" - ${${(f)"$(_call_program modules fmadm config)"}[2,-1]// */}
}
_fm_faulted_fmris() {
@@ -14,7 +13,7 @@ _fm_faulted_uuids() {
}
_fm_faulted_labels() {
- local q='"'
+ local line q='"'
compadd "$@" - $(fmadm faulty -f 2> /dev/null | while read line; do
if [[ $line == "----"* ]]; then
read line
@@ -25,87 +24,102 @@ _fm_faulted_labels() {
done)
}
-_fmadm() {
- local context state line expl
- local -A opt_args
- local -a subcmds
-
- # TODO: lookup-alias and remove-alias need completion based on the
- # output of list-alias, but I have no examples of that output.
-
- subcmds=(
- "acquit" "config" "faulty" "flush" "load" "unload"
- "repaired" "replaced" "reset" "rotate"
- "add-alias" "remove-alias" "lookup-alias" "list-alias" "sync-alias"
- )
-
- if [[ $service == "fmadm" ]]; then
- _arguments -C -A "-*" \
- '-q[Quite mode]' \
- '*::command:->subcmd' && return 0
-
- if (( CURRENT == 1 )); then
- _wanted commands expl "fmadm subcommand" compadd -a subcmds
- return
- fi
- service="$words[1]"
- curcontext="${curcontext%:*}=$service:"
- fi
-
- case $service in
- ("acquit")
- _alternative \
- "fmadm-acquit-label:label:_fm_faulted_labels" \
- "fmadm-acquit-uuid:uuid:_fm_faulted_uuids" \
- "fmadm-acquit-fmri:fmri:_fm_faulted_fmris"
- ;;
-
- ("config")
- ;;
-
- ("faulty")
- _arguments -A "-*" \
- '-a[Display all faults]' \
- '-f[Display faulty FRUs]' \
- '-g[Group faults]' \
- '-i[Display persistent cache IDs]' \
- '-n[Limit output to n entries]:number:' \
- '-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]'
- ;;
-
- ("flush")
- _fm_faulted_fmris
- ;;
-
- ("load")
- _path_files -g "/*"
- ;;
-
- ("unload")
- _fm_modules
- ;;
-
- ("repaired"|"replaced")
- _alternative \
- "fmadm-acquit-label:label:_fm_faulted_labels" \
- "fmadm-acquit-fmri:fmri:_fm_faulted_fmris"
- ;;
-
- ("reset")
- _arguments -A "-*" \
- '-s[Reset named SERD]:serd:' \
- ':module:_fm_modules'
- ;;
-
- ("rotate")
- _values "logfile" "errlog" "fltlog" "infolog" "infolog_hival"
- ;;
-
- esac
-}
-
-_fmadm "$@"
+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