mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-09-18 03:11:15 +02:00
131 lines
3.9 KiB
Text
131 lines
3.9 KiB
Text
#compdef svccfg
|
|
|
|
local curcontext="$curcontext" ret=1
|
|
local -a state line expl subcmds args
|
|
local -A opt_args
|
|
|
|
# Subcommands that don't make sense on the commandline are missing
|
|
subcmds=(
|
|
apply export extract import inventory validate
|
|
add delete list
|
|
addpg addpropvalue delcust delpg delprop delpropvalue describe
|
|
editprop listpg listprop listcust setenv setprop unsetenv
|
|
setnotify listnotify delnotify
|
|
listsnap revert selectsnap
|
|
refresh
|
|
help
|
|
)
|
|
|
|
_arguments -s -A "-*" \
|
|
'-v[verbose]' \
|
|
'-s+[specify fmri on which to operate]:fmri:_svcs_fmri -c' \
|
|
'(1 *)-f+[read commands from file]:command file:_files' \
|
|
'1: :->subcmds' \
|
|
'*:: :->args' && ret=0
|
|
|
|
case $state in
|
|
subcmds)
|
|
_wanted commands expl 'svccfg subcommand' compadd -a subcmds && ret=0
|
|
;;
|
|
args)
|
|
curcontext="${curcontext%:*}-$words[1]:"
|
|
|
|
case $words[1] in
|
|
import)
|
|
_arguments \
|
|
'-V[verify property updates]' \
|
|
':file:_files'
|
|
;;
|
|
|
|
apply|inventory) _files ;;
|
|
|
|
validate)
|
|
_alternative 'files:file:_files' 'fmris:fmri:_svcs_fmri -c'
|
|
;;
|
|
|
|
export) _svcs_fmri -c ;;
|
|
|
|
delete)
|
|
_arguments \
|
|
'-f[force deletion if online or degraded]' \
|
|
'*:fmri:_svcs_fmri -c'
|
|
;;
|
|
|
|
describe)
|
|
local fmri=$opt_args[-s]
|
|
_arguments -A "-*" \
|
|
'-v[give all information]' \
|
|
'-t[show only template data]' \
|
|
':property group or property:->properties'
|
|
|
|
if [[ -n $state ]]; then
|
|
fmris=( ${(f)"$(_call_program properties svcs -H -o fmri $fmri)"} )
|
|
if (( $#fmris > 1 )); then
|
|
_message "'$fmri' is ambiguous"
|
|
return 1
|
|
fi
|
|
|
|
# Get all the property names for the FMRI
|
|
props=( ${${${(f)"$(_call_program properties svccfg -s $fmri describe)"}:# *}%% *} )
|
|
|
|
_multi_parts "$@" - / props && ret=0
|
|
fi
|
|
;;
|
|
|
|
extract|add|delete|list|addpg|addpropvalue|delcust|delpg|delprop)
|
|
;;
|
|
|
|
delpropvalue|editprop|listpg|listcust|setenv|setprop|unsetenv)
|
|
;;
|
|
|
|
listprop)
|
|
_arguments \
|
|
'-l+[print the layer the value came from]:layer:(manifest system-profile enterprise-profile site-profile node-profile sysconfig-profile admin current all)' \
|
|
'(-o)-f[print the file a property came from]' \
|
|
'(-f)-o+[select fields to print]:field:_sequence compadd - propname pgname instname servicename layer proptype value file masked time' \
|
|
'*-G+[specify property group]:property group' \
|
|
'-P+[specify property name]:property name' && ret=0
|
|
;;
|
|
|
|
setnotify)
|
|
args=( '2:notification parameter:->parameters' )
|
|
;&
|
|
listnotify|delnotify|selectsnap)
|
|
_arguments $args \
|
|
'-g[apply to notification parameters in svc:/system/svc/global:default]' \
|
|
'1: :->tsets-classes'
|
|
|
|
case $state in
|
|
tsets-classes)
|
|
local states=( uninitialized offline online degraded maintenance disabled )
|
|
_alternative \
|
|
'state-transitions:state transition:_sequence compadd - all {to-,from-,}$^states' \
|
|
'event-classes:event class:_sequence compadd - problem-{diagnosed,updated,repaired,resolved}' && ret=0
|
|
;;
|
|
parameters)
|
|
if compset -P 'mailto:'; then
|
|
_email_addresses -c && ret=0
|
|
elif compset -P 'snmp:'; then
|
|
_wanted values expl value compadd active inactive && ret=9
|
|
else
|
|
_wanted uri-formats expl 'URI format' compadd -S: mailto snmp && ret=0
|
|
fi
|
|
;;
|
|
esac
|
|
;;
|
|
|
|
revert)
|
|
_wanted snapshots expl snapshot compadd initial previous running start && ret=0
|
|
;;
|
|
|
|
refresh|listsnap)
|
|
_message 'no more arguments'
|
|
;;
|
|
*) # fallback to default completion for unknown subcommands
|
|
_default && ret=0
|
|
;;
|
|
esac
|
|
;;
|
|
esac
|
|
|
|
return ret
|