diff --git a/scripts/vault-kv-tree b/scripts/vault-kv-tree index 85bcae3..3d20561 100755 --- a/scripts/vault-kv-tree +++ b/scripts/vault-kv-tree @@ -1,6 +1,6 @@ #!/usr/bin/env bash -# Copyright (C) 2020, Maxim Lihachev, +# Copyright (C) 2020-2022, Maxim Likhachev, # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free @@ -28,13 +28,25 @@ rstc="\033[00m" blue="\033[0;36m" green="\033[1;32m" +function die() { + echo -e "$@" >&2 + exit 1 +} + vault_list() { - vault kv list -format=yaml "$1" + path=$1 + + shift + + vault kv list -format=yaml "$@" "$path" } vault_keys() { path=${1//\/\//\/} - keys=$(vault kv get -format=json "$path" 2>&- | jq -r -j '.data.data | keys | join("\n")' 2>&-) + + shift + + keys=$(vault kv get -format=json "$@" "$path" 2>&- | jq -r -j '.data.data | keys | join("\n")' 2>&-) if [ -n "$keys" ]; then while read -r key; do @@ -45,27 +57,33 @@ vault_keys() { vault_tree() { path=${1//\/\//\/} - list=$(vault_list "$path") + + shift + + list=$(vault_list "$path" "$@") echo -e "${blue}${path}${rstc}" if [ -n "$list" ] && [ "$list" != '{}' ]; then while read -r dir; do - # printf "%s%s\n" "$INDENT" "$dir" - # echo "LIST ${path}/${dir#- }" - ( vault_tree "${path}/${dir#- }"; ) + ( vault_tree "${path}/${dir#- }" "$@"; ) done <<<"$list" - # INDENT+=" " else - : - vault_keys "$path" + vault_keys "$path" "$@" fi } +[[ "${BASH_VERSINFO[0]}" -lt 5 ]] && die "ERROR: Bash >= 5 required." + +DEPENDENCIES=(vault jq) + +for dependency in "${DEPENDENCIES[@]}"; do + command -V "$dependency" &>/dev/null || die "ERROR: The required '$dependency' command is not found." +done + if [ $# -eq 0 ]; then - echo "USAGE: $(basename "$0") [path]" - exit 1 + die "USAGE: $(basename "$0") [path] [vault arguments...]" else - vault_tree "$1" + vault_tree "$@" fi