1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
#compdef virsh virt-admin virt-host-validate virt-pki-validate virt-xml-validate
local curcontext="$curcontext" state line expl ret=1
local exargs="-h --help -V -v --version=short --version=long"
local -a common_opts interact_cmds
common_opts=(
'(- *)'{-h,--help}'[print help information and exit]'
'(- *)'{-v,--version=short}'[print short version information and exit]'
'(- *)'{-V,--version=long}'[print long version information and exit]'
"(-c --connect $exargs)"{-c+,--connect=}'[specify connection URI]:URI:_hosts'
"(-d --debug -q --quiet $exargs)"{-d+,--debug=}'[set debug level]:level:(0 1 2 3 4)'
"(-l --log $exargs)"{-l+,--log=}'[specify log file]:file:_files'
"(-q --quiet -d --debug $exargs)"{-q,--quiet}'[quiet mode]'
)
interact_cmds=(cd echo exit quit connect)
case $service in
virsh)
if (( ! $+_cache_virsh_cmds )); then
_cache_virsh_cmds=( ${${${${(f):-"$(_call_program options virsh help)"}:#*:}/# ##}/ *} )
local icmd
for icmd in $interact_cmds; do
_cache_virsh_cmds[$_cache_virsh_cmds[(i)$icmd]]=()
done
fi
if (( ! $+_cache_virsh_cmdopts )); then
typeset -gA _cache_virsh_cmdopts
fi
_arguments -A "-*" -C -S -s -w \
"$common_opts[@]" \
"(-e --escape $exargs)"{-e+,--escape=}'[set escape sequence for console]:sequence' \
"(-k --keepalive-interval $exargs)"{-k+,--keepalive-interval=}'[set keepalive interval]:interval' \
"(-K --keepalive-count $exargs)"{-K+,--keepalive-count=}'[set keepalive count]:count' \
"(-r --readonly $exargs)"{-r,--readonly}'[connect readonly]' \
"(-t --timing $exargs)"{-t,--timing}'[print timing information]' \
'1:command:->virsh_cmds' \
'*:cmdopt:->virsh_cmdopts' && return
# We accept only virsh command options after the first non-option argument
# (i.e., the virsh command itself), this makes it so with the -A "-*" above
[[ -z $state ]] && state=virsh_cmdopts
;;
virt-admin)
if (( ! $+_cache_virt_admin_cmds )); then
_cache_virt_admin_cmds=( ${${${${(f):-"$(_call_program options virt-admin help)"}:#*:}/# ##}/ *} )
local icmd
for icmd in $interact_cmds; do
_cache_virt_admin_cmds[$_cache_virt_admin_cmds[(i)$icmd]]=()
done
fi
if (( ! $+_cache_virt_admin_cmdopts )); then
typeset -gA _cache_virt_admin_cmdopts
fi
_arguments -A "-*" -C -S -s -w \
"$common_opts[@]" \
'1:command:->virt_admin_cmds' \
'*:cmdopt:->virt_admin_cmdopts' && return
# Same as with virsh above
[[ -z $state ]] && state=virt_admin_cmdopts
;;
virt-host-validate)
_arguments -A "-*" -S \
'(- *)'{-h,--help}'[print help information and exit]' \
'(- *)'{-v,--version}'[print version information and exit]' \
'(- *)'{-q,--quiet}'[quiet mode]' \
'1:hv-type:(qemu lxc)' && return
;;
virt-pki-validate)
_arguments -A "-*" -S \
'(- *)'{-h,--help}'[print help information and exit]' \
'(- *)'{-V,--version}'[print version information and exit]' \
&& return
;;
virt-xml-validate)
_arguments -A "-*" -S \
'(- *)'{-h,--help}'[print help information and exit]' \
'(- *)'{-V,--version}'[print version information and exit]' \
'1:file:_files -g "*.xml(-.)"' \
'2:schema:(domainsnapshot domain network storagepool storagevol nodedev capability nwfilter secret interface)' \
&& return
;;
esac
case $state in
virsh_cmds)
_wanted commands expl 'virsh command' compadd -a _cache_virsh_cmds && ret=0
;;
virsh_cmdopts)
local cmd
if [[ $words[-1] == /* || $words[-1] == ./* ]]; then
_default
return
fi
for (( i = 2; i <= $#words; i++ )); do
[[ -n "${_cache_virsh_cmds[(r)$words[$i]]}" ]] && cmd=$words[$i] && break
done
[[ -z $cmd ]] && return 1
if [[ -z $_cache_virsh_cmdopts[$cmd] ]]; then
_cache_virsh_cmdopts[$cmd]=${(M)${${${${=${(f)"$(_call_program virsh virsh help $cmd 2>&1)"}}/\[}/\]}/\;}:#-[-0-9A-Za-z]*}
fi
_values -w options ${=_cache_virsh_cmdopts[$cmd]} && ret=0
;;
virt_admin_cmds)
_wanted commands expl 'virt-admin command' compadd -a _cache_virt_admin_cmds && ret=0
;;
virt_admin_cmdopts)
local cmd
for (( i = 2; i <= $#words; i++ )); do
[[ -n "${_cache_virt_admin_cmds[(r)$words[$i]]}" ]] && cmd=$words[$i] && break
done
[[ -z $cmd ]] && return 1
if [[ $words[-2] == --server ]]; then
_values servers ${=${(S)${${(f)$(sudo virt-admin srv-list)}##*--- }//[0-9]* }} && return 0
fi
if [[ $words[-2] == --client ]]; then
local srv
for (( i = 2; i <= $#words; i++ )); do
[[ $words[$i] == --server ]] && srv=$words[$i+1] && break
done
[[ -z $srv ]] && return 1
_values servers ${=${${(f):-"$(sudo virt-admin srv-clients-list --server $srv)"}/ [a-z]*}//[^0-9]} && return 0
fi
if [[ -z $_cache_virt_admin_cmdopts[$cmd] ]]; then
_cache_virt_admin_cmdopts[$cmd]=${(M)${${${${=${(f)"$(_call_program virt-admin virt-admin help $cmd 2>&1)"}}/\[}/\]}/\;}:#-[-0-9A-Za-z]*}
fi
[[ -n $_cache_virt_admin_cmdopts[$cmd] ]] && \
_values -w options ${=_cache_virt_admin_cmdopts[$cmd]} && ret=0
;;
esac
return ret
|