diff --git a/clean_files.txt b/clean_files.txt index f8212f92..85ec886b 100644 --- a/clean_files.txt +++ b/clean_files.txt @@ -53,6 +53,7 @@ themes/modern # plugins/available/basher.plugin.bash plugins/available/cmd-returned-notify.plugin.bash +plugins/available/docker-machine.plugin.bash plugins/available/xterm.plugin.bash # completions @@ -63,6 +64,7 @@ completion/available/cargo.completion.bash completion/available/conda.completion.bash completion/available/consul.completion.bash completion/available/docker.completion.bash +completion/available/docker-machine.completion.bash completion/available/gcloud.completion.bash completion/available/gem.completion.bash completion/available/github-cli.completion.bash diff --git a/completion/available/docker-machine.completion.bash b/completion/available/docker-machine.completion.bash index 677412ba..5f67ee8b 100644 --- a/completion/available/docker-machine.completion.bash +++ b/completion/available/docker-machine.completion.bash @@ -1,431 +1,3 @@ -# -# bash completion file for docker-machine commands - -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Copyright (c) 2014 Docker, Inc - -# -# 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 -# - -# --- helper functions ------------------------------------------------------- - -_docker_machine_q() { - docker-machine 2>/dev/null "$@" -} - -# suppresses trailing whitespace -_docker_machine_nospace() { - # compopt is not available in ancient bash versions (OSX) - # so only call it if it's available - type compopt &>/dev/null && compopt -o nospace -} - -_docker_machine_machines() { - _docker_machine_q ls --format '{{.Name}}' "$@" -} - -_docker_machine_drivers() { - local drivers=( - amazonec2 - azure - digitalocean - exoscale - generic - google - hyperv - openstack - rackspace - softlayer - virtualbox - vmwarefusion - vmwarevcloudair - vmwarevsphere - ) - echo "${drivers[@]}" -} - -_docker_machine_value_of_option() { - local pattern="$1" - for (( i=2; i < ${cword}; ++i)); do - if [[ ${words[$i]} =~ ^($pattern)$ ]] ; then - echo ${words[$i + 1]} - break - fi - done -} - -# Returns `key` if we are currently completing the value of a map option -# (`key=value`) which matches the glob passed in as an argument. -# This function is needed for key-specific argument completions. -_docker_machine_map_key_of_current_option() { - local glob="$1" - - local key glob_pos - if [ "$cur" = "=" ] ; then # key= case - key="$prev" - glob_pos=$((cword - 2)) - elif [[ $cur == *=* ]] ; then # key=value case (OSX) - key=${cur%=*} - glob_pos=$((cword - 1)) - elif [ "$prev" = "=" ] ; then - key=${words[$cword - 2]} # key=value case - glob_pos=$((cword - 3)) - else - return - fi - - [ "${words[$glob_pos]}" = "=" ] && ((glob_pos--)) # --option=key=value syntax - - [[ ${words[$glob_pos]} == $glob ]] && echo "$key" -} - -# Finds the position of the first word that is neither option nor an option's argument. -# If there are options that require arguments, you need to pass a glob describing -# those options, e.g. "--option1|-o|--option2". -# Use this function to restrict completions to exact positions after the options. -_docker_machine_pos_first_nonflag() { - local argument_flags=$1 - - local counter=$((${subcommand_pos:-${command_pos}} + 1)) - while [ "$counter" -le "$cword" ]; do - if [ -n "$argument_flags" ] && eval "case '${words[$counter]}' in $argument_flags) true ;; *) false ;; esac"; then - (( counter++ )) - # eat "=" in case of --option=arg syntax - [ "${words[$counter]}" = "=" ] && (( counter++ )) - else - case "${words[$counter]}" in - -*) - ;; - *) - break - ;; - esac - fi - - # Bash splits words at "=", retaining "=" as a word, examples: - # "--debug=false" => 3 words, "--log-opt syslog-facility=daemon" => 4 words - while [ "${words[$counter + 1]}" = "=" ] ; do - counter=$(( counter + 2)) - done - - (( counter++ )) - done - - echo $counter -} -# --- completion functions --------------------------------------------------- - -_docker_machine_active() { - case "${prev}" in - --timeout|-t) - return - ;; - esac - - if [[ "${cur}" == -* ]]; then - COMPREPLY=($(compgen -W "--help --timeout -t" -- "${cur}")) - fi -} - -_docker_machine_config() { - if [[ "${cur}" == -* ]]; then - COMPREPLY=($(compgen -W "--help --swarm" -- "${cur}")) - else - COMPREPLY=($(compgen -W "$(_docker_machine_machines)" -- "${cur}")) - fi -} - -_docker_machine_create() { - case "${prev}" in - --driver|-d) - COMPREPLY=($(compgen -W "$(_docker_machine_drivers)" -- "${cur}")) - return - ;; - esac - - # driver specific options are only included in help output if --driver is given, - # so we have to pass that option when calling docker-machine to harvest options. - local driver="$(_docker_machine_value_of_option '--driver|-d')" - local parsed_options="$(_docker_machine_q create ${driver:+--driver $driver} --help | grep '^ -' | sed 's/^ //; s/[^a-z0-9-].*$//')" - if [[ ${cur} == -* ]]; then - COMPREPLY=($(compgen -W "${parsed_options} -d --help" -- "${cur}")) - fi -} - -_docker_machine_env() { - case "${prev}" in - --shell) - COMPREPLY=($(compgen -W "cmd emacs fish powershell tcsh" -- "${cur}")) - return - ;; - esac - - if [[ "${cur}" == -* ]]; then - COMPREPLY=($(compgen -W "--help --no-proxy --shell --swarm --unset -u" -- "${cur}")) - else - COMPREPLY=($(compgen -W "$(_docker_machine_machines)" -- "${cur}")) - fi -} - -# See docker-machine-wrapper.bash for the use command -_docker_machine_use() { - if [[ "${cur}" == -* ]]; then - COMPREPLY=($(compgen -W "--help --swarm --unset" -- "${cur}")) - else - COMPREPLY=($(compgen -W "$(_docker_machine_machines)" -- "${cur}")) - fi -} - -_docker_machine_inspect() { - case "${prev}" in - --format|-f) - return - ;; - esac - - if [[ "${cur}" == -* ]]; then - COMPREPLY=($(compgen -W "--format -f --help" -- "${cur}")) - else - COMPREPLY=($(compgen -W "$(_docker_machine_machines)" -- "${cur}")) - fi -} - -_docker_machine_ip() { - if [[ "${cur}" == -* ]]; then - COMPREPLY=($(compgen -W "--help" -- "${cur}")) - else - COMPREPLY=($(compgen -W "$(_docker_machine_machines)" -- "${cur}")) - fi -} - -_docker_machine_kill() { - if [[ "${cur}" == -* ]]; then - COMPREPLY=($(compgen -W "--help" -- "${cur}")) - else - COMPREPLY=($(compgen -W "$(_docker_machine_machines)" -- "${cur}")) - fi -} - -_docker_machine_ls() { - local key=$(_docker_machine_map_key_of_current_option '--filter') - case "$key" in - driver) - COMPREPLY=($(compgen -W "$(_docker_machine_drivers)" -- "${cur##*=}")) - return - ;; - state) - COMPREPLY=($(compgen -W "Error Paused Running Saved Starting Stopped Stopping" -- "${cur##*=}")) - return - ;; - esac - - case "${prev}" in - --filter) - COMPREPLY=($(compgen -W "driver label name state swarm" -S= -- "${cur}")) - _docker_machine_nospace - return - ;; - --format|-f|--timeout|-t) - return - ;; - esac - - if [[ "${cur}" == -* ]]; then - COMPREPLY=($(compgen -W "--filter --format -f --help --quiet -q --timeout -t" -- "${cur}")) - fi -} - -_docker_machine_mount() { - if [[ "${cur}" == -* ]]; then - COMPREPLY=($(compgen -W "--help --unmount -u" -- "${cur}")) - else - local pos=$(_docker_machine_pos_first_nonflag) - if [ "$cword" -eq "$pos" ]; then - # We can't complete remote filesystems. All we can do here is to complete the machine. - COMPREPLY=($(compgen -W "$(_docker_machine_machines --filter state=Running)" -S: -- "${cur}")) - _docker_machine_nospace - elif [ "$cword" -eq "$((pos + 1))" ]; then - _filedir -d - fi - fi -} - -_docker_machine_provision() { - if [[ "${cur}" == -* ]]; then - COMPREPLY=($(compgen -W "--help" -- "${cur}")) - else - COMPREPLY=($(compgen -W "$(_docker_machine_machines --filter state=Running)" -- "${cur}")) - fi -} - -_docker_machine_regenerate_certs() { - if [[ "${cur}" == -* ]]; then - COMPREPLY=($(compgen -W "--client-certs --force -f --help" -- "${cur}")) - else - COMPREPLY=($(compgen -W "$(_docker_machine_machines --filter state=Running)" -- "${cur}")) - fi -} - -_docker_machine_restart() { - if [[ "${cur}" == -* ]]; then - COMPREPLY=($(compgen -W "--help" -- "${cur}")) - else - COMPREPLY=($(compgen -W "$(_docker_machine_machines)" -- "${cur}")) - fi -} - -_docker_machine_rm() { - if [[ "${cur}" == -* ]]; then - COMPREPLY=($(compgen -W "--force -f --help -y" -- "${cur}")) - else - COMPREPLY=($(compgen -W "$(_docker_machine_machines)" -- "${cur}")) - fi -} - -_docker_machine_ssh() { - if [[ "${cur}" == -* ]]; then - COMPREPLY=($(compgen -W "--help" -- "${cur}")) - else - COMPREPLY=($(compgen -W "$(_docker_machine_machines)" -- "${cur}")) - fi -} - -_docker_machine_scp() { - if [[ "${cur}" == -* ]]; then - COMPREPLY=($(compgen -W "--delta -d --help --quiet -q --recursive -r" -- "${cur}")) - else - _filedir - # It would be really nice to ssh to the machine and ls to complete - # remote files. - COMPREPLY=($(compgen -W "$(_docker_machine_machines | sed 's/$/:/')" -- "${cur}") "${COMPREPLY[@]}") - fi -} - -_docker_machine_start() { - if [[ "${cur}" == -* ]]; then - COMPREPLY=($(compgen -W "--help" -- "${cur}")) - else - COMPREPLY=($(compgen -W "$(_docker_machine_machines --filter state=Stopped)" -- "${cur}")) - fi -} - -_docker_machine_status() { - if [[ "${cur}" == -* ]]; then - COMPREPLY=($(compgen -W "--help" -- "${cur}")) - else - COMPREPLY=($(compgen -W "$(_docker_machine_machines)" -- "${cur}")) - fi -} - -_docker_machine_stop() { - if [[ "${cur}" == -* ]]; then - COMPREPLY=($(compgen -W "--help" -- "${cur}")) - else - COMPREPLY=($(compgen -W "$(_docker_machine_machines --filter state=Running)" -- "${cur}")) - fi -} - -_docker_machine_upgrade() { - if [[ "${cur}" == -* ]]; then - COMPREPLY=($(compgen -W "--help" -- "${cur}")) - else - COMPREPLY=($(compgen -W "$(_docker_machine_machines)" -- "${cur}")) - fi -} - -_docker_machine_url() { - if [[ "${cur}" == -* ]]; then - COMPREPLY=($(compgen -W "--help" -- "${cur}")) - else - COMPREPLY=($(compgen -W "$(_docker_machine_machines)" -- "${cur}")) - fi -} - -_docker_machine_version() { - if [[ "${cur}" == -* ]]; then - COMPREPLY=($(compgen -W "--help" -- "${cur}")) - else - COMPREPLY=($(compgen -W "$(_docker_machine_machines)" -- "${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 mount provision regenerate-certs restart rm ssh scp start status stop upgrade url version help) - - local flags=(--debug --native-ssh --github-api-token --bugsnag-api-token --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 command_pos=0 - - 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} - command_pos=$i - 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 docker-machine.exe +# shellcheck shell=bash +_log_error '"docker-machine" is now deprecated, and as such the bash completion for it is also deprecated. +Please disable this completion.' diff --git a/plugins/available/docker-machine.plugin.bash b/plugins/available/docker-machine.plugin.bash index 95827f42..2bb441da 100644 --- a/plugins/available/docker-machine.plugin.bash +++ b/plugins/available/docker-machine.plugin.bash @@ -1,13 +1,5 @@ +# shellcheck shell=bash cite about-plugin about-plugin 'Helpers to get Docker setup correctly for docker-machine' - -[ -z ${BASH_IT_DOCKER_MACHINE+x} ] && BASH_IT_DOCKER_MACHINE='dev' - -# Note, this might need to be different if you use a machine other than 'dev' -if [[ `uname -s` == "Darwin" ]]; then - # check if dev machine is running - docker-machine ls | grep --quiet "$BASH_IT_DOCKER_MACHINE.*Running" - if [[ "$?" = "0" ]]; then - eval "$(docker-machine env $BASH_IT_DOCKER_MACHINE)" - fi -fi +_log_error '"docker-machine" is now deprecated, and as such the plugin for it is also deprecated. +Please disable this plugin.'