diff options
Diffstat (limited to 'Completion/Solaris/Command/_fmadm')
-rw-r--r-- | Completion/Solaris/Command/_fmadm | 187 |
1 files changed, 100 insertions, 87 deletions
diff --git a/Completion/Solaris/Command/_fmadm b/Completion/Solaris/Command/_fmadm index 56dac4f96..2a28f7a5c 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,101 @@ _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 + +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]' + ) + ;| + + (faulty) + _arguments -A "-*" $args \ + '-a[display all faults]' \ + '-g[group faults]' \ + '-n[limit output to n entries]:number' + ;; + + (list|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 |