-
-
Save sabottenda/9870189 to your computer and use it in GitHub Desktop.
lxc zsh completion
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#compdef lxc-start lxc-stop lxc-console lxc-restart lxc-create lxc-destroy lxc-monitor lxc-cgroup lxc-checkpoint lxc-execute lxc-freeze lxc-unfreeze lxc-info lxc-netstat lxc-ps lxc-wait | |
#===================================================================================================== | |
# original source is here: https://lists.linuxcontainers.org/pipermail/lxc-devel/2010-April/001172.html | |
#===================================================================================================== | |
_lxc_containers() { | |
local -a containers | |
containers=( $(/bin/ls /var/lib/lxc) ) | |
compadd "$@" -a containers | |
} | |
_lxc_common_opts=( | |
'(-o --logfile)'{-o,--logfile=}'[Output log to FILE instead of stderr]:logfile:_files' | |
'(-l --logpriority)'{-l,--logpriority=}'[Set log priority to LEVEL]:level:' | |
'(-q --quiet)'{-q,--quiet}'[Dont produce any output]' | |
'(-h --help)'{-h,--help}'[Help list]' | |
'--usage[Give a short usage message]' | |
) | |
_lxc_name_opt=( | |
'(-n --name)'{-n,--name=}'[Name of the container]:name:_lxc_containers' | |
) | |
_lxc_start_opts=( | |
'(-d --daemon)'{-d,--daemon}'[Daemonize the container]' | |
'(-f --rcfile)'{-f,--rcfile=}'[Load configuration file FILE]:config:_files' | |
'(-s --define)'{-s,--define}'[Assign VAL to configuration variable KEY]' | |
) | |
_lxc_console_opts=( | |
'(-t --tty)'{-t,--tty=}'[Console TTY number]' | |
'(-e --escape)'{-e,--escape=}'[Prefix for escape command]' | |
) | |
_lxc_restart_opts=( | |
'(-p --pause)'{-p,--pause}'[Do not release the container after the restart]' | |
'(-d --directory)'{-d,--directory=}'[Name of statefile]:name:_files' | |
'(-f --rcfile)'{-f,--rcfile=}'[Load configuration file FILE]:config:_files' | |
'(-s --define)'{-s,--define}'[Assign VAL to configuration variable KEY]' | |
) | |
_lxc_create_opts=( | |
'(-n --name)'{-n,--name=}'[Name of the container]:name' | |
'(-f --config)'{-f,--config=}'[Load configuration file FILE]:config:_files' | |
'(-t --template)'{-t,--template=}'[LXC template script]:tpl:_files' | |
'(-h --help)'{-h,--help}'[Help list]' | |
) | |
_lxc_checkpoint_opts=( | |
'(-k --kill)'{-k,--kill}'[Stop the container after the checkpoint]' | |
'(-p --pause)'{-p,--pause}'[Dont unfreeze the container after the checkpoint]' | |
'(-d --directory)'{-d,--directory=}'[Where to store the statefile]:statefile:_files' | |
) | |
_lxc_execute_opts=( | |
'(-f --rcfile)'{-f,--rcfile=}'[Load configuration file FILE]:config:_files' | |
'(-s --define)'{-s,--define}'[Assign VAL to configuration variable KEY]' | |
) | |
_lxc_ps_opts=( | |
'--help[Display the help]' | |
'--usage[Display the command usage]' | |
'--name[Display processes related to given containers. Containers are identified by a comma separated list of their names.]' | |
'--lxc[Display processes related to all LXC containers]' | |
) | |
_lxc_wait_opts=( | |
'(-s --state)'{-s,--state=}'[ORed states to wait for: STOPPED, STARTING, RUNNING, STOPPING, ABORTING, FREEZING, FROZEN]:state' | |
) | |
# Dispatcher | |
_lxc() { | |
case "$service" in | |
lxc-start) | |
_arguments -s : \ | |
"$_lxc_name_opt[@]" \ | |
"$_lxc_start_opts[@]" \ | |
"$_lxc_common_opts[@]" | |
;; | |
lxc-stop) | |
_arguments -s : \ | |
"$_lxc_name_opt[@]" \ | |
"$_lxc_common_opts[@]" \ | |
;; | |
lxc-console) | |
_arguments -s : \ | |
"$_lxc_name_opt[@]" \ | |
"$_lxc_console_opts[@]" \ | |
"$_lxc_common_opts[@]" | |
;; | |
lxc-restart) | |
_arguments -s : \ | |
"$_lxc_name_opt[@]" \ | |
"$_lxc_restart_opts[@]" \ | |
"$_lxc_common_opts[@]" | |
;; | |
lxc-create) | |
_arguments -s : "$_lxc_create_opts[@]" | |
;; | |
lxc-destroy) | |
_arguments -s : "$_lxc_name_opt[@]" | |
;; | |
lxc-monitor) | |
_arguments -s : \ | |
"$_lxc_name_opt[@]" \ | |
"$_lxc_common_opts[@]" | |
;; | |
lxc-cgroup) | |
_arguments -s : \ | |
"$_lxc_name_opt[@]" \ | |
"$_lxc_common_opts[@]" | |
;; | |
lxc-checkpoint) | |
_arguments -s : \ | |
"$_lxc_name_opt[@]" \ | |
"$_lxc_checkpoint_opts[@]" \ | |
"$_lxc_common_opts[@]" | |
;; | |
lxc-execute) | |
_arguments -s : \ | |
"$_lxc_name_opt[@]" \ | |
"$_lxc_execute_opts[@]" \ | |
"$_lxc_common_opts[@]" | |
;; | |
lxc-freeze) | |
_arguments -s : \ | |
"$_lxc_name_opt[@]" \ | |
"$_lxc_common_opts[@]" | |
;; | |
lxc-unfreeze) | |
_arguments -s : \ | |
"$_lxc_name_opt[@]" \ | |
"$_lxc_common_opts[@]" | |
;; | |
lxc-info) | |
_arguments -s : \ | |
"$_lxc_name_opt[@]" \ | |
"$_lxc_common_opts[@]" | |
;; | |
lxc-netstat) | |
_arguments -s : "$_lxc_name_opt[@]" | |
;; | |
lxc-ps) | |
_arguments -s : "$_lxc_ps_opts[@]" | |
;; | |
lxc-wait) | |
_arguments -s : \ | |
"$_lxc_name_opt[@]" \ | |
"$_lxc_wait_opts[@]" | |
;; | |
*) | |
return 1 | |
esac | |
} | |
_lxc "$@" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I have added a new revision with "lxc-attach" support here:
https://gist.github.com/MicroJoe/c6c00944e2297bedadb666102d231ef2