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
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.')