🎉 Initial Commit
This commit is contained in:
38
README.md
Normal file
38
README.md
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
# Minify TF
|
||||||
|
|
||||||
|
This is a simple script to output minify the Terraform CLI output. The script is **only** able to plan (or plan a destruction) because you should always check the real plan before applying.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
Normal planning:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
minify_tf plan # Plan the Creation/Update of the infrastructure
|
||||||
|
minify_tf destroy # Plan the Destruction of the infrastructure
|
||||||
|
```
|
||||||
|
|
||||||
|
Regenerate the last plan:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
minify_tf regen # Regenerate the last plan with minimal output
|
||||||
|
minify_tf regenfull # Regenerate the last plan with full output
|
||||||
|
```
|
||||||
|
|
||||||
|
Other commands:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
minify_tf about # Show the about message
|
||||||
|
minify_tf version # Show the version of the script
|
||||||
|
```
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
There are two ways of installing this script:
|
||||||
|
|
||||||
|
1. Put the script in your `$PATH` (e.g. `/usr/local/bin`)
|
||||||
|
2. Use Homebrew (or Linuxbrew) to install it:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
brew tap k3y0708/tap
|
||||||
|
brew install minify_tf
|
||||||
|
```
|
||||||
110
minify_tf
Executable file
110
minify_tf
Executable file
@@ -0,0 +1,110 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Constants -------------------------------------------------------------------
|
||||||
|
|
||||||
|
HISTORY_DIR="$HOME/.minify_tf_plan_history"
|
||||||
|
HISTORY_FILE="$HISTORY_DIR/latest"
|
||||||
|
STATUS_FILE="$HISTORY_DIR/status"
|
||||||
|
|
||||||
|
RED='\033[0;31m'
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
YELLOW='\033[0;33m'
|
||||||
|
BLUE='\033[0;34m'
|
||||||
|
NC='\033[0m'
|
||||||
|
|
||||||
|
ADD_SIGN="${GREEN}+${NC}"
|
||||||
|
REMOVE_SIGN="${RED}-${NC}"
|
||||||
|
CHANGE_SIGN="${YELLOW}~${NC}"
|
||||||
|
REPLACE_SIGN="${RED}-${GREEN}+${NC}"
|
||||||
|
OTHER_SIGN="${BLUE}*${NC}"
|
||||||
|
|
||||||
|
NAME="minify_tf"
|
||||||
|
VERSION="v0.0.1"
|
||||||
|
|
||||||
|
# Command Line Interface -------------------------------------------------------
|
||||||
|
if [[ "$1" == "regenfull" ]]; then
|
||||||
|
cat $HISTORY_FILE
|
||||||
|
exit 0
|
||||||
|
elif [[ "$1" == "regen" ]]; then
|
||||||
|
plan=$(cat $HISTORY_FILE)
|
||||||
|
status=$(cat $STATUS_FILE)
|
||||||
|
elif [[ "$1" == "destroy" ]]; then
|
||||||
|
plan="$(terraform plan -destroy -detailed-exitcode -input=false)"
|
||||||
|
status=$?
|
||||||
|
elif [[ "$1" == "plan" ]]; then
|
||||||
|
plan="$(terraform plan -detailed-exitcode -input=false)"
|
||||||
|
status=$?
|
||||||
|
elif [[ "$1" == "about" ]]; then
|
||||||
|
NV="$NAME $VERSION"
|
||||||
|
NV_LEN=${#NV}
|
||||||
|
SPACES_LEN=$(( 26 - $NV_LEN ))
|
||||||
|
for (( i=0; i<$SPACES_LEN; i++ )); do
|
||||||
|
NV="$NV "
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "+----------------------------+"
|
||||||
|
echo "| $NV |"
|
||||||
|
echo "| by @k3y0708 |"
|
||||||
|
echo "| https://github.com/k3y0708 |"
|
||||||
|
echo "+----------------------------+"
|
||||||
|
exit 0
|
||||||
|
elif [[ "$1" == "version" ]]; then
|
||||||
|
echo "$VERSION"
|
||||||
|
exit 0
|
||||||
|
else
|
||||||
|
echo "Usage: $0 [plan|destroy|regen|regenfull|about|version]"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Save history and status -----------------------------------------------------
|
||||||
|
if [[ "$1" != *"regen"* ]]; then
|
||||||
|
mkdir -p "$HISTORY_DIR"
|
||||||
|
echo "$plan" > "$HISTORY_FILE"
|
||||||
|
echo "$status" > "$STATUS_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if there are changes --------------------------------------------------
|
||||||
|
if [[ "$status" == "0" ]]; then
|
||||||
|
echo "No changes. Infrastructure is up-to-date."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
if [[ "$status" == "1" ]]; then
|
||||||
|
echo "Error in terraform plan"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [[ "$status" != "2" ]]; then
|
||||||
|
echo "Unknown error in terraform plan"
|
||||||
|
echo "Please contact the developer ($NAME about)"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Print changes ---------------------------------------------------------------
|
||||||
|
out="$(echo "$plan" | grep " # " | sed 's/ # //g')"
|
||||||
|
|
||||||
|
add="$(echo "$out" | sed -e 's/\x1b\[[0-9;]*m//g' | grep ' will be created' | sed 's/ will be created//g')"
|
||||||
|
remove="$(echo "$out" | sed -e 's/\x1b\[[0-9;]*m//g' | grep ' will be destroyed' | sed 's/ will be destroyed//g')"
|
||||||
|
change="$(echo "$out" | sed -e 's/\x1b\[[0-9;]*m//g' | grep ' will be updated' | sed 's/ will be updated//g')"
|
||||||
|
replace="$(echo "$out" | sed -e 's/\x1b\[[0-9;]*m//g' | grep ' must be replaced' | sed 's/ must be replaced//g')"
|
||||||
|
other="$(echo "$out" | sed -e 's/\x1b\[[0-9;]*m//g'| grep -v ' will be created' | grep -v ' will be destroyed' | grep -v ' will be updated' | grep -v ' must be replaced' | grep -v '(because ' | grep -v '(depends '| tr ' ' '§§§')"
|
||||||
|
|
||||||
|
for line in $add; do
|
||||||
|
echo -e "$ADD_SIGN $line"
|
||||||
|
done
|
||||||
|
|
||||||
|
for line in $remove; do
|
||||||
|
echo -e "$REMOVE_SIGN $line"
|
||||||
|
done
|
||||||
|
|
||||||
|
for line in $change; do
|
||||||
|
if [[ "$line" != *"in-place"* ]]; then
|
||||||
|
echo -e "$CHANGE_SIGN $line"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
for line in $replace; do
|
||||||
|
echo -e "$REPLACE_SIGN $line"
|
||||||
|
done
|
||||||
|
|
||||||
|
for line in $other; do
|
||||||
|
echo -e "$OTHER_SIGN $(echo "$line" | tr '§§§' ' ')"
|
||||||
|
done
|
||||||
Reference in New Issue
Block a user