aws.plugin.zsh 3.11 KB
Newer Older
1
function agp() {
2
  echo $AWS_PROFILE
3
}
4

5
# AWS profile selection
6
function asp() {
David Kane's avatar
David Kane committed
7
  if [[ -z "$1" ]]; then
8
    unset AWS_DEFAULT_PROFILE AWS_PROFILE AWS_EB_PROFILE
David Kane's avatar
David Kane committed
9
    echo AWS profile cleared.
10
    return
David Kane's avatar
David Kane committed
11
  fi
12

13
14
  local -a available_profiles
  available_profiles=($(aws_profiles))
15
16
17
18
19
20
  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

21
22
23
  export AWS_DEFAULT_PROFILE=$1
  export AWS_PROFILE=$1
  export AWS_EB_PROFILE=$1
24
}
25

26
function aws_change_access_key() {
27
  if [[ -z "$1" ]]; then
28
    echo "usage: $0 <profile>"
29
30
    return 1
  fi
31
32

  echo Insert the credentials when asked.
33
  asp "$1" || return 1
34
35
36
37
38
39
  aws iam create-access-key
  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 iam list-access-keys
40
41
}

42
function aws_profiles() {
43
  [[ -r "${AWS_CONFIG_FILE:-$HOME/.aws/config}" ]] || return 1
44
  grep '\[profile' "${AWS_CONFIG_FILE:-$HOME/.aws/config}"|sed -e 's/.*profile \([a-zA-Z0-9_\.-]*\).*/\1/'
45
}
46

47
function _aws_profiles() {
48
49
50
  reply=($(aws_profiles))
}
compctl -K _aws_profiles asp aws_change_access_key
51

David Kane's avatar
David Kane committed
52
# AWS prompt
53
function aws_prompt_info() {
David Kane's avatar
David Kane committed
54
55
56
57
58
  [[ -z $AWS_PROFILE ]] && return
  echo "${ZSH_THEME_AWS_PREFIX:=<aws:}${AWS_PROFILE}${ZSH_THEME_AWS_SUFFIX:=>}"
}

if [ "$SHOW_AWS_PROMPT" != false ]; then
59
  RPROMPT='$(aws_prompt_info)'"$RPROMPT"
David Kane's avatar
David Kane committed
60
61
62
fi


63
64
# Load awscli completions

65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# AWS CLI v2 comes with its own autocompletion. Check if that is there, otherwise fall back
if [[ -x /usr/local/bin/aws_completer ]]; 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
95
96
97
    # 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"
98
99
100
101
    # RPM
    else
      _aws_zsh_completer_path=/usr/share/zsh/site-functions/aws_zsh_completer.sh
    fi
102
103
  fi

104
105
  [[ -r $_aws_zsh_completer_path ]] && source $_aws_zsh_completer_path
  unset _aws_zsh_completer_path _brew_prefix
106
fi