mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2024-12-26 20:31:15 +01:00
db3d05fe71
Closes #9122 The current check is assuming that the aws_completer is installed globally, it then runs the command without that path I have aws_completer in ~/.local/bin/aws_completer This changes the check to see if the command exists instead of concerning itself with where it in installed. This test matches the behavior of just running the command.
106 lines
3.2 KiB
Bash
106 lines
3.2 KiB
Bash
function agp() {
|
|
echo $AWS_PROFILE
|
|
}
|
|
|
|
# AWS profile selection
|
|
function asp() {
|
|
if [[ -z "$1" ]]; then
|
|
unset AWS_DEFAULT_PROFILE AWS_PROFILE AWS_EB_PROFILE
|
|
echo AWS profile cleared.
|
|
return
|
|
fi
|
|
|
|
local -a available_profiles
|
|
available_profiles=($(aws_profiles))
|
|
if [[ -z "${available_profiles[(r)$1]}" ]]; then
|
|
echo "${fg[red]}Profile '$1' not found in '${AWS_CONFIG_FILE:-$HOME/.aws/config}'" >&2
|
|
echo "Available profiles: ${(j:, :)available_profiles:-no profiles found}${reset_color}" >&2
|
|
return 1
|
|
fi
|
|
|
|
export AWS_DEFAULT_PROFILE=$1
|
|
export AWS_PROFILE=$1
|
|
export AWS_EB_PROFILE=$1
|
|
}
|
|
|
|
function aws_change_access_key() {
|
|
if [[ -z "$1" ]]; then
|
|
echo "usage: $0 <profile>"
|
|
return 1
|
|
fi
|
|
|
|
echo Insert the credentials when asked.
|
|
asp "$1" || return 1
|
|
AWS_PAGER="" aws iam create-access-key
|
|
AWS_PAGER="" aws configure --profile "$1"
|
|
|
|
echo You can now safely delete the old access key running \`aws iam delete-access-key --access-key-id ID\`
|
|
echo Your current keys are:
|
|
AWS_PAGER="" aws iam list-access-keys
|
|
}
|
|
|
|
function aws_profiles() {
|
|
[[ -r "${AWS_CONFIG_FILE:-$HOME/.aws/config}" ]] || return 1
|
|
grep '\[profile' "${AWS_CONFIG_FILE:-$HOME/.aws/config}"|sed -e 's/.*profile \([a-zA-Z0-9@_\.-]*\).*/\1/'
|
|
}
|
|
|
|
function _aws_profiles() {
|
|
reply=($(aws_profiles))
|
|
}
|
|
compctl -K _aws_profiles asp aws_change_access_key
|
|
|
|
# AWS prompt
|
|
function aws_prompt_info() {
|
|
[[ -z $AWS_PROFILE ]] && return
|
|
echo "${ZSH_THEME_AWS_PREFIX:=<aws:}${AWS_PROFILE}${ZSH_THEME_AWS_SUFFIX:=>}"
|
|
}
|
|
|
|
if [ "$SHOW_AWS_PROMPT" != false ]; then
|
|
RPROMPT='$(aws_prompt_info)'"$RPROMPT"
|
|
fi
|
|
|
|
|
|
# Load awscli completions
|
|
|
|
# AWS CLI v2 comes with its own autocompletion. Check if that is there, otherwise fall back
|
|
if command -v aws_completer &> /dev/null; then
|
|
autoload -Uz bashcompinit && bashcompinit
|
|
complete -C aws_completer aws
|
|
else
|
|
function _awscli-homebrew-installed() {
|
|
# check if Homebrew is installed
|
|
(( $+commands[brew] )) || return 1
|
|
|
|
# speculatively check default brew prefix
|
|
if [ -h /usr/local/opt/awscli ]; then
|
|
_brew_prefix=/usr/local/opt/awscli
|
|
else
|
|
# ok, it is not in the default prefix
|
|
# this call to brew is expensive (about 400 ms), so at least let's make it only once
|
|
_brew_prefix=$(brew --prefix awscli)
|
|
fi
|
|
}
|
|
|
|
# get aws_zsh_completer.sh location from $PATH
|
|
_aws_zsh_completer_path="$commands[aws_zsh_completer.sh]"
|
|
|
|
# otherwise check common locations
|
|
if [[ -z $_aws_zsh_completer_path ]]; then
|
|
# Homebrew
|
|
if _awscli-homebrew-installed; then
|
|
_aws_zsh_completer_path=$_brew_prefix/libexec/bin/aws_zsh_completer.sh
|
|
# Ubuntu
|
|
elif [[ -e /usr/share/zsh/vendor-completions/_awscli ]]; then
|
|
_aws_zsh_completer_path=/usr/share/zsh/vendor-completions/_awscli
|
|
# NixOS
|
|
elif [[ -e "${commands[aws]:P:h:h}/share/zsh/site-functions/aws_zsh_completer.sh" ]]; then
|
|
_aws_zsh_completer_path="${commands[aws]:P:h:h}/share/zsh/site-functions/aws_zsh_completer.sh"
|
|
# RPM
|
|
else
|
|
_aws_zsh_completer_path=/usr/share/zsh/site-functions/aws_zsh_completer.sh
|
|
fi
|
|
fi
|
|
|
|
[[ -r $_aws_zsh_completer_path ]] && source $_aws_zsh_completer_path
|
|
unset _aws_zsh_completer_path _brew_prefix
|
|
fi
|