#!python
# -*- coding:utf-8 -*-
from __future__ import print_function

import argparse
import os
import random

import boto3

parser = argparse.ArgumentParser(
    description="Output ec2 public host names for active hosts in random "
                "order, optionally match a tag which defaults to 'Name' or "
                "environment variable EC2_HOST_TAG."
)
parser.add_argument('value', type=str, nargs='?',
                    help='the value the tag should equal')
parser.add_argument('-t', '--tag', type=str,
                    default=os.getenv('EC2_HOST_TAG', 'Name'),
                    help='which tag to search')


def main():
    args = parser.parse_args()
    instances = get_dns_names(args.tag, args.value)
    random.shuffle(instances)
    for instance in instances:
        print(instance)


def get_dns_names(tag, value):
    conn = boto3.client('ec2')

    filters = []
    if value:
        filters.append({
            'Name': 'tag:' + tag,
            'Values': [value]
        })

    data = conn.describe_instances(Filters=filters)

    dns_names = []
    for reservation in data['Reservations']:
        for instance in reservation['Instances']:
            if instance['PublicDnsName']:
                dns_names.append(instance['PublicDnsName'])
    return dns_names


if __name__ == '__main__':
    main()
