def wait_for_healthy_instances(lb_name, new_instance_ids, timeout): elb_conn = ec2.get_elb_connection() ec2_conn = ec2.get_connection() elb_conn.register_instances(lb_name, new_instance_ids) start_time = time.time() while True: if timeout < (time.time() - start_time): elb_conn.deregister_instances(lb_name, new_instance_ids) ec2_conn.create_tags(new_instance_ids, {'Status': 'FAILED'}) raise Exception('Timeout exceeded.') instance_health = elb_conn.describe_instance_health(lb_name, new_instance_ids) if all(i.state == 'InService' for i in instance_health): registered = elb_conn.describe_instance_health(lb_name) old_inst_ids = [i.instance_id for i in registered if i.instance_id not in new_instance_ids] elb_conn.deregister_instances(lb_name, old_inst_ids) ec2_conn.create_tags(old_inst_ids, {'Status': 'OLD'}) return time.sleep(10)
def print_security_groups(): def print_rules(sgs, rules, direction): for rule in rules: if rule.to_port == rule.from_port: port = rule.from_port else: port = "%s-%s" % (rule.from_port, rule.to_port) if port is None: port = 'ALL' protocol = rule.ip_protocol if protocol == '-1': protocol = 'ALL' for grant in rule.grants: if grant.cidr_ip: grant = grant.cidr_ip else: grant = next(i for i in sgs if i.id == grant.group_id).name print "\t:%s/%s %s %s" % (port, protocol, direction, grant) c = ec2.get_connection() sgs = c.get_all_security_groups() sgs = [i for i in sgs if i.vpc_id == config.vpc_id] sgs.sort(key=lambda x: x.name) for sg in sgs: print "%s:" % sg.name print_rules(sgs, sg.rules, '<-') print_rules(sgs, sg.rules_egress, '->') print