|
|
@ -1,6 +1,6 @@ |
|
|
|
#!/usr/bin/env bash |
|
|
|
#!/usr/bin/env bash |
|
|
|
|
|
|
|
|
|
|
|
# Copyright (C) 2020, Maxim Lihachev, <envrm@yandex.ru> |
|
|
|
# Copyright (C) 2020-2022, Maxim Likhachev, <envrm@yandex.ru> |
|
|
|
# |
|
|
|
# |
|
|
|
# This program is free software: you can redistribute it and/or modify it |
|
|
|
# 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 |
|
|
|
# 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" |
|
|
|
blue="\033[0;36m" |
|
|
|
green="\033[1;32m" |
|
|
|
green="\033[1;32m" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function die() { |
|
|
|
|
|
|
|
echo -e "$@" >&2 |
|
|
|
|
|
|
|
exit 1 |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
vault_list() { |
|
|
|
vault_list() { |
|
|
|
vault kv list -format=yaml "$1" |
|
|
|
path=$1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
shift |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vault kv list -format=yaml "$@" "$path" |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
vault_keys() { |
|
|
|
vault_keys() { |
|
|
|
path=${1//\/\//\/} |
|
|
|
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 |
|
|
|
if [ -n "$keys" ]; then |
|
|
|
while read -r key; do |
|
|
|
while read -r key; do |
|
|
@ -45,27 +57,33 @@ vault_keys() { |
|
|
|
|
|
|
|
|
|
|
|
vault_tree() { |
|
|
|
vault_tree() { |
|
|
|
path=${1//\/\//\/} |
|
|
|
path=${1//\/\//\/} |
|
|
|
list=$(vault_list "$path") |
|
|
|
|
|
|
|
|
|
|
|
shift |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
list=$(vault_list "$path" "$@") |
|
|
|
|
|
|
|
|
|
|
|
echo -e "${blue}${path}${rstc}" |
|
|
|
echo -e "${blue}${path}${rstc}" |
|
|
|
|
|
|
|
|
|
|
|
if [ -n "$list" ] && [ "$list" != '{}' ]; then |
|
|
|
if [ -n "$list" ] && [ "$list" != '{}' ]; then |
|
|
|
while read -r dir; do |
|
|
|
while read -r dir; do |
|
|
|
# printf "%s%s\n" "$INDENT" "$dir" |
|
|
|
( vault_tree "${path}/${dir#- }" "$@"; ) |
|
|
|
# echo "LIST ${path}/${dir#- }" |
|
|
|
|
|
|
|
( vault_tree "${path}/${dir#- }"; ) |
|
|
|
|
|
|
|
done <<<"$list" |
|
|
|
done <<<"$list" |
|
|
|
# INDENT+=" " |
|
|
|
|
|
|
|
else |
|
|
|
else |
|
|
|
: |
|
|
|
vault_keys "$path" "$@" |
|
|
|
vault_keys "$path" |
|
|
|
|
|
|
|
fi |
|
|
|
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 |
|
|
|
if [ $# -eq 0 ]; then |
|
|
|
echo "USAGE: $(basename "$0") [path]" |
|
|
|
die "USAGE: $(basename "$0") [path] [vault arguments...]" |
|
|
|
exit 1 |
|
|
|
|
|
|
|
else |
|
|
|
else |
|
|
|
vault_tree "$1" |
|
|
|
vault_tree "$@" |
|
|
|
fi |
|
|
|
fi |
|
|
|
|
|
|
|
|
|
|
|