def test_layout_sg(i_id, i, sn): sn_id = sn['SubnetId'] if 'SecurityGroups' in i: sg_ids = i['SecurityGroups'].keys() else: sg_ids = [s['VpcSecurityGroupId'] for s in i['VpcSecurityGroups']] sg_group = "_".join(sg_ids) link("%s__%s__in" % (sn_id, sg_group), i_id) link(i_id, "%s__%s__out" % (sn_id, sg_group)) if 'nacl' in sn: for nacl_id, nacl in sn['nacl'].items(): link( "%s__%s__in" % (sn_id, nacl_id), "%s__%s__in" % (sn_id, sg_group) ) link( "%s__%s__out" % (sn_id, sg_group), "%s__%s__out" % (sn_id, nacl_id) ) sn_az = sn['AvailabilityZone'] print 'subgraph "cluster_%s__%s" {' % (sn_id, sg_group) print '"%s"' % i_id print 'label = "%s"' % sg_group if 'LoadBalancerName' in i: i_id = i_id.split('_')[-1] link("%s_%s" % (sn_az, i_id), "%s_rules" % i_id) print "}"
def main(): gather_data() with open('data.json', 'r') as jsonfile: aws = json.load(jsonfile) print "digraph G {" #print "overlap = false;" #print "splines = true;" print 'node [shape="plaintext"]' print """ splines=true; sep="+25,25"; overlap=scalexy; nodesep=0.6; node [fontsize=11]; """ already_printed = set([]) sgs = [] for sn_id, sn in aws['subnets'].items(): print "//", sn_id sn_cluster = "cluster_%s" % sn_id print 'subgraph "%s" {' % sn_cluster print 'label = "%s"' % sn_id for instance_id, instance in sn['instances'].items(): if instance_id in already_printed: continue print '"%s" [label="%s"]' % (instance_id, instance['tag_Name']) already_printed.add(instance_id) for elb_id, elb in sn['elb'].items(): if elb_id in already_printed: continue print '"%s"' % elb_id already_printed.add(elb_id) for rds_id, rds in sn['rds'].items(): if rds_id in already_printed: continue print '"%s"' % rds_id already_printed.add(rds_id) print "}" for acl_id, acl in sn['nacl'].items(): print '"%s" [label=<%s>];' % (acl_id, acl_rules(acl)) link(sn_cluster, acl_id) for instance_id, instance in sn['instances'].items(): for sg_id, sg in instance['SecurityGroups'].items(): link(instance_id, sg_id) sgs.append(sg) for elb_id, elb in sn['elb'].items(): for sg_id in elb['SecurityGroups'].keys(): link(elb_id, sg_id) for instance_id, instance in elb['Instances'].items(): link(elb_id, instance_id) for rds_id, rds in sn['rds'].items(): for sg_id in rds['SecurityGroups'].keys(): link(rds_id, sg_id) for sg in sgs: sg_id = sg['GroupId'] print '"%s" [label=<%s>];' % (sg_id, sg_rules(sg)) print "}"