"""
Script to remove stack instances with status SKIPPED_SUSPENDED_ACCOUNT from a StackSet.
"""
import sys
import boto3
import pprint
def main(stackset_name):
client = boto3.client("cloudformation")
# List all stack instances for the given StackSet
response = client.list_stack_instances(StackSetName=stackset_name)
# pprint.pprint(response)
# exit(0)
# Filter stack instances with status SKIPPED_SUSPENDED_ACCOUNT
skipped_suspended_accounts = []
for instance in response["Summaries"]:
if (
instance["StackInstanceStatus"]["DetailedStatus"]
== "SKIPPED_SUSPENDED_ACCOUNT"
):
skipped_suspended_accounts.append((instance["Account"], instance["Region"]))
if not skipped_suspended_accounts:
print("No stack instances with status SKIPPED_SUSPENDED_ACCOUNT found.")
return
# Loop through each stack instance and delete it
for account_id, region in skipped_suspended_accounts:
print(f"Deleting stack instance in account {account_id} and region {region}")
client.delete_stack_instances(
StackSetName=stackset_name,
Accounts=[account_id],
Regions=[region],
RetainStacks=True,
)
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Usage: python remove_stacks.py <StackSetName>")
sys.exit(1)
stackset_name = sys.argv[1]
main(stackset_name)