def get_running_instances(access_key=None, secret_key=None, security_group=None):
    '''
    Get all running instances. Only within a security group if specified.
    '''
    logging.debug('get_running_instances()')

    instances_all_regions_list = []
    conn = EC2Connection(aws_access_key_id=access_key,
                         aws_secret_access_key=secret_key)
    ec2_region_list = conn.get_all_regions()

    if security_group:
        for index, region in enumerate(ec2_region_list):
            conn = EC2Connection(aws_access_key_id=access_key,
                                 aws_secret_access_key=secret_key,
                                 region=ec2_region_list[index])
            sg = SecurityGroup(connection=conn, name=security_group)
            running_instances = [i for i in sg.instances() if i.state == 'running']
            if running_instances:
                for instance in running_instances:
                    instances_all_regions_list.append(instance)
    else:
        for index, region in enumerate(ec2_region_list):
            conn = EC2Connection(aws_access_key_id=access_key,
                                 aws_secret_access_key=secret_key,
                                 region=ec2_region_list[index])
            reserved_instances = conn.get_all_instances()
            if reserved_instances:
                for reservation in reserved_instances:
                    for instance in reservation.instances:
                        if instance.stat == 'running':
                            instances_all_regions_list.append(instance)
    return instances_all_regions_list
def get_running_instances_in_security_group(access_key=None, secret_key=None, security_group=None, region='us-east-1'):
    '''
    Get all running instances. Only within a security group if specified.
    '''
    logging.debug('get_running_instances_in_security_group()')
    conn = EC2Connection(aws_access_key_id=access_key,
                         aws_secret_access_key=secret_key,region=boto.ec2.get_region(region))

    if security_group:
        sg = SecurityGroup(connection=conn, name=security_group)
        instances = [i for i in sg.instances() if i.state == 'running']
	print(instances)
        return instances
def get_running_instances(access_key=None, secret_key=None, security_group=None):
    """
    Get all running instances. Only within a security group if specified.
    """
    logging.debug("get_running_instances()")
    conn = EC2Connection(aws_access_key_id=access_key, aws_secret_access_key=secret_key)

    if security_group:
        sg = SecurityGroup(connection=conn, name=security_group)
        instances = [i for i in sg.instances() if i.state == "running"]
        return instances
    else:
        instances = conn.get_all_instances()
        return instances
Beispiel #4
0
def get_running_instances(access_key=None,
                          secret_key=None,
                          security_group=None):
    '''
    Get all running instances. Only within a security group if specified.
    '''
    logging.debug('get_running_instances()')
    conn = EC2Connection(aws_access_key_id=access_key,
                         aws_secret_access_key=secret_key)

    if security_group:
        sg = SecurityGroup(connection=conn, name=security_group)
        instances = [i for i in sg.instances() if i.state == 'running']
        return instances
    else:
        instances = conn.get_all_instances()
        return instances
def get_running_instances(access_key=None,
                          secret_key=None,
                          security_group=None):
    '''
    Get all running instances. Only within a security group if specified.
    '''
    logging.debug('get_running_instances()')

    instances_all_regions_list = []
    conn = EC2Connection(aws_access_key_id=access_key,
                         aws_secret_access_key=secret_key)
    ec2_region_list = conn.get_all_regions()

    if security_group:
        for index, region in enumerate(ec2_region_list):
            conn = EC2Connection(aws_access_key_id=access_key,
                                 aws_secret_access_key=secret_key,
                                 region=ec2_region_list[index])
            sg = SecurityGroup(connection=conn, name=security_group)
            running_instances = [
                i for i in sg.instances() if i.state == 'running'
            ]
            if running_instances:
                for instance in running_instances:
                    instances_all_regions_list.append(instance)
    else:
        for index, region in enumerate(ec2_region_list):
            conn = EC2Connection(aws_access_key_id=access_key,
                                 aws_secret_access_key=secret_key,
                                 region=ec2_region_list[index])
            reserved_instances = conn.get_all_instances()
            if reserved_instances:
                for reservation in reserved_instances:
                    for instance in reservation.instances:
                        if instance.stat == 'running':
                            instances_all_regions_list.append(instance)
    return instances_all_regions_list
def main():
    # Parse up the command line arguments.
    parser = argparse.ArgumentParser(description='Update haproxy to use all instances running in a security group.')
    parser.add_argument('--security-group', required=True)
    parser.add_argument('--access-key', required=True)
    parser.add_argument('--secret-key', required=True)
    parser.add_argument('--output', default='haproxy.cfg',
                        help='Defaults to haproxy.cfg if not specified.')
    parser.add_argument('--template', default='templates/haproxy.tpl')
    parser.add_argument('--haproxy', default='./haproxy',
                        help='The haproxy binary to call. Defaults to haproxy if not specified.')
    parser.add_argument('--pid', default='/var/run/haproxy.pid',
                        help='The pid file for haproxy. Defaults to /var/run/haproxy.pid.')
    args = parser.parse_args()

    # Wrap everytihg in a try block. Any exceptions and exit without changing
    # anything just to be safe.
    new_configuration = None
    try:
        # Create a connection to EC2.
        logging.debug('Connecting to EC2.')
        conn = EC2Connection(aws_access_key_id=args.access_key,
                             aws_secret_access_key=args.secret_key)
    
        # Get the security group.
        logging.debug('Fetching security group (%s).' % args.security_group)
        sg = SecurityGroup(connection=conn, name=args.security_group)
    
        # Fetch a list of all the instances in this security group.
        logging.debug('Getting instance.')
        instances = [i for i in sg.instances() if i.state == 'running']
    
        # Load in the existing config file contents.
        logging.debug('Locading existing configuration.')
        f = open(args.output, 'r')
        old_configuration = f.read()
        f.close()
    
        # Generate the new config from the template.
        logging.debug('Generating configuration for haproxy.')
        new_configuration = Template(filename=args.template).render(instances=instances)
    except:
        logging.error('Something went wrong! Exiting without making changes.')
        return False

    # See if this new config is different. If it is then restart using it.
    # Otherwise just delete the temporary file and do nothing.
    logging.debug('Comparing to existing configuration.')
    if old_configuration != new_configuration:
        logging.debug('Existing configuration is outdated.')

        # Overwite the real config file.
        logging.debug('Writing new configuration.')
        output = open(args.output, 'w')
        output.write(Template(filename=args.template).render(instances=instances))
        output.close()

        # Get PID if haproxy is already running.
        logging.debug('Fetching PID from %s.' % args.pid)
        pid = ''
        try:
            pidfile = open(args.pid, 'r')
            pid = pidfile.read()
            pidfile.close()
        except:
            logging.warn('Unable to read from %s. haproxy may not be running already.')

        # Restart haproxy.
        logging.debug('Restarting haproxy.')
        command = '''%s -p %s -f %s -sf %s''' % (args.haproxy, args.pid, args.output, pid)
        logging.debug('Executing: %s' % command)
        subprocess.call(command, shell=True)
    else:
        logging.debug('Existing configuration is up-to-date.')