from __future__ import print_function
import json
import boto3
import traceback
from boto3.session import Session
import zipfile
import botocore
import uuid
client = boto3.client('servicecatalog')
def lambda_handler(event, context):
constraint_metadata=[]
constraintIDs=[]
portIds=list_portfolios()
for index, value in enumerate(portIds):
try:
print (portIds[index])
prodIds=list_products_for_portfolio(portIds[index])
#Iterate over all products to check constraints
constraintIDs=list_template_constraint_for_portfolio(portIds[index])
for constraintID in constraintIDs:
if not (constraintIDs is None):
print ((str(constraintID)) + " Contains a valid SG template constraint....\n")
except Exception as e:
print('Function failed due to exception.')
print(e)
else:
print (portIds[index])
prodIds=list_products_for_portfolio(portIds[index])
#Iterate over all products to check constraints
constraintIDs=list_launch_constraint_for_portfolio(portIds[index])
for constraintID in constraintIDs:
if not (constraintIDs is None):
print ((str(constraintID)) + " Contains a valid launch constraint....\n")
def list_template_constraint_for_portfolio(id):
constraintIDs=[]
response = client.list_constraints_for_portfolio(
AcceptLanguage='en',
PortfolioId=id
)
for index in range(len(response['ConstraintDetails'])):
if response['ConstraintDetails'][index]['Type'] == 'TEMPLATE':
if "SecurityGroup" in str(describe_constraint(response['ConstraintDetails'][index]['ConstraintId'])):
constraintIDs.append(response['ConstraintDetails'][index]['ConstraintId'])
return constraintIDs
def list_launch_constraint_for_portfolio(id):
constraintIDs=[]
response = client.list_constraints_for_portfolio(
AcceptLanguage='en',
PortfolioId=id
)
for index in range(len(response['ConstraintDetails'])):
if response['ConstraintDetails'][index]['Type'] == 'LAUNCH':
if "RoleArn" in str(describe_constraint(response['ConstraintDetails'][index]['ConstraintId'])):
constraintIDs.append(response['ConstraintDetails'][index]['ConstraintId'])
return constraintIDs
def list_portfolios():
nextmarker = None
done = False
lst_portfolio = []
portIds=[]
while not done:
if nextmarker:
portfolio_response = client.list_portfolios(PageToken=nextmarker,PageSize=20)
else:
portfolio_response = client.list_portfolios()
for portfolio in portfolio_response['PortfolioDetails']:
lst_portfolio.append(portfolio)
if 'NextPageToken' in portfolio_response:
nextmarker = portfolio_response['NextPageToken']
else:
break
for i in range(len(lst_portfolio)):
portId = lst_portfolio[i]['Id']
portIds.append(portId)
return portIds
def list_products_for_portfolio(id):
nextmarker = None
done = False
lst_products = []
while not done:
if nextmarker:
product_response = client.search_products_as_admin(nextmarker=nextmarker, PortfolioId=id)
else:
product_response = client.search_products_as_admin(PortfolioId=id)
for product in product_response['ProductViewDetails']:
lst_products.append(product['ProductViewSummary'])
if 'NextPageToken' in product_response:
nextmarker = product_response['NextPageToken']
else:
break
return lst_products
def describe_constraint(constraintId):
response = client.describe_constraint(
AcceptLanguage='en',
Id=constraintId
)
obj=eval(str(response))
return obj
http://book.pythontips.com/en/latest/enumerate.html