snr
snr

Reputation: 37

Python filtering for cloudformation stacks with environment names

Updated question: I need to get cloudformation stacks according to the environment. Below is the code I am using for this:

#!/usr/bin/env python

import boto3
import datetime
from datetime import date
import subprocess
import re, itertools

from collections import defaultdict

regions = ['us-west-2']

env_names = ["dev", "test", "stage"]

stack_names_found = defaultdict(list) 

for region in regions:
    session = boto3.session.Session(region_name=region)
    cf_client = session.resource('cloudformation')
    for i in cf_client.stacks.all():
        StackStatus = i.stack_status
        Createdtime = i.creation_time
        StackName1 = i.stack_name

        for env_name in env_names:
            if ('-' + env_name + '-') in StackName1:
                stack_names_found[env_name].append(StackName1)
            output = {'StackName': stack_names_found,
                       'Createdtime': Createdtime, 
                       'Status': StackStatus
                         }
            print(output)

StackName in output looks like this:

{'StackName':defaultdict(<class 'list'>, {'test': ['customer1-test-server1', 'customer2-test-server1', 'customer3-test-server1','customer3-test-server1', 'customer1-test-server2]})

Instead of:

['customer1-test-server1']
['customer2-test-server1']
['customer3-test-server1']
['customer3-test-server1']

Upvotes: 1

Views: 120

Answers (1)

Marcin
Marcin

Reputation: 238081

You can have a look at the following version, which uses defaultdict and creates dictionary of stack names for each env_name:

#!/usr/bin/env python

import boto3
import csv
import datetime
from datetime import date
import subprocess
import re, itertools

from collections import defaultdict

regions = ['us-west-2']

env_names = ["dev", "test", "stage"]

stack_names_found = defaultdict(list) 

for region in regions:
    session = boto3.session.Session(region_name=region)
    cf_client = session.resource('cloudformation')
    for i in cf_client.stacks.all():
        StackStatus = i.stack_status
        Createdtime = i.creation_time
        StackName1 = i.stack_name
        
        for env_name in env_names:
            if ('-' + env_name + '-') in StackName1:
                stack_names_found[env_name].append(StackName1)
            
print(stack_names_found)

Please note that I haven't run the code, thus some adjustment may need to be needed to make it fully work.

Upvotes: 1

Related Questions