Merge pull request #302 from ilkka/docker-compose

Completion for docker-compose
This commit is contained in:
Hideo Hattori 2015-06-02 20:33:57 +09:00
commit 9759359e7a
1 changed files with 197 additions and 0 deletions

197
src/_docker-compose Normal file
View File

@ -0,0 +1,197 @@
#compdef docker-compose
# ------------------------------------------------------------------------------
# Description
# -----------
#
# Completion script for Docker Compose (http://docs.docker.com/compose/).
# Adapted from boot2docker completion by hhatto (https://github.com/hhatto)
# and docker completion by @aeonazaan and @bobmaerten.
#
# ------------------------------------------------------------------------------
# Authors
# -------
#
# * ilkka (https://github.com/ilkka)
#
# ------------------------------------------------------------------------------
# helper function for getting *.yml (compose) files
__yml_files_in_current_dir() {
_values 'YAML files' *.yml
}
# helper function for completing services in current project
__services() {
declare -a services_cmd
services_cmd=($(sed -n -E 's/^([^[:space:]][^:]*):/\1/p' docker-compose.yml | tr \\n ' '))
_describe 'services' services_cmd
}
# subcommands
local -a _docker_compose_cmds
_docker_compose_cmds=(
'build:Build or rebuild services' \
'help:Get help on a command' \
'kill:Kill containers' \
'logs:View output from containers' \
'port:Print the public port for a port binding' \
'ps:List containers' \
'pull:Pulls service images' \
'rm:Remove stopped containers' \
'run:Run a one-off command' \
'scale:Set number of containers for a service' \
'start:Start services' \
'stop:Stop services' \
'restart:Restart services' \
'up:Create and start containers'
)
# subcommand completion functions
__build() {
_arguments \
'--no-cache[Do not use cache when building image]'
__services
}
__help() {
_values 'Get help for subcommand' \
'build' \
'help' \
'kill' \
'logs' \
'port' \
'ps' \
'pull' \
'rm' \
'run' \
'scale' \
'start' \
'stop' \
'restart' \
'up'
}
__kill() {
_arguments \
'-s[Signal to send instead of SIGKILL]'
__services
}
__logs() {
_arguments \
'--no-color[Monochrome output]'
__services
}
__port() {
_arguments \
'--protocol:protocol:(tcp udp)' \
'--index[Index of container]:index'
__services
}
__ps() {
_arguments \
'-q[Only display IDs]'
__services
}
__pull() {
_arguments \
'--allow-insecure-ssl[Allow insecure connections to the docker registry]'
__services
}
__rm() {
_arguments \
"--force[Don't ask for confirmation]" \
'-v[Remove volumes]'
__services
}
__run() {
_arguments \
'--allow-insecure-ssl[Allow insecure connections to the docker registry]' \
'-d[Detached mode: Run container in the background, print new container name.]' \
'--entrypoint[Override the entrypoint of the image.]:command:()' \
'-e[Set an environment variable.]:key=val:()' \
"--no-deps[Don't start linked services.]" \
'--rm[Remove container after run. Ignored in detached mode.]' \
"--service-ports[Run command with the service's ports enabled and mapped to the host.]" \
'-T[Disable pseudo-tty allocation.]'
__services
}
__scale() {
__services
}
__start() {
__services
}
__stop() {
__services
}
__restart() {
__services
}
__up() {
_arguments \
'--allow-insecure-ssl[Allow insecure connections to the docker registry]' \
'-d[Detached mode: Run containers in the background, print new container names.]' \
'--no-color[Produce monochrome output.]' \
"--no-deps[Don't start linked services.]" \
"--no-recreate[If containers already exist, don't recreate them.]" \
"--no-build[Don't build an image, even if it's missing]"
__services
}
# common args
_arguments \
'--verbose[Show more output]' \
'--version[Print version and exit]' \
'--file[Specify an alternate compose file]:__yml_files_in_current_dir' \
'--project-name[Specify an alternate project name]:args' \
'*:: :->command'
# start machines!
if (( CURRENT == 1 )); then
_describe -t commands 'docker-compose command' _docker_compose_cmds
fi
local -a _command_args
case "$words[1]" in
build)
__build ;;
help)
__help ;;
kill)
__kill ;;
logs)
__logs ;;
port)
__port ;;
ps)
__ps ;;
pull)
__pull ;;
rm)
__rm ;;
run)
__run ;;
scale)
__scale ;;
start)
__start ;;
stop)
__stop ;;
restart)
__restart ;;
up)
__up ;;
esac