Rewrote the terraform bash completion

Signed-off-by: Vangelis Tasoulas <vangelis@tasoulas.net>
pull/1179/head
Vangelis Tasoulas 2018-04-19 18:34:00 +02:00
parent fe78da73cc
commit b538712dc3
No known key found for this signature in database
GPG Key ID: 15423A57A998DA61
1 changed files with 39 additions and 25 deletions

View File

@ -1,35 +1,49 @@
#!/usr/bin/env bash
# Bash Terraform completion
# Source: https://gist.github.com/cornfeedhobo/8bc08747ec3add1fc5adb2edb7cd68d3
# Bash completion for the terraform command
#
# Copyright (c) 2018 Vangelis Tasoulas <vangelis@tasoulas.net>.
_terraform() {
local cur prev words cword opts
_get_comp_words_by_ref -n : cur prev words cword
COMPREPLY=()
opts=""
local cur prev words cword opts
_get_comp_words_by_ref -n : cur prev words cword
COMPREPLY=()
opts=""
if [[ ${cur} == -* ]] ; then
compopt -o nospace
fi
if [[ ${cword} -eq 1 ]] ; then
if [[ ${cword} -eq 1 ]] ; then
if [[ ${cur} == -* ]] ; then
opts="--help --version"
else
opts="$(terraform --help | grep -vE '(usage|Available|^$)' | awk '{print $1}')"
fi
fi
# Options that do not start with a hyphen, are always starting with four spaces.
opts="$(terraform --help | grep -P '^\s\s\s\s\S' | awk '{print $1}')"
opts="${opts} --help --version"
if [[ ${cword} -gt 1 ]] ; then
if [[ ${cword} -eq 2 && ${prev} == '--help' ]] ; then
opts="$(terraform --help | grep -vE '(usage|Available|^$)' | awk '{print $1}')"
else
opts="$(terraform --help "${words[1]}" | grep '^ *-[a-z]' | awk '{print $1}' | awk -F '=' '{if ($0 ~ /=/) {print $1"="} else {print $1" "}}')"
fi
fi
elif [[ ${cword} -gt 1 ]] ; then
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
if [[ ${cword} -eq 2 && ${prev} == '--help' ]] ; then
opts="$(terraform --help | grep -P '^\s\s\s\s\S' | awk '{print $1}')"
elif [[ ${words[1]} != "--help" && ${words[1]} != "--version" && ${words[1]} != "version" ]] ; then
# Some commands acceps hyphened parameters,...
opts="$(terraform --help "${words[1]}" | grep -P '^\s+-' | awk '{print $1}' | awk -F '=' '{ if ($0 ~ /=/) {print $1"="} else {print $1} }')"
# but some other commands accept non hyphened parameters....
opts="${opts} $(terraform --help "${words[1]}" | grep -P '^\s\s\s\s\S' | awk '{print $1}')"
# All of the commands accept the --help parameter which is not listed
# by the 'terraform --help <command>
opts="${opts} --help"
fi
fi
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
if [[ ${#COMPREPLY[*]} -eq 1 ]] ; then
if [[ ${COMPREPLY[0]} == *= ]]; then
# When only one completion is left, check if there is an equal sign.
# If an equal sign, then add no space after the autocompleted word.
compopt -o nospace;
fi
fi
return 0
}
complete -F _terraform terraform