57 lines
1.7 KiB
Bash
57 lines
1.7 KiB
Bash
#!/bin/bash
|
|
#title :tf_compliance.sh
|
|
#description :Runs terraform-compliance a lightweight, security and compliance focused test framework against terraform to enable negative
|
|
# testing capability for your infrastructure-as-code.
|
|
#author :andreas.heuamier@microsoft.com
|
|
#date :20200602
|
|
#version :0.1
|
|
#usage :./tf_compliance.sh {WORK_DIR}
|
|
#bash_version :5.0.16(1)-release
|
|
#
|
|
set -euo pipfail
|
|
|
|
run_terraform_plan(){
|
|
local test_dir=$1
|
|
terraform validate && terraform plan -out "${$test_dir}/tf.out"
|
|
}
|
|
|
|
run_tf_compliance() {
|
|
local test_dir=$1
|
|
local features_dir=$1
|
|
[ -f "${test_dir}/tf.out" ] || run_terraform_plan "${test_dir}"
|
|
docker run --rm -v "${test_dir}":/target -it eerkunt/terraform-compliance -f "${features_dir}" -p tf.out
|
|
}
|
|
|
|
#######################################
|
|
# find_folders_by() file pattern
|
|
# Globals:
|
|
# WORK_DIR -path
|
|
# Arguments:
|
|
# pattern - regex
|
|
# Outputs:
|
|
# Writes folders list to stdout
|
|
#######################################
|
|
find_folders_by() {
|
|
local pattern=${1:-"main.tf"}
|
|
find "${WORK_DIR}" -type f -name "${pattern}" -printf '%h\n' | sort -u
|
|
}
|
|
|
|
#######################################
|
|
# Runs the trerraform compliance tool on all subdirectories
|
|
#######################################
|
|
run_main() {
|
|
for feature in $(find_folders_by "*.feature"); do
|
|
for folder in $(find_folders_by "main.tf"); do
|
|
run_tf_compliance "${folder}" "${feature}" &
|
|
done
|
|
wait
|
|
done
|
|
}
|
|
|
|
#######################################
|
|
# Be able to run this one either as standalone or import as lib
|
|
#######################################
|
|
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
|
run_main
|
|
fi
|