root / doc / examples / bash_completion.in @ b806661b
History | View | Annotate | Download (14.1 kB)
1 |
_gnt_backup() |
---|---|
2 |
{ |
3 |
local cur prev base_cmd cmds ilist nlist |
4 |
COMPREPLY=() |
5 |
cur="$2" |
6 |
prev="$3" |
7 |
# |
8 |
# The basic options we'll complete. |
9 |
# |
10 |
cmds="export import list remove" |
11 |
|
12 |
# default completion is empty |
13 |
COMPREPLY=() |
14 |
|
15 |
if [[ ! -f "@LOCALSTATEDIR@/lib/ganeti/ssconf_cluster_name" ]]; then |
16 |
# cluster not initialized |
17 |
return 0 |
18 |
fi |
19 |
|
20 |
ilist=$(< "@LOCALSTATEDIR@/lib/ganeti/ssconf_instance_list") |
21 |
nlist=$(< "@LOCALSTATEDIR@/lib/ganeti/ssconf_node_list") |
22 |
|
23 |
case "$COMP_CWORD" in |
24 |
1) |
25 |
# complete the command name |
26 |
COMPREPLY=( $(compgen -W "$cmds" -- ${cur}) ) |
27 |
;; |
28 |
*) |
29 |
# we're doing options to commands |
30 |
base_cmd="${COMP_WORDS[1]}" |
31 |
case "${base_cmd}" in |
32 |
export) |
33 |
case "$COMP_CWORD" in |
34 |
2) |
35 |
# options or instances |
36 |
COMPREPLY=( $(compgen -W "--no-shutdown -n $ilist" -- ${cur}) ) |
37 |
;; |
38 |
3) |
39 |
# if previous was option, we allow instance |
40 |
case "$prev" in |
41 |
-*) |
42 |
COMPREPLY=( $(compgen -W "$ilist" -- ${cur}) ) |
43 |
;; |
44 |
esac |
45 |
esac |
46 |
;; |
47 |
import) |
48 |
case "$prev" in |
49 |
-t) |
50 |
COMPREPLY=( $(compgen -W "diskless file plain drbd" -- ${cur}) ) |
51 |
;; |
52 |
--src-node) |
53 |
COMPREPLY=( $(compgen -W "$nlist" -- ${cur}) ) |
54 |
;; |
55 |
--file-driver) |
56 |
COMPREPLY=( $(compgen -W "loop blktap" -- ${cur}) ) |
57 |
;; |
58 |
-*) |
59 |
# arguments to other options, we don't have completion yet |
60 |
;; |
61 |
*) |
62 |
COMPREPLY=( $(compgen -W "-t -n -B -H -s --disks --net \ |
63 |
--no-nics --no-start --no-ip-check -I \ |
64 |
--src-node --src-dir --file-driver \ |
65 |
--file-storage-dir" -- ${cur}) ) |
66 |
;; |
67 |
esac |
68 |
;; |
69 |
remove) |
70 |
if [[ "$COMP_CWORD" -eq 2 ]]; then |
71 |
COMPREPLY=( $(compgen -W "$ilist" -- ${cur}) ) |
72 |
fi |
73 |
;; |
74 |
esac |
75 |
esac |
76 |
|
77 |
return 0 |
78 |
} |
79 |
|
80 |
complete -F _gnt_backup gnt-backup |
81 |
|
82 |
_gnt_cluster() |
83 |
{ |
84 |
local cur prev cmds |
85 |
cur="$2" |
86 |
prev="$3" |
87 |
# |
88 |
# The basic options we'll complete. |
89 |
# |
90 |
if [[ -e "@LOCALSTATEDIR@/lib/ganeti/ssconf_cluster_name" ]]; then |
91 |
cmds="add-tags command copyfile destroy getmaster info list-tags \ |
92 |
masterfailover modify queue redist-conf remove-tags rename \ |
93 |
search-tags verify verify-disks version" |
94 |
else |
95 |
cmds="init" |
96 |
fi |
97 |
|
98 |
# default completion is empty |
99 |
COMPREPLY=() |
100 |
case "$COMP_CWORD" in |
101 |
1) |
102 |
# complete the command name |
103 |
COMPREPLY=($(compgen -W "$cmds" -- ${cur})) |
104 |
;; |
105 |
2) |
106 |
# complete arguments to the command |
107 |
case "$prev" in |
108 |
"queue") |
109 |
COMPREPLY=( $(compgen -W "drain undrain info" -- ${cur}) ) |
110 |
;; |
111 |
*) |
112 |
;; |
113 |
esac |
114 |
esac |
115 |
|
116 |
return 0 |
117 |
} |
118 |
|
119 |
complete -F _gnt_cluster gnt-cluster |
120 |
|
121 |
_gnt_debug() |
122 |
{ |
123 |
local cur prev cmds |
124 |
cur="$2" |
125 |
prev="$3" |
126 |
|
127 |
cmds="allocator delay submit-job" |
128 |
|
129 |
# default completion is empty |
130 |
COMPREPLY=() |
131 |
|
132 |
if [[ ! -f "@LOCALSTATEDIR@/lib/ganeti/ssconf_cluster_name" ]]; then |
133 |
# cluster not initialized |
134 |
return 0 |
135 |
fi |
136 |
|
137 |
case "$COMP_CWORD" in |
138 |
1) |
139 |
# complete the command name |
140 |
COMPREPLY=( $(compgen -W "$cmds" -- ${cur}) ) |
141 |
;; |
142 |
*) |
143 |
# we're doing options to commands |
144 |
base_cmd="${COMP_WORDS[1]}" |
145 |
case "${base_cmd}" in |
146 |
delay) |
147 |
if [[ "$prev" != -* ]]; then |
148 |
COMPREPLY=( $(compgen -W "--no-master -n" -- ${cur}) ) |
149 |
fi |
150 |
;; |
151 |
submit-job) |
152 |
if [[ "$COMP_CWORD" -eq 2 ]]; then |
153 |
COMPREPLY=( $(compgen -f -- ${cur}) ) |
154 |
fi |
155 |
;; |
156 |
esac |
157 |
esac |
158 |
|
159 |
return 0 |
160 |
} |
161 |
|
162 |
complete -F _gnt_debug gnt-debug |
163 |
|
164 |
_gnt_instance() |
165 |
{ |
166 |
local cur prev base_cmd cmds ilist nlist |
167 |
COMPREPLY=() |
168 |
cur="$2" |
169 |
prev="$3" |
170 |
# |
171 |
# The basic options we'll complete. |
172 |
# |
173 |
cmds="activate-disks add add-tags batch-create console deactivate-disks \ |
174 |
failover grow-disk info list list-tags migrate modify reboot \ |
175 |
reinstall remove remove-tags rename replace-disks shutdown startup" |
176 |
|
177 |
# default completion is empty |
178 |
COMPREPLY=() |
179 |
|
180 |
if [[ ! -f "@LOCALSTATEDIR@/lib/ganeti/ssconf_cluster_name" ]]; then |
181 |
# cluster not initialized |
182 |
return 0 |
183 |
fi |
184 |
|
185 |
ilist=$(< "@LOCALSTATEDIR@/lib/ganeti/ssconf_instance_list") |
186 |
nlist=$(< "@LOCALSTATEDIR@/lib/ganeti/ssconf_node_list") |
187 |
|
188 |
case "$COMP_CWORD" in |
189 |
1) |
190 |
# complete the command name |
191 |
COMPREPLY=( $(compgen -W "$cmds" -- ${cur}) ) |
192 |
;; |
193 |
*) |
194 |
# we're doing options to commands |
195 |
base_cmd="${COMP_WORDS[1]}" |
196 |
case "${base_cmd}" in |
197 |
# first, rules for multiple commands |
198 |
activate-disks|console|deactivate-disks|list-tags|rename|remove) |
199 |
# commands with only one instance argument, nothing else |
200 |
if [[ "$COMP_CWORD" -eq 2 ]]; then |
201 |
COMPREPLY=( $(compgen -W "$ilist" -- ${cur}) ) |
202 |
fi |
203 |
;; |
204 |
info) |
205 |
# commands with more than one instance |
206 |
COMPREPLY=( $(compgen -W "$ilist" -- ${cur}) ) |
207 |
;; |
208 |
add-tags|grow-disk|reinstall|remove-tags|replace-disks) |
209 |
# not very well handled |
210 |
COMPREPLY=( $(compgen -W "$ilist" -- ${cur}) ) |
211 |
;; |
212 |
startup|start|shutdown|stop|reboot) |
213 |
COMPREPLY=( $(compgen -W "--force-multiple --node --primary \ |
214 |
--secondary --all --submit $ilist" -- ${cur}) ) |
215 |
;; |
216 |
# individual commands |
217 |
add) |
218 |
case "$prev" in |
219 |
-t) |
220 |
COMPREPLY=( $(compgen -W "diskless file plain drbd" -- ${cur}) ) |
221 |
;; |
222 |
--file-driver) |
223 |
COMPREPLY=( $(compgen -W "loop blktap" -- ${cur}) ) |
224 |
;; |
225 |
-*) |
226 |
# arguments to other options, we don't have completion yet |
227 |
;; |
228 |
*) |
229 |
COMPREPLY=( $(compgen -W "-t -n -o -B -H -s --disks --net \ |
230 |
--no-nics --no-start --no-ip-check -I \ |
231 |
--file-driver --file-storage-dir --submit" \ |
232 |
-- ${cur}) ) |
233 |
;; |
234 |
esac |
235 |
;; |
236 |
batch-create) |
237 |
# this only takes one file name |
238 |
COMPREPLY=( $(compgen -A file -- ${cur}) ) |
239 |
;; |
240 |
failover) |
241 |
case "$COMP_CWORD" in |
242 |
2) |
243 |
# options or instances |
244 |
COMPREPLY=( $(compgen -W "--ignore-failures $ilist" -- ${cur}) ) |
245 |
;; |
246 |
3) |
247 |
# if previous was option, we allow instance |
248 |
case "$prev" in |
249 |
-*) |
250 |
COMPREPLY=( $(compgen -W "$ilist" -- ${cur}) ) |
251 |
;; |
252 |
esac |
253 |
esac |
254 |
;; |
255 |
list) |
256 |
COMPREPLY=( $(compgen -W "--no-headers --separator --units -o \ |
257 |
--sync $ilist" -- ${cur}) ) |
258 |
;; |
259 |
modify) |
260 |
COMPREPLY=( $(compgen -W "-H -B --disk --net $ilist" -- ${cur}) ) |
261 |
;; |
262 |
migrate) |
263 |
case "$COMP_CWORD" in |
264 |
2) |
265 |
# options or instances |
266 |
COMPREPLY=( $(compgen -W "--non-live --cleanup $ilist" -- \ |
267 |
${cur}) ) |
268 |
;; |
269 |
3) |
270 |
# if previous was option, we allow instance |
271 |
case "$prev" in |
272 |
-*) |
273 |
COMPREPLY=( $(compgen -W "$ilist" -- ${cur}) ) |
274 |
;; |
275 |
esac |
276 |
esac |
277 |
esac |
278 |
esac |
279 |
|
280 |
return 0 |
281 |
} |
282 |
|
283 |
complete -F _gnt_instance gnt-instance |
284 |
|
285 |
_gnt_job() |
286 |
{ |
287 |
local cur prev cmds |
288 |
cur="$2" |
289 |
prev="$3" |
290 |
|
291 |
cmds="archive autoarchive cancel info list" |
292 |
|
293 |
# default completion is empty |
294 |
COMPREPLY=() |
295 |
|
296 |
if [[ ! -f "@LOCALSTATEDIR@/lib/ganeti/ssconf_cluster_name" ]]; then |
297 |
# cluster not initialized |
298 |
return 0 |
299 |
fi |
300 |
|
301 |
case "$COMP_CWORD" in |
302 |
1) |
303 |
# complete the command name |
304 |
COMPREPLY=( $(compgen -W "$cmds" -- ${cur}) ) |
305 |
;; |
306 |
*) |
307 |
# we're doing options to commands |
308 |
base_cmd="${COMP_WORDS[1]}" |
309 |
case "${base_cmd}" in |
310 |
archive|cancel|info) |
311 |
# FIXME: this is really going into the internals of the job queue |
312 |
jlist=$( cd @LOCALSTATEDIR@/lib/ganeti/queue; echo job-*) |
313 |
jlist=${jlist//job-/} |
314 |
COMPREPLY=( $(compgen -W "$jlist" -- ${cur}) ) |
315 |
;; |
316 |
list) |
317 |
COMPREPLY=( $(compgen -W "--no-headers --separator -o" -- ${cur}) ) |
318 |
;; |
319 |
|
320 |
esac |
321 |
esac |
322 |
|
323 |
return 0 |
324 |
} |
325 |
|
326 |
complete -F _gnt_job gnt-job |
327 |
|
328 |
_gnt_os() |
329 |
{ |
330 |
local cur prev cmds |
331 |
cur="$2" |
332 |
prev="$3" |
333 |
|
334 |
cmds="list diagnose" |
335 |
|
336 |
# default completion is empty |
337 |
COMPREPLY=() |
338 |
|
339 |
if [[ ! -f "@LOCALSTATEDIR@/lib/ganeti/ssconf_cluster_name" ]]; then |
340 |
# cluster not initialized |
341 |
return 0 |
342 |
fi |
343 |
|
344 |
case "$COMP_CWORD" in |
345 |
1) |
346 |
# complete the command name |
347 |
COMPREPLY=( $(compgen -W "$cmds" -- ${cur}) ) |
348 |
;; |
349 |
*) |
350 |
# we're doing options to commands |
351 |
base_cmd="${COMP_WORDS[1]}" |
352 |
case "${base_cmd}" in |
353 |
list) |
354 |
if [[ "$COMP_CWORD" -eq 2 ]]; then |
355 |
COMPREPLY=( $(compgen -W "--no-headers" -- ${cur}) ) |
356 |
fi |
357 |
;; |
358 |
esac |
359 |
esac |
360 |
|
361 |
return 0 |
362 |
} |
363 |
|
364 |
complete -F _gnt_os gnt-os |
365 |
|
366 |
_gnt_node() |
367 |
{ |
368 |
local cur prev cmds base_cmd |
369 |
cur="$2" |
370 |
prev="$3" |
371 |
|
372 |
cmds="add add-tags evacuate failover info list list-tags migrate modify \ |
373 |
remove remove-tags volumes" |
374 |
|
375 |
# default completion is empty |
376 |
COMPREPLY=() |
377 |
|
378 |
if [[ ! -f "@LOCALSTATEDIR@/lib/ganeti/ssconf_cluster_name" ]]; then |
379 |
# cluster not initialized |
380 |
return 0 |
381 |
fi |
382 |
|
383 |
nlist=$(< "@LOCALSTATEDIR@/lib/ganeti/ssconf_node_list") |
384 |
|
385 |
case "$COMP_CWORD" in |
386 |
1) |
387 |
# complete the command name |
388 |
COMPREPLY=( $(compgen -W "$cmds" -- ${cur}) ) |
389 |
;; |
390 |
*) |
391 |
# we're doing options to commands |
392 |
base_cmd="${COMP_WORDS[1]}" |
393 |
case "${base_cmd}" in |
394 |
# first rules for multiple commands |
395 |
list-tags|remove) |
396 |
# commands with only one instance argument, nothing else |
397 |
if [[ "$COMP_CWORD" -eq 2 ]]; then |
398 |
COMPREPLY=( $(compgen -W "$nlist" -- ${cur}) ) |
399 |
fi |
400 |
;; |
401 |
add-tags|info|remove-tags|volumes) |
402 |
COMPREPLY=( $(compgen -W "$nlist" -- ${cur}) ) |
403 |
;; |
404 |
# individual commands |
405 |
add) |
406 |
# options or instances |
407 |
COMPREPLY=( $(compgen -W "-s --readd --no-ssh-key-check" -- ${cur}) ) |
408 |
;; |
409 |
evacuate) |
410 |
case "$COMP_CWORD" in |
411 |
2) |
412 |
# options or instances |
413 |
COMPREPLY=( $(compgen -W "-n -I $nlist" -- ${cur}) ) |
414 |
;; |
415 |
3) |
416 |
# if previous was option, we allow node |
417 |
case "$prev" in |
418 |
-*) |
419 |
COMPREPLY=( $(compgen -W "$nlist" -- ${cur}) ) |
420 |
;; |
421 |
esac |
422 |
esac |
423 |
;; |
424 |
failover) |
425 |
case "$COMP_CWORD" in |
426 |
2) |
427 |
# options or instances |
428 |
COMPREPLY=( $(compgen -W "--ignore-failures $nlist" -- ${cur}) ) |
429 |
;; |
430 |
3) |
431 |
# if previous was option, we allow node |
432 |
case "$prev" in |
433 |
-*) |
434 |
COMPREPLY=( $(compgen -W "$nlist" -- ${cur}) ) |
435 |
;; |
436 |
esac |
437 |
esac |
438 |
;; |
439 |
list) |
440 |
COMPREPLY=( $(compgen -W "--no-headers --separator --units -o \ |
441 |
--sync $nlist" -- ${cur}) ) |
442 |
;; |
443 |
modify) |
444 |
# TODO: after a non-option, don't allow options |
445 |
if [[ "$COMP_CWORD" -eq 2 || "$prev" != -* ]]; then |
446 |
COMPREPLY=( $(compgen -W "-C -O -D $nlist" -- ${cur}) ) |
447 |
elif [[ "$prev" == -* ]]; then |
448 |
COMPREPLY=( $(compgen -W "yes no" -- ${cur}) ) |
449 |
fi |
450 |
;; |
451 |
migrate) |
452 |
case "$COMP_CWORD" in |
453 |
2) |
454 |
# options or nodes |
455 |
COMPREPLY=( $(compgen -W "--non-live $nlist" -- ${cur}) ) |
456 |
;; |
457 |
3) |
458 |
# if previous was option, we allow node |
459 |
case "$prev" in |
460 |
-*) |
461 |
COMPREPLY=( $(compgen -W "$nlist" -- ${cur}) ) |
462 |
;; |
463 |
esac |
464 |
esac |
465 |
esac |
466 |
esac |
467 |
|
468 |
return 0 |
469 |
} |
470 |
|
471 |
complete -F _gnt_node gnt-node |
472 |
|
473 |
# other tools |
474 |
|
475 |
_gnt_tool_burnin() |
476 |
{ |
477 |
local cur prev |
478 |
cur="$2" |
479 |
prev="$3" |
480 |
|
481 |
# default completion is empty |
482 |
COMPREPLY=() |
483 |
|
484 |
if [[ ! -f "@LOCALSTATEDIR@/lib/ganeti/ssconf_cluster_name" ]]; then |
485 |
# cluster not initialized |
486 |
return 0 |
487 |
fi |
488 |
|
489 |
nlist=$(< "@LOCALSTATEDIR@/lib/ganeti/ssconf_node_list") |
490 |
|
491 |
case "$prev" in |
492 |
-t) |
493 |
COMPREPLY=( $(compgen -W "diskless file plain drbd" -- ${cur}) ) |
494 |
;; |
495 |
--rename) |
496 |
# this needs an unused host name, so we don't complete it |
497 |
;; |
498 |
-n|--nodes) |
499 |
# nodes from the cluster, comma separated |
500 |
# FIXME: make completion work for comma-separated values |
501 |
COMPREPLY=( $(compgen -W "$nlist" -- ${cur}) ) |
502 |
;; |
503 |
-o|--os) |
504 |
# the os list |
505 |
COMPREPLY=( $(compgen -W "$(gnt-os list --no-headers)" -- ${cur}) ) |
506 |
;; |
507 |
--disk-size|--disk-growth) |
508 |
# these take a number or unit, we can't really autocomplete, but |
509 |
# we show a couple of examples |
510 |
COMPREPLY=( $(compgen -W "128M 512M 1G 4G 1G,256M 4G,1G,1G 10G" -- \ |
511 |
${cur}) ) |
512 |
;; |
513 |
--mem-size) |
514 |
# this takes a number or unit, we can't really autocomplete, but |
515 |
# we show a couple of examples |
516 |
COMPREPLY=( $(compgen -W "128M 256M 512M 1G 4G 8G 12G 16G" -- ${cur}) ) |
517 |
;; |
518 |
--net-timeout) |
519 |
# this takes a number in seconds; again, we can't really complete |
520 |
COMPREPLY=( $(compgen -W "15 60 300 900" -- ${cur}) ) |
521 |
;; |
522 |
*) |
523 |
# all other, we just list the whole options |
524 |
COMPREPLY=( $(compgen -W "-o --disk-size --disk-growth --mem-size \ |
525 |
-v --verbose --no-replace1 --no-replace2 --no-failover \ |
526 |
--no-migrate --no-importexport --no-startstop \ |
527 |
--no-reinstall --no-reboot --no-activate-disks \ |
528 |
--no-add-disks --no-add-nics --no-nics \ |
529 |
--rename -t -n --nodes -I --iallocator -p --parallel \ |
530 |
--net-timeout -C --http-check -K --keep-instances" \ |
531 |
-- ${cur}) ) |
532 |
esac |
533 |
|
534 |
return 0 |
535 |
} |
536 |
|
537 |
complete -F _gnt_tool_burnin @PREFIX@/lib/ganeti/tools/burnin |