mirror of https://github.com/docker/docs.git
Adding bash completion and helper scripts
This patch adds some bash helper scripts. * docker-machine.bash - command completion for docker-machine * docker-machine-prompt.bash - function for putting the active machine name in PS1 * docker-machine-wrapper.bash - function wrapper adding an `use` command that runs `eval $(docker-machine env whatever)` in the current shell. Signed-off-by: David M. Lee <dlee@respoke.io>
This commit is contained in:
parent
07bcb9a7aa
commit
7180ddca87
|
@ -0,0 +1 @@
|
||||||
|
!docker-machine*
|
|
@ -0,0 +1,47 @@
|
||||||
|
#
|
||||||
|
# bash prompt support for docker-machine
|
||||||
|
#
|
||||||
|
# This script allows you to see the active machine in your bash prompt.
|
||||||
|
#
|
||||||
|
# To enable:
|
||||||
|
# 1a. Copy this file somewhere and source it in your .bashrc
|
||||||
|
# source /some/where/docker-machine-prompt.bash
|
||||||
|
# 1b. Alternatively, just copy this file into into /etc/bash_completion.d
|
||||||
|
# 2. Change your PS1 to call __docker-machine-ps1 as command-substitution
|
||||||
|
# PS1='[\u@\h \W$(__docker-machine-ps1 " [%s]")]\$ '
|
||||||
|
#
|
||||||
|
# Configuration:
|
||||||
|
#
|
||||||
|
# DOCKER_MACHINE_PS1_SHOWSTATUS
|
||||||
|
# When set, the machine status is indicated in the prompt. This can be slow,
|
||||||
|
# so use with care.
|
||||||
|
#
|
||||||
|
|
||||||
|
__docker-machine-ps1 () {
|
||||||
|
local format=${1:- [%s]}
|
||||||
|
if test ${DOCKER_MACHINE_NAME}; then
|
||||||
|
local status
|
||||||
|
if test ${DOCKER_MACHINE_PS1_SHOWSTATUS:-false} = true; then
|
||||||
|
status=$(docker-machine status ${DOCKER_MACHINE_NAME})
|
||||||
|
case ${status} in
|
||||||
|
Running)
|
||||||
|
status=' R'
|
||||||
|
;;
|
||||||
|
Stopping)
|
||||||
|
status=' R->S'
|
||||||
|
;;
|
||||||
|
Starting)
|
||||||
|
status=' S->R'
|
||||||
|
;;
|
||||||
|
Error|Timeout)
|
||||||
|
status=' E'
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# Just consider everything elase as 'stopped'
|
||||||
|
status=' S'
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
printf -- "${format}" "${DOCKER_MACHINE_NAME}${status}"
|
||||||
|
fi
|
||||||
|
}
|
|
@ -0,0 +1,56 @@
|
||||||
|
#
|
||||||
|
# Function wrapper to docker-machine that adds a use subcommand.
|
||||||
|
#
|
||||||
|
# The use subcommand runs `eval "$(docker-machine env [args])"`, which is a lot
|
||||||
|
# less typing.
|
||||||
|
#
|
||||||
|
# To enable:
|
||||||
|
# 1a. Copy this file somewhere and source it in your .bashrc
|
||||||
|
# source /some/where/docker-machine-wrapper.bash
|
||||||
|
# 1b. Alternatively, just copy this file into into /etc/bash_completion.d
|
||||||
|
#
|
||||||
|
# Configuration:
|
||||||
|
#
|
||||||
|
# DOCKER_MACHINE_WRAPPED
|
||||||
|
# When set to a value other than true, this will disable the alias wrapper
|
||||||
|
# alias for docker-machine. This is useful if you don't want the wrapper,
|
||||||
|
# but it is installed by default by your installation.
|
||||||
|
#
|
||||||
|
|
||||||
|
: ${DOCKER_MACHINE_WRAPPED:=true}
|
||||||
|
|
||||||
|
__docker-machine-wrapper () {
|
||||||
|
if [[ "$1" == use ]]; then
|
||||||
|
# Special use wrapper
|
||||||
|
shift 1
|
||||||
|
case "$1" in
|
||||||
|
-h|--help|"")
|
||||||
|
cat <<EOF
|
||||||
|
Usage: docker-machine use [OPTIONS] [arg...]
|
||||||
|
|
||||||
|
Evaluate the commands to set up the environment for the Docker client
|
||||||
|
|
||||||
|
Description:
|
||||||
|
Argument is a machine name.
|
||||||
|
|
||||||
|
Options:
|
||||||
|
|
||||||
|
--swarm Display the Swarm config instead of the Docker daemon
|
||||||
|
--unset, -u Unset variables instead of setting them
|
||||||
|
|
||||||
|
EOF
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
eval "$(docker-machine env "$@")"
|
||||||
|
echo "Active machine: ${DOCKER_MACHINE_NAME}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
else
|
||||||
|
# Just call the actual docker-machine app
|
||||||
|
$(which docker-machine) "$@"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ ${DOCKER_MACHINE_WRAPPED} = true ]]; then
|
||||||
|
alias docker-machine=__docker-machine-wrapper
|
||||||
|
fi
|
|
@ -0,0 +1,244 @@
|
||||||
|
#
|
||||||
|
# bash completion file for docker-machine commands
|
||||||
|
#
|
||||||
|
# This script provides completion of:
|
||||||
|
# - commands and their options
|
||||||
|
# - machine names
|
||||||
|
# - filepaths
|
||||||
|
#
|
||||||
|
# To enable the completions either:
|
||||||
|
# - place this file in /etc/bash_completion.d
|
||||||
|
# or
|
||||||
|
# - copy this file to e.g. ~/.docker-machine-completion.sh and add the line
|
||||||
|
# below to your .bashrc after bash completion features are loaded
|
||||||
|
# . ~/.docker-machine-completion.sh
|
||||||
|
#
|
||||||
|
|
||||||
|
_docker-machine-active() {
|
||||||
|
if [[ "${cur}" == -* ]]; then
|
||||||
|
COMPREPLY=($(compgen -W "--swarm --help" -- "${cur}"))
|
||||||
|
else
|
||||||
|
COMPREPLY=()
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_docker-machine-config() {
|
||||||
|
if [[ "${cur}" == -* ]]; then
|
||||||
|
COMPREPLY=($(compgen -W "--swarm --help" -- "${cur}"))
|
||||||
|
else
|
||||||
|
COMPREPLY=($(compgen -W "$(docker-machine ls -q)" -- "${cur}"))
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_docker-machine-create() {
|
||||||
|
# cheating, b/c there are approximately one zillion options to create
|
||||||
|
COMPREPLY=($(compgen -W "$(docker-machine create --help | grep '^ -' | sed 's/^ //; s/[^a-z0-9-].*$//')" -- "${cur}"))
|
||||||
|
}
|
||||||
|
|
||||||
|
_docker-machine-env() {
|
||||||
|
case "${prev}" in
|
||||||
|
--shell)
|
||||||
|
# What are the options for --shell?
|
||||||
|
COMPREPLY=()
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
if [[ "${cur}" == -* ]]; then
|
||||||
|
COMPREPLY=($(compgen -W "--swarm --shell --unset --help" -- "${cur}"))
|
||||||
|
else
|
||||||
|
COMPREPLY=($(compgen -W "$(docker-machine ls -q)" -- "${cur}"))
|
||||||
|
fi
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# See docker-machine-wrapper.bash for the use command
|
||||||
|
_docker-machine-use() {
|
||||||
|
if [[ "${cur}" == -* ]]; then
|
||||||
|
COMPREPLY=($(compgen -W "--swarm --unset --help" -- "${cur}"))
|
||||||
|
else
|
||||||
|
COMPREPLY=($(compgen -W "$(docker-machine ls -q)" -- "${cur}"))
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_docker-machine-inspect() {
|
||||||
|
case "${prev}" in
|
||||||
|
-f|--format)
|
||||||
|
COMPREPLY=()
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
if [[ "${cur}" == -* ]]; then
|
||||||
|
COMPREPLY=($(compgen -W "--format --help" -- "${cur}"))
|
||||||
|
else
|
||||||
|
COMPREPLY=($(compgen -W "$(docker-machine ls -q)" -- "${cur}"))
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
_docker-machine-ip() {
|
||||||
|
if [[ "${cur}" == -* ]]; then
|
||||||
|
COMPREPLY=($(compgen -W "--help" -- "${cur}"))
|
||||||
|
else
|
||||||
|
COMPREPLY=($(compgen -W "$(docker-machine ls -q)" -- "${cur}"))
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_docker-machine-kill() {
|
||||||
|
if [[ "${cur}" == -* ]]; then
|
||||||
|
COMPREPLY=($(compgen -W "--help" -- "${cur}"))
|
||||||
|
else
|
||||||
|
COMPREPLY=($(compgen -W "$(docker-machine ls -q)" -- "${cur}"))
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_docker-machine-ls() {
|
||||||
|
case "${prev}" in
|
||||||
|
--filter)
|
||||||
|
COMPREPLY=()
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
COMPREPLY=($(compgen -W "--quiet --filter --help" -- "${cur}"))
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
_docker-machine-regenerate-certs() {
|
||||||
|
if [[ "${cur}" == -* ]]; then
|
||||||
|
COMPREPLY=($(compgen -W "--help --force" -- "${cur}"))
|
||||||
|
else
|
||||||
|
COMPREPLY=($(compgen -W "$(docker-machine ls -q)" -- "${cur}"))
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_docker-machine-restart() {
|
||||||
|
if [[ "${cur}" == -* ]]; then
|
||||||
|
COMPREPLY=($(compgen -W "--help" -- "${cur}"))
|
||||||
|
else
|
||||||
|
COMPREPLY=($(compgen -W "$(docker-machine ls -q)" -- "${cur}"))
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_docker-machine-rm() {
|
||||||
|
if [[ "${cur}" == -* ]]; then
|
||||||
|
COMPREPLY=($(compgen -W "--help --force" -- "${cur}"))
|
||||||
|
else
|
||||||
|
# For rm, it's best to be explicit
|
||||||
|
COMPREPLY=()
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_docker-machine-ssh() {
|
||||||
|
if [[ "${cur}" == -* ]]; then
|
||||||
|
COMPREPLY=($(compgen -W "--help" -- "${cur}"))
|
||||||
|
else
|
||||||
|
COMPREPLY=($(compgen -W "$(docker-machine ls -q)" -- "${cur}"))
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_docker-machine-scp() {
|
||||||
|
if [[ "${cur}" == -* ]]; then
|
||||||
|
COMPREPLY=($(compgen -W "--help --recursive" -- "${cur}"))
|
||||||
|
else
|
||||||
|
_filedir
|
||||||
|
# It would be really nice to ssh to the machine and ls to complete
|
||||||
|
# remote files.
|
||||||
|
COMPREPLY=($(compgen -W "$(docker-machine ls -q | sed 's/$/:/')" -- "${cur}") "${COMPREPLY[@]}")
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_docker-machine-start() {
|
||||||
|
if [[ "${cur}" == -* ]]; then
|
||||||
|
COMPREPLY=($(compgen -W "--help" -- "${cur}"))
|
||||||
|
else
|
||||||
|
COMPREPLY=($(compgen -W "$(docker-machine ls -q)" -- "${cur}"))
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_docker-machine-status() {
|
||||||
|
if [[ "${cur}" == -* ]]; then
|
||||||
|
COMPREPLY=($(compgen -W "--help" -- "${cur}"))
|
||||||
|
else
|
||||||
|
COMPREPLY=($(compgen -W "$(docker-machine ls -q)" -- "${cur}"))
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_docker-machine-stop() {
|
||||||
|
if [[ "${cur}" == -* ]]; then
|
||||||
|
COMPREPLY=($(compgen -W "--help" -- "${cur}"))
|
||||||
|
else
|
||||||
|
COMPREPLY=($(compgen -W "$(docker-machine ls -q)" -- "${cur}"))
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_docker-machine-upgrade() {
|
||||||
|
if [[ "${cur}" == -* ]]; then
|
||||||
|
COMPREPLY=($(compgen -W "--help" -- "${cur}"))
|
||||||
|
else
|
||||||
|
COMPREPLY=($(compgen -W "$(docker-machine ls -q)" -- "${cur}"))
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_docker-machine-url() {
|
||||||
|
if [[ "${cur}" == -* ]]; then
|
||||||
|
COMPREPLY=($(compgen -W "--help" -- "${cur}"))
|
||||||
|
else
|
||||||
|
COMPREPLY=($(compgen -W "$(docker-machine ls -q)" -- "${cur}"))
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_docker-machine-help() {
|
||||||
|
if [[ "${cur}" == -* ]]; then
|
||||||
|
COMPREPLY=($(compgen -W "--help" -- "${cur}"))
|
||||||
|
else
|
||||||
|
COMPREPLY=($(compgen -W "${commands[*]}" -- "${cur}"))
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_docker-machine-docker-machine() {
|
||||||
|
if [[ " ${wants_file[*]} " =~ " ${prev} " ]]; then
|
||||||
|
_filedir
|
||||||
|
elif [[ " ${wants_dir[*]} " =~ " ${prev} " ]]; then
|
||||||
|
_filedir -d
|
||||||
|
elif [[ "${cur}" == -* ]]; then
|
||||||
|
COMPREPLY=($(compgen -W "${flags[*]} ${wants_dir[*]} ${wants_file[*]}" -- "${cur}"))
|
||||||
|
else
|
||||||
|
COMPREPLY=($(compgen -W "${commands[*]}" -- "${cur}"))
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_docker-machine() {
|
||||||
|
COMPREPLY=()
|
||||||
|
local commands=(active config create env inspect ip kill ls regenerate-certs restart rm ssh scp start status stop upgrade url help)
|
||||||
|
|
||||||
|
local flags=(--debug --native-ssh --help --version)
|
||||||
|
local wants_dir=(--storage-path)
|
||||||
|
local wants_file=(--tls-ca-cert --tls-ca-key --tls-client-cert --tls-client-key)
|
||||||
|
|
||||||
|
# Add the use subcommand, if we have an alias loaded
|
||||||
|
if [[ ${DOCKER_MACHINE_WRAPPED} = true ]]; then
|
||||||
|
commands=("${commands[@]}" use)
|
||||||
|
fi
|
||||||
|
|
||||||
|
local cur prev words cword
|
||||||
|
_get_comp_words_by_ref -n : cur prev words cword
|
||||||
|
local i
|
||||||
|
local command=docker-machine
|
||||||
|
|
||||||
|
for (( i=1; i < ${cword}; ++i)); do
|
||||||
|
local word=${words[i]}
|
||||||
|
if [[ " ${wants_file[*]} ${wants_dir[*]} " =~ " ${word} " ]]; then
|
||||||
|
# skip the next option
|
||||||
|
(( ++i ))
|
||||||
|
elif [[ " ${commands[*]} " =~ " ${word} " ]]; then
|
||||||
|
command=${word}
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
local completion_func=_docker-machine-"${command}"
|
||||||
|
if declare -F "${completion_func}" > /dev/null; then
|
||||||
|
${completion_func}
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
complete -F _docker-machine docker-machine
|
|
@ -57,6 +57,25 @@ to your PATH.
|
||||||
$ docker-machine -v
|
$ docker-machine -v
|
||||||
machine version 0.5.0 (3e06852)
|
machine version 0.5.0 (3e06852)
|
||||||
|
|
||||||
|
## Installing bash completion scripts
|
||||||
|
|
||||||
|
The Machine repository supplies several `bash` scripts that add features such
|
||||||
|
as:
|
||||||
|
|
||||||
|
* command completion
|
||||||
|
* a function that displays the active machine in your shell prompt
|
||||||
|
* a function wrapper that adds a `docker-machine use` subcommand to switch the
|
||||||
|
active machine
|
||||||
|
|
||||||
|
To install the scripts, copy or link them into your `/etc/bash_completion.d` or
|
||||||
|
`/usr/local/etc/bash_completion.d` file. To enable the `docker-machine` shell
|
||||||
|
prompt, add `$(__docker-machine-ps1)` to your `PS1` setting in `~/.bashrc`.
|
||||||
|
|
||||||
|
PS1='[\u@\h \W$(__docker-machine-ps1)]\$ '
|
||||||
|
|
||||||
|
You can find additional documentation in the comments at the
|
||||||
|
[top of each script](https://github.com/docker/machine/tree/master/contrib/completion/bash).
|
||||||
|
|
||||||
## Where to go next
|
## Where to go next
|
||||||
|
|
||||||
* [Docker Machine overview](/)
|
* [Docker Machine overview](/)
|
||||||
|
|
Loading…
Reference in New Issue