Skip to content

Instantly share code, notes, and snippets.

@sabottenda
Last active September 28, 2019 20:39
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save sabottenda/9870189 to your computer and use it in GitHub Desktop.
Save sabottenda/9870189 to your computer and use it in GitHub Desktop.
lxc zsh completion
#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 "$@"
@gagath
Copy link

gagath commented Sep 28, 2019

I have added a new revision with "lxc-attach" support here:
https://gist.github.com/MicroJoe/c6c00944e2297bedadb666102d231ef2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment