11#! /bin/bash
22
3- # source /utils/workspace_utils.sh
4- #
5- TERRAFORM_WORKSPACE=" $1 "
3+ TERRAFORM_WORKSPACE=" "
4+ do_delete=false
65
76function _list_tagged_resources() {
87 local workspace=$1
@@ -103,6 +102,26 @@ function _list_log_groups() {
103102 done
104103}
105104
105+ function _delete_log_groups() {
106+ local workspace=$1
107+ local log_groups
108+
109+ # List all log groups and filter those containing the specified substring
110+ log_groups=$( aws logs describe-log-groups | jq -r --arg substring " $workspace " ' .logGroups[] | select(.logGroupName | contains($substring)) | .logGroupName' )
111+
112+ # Check if any log groups were found
113+ if [ -z " $log_groups " ]; then
114+ echo " No CloudWatch Logs log groups found containing the substring: $workspace "
115+ return 0
116+ fi
117+
118+ # Loop through each log group and delete it
119+ for log_group in $log_groups ; do
120+ echo " Deleting CloudWatch Logs log group: $log_group "
121+ aws logs delete-log-group --log-group-name " $log_group "
122+ done
123+ }
124+
106125function _list_dynamo_tables() {
107126 local workspace=$1
108127 local tables
@@ -644,6 +663,23 @@ function _list_cloudwatch_alarms() {
644663 done
645664}
646665
666+ function _delete_cloudwatch_alarms() {
667+ local workspace=$1
668+
669+ alarms=$( aws cloudwatch describe-alarms --output json | jq -r --arg SUBSTRING " $workspace " ' .MetricAlarms[] | select(.AlarmName | contains($SUBSTRING)) | .AlarmName' )
670+
671+ if [ -z " $alarms " ]; then
672+ echo " No CloudWatch alarms containing the substring: $workspace "
673+ return 0
674+ fi
675+
676+ echo " Deleting the following CloudWatch alarms:"
677+ for alarm in $alarms ; do
678+ echo " $alarm "
679+ done
680+ aws cloudwatch delete-alarms --alarm-names $alarms
681+ }
682+
647683function _list_appconfig() {
648684 local workspace=$1
649685 SUBSTRING=" $workspace "
@@ -683,6 +719,27 @@ function _list_lambda_layers() {
683719 done
684720}
685721
722+ function _delete_lambda_layers() {
723+ local workspace=$1
724+ local layers=$( aws lambda list-layers --output json)
725+
726+ if [ -n " $workspace " ]; then
727+ layers=$( echo " $layers " | jq -r --arg SUBSTRING " $workspace " ' .Layers[] | select(.LayerName | contains($SUBSTRING)) | .LayerName' )
728+ fi
729+
730+ [ -z " $layers " ] && echo " No Lambda Layers found containing substring: $workspace " && return 0
731+
732+ for layer in $layers ; do
733+ echo " Deleting versions for Lambda Layer: $layer "
734+ versions=$( aws lambda list-layer-versions --layer-name " $layer " --output json | jq -r ' .LayerVersions[].Version' )
735+ for v in $versions ; do
736+ echo " - Deleting $layer version $v "
737+ aws lambda delete-layer-version --layer-name " $layer " --version-number " $v "
738+ done
739+ done
740+
741+ }
742+
686743function _list_cloudwatch_dashboards() {
687744 local workspace=$1
688745 local dashboards=$( aws cloudwatch list-dashboards --output json)
@@ -851,7 +908,7 @@ function _list_sns_subscriptions() {
851908 local subs=$( aws sns list-subscriptions --output json)
852909
853910 if [ -n " $workspace " ]; then
854- subs=$( echo " $subs " | jq -r --arg SUBSTRING " $workspace " ' .Subscriptions[] | select(.SubscriptionArn | contains($SUBSTRING) or .TopicArn | contains($SUBSTRING)) | .SubscriptionArn' )
911+ subs=$( echo " $subs " | jq -r --arg SUBSTRING " $workspace -sns " ' .Subscriptions[] | select(( .SubscriptionArn | contains($SUBSTRING)) or ( .TopicArn | contains($SUBSTRING) )) | .SubscriptionArn' )
855912 else
856913 subs=$( echo " $subs " | jq -r ' .Subscriptions[] | .SubscriptionArn' )
857914 fi
@@ -863,6 +920,17 @@ function _list_sns_subscriptions() {
863920 done
864921}
865922
923+ function _delete_sns_subscriptions() {
924+ local workspace=$1
925+ local subs=$( aws sns list-subscriptions --output json)
926+ subs=$( echo " $subs " | jq -r --arg SUBSTRING " $workspace -sns" ' .Subscriptions[] | select((.SubscriptionArn | contains($SUBSTRING)) or (.TopicArn | contains($SUBSTRING))) | .SubscriptionArn' )
927+ [ -z " $subs " ] && echo " No SNS Subscriptions found for $workspace " && return 0
928+
929+ for sub in $subs ; do
930+ echo " SNS Subscription: $sub "
931+ done
932+ }
933+
866934function _list_lambda_event_source_mappings() {
867935 local workspace=$1
868936 local mappings=$( aws lambda list-event-source-mappings --output json)
@@ -923,4 +991,42 @@ function _list_workspace_resources() {
923991 _list_lambda_event_source_mappings " $TERRAFORM_WORKSPACE "
924992}
925993
926- _list_workspace_resources
994+ function _delete_workspace_resources() {
995+ if [[ -z " ${TERRAFORM_WORKSPACE:- } " ]]; then
996+ echo " ❌ ERROR: TERRAFORM_WORKSPACE is not set."
997+ exit 1
998+ fi
999+
1000+ case " $TERRAFORM_WORKSPACE " in
1001+ ndr-dev | ndr-test | pre-prod | prod)
1002+ echo " ❌ ERROR: Deletion is not allowed for workspace: $TERRAFORM_WORKSPACE "
1003+ exit 1
1004+ ;;
1005+ esac
1006+
1007+ _delete_log_groups " $TERRAFORM_WORKSPACE "
1008+ _delete_lambda_layers " $TERRAFORM_WORKSPACE "
1009+ _delete_cloudwatch_alarms " $TERRAFORM_WORKSPACE "
1010+ _delete_sns_subscriptions " $TERRAFORM_WORKSPACE "
1011+ }
1012+
1013+ # Parse args
1014+ for arg in " $@ " ; do
1015+ case " $arg " in
1016+ --delete)
1017+ do_delete=true
1018+ shift
1019+ ;;
1020+ * )
1021+ TERRAFORM_WORKSPACE=" $arg "
1022+ shift
1023+ ;;
1024+ esac
1025+ done
1026+
1027+ # Run correct function
1028+ if $do_delete ; then
1029+ _delete_workspace_resources
1030+ else
1031+ _list_workspace_resources
1032+ fi
0 commit comments