AWS helper functions

(in /home/bsgt/stablecaps_bashrc/modules/aws_module.sh)

Function Index

01 - awskeys
02 - __awskeys_help
03 - __awskeys_region
04 - __awskeys_get
05 - __awskeys_list
06 - __awskeys_show
07 - __awskeys_export
08 - __awskeys_unset
09 - __awskeys_comp

>> awskeys():

about: helper function for AWS credentials file

group: aws

function awskeys {

    if [[ ! -f "${AWS_SHARED_CREDENTIALS_FILE}" ]]; then
        echo "AWS credentials file not found"
        return 1
    fi

    if [[ $# -eq 1 ]] && [[ "$1" = "list" ]]; then
        __awskeys_list "$2"
    elif [[ $# -eq 1 ]] && [[ "$1" = "unset" ]]; then
        __awskeys_unset "$2"
    elif [[ $# -eq 2 ]] && [[ "$1" = "show" ]]; then
        __awskeys_show "$2"
    elif [[ $# -eq 2 ]] && [[ "$1" = "export" ]]; then
        __awskeys_export "$2"
    elif [[ $# -eq 2 ]] && [[ "$1" = "region" ]]; then
        __awskeys_region "$2"
    else
        __awskeys_help
    fi
}

Function Calls:
└─ awskeys
   ├─ __awskeys_region
   ├─ __awskeys_list
   ├─ __awskeys_show
   |  └─ __awskeys_get
   ├─ __awskeys_export
   |  ├─ __awskeys_get
   |  └─ __awskeys_list
   └─ __awskeys_unset

>> __awskeys_help():

function __awskeys_help {
    echo -e "Usage: awskeys [COMMAND] [profile]\n"
    echo -e "Helper to AWS credentials file.\n"
    echo -e "Commands:\n"
    echo "   help    Show this help message"
    echo "   list    List available AWS credentials profiles"
    echo "   show    Show the AWS keys associated to a credentials profile"
    echo "   export  Export an AWS credentials profile keys as environment variables"
    echo "   unset   Unset the AWS keys variables from the environment"
    echo "   region  Change aws region which defaults to eu-west-1"
}

Function Calls:
└─ __awskeys_help
   └─ awskeys
      ├─ __awskeys_region
      ├─ __awskeys_list
      ├─ __awskeys_show
      ├─ __awskeys_export
      └─ __awskeys_unset

>> __awskeys_region():

function __awskeys_region {
    local new_region=$1
    if [[ -n "${new_region}" ]]; then
    echo "AWS_DEFAULT_REGION='${new_region}'"
        export AWS_DEFAULT_REGION="${new_region}"
    fi
}


>> __awskeys_get():

function __awskeys_get {

    local ln=$(grep -n "\[ *$1 *\]" "${AWS_SHARED_CREDENTIALS_FILE}" | cut -d ":" -f 1)
    if [[ -n "${ln}" ]]; then
        local profile_line_idxs=$(grep -n "\[*\]" "${AWS_SHARED_CREDENTIALS_FILE}" | tr ":" " " | awk '{print $1}' | tr '\n' ' ')
        local  last_line=$(wc -l "${AWS_SHARED_CREDENTIALS_FILE}" | awk '{print $1}')

        local  all_idxs="${profile_line_idxs}${last_line}"
        local  term_ln=$(echo "$all_idxs" | tr ' ' '\n' | grep -w -A 1 "$ln" | tail -1)
        local  match_strings="aws_access_key_id|aws_secret_access_key|aws_session_token|aws_default_region|aws_default_output|aws_profile|aws_role_session_name|aws_ca_bundle|AWS_ACCESS_KEY_ID|AWS_SECRET_ACCESS_KEY|AWS_SESSION_TOKEN|AWS_DEFAULT_REGION|AWS_DEFAULT_OUTPUT|AWS_PROFILE|AWS_ROLE_SESSION_NAME|AWS_CA_BUNDLE"
        sed -n "${ln},${term_ln}p" "${AWS_SHARED_CREDENTIALS_FILE}" | egrep  "${match_strings}"
    fi
}


>> __awskeys_list():

function __awskeys_list {
    local credentials_list="$((egrep '^\[ *[a-zA-Z0-9_-]+ *\]$' "${AWS_SHARED_CREDENTIALS_FILE}"; grep "\[" "${AWS_SHARED_CREDENTIALS_FILE}" | sed "s|\[profile |\[|g") | sort | uniq)"
    if [[ -n $"{credentials_list}" ]]; then
        echo -e "Available credentials profiles:\n"
        for profile in ${credentials_list}; do
            echo "    $(echo ${profile} | tr -d "[]")"
        done
        echo
    else
        echo "No profiles found in credentials file"
    fi
}


>> __awskeys_show():

function __awskeys_show {
    local p_keys="$(__awskeys_get $1)"
    if [[ -n "${p_keys}" ]]; then
        echo "${p_keys}"
    else
        echo "Profile $1 not found in credentials file"
    fi
}

Function Calls:
└─ __awskeys_show
   └─ __awskeys_get

>> __awskeys_export():

function __awskeys_export {
    if [[ $(__awskeys_list) == *"$1"* ]]; then
        local p_keys=( $(__awskeys_get $1 | tr -d " ") )
        if [[ -n "${p_keys}" ]]; then
            for p_key in ${p_keys[@]}; do
            echo "* $p_key"
                local key="${p_key%=*}"
                export "$(echo ${key} | tr [:lower:] [:upper:])=${p_key#*=}"
            done
        fi
        export AWS_PROFILE="$1"
    else
        echo "Profile $1 not found in credentials file"
    fi
}

Function Calls:
└─ __awskeys_export
   ├─ __awskeys_get
   └─ __awskeys_list

>> __awskeys_unset():

function __awskeys_unset {
    unset AWS_PROFILE AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN
}


>> __awskeys_comp():

function __awskeys_comp {
    local cur prev opts prevprev
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    opts="help list show export unset region"
    case "${prev}" in
        help|list|unset)
            return 0
            ;;
        show|export)
            local profile_list="$(__awskeys_list | grep "    ")"
            COMPREPLY=( $(compgen -W "${profile_list}" -- ${cur}) )
            return 0
            ;;
    esac
    COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
    return 0
}

complete -F __awskeys_comp awskeys

Function Calls:
└─ __awskeys_comp
   └─ __awskeys_list