2 changed files with 94 additions and 0 deletions
@ -0,0 +1,93 @@
@@ -0,0 +1,93 @@
|
||||
#!/usr/bin/env bash |
||||
|
||||
# |
||||
# Copyright (C) 2022, Maxim Lihachev, <envrm@yandex.ru> |
||||
# |
||||
# 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 |
||||
# Software Foundation, version 3. |
||||
# |
||||
# This program is distributed in the hope that it will be useful, but WITHOUT |
||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
||||
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
||||
# more details. |
||||
# |
||||
# You should have received a copy of the GNU General Public License along with |
||||
# this program. If not, see <https://www.gnu.org/licenses/>. |
||||
# |
||||
# terraform-mermaid can be used to convert `terraform graph` command output |
||||
# from Graphviz to Mermaid format. |
||||
|
||||
# TODO: -s simple |
||||
|
||||
set -e |
||||
set -o errtrace |
||||
|
||||
\unalias -a |
||||
|
||||
IFS=$' \t\n' |
||||
|
||||
show_help() { |
||||
echo -e "$(basename "$0") can be used to convert \`terraform graph' command output from Graphviz to Mermaid format.\n" |
||||
echo -e "USAGE: $(basename "$0") ?-m? ?-d DIRECTION??\n" |
||||
|
||||
echo -e "Command line arguments:" |
||||
echo -e " -h --help Show this help" |
||||
echo -e " -m --markdown Put the output in triple back quotes (\`\`\`)" |
||||
echo -e " -d --direction Specify the direction of the graph (TB | BT | LR | RL; TB by default)" |
||||
|
||||
echo |
||||
exit "${1:-0}" |
||||
} |
||||
|
||||
UNKNOWN_ARGS=() |
||||
|
||||
while [[ $# -gt 0 ]]; do |
||||
key="$1" |
||||
|
||||
case $key in |
||||
-h|--help) show_help;; |
||||
-d|--direction) DIRECTION="$2"; shift; shift;; |
||||
-m|--markdown) MARKDOWN="true"; shift;; |
||||
*) UNKNOWN_ARGS+=("$1"); shift;; |
||||
esac |
||||
done |
||||
|
||||
[ ${#UNKNOWN_ARGS} -gt 0 ] && echo "Unknown parameters: ${UNKNOWN_ARGS[*]}" >&2 && show_help 1 |
||||
|
||||
declare -a MERMAID |
||||
|
||||
[ -n "$MARKDOWN" ] && MERMAID+=('```mermaid') |
||||
|
||||
MERMAID+=("graph ${DIRECTION:-TB}") |
||||
|
||||
GRAPH=$(terraform graph) |
||||
|
||||
mapfile -t MERMAID_GRAPH < <( |
||||
echo "$GRAPH" \ |
||||
| grep -v 'meta\.count' \ |
||||
| grep -- '->' \ |
||||
| sed -E 's/"//g; |
||||
s/^[[:space:]]*|\\]|\[root\] | \((expand|close)\)//g; |
||||
s!provider.*/!provider:!g; |
||||
s/helm_release/helm/g; |
||||
s/null_resource\.//g; |
||||
s/kubernetes/k8s/g; |
||||
s/ -> / --> /g; |
||||
s/^(.*) --> (.*)$/\2 --> \1/; |
||||
s/(provider:[[:alnum:]_]*)/\1((\1))/; |
||||
s/((var|local).[[:alnum:]_]*)/\1{{\1}}/; |
||||
s/(helm\.[[:alnum:]_]*)/\1{{\1}}/; |
||||
s/(local_file\.[[:alnum:]_]*)/\1>\1]/; |
||||
s/default/defaulṭ/; |
||||
s/class/clasṣ/g; |
||||
/^provider:[[:alnum:]_]*/d;' \ |
||||
| sed 's/^/ /' |
||||
) |
||||
|
||||
MERMAID=("${MERMAID[@]}" "${MERMAID_GRAPH[@]}") |
||||
|
||||
[ -n "$MARKDOWN" ] && MERMAID+=('```') |
||||
|
||||
printf "%s\n" "${MERMAID[@]}" |
||||
|
Loading…
Reference in new issue