From 519b571c3f6d7cae1a73b5874b7f035da72ed554 Mon Sep 17 00:00:00 2001 From: Quentin Manfroi Date: Mon, 12 Aug 2019 22:29:49 +0200 Subject: [PATCH] MON-494 support multiple monitors-*.tf files --- scripts/10_update_output.sh | 5 ++--- scripts/20_update_modules_readmes.sh | 17 ++++++++--------- scripts/30_update_module.sh | 15 ++++++++------- scripts/90_best_practices.sh | 6 +++--- scripts/99_terraform.sh | 3 +-- scripts/utils.sh | 2 +- 6 files changed, 23 insertions(+), 25 deletions(-) diff --git a/scripts/10_update_output.sh b/scripts/10_update_output.sh index cb568af..282d81a 100755 --- a/scripts/10_update_output.sh +++ b/scripts/10_update_output.sh @@ -5,14 +5,13 @@ init echo "Generate terraform outputs.tf files for every monitors modules" # loop over every monitors set -for path in $(browse_modules "$(get_scope ${1:-})" 'monitors-*.tf'); do - module=$(dirname ${path}) +for module in $(browse_modules "$(get_scope ${1:-})" 'monitors-*.tf'); do echo -e "\t- Generate outputs.tf for module: ${module}" cd ${module} # empty outputs > outputs.tf # loop over monitors for each set - for monitor in $(grep 'resource "datadog_monitor"' $(basename ${path}) | awk '{print $3}' | tr -d '"' ); do + for monitor in $(cat monitors-*.tf | grep 'resource "datadog_monitor"' | awk '{print $3}' | tr -d '"' ); do # create output block for current monitor cat >> outputs.tf < README.md -# ${module_space} DataDog monitors +# ${module_upper} DataDog monitors ## How to use this module @@ -64,14 +63,14 @@ EOF # allow looping over strings which contains spaces IFS=$(echo -en "\n\b") # loop over each monitor in the set - for match in $(grep -E ^[[:space:]]+name[[:space:]]+= $(basename ${path}) | sort -fdbi); do + for match in $(cat monitors-*.tf | grep -E ^[[:space:]]+name[[:space:]]+= | sort -fdbi); do ## TODO rewrite this (and other things) using: ## terraform-config-inspect --json| jq -C ## awk '1;/^\}/{exit}' monitors-ingress.tf # with line numer of each resource # parse monitor's name name=$(get_name "${match}") # search if monitor is enabled - [[ "$(grep -B1 "$name" $(basename ${path}) | grep -q enabled)" =~ ^[[:space:]]*count[[:space:]]*=[[:space:]]*var\.([a-z0-9_]*_enabled) ]] && + [[ "$(cat monitors-*.tf | grep -B1 "$name" | grep -q enabled)" =~ ^[[:space:]]*count[[:space:]]*=[[:space:]]*var\.([a-z0-9_]*_enabled) ]] && # add "disabled by default" mention if not enabled if ! grep -A4 "${BASH_REMATCH[1]}" inputs.tf | grep default.*true; then name="${name} (disabled by default)" diff --git a/scripts/30_update_module.sh b/scripts/30_update_module.sh index 4811183..135a73c 100755 --- a/scripts/30_update_module.sh +++ b/scripts/30_update_module.sh @@ -6,11 +6,10 @@ echo "Generate outputs.tf files when does not exist for every monitors modules" root=$(basename ${PWD}) # loop over every monitors set -for path in $(browse_modules "$(get_scope ${1:-})" 'monitors-*.tf'); do - module=$(dirname ${path}) +for module in $(browse_modules "$(get_scope ${1:-})" 'monitors-*.tf'); do cd ${module} # get name of the monitors set directory - resource="$(basename $(dirname $path))" + resource="$(basename ${module})" # if modules.tf does not exist AND if this set respect our tagging convention if ! [ -f modules.tf ] && grep -q filter_tags_use_defaults inputs.tf; then echo -e "\t- Generate modules.tf for module: ${module}" @@ -28,11 +27,13 @@ for path in $(browse_modules "$(get_scope ${1:-})" 'monitors-*.tf'); do module "filter-tags" { source = "${relative}common/filter-tags" - environment = var.environment - resource = "$resource" - filter_tags_use_defaults = var.filter_tags_use_defaults - filter_tags_custom = var.filter_tags_custom + environment = var.environment + resource = "$resource" + filter_tags_use_defaults = var.filter_tags_use_defaults + filter_tags_custom = var.filter_tags_custom + filter_tags_custom_excluded = var.filter_tags_custom_excluded } + EOF fi cd - >> /dev/null diff --git a/scripts/90_best_practices.sh b/scripts/90_best_practices.sh index f3c6b89..f82befb 100755 --- a/scripts/90_best_practices.sh +++ b/scripts/90_best_practices.sh @@ -6,10 +6,10 @@ echo "Check best practices respect" echo -e "\t- Check only one notify_no_data set to true per module" # loop over every monitors set -for path in $(browse_modules "$(get_scope ${1:-})" 'monitors-*.tf'); do +for module in $(browse_modules "$(get_scope ${1:-})" 'monitors-*.tf'); do # check if there is more than 1 notify_no_data parameter set to true per set of monitors - if [[ $(grep -c notify_no_data.*true $path) -gt 1 ]]; then - echo "More than one notify_no_data set to true on $path" + if [[ $(cat ${module}/monitors-*.tf | grep -c notify_no_data.*true) -gt 1 ]]; then + echo "More than one notify_no_data set to true on $module" exit 1 fi done diff --git a/scripts/99_terraform.sh b/scripts/99_terraform.sh index 98164e7..fc3999d 100755 --- a/scripts/99_terraform.sh +++ b/scripts/99_terraform.sh @@ -12,8 +12,7 @@ trap 'err $LINENO' ERR TERM EXIT INT provider_version=$(grep ^[[:space:]]*version[[:space:]]= README.md | awk '{print $3}') -for path in $(browse_modules "$(get_scope ${1:-})" 'inputs.tf'); do - module=$(dirname $path) +for module in $(browse_modules "$(get_scope ${1:-})" 'inputs.tf'); do echo -e "\t- Terraform validate on module: ${module}" cat < ${module}/tmp.tf provider "datadog" { diff --git a/scripts/utils.sh b/scripts/utils.sh index 8afa454..684106c 100755 --- a/scripts/utils.sh +++ b/scripts/utils.sh @@ -53,5 +53,5 @@ function get_name() { } function browse_modules() { - find "$1" -name "$2" -print | sort -fdbi + find "$1" -name "$2" -exec dirname "{}" \; | sort -fdbiu }