forked from sorin-ionescu/prezto
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request sorin-ionescu#252 from systemfreund/master
add docker completions from oh-my-zsh
- Loading branch information
Showing
1 changed file
with
356 additions
and
0 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,356 @@ | ||
#compdef docker | ||
|
||
# Docker autocompletion for oh-my-zsh | ||
# Requires: Docker installed | ||
# Author: Azaan (@aeonazaan) | ||
# Updates: Bob Maerten (@bobmaerten) for Docker v0.9+ | ||
|
||
|
||
# ----- Helper functions | ||
# Output a selectable list of all running docker containers | ||
__docker_containers() { | ||
declare -a cont_cmd | ||
cont_cmd=($(docker ps | awk 'NR>1{print $1":[CON("$1")"$2"("$3")]"}')) | ||
_describe 'containers' cont_cmd | ||
} | ||
|
||
# output a selectable list of all docker images | ||
__docker_images() { | ||
declare -a img_cmd | ||
img_cmd=($(docker images | awk 'NR>1{print $1}')) | ||
_describe 'images' img_cmd | ||
} | ||
|
||
# ----- Commands | ||
# Seperate function for each command, makes extension easier later | ||
# --------------------------- | ||
__attach() { | ||
_arguments \ | ||
'--no-stdin[Do not attach stdin]' \ | ||
'--sig-proxy[Proxify all received signal to the process (even in non-tty mode)]' | ||
__docker_containers | ||
} | ||
|
||
__build() { | ||
_arguments \ | ||
'--no-cache[Do not use cache when building the image]' \ | ||
'(-q,--quiet)'{-q,--quiet}'[Suppress the verbose output generated by the containers]' \ | ||
'--rm[Remove intermediate containers after a successful build]' \ | ||
'(-t,--tag=)'{-t,--tag=}'[Repository name (and optionally a tag) to be applied to the resulting image in case of success]' \ | ||
'*:files:_files' | ||
} | ||
|
||
__commit() { | ||
_arguments \ | ||
'(-a,--author=)'{-a,--author=}'[Author (eg. "John Hannibal Smith <[email protected]>"]' \ | ||
'(-m,--message=)'{-m,--message=}'[Commit message]' \ | ||
'--run=[Config automatically applied when the image is run.]' | ||
__docker_containers | ||
} | ||
|
||
__cp() { | ||
__docker_containers | ||
} | ||
|
||
__diff() { | ||
__docker_containers | ||
} | ||
|
||
__events() { | ||
_arguments \ | ||
'--since=[Show previously created events and then stream.]' | ||
} | ||
|
||
__export() { | ||
__docker_containers | ||
} | ||
|
||
__history() { | ||
_arguments \ | ||
'--no-trunc=[Don''t truncate output]' \ | ||
'(-q,--quiet)'{-q,--quiet}'[Only show numeric IDs]' | ||
__docker_images | ||
} | ||
|
||
__images() { | ||
_arguments \ | ||
'(-a,--all)'{-a,--all}'[Show all images (by default filter out the intermediate images used to build)]' \ | ||
'--no-trunc[Don''t truncate output]' \ | ||
'(-q,--quiet=)'{-q,--quiet=}'[Only show numeric IDs]' \ | ||
'(-t,--tree=)'{-t,--tree=}'[Output graph in tree format]' \ | ||
'(-v,--viz=)'{-v,--viz=}'[Output graph in graphviz format]' | ||
__docker_images | ||
} | ||
|
||
__import() { | ||
_arguments '*:files:_files' | ||
} | ||
|
||
__info() { | ||
# no arguments | ||
} | ||
|
||
__insert() { | ||
__docker_images | ||
_arguments '*:files:_files' | ||
} | ||
|
||
__inspect() { | ||
__docker_images | ||
__docker_containers | ||
} | ||
|
||
__kill() { | ||
__docker_containers | ||
} | ||
|
||
__load() { | ||
_arguments '*:files:_files' | ||
} | ||
|
||
__login() { | ||
_arguments \ | ||
'(-e,--email=)'{-e,-email=}'[Email]' \ | ||
'(-p,--password=)'{-p,-password=}'[Password]' \ | ||
'(-u,--username=)'{-u,-username=}'[Username]' | ||
} | ||
|
||
__logs() { | ||
_arguments \ | ||
'(-f,--follow)'{-f,-follow}'[Follow log output]' | ||
__docker_containers | ||
} | ||
|
||
__port() { | ||
__docker_containers | ||
} | ||
|
||
__top() { | ||
__docker_containers | ||
} | ||
|
||
__ps() { | ||
_arguments \ | ||
'(-a,--all)'{-a,--all}'[Show all containers. Only running containers are shown by default.]' \ | ||
'--before-id=[Show only container created before Id, include non-running ones.]' \ | ||
'(-l,--latest)'{-l,--latest}'[Show only the latest created container, include non-running ones.]' \ | ||
'-n=[Show n last created containers, include non-running ones. default=-1.]' \ | ||
'--no-trunc[Don''t truncate output]' \ | ||
'(-q,--quiet)'{-q,--quiet}'[Only display numeric IDs]' \ | ||
'(-s,--size)'{-s,--size}'[Display sizes]' \ | ||
'--since-id=[Show only containers created since Id, include non-running ones.]' | ||
} | ||
|
||
__pull() { | ||
_arguments \ | ||
'(-t,--tag=)'{-t,--tag=}'[Download tagged image in repository]' | ||
} | ||
|
||
__push() { | ||
# no arguments | ||
} | ||
|
||
__restart() { | ||
_arguments \ | ||
'(-t,--time=)'{-t,--time=}'[Number of seconds to try to stop for before killing the container. Once killed it will then be restarted. Default=10]' | ||
__docker_containers | ||
} | ||
|
||
__rm() { | ||
_arguments \ | ||
'(-f,--force=)'{-f,--force=}'[Force removal of running container]' \ | ||
'(-l,--link=)'{-l,--link=}'[Remove the specified link and not the underlying container]' \ | ||
'(-v,--volumes=)'{-v,--volumes=}'[Remove the volumes associated to the container]' | ||
__docker_containers | ||
} | ||
|
||
__rmi() { | ||
_arguments \ | ||
'(-f,--force=)'{-f,--force=}'[Force]' | ||
__docker_images | ||
} | ||
|
||
__run() { | ||
_arguments \ | ||
'(-P,--publish-all=)'{-P,--publish-all=}'[Publish all exposed ports to the host interfaces]' \ | ||
'(-a,--attach=)'{-a,--attach=}'[Attach to stdin, stdout or stderr.]' \ | ||
'(-c,--cpu-shares=)'{-c,--cpu-shares=}': CPU shares (relative weight)]' \ | ||
'--cidfile=[Write the container ID to the file]' \ | ||
'(-d,--detach=)'{-d,--detach=}'[Detached mode: Run container in the background, print new container id]' \ | ||
'--dns=[Set custom dns servers]' \ | ||
'(-e,--env=)'{-e,--env=}'[Set environment variables]' \ | ||
'--entrypoint=[Overwrite the default entrypoint of the image]' \ | ||
'--expose=[Expose a port from the container without publishing it to your host]' \ | ||
'(-h,--hostname=)'{-h,--hostname=}'[Container host name]' \ | ||
'(-i,--interactive=)'{-i,--interactive=}'[Keep stdin open even if not attached]' \ | ||
'--link=[Add link to another container (name:alias)]' \ | ||
'--lxc-conf=[Add custom lxc options -lxc-conf="lxc.cgroup.cpuset.cpus = 0,1"]' \ | ||
'(-m,--memory=)'{-m,--memory=}'[Memory limit (format: <number><optional unit>, where unit = b, k, m or g)]' \ | ||
'(-n,--networking=)'{-n,--networking=}'[Enable networking for this container]' \ | ||
'--name=[Assign a name to the container]' \ | ||
'(-p,--publish=)'{-p,--publish=}'[Publish a container''s port to the host (format: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort) (use "docker port" to see the actual mapping)]' \ | ||
'--privileged=[Give extended privileges to this container]' \ | ||
'--rm=[Automatically remove the container when it exits (incompatible with -d)]' \ | ||
'--sig-proxy=[Proxify all received signal to the process (even in non-tty mode)]' \ | ||
'(-t,--tty=)'{-t,--tty=}'[Allocate a pseudo-tty]' \ | ||
'(-u,--user=)'{-u,--user=}'[Username or UID]' \ | ||
'(-v,--volume=)'{-v,--volume=}'[Bind mount a volume (e.g. from the host: -v /host:/container, from docker: -v /container)]' \ | ||
'--volumes-from=[Mount volumes from the specified container(s)]' \ | ||
'(-w,--workdir=)'{-w,--workdir=}'[Working directory inside the container]' | ||
__docker_images | ||
} | ||
|
||
__search() { | ||
_arguments \ | ||
'--no-trunc=[Don''t truncate output]' \ | ||
'-s,--stars=)'{-s,--stars=}'[Only displays with at least xxx stars]' \ | ||
'-t,--trusted=)'{-t,--trusted=}'[Only show trusted builds]' | ||
} | ||
|
||
__save() { | ||
__docker_images | ||
} | ||
|
||
__start() { | ||
_arguments \ | ||
'(-a,--attach=)'{-a,--attach=}'[Attach container''s stdout/stderr and forward all signals to the process]' \ | ||
'(-i,--interactive=)'{-i,--interactive=}'[Attach container''s stdin]' | ||
__docker_containers | ||
} | ||
|
||
__stop() { | ||
_arguments \ | ||
'(-t,--time=)'{-t,--time=}'[Number of seconds to wait for the container to stop before killing it.]' | ||
__docker_containers | ||
} | ||
|
||
__tag() { | ||
_arguments \ | ||
'(-f,--force=)'{-f,--force=}'[Force]' | ||
__docker_images | ||
} | ||
|
||
__version() { | ||
# no arguments | ||
} | ||
|
||
__wait() { | ||
__docker_containers | ||
} | ||
|
||
# end commands --------- | ||
# ---------------------- | ||
|
||
local -a _1st_arguments | ||
_1st_arguments=( | ||
"attach":"Attach to a running container" | ||
"build":"Build a container from a Dockerfile" | ||
"commit":"Create a new image from a container's changes" | ||
"cp":"Copy files/folders from the containers filesystem to the host path" | ||
"diff":"Inspect changes on a container's filesystem" | ||
"events":"Get real time events from the server" | ||
"export":"Stream the contents of a container as a tar archive" | ||
"history":"Show the history of an image" | ||
"images":"List images" | ||
"import":"Create a new filesystem image from the contents of a tarball" | ||
"info":"Display system-wide information" | ||
"insert":"Insert a file in an image" | ||
"inspect":"Return low-level information on a container" | ||
"kill":"Kill a running container" | ||
"load":"Load an image from a tar archive" | ||
"login":"Register or Login to the docker registry server" | ||
"logs":"Fetch the logs of a container" | ||
"port":"Lookup the public-facing port which is NAT-ed to PRIVATE_PORT" | ||
"ps":"List containers" | ||
"pull":"Pull an image or a repository from the docker registry server" | ||
"push":"Push an image or a repository to the docker registry server" | ||
"restart":"Restart a running container" | ||
"rm":"Remove one or more containers" | ||
"rmi":"Remove one or more images" | ||
"run":"Run a command in a new container" | ||
"save":"Save an image to a tar archive" | ||
"search":"Search for an image in the docker index" | ||
"start":"Start a stopped container" | ||
"stop":"Stop a running container" | ||
"tag":"Tag an image into a repository" | ||
"top":"Lookup the running processes of a container" | ||
"version":"Show the docker version information" | ||
"wait":"Block until a container stops, then print its exit code" | ||
) | ||
|
||
_arguments '*:: :->command' | ||
|
||
if (( CURRENT == 1 )); then | ||
_describe -t commands "docker command" _1st_arguments | ||
return | ||
fi | ||
|
||
local -a _command_args | ||
case "$words[1]" in | ||
attach) | ||
__attach ;; | ||
build) | ||
__build ;; | ||
commit) | ||
__commit ;; | ||
cp) | ||
__cp ;; | ||
diff) | ||
__diff ;; | ||
events) | ||
__events ;; | ||
export) | ||
__export ;; | ||
history) | ||
__history ;; | ||
images) | ||
__images ;; | ||
import) | ||
__import ;; | ||
info) | ||
__info ;; | ||
insert) | ||
__insert ;; | ||
inspect) | ||
__inspect ;; | ||
kill) | ||
__kill ;; | ||
load) | ||
__load ;; | ||
login) | ||
__login ;; | ||
logs) | ||
__logs ;; | ||
port) | ||
__port ;; | ||
ps) | ||
__ps ;; | ||
pull) | ||
__pull ;; | ||
push) | ||
__push ;; | ||
restart) | ||
__restart ;; | ||
rm) | ||
__rm ;; | ||
rmi) | ||
__rmi ;; | ||
run) | ||
__run ;; | ||
save) | ||
__save ;; | ||
search) | ||
__search ;; | ||
start) | ||
__start ;; | ||
stop) | ||
__stop ;; | ||
tag) | ||
__tag ;; | ||
top) | ||
__top ;; | ||
version) | ||
__version ;; | ||
wait) | ||
__wait ;; | ||
esac |