':returns: item_list - list of Elastic IPs.
:returns: exception_map - A dict where the keys are a tuple containing the
location of the exception and the value is the actual exception'

def slurp(self):

    self.prep_for_slurp()
    item_list = []
    exception_map = {}
    from security_monkey.common.sts_connect import connect
    for account in self.accounts:
        try:
            ec2 = connect(account, 'ec2')
            regions = ec2.get_all_regions()
        except Exception as e:
            exc = BotoConnectionIssue(str(e), self.index, account, None)
            self.slurp_exception((self.index, account), exc, exception_map, source='{}-watcher'.format(self.index))
            continue
        for region in regions:
            app.logger.debug('Checking    {}/{}/{}'.format(self.index, account, region.name))
            try:
                rec2 = connect(account, 'boto3.ec2.client', region=region)
                el_ips = self.wrap_aws_rate_limited_call(rec2.describe_addresses)
                tags = self.wrap_aws_rate_limited_call(rec2.describe_tags)
            except Exception as e:
                if (region.name not in TROUBLE_REGIONS):
                    exc = BotoConnectionIssue(str(e), self.index, account, region.name)
                    self.slurp_exception((self.index, account, region.name), exc, exception_map, source='{}-watcher'.format(self.index))
                continue
            app.logger.debug('Found    {}    {}'.format(len(el_ips), self.i_am_plural))
            for ip in el_ips['Addresses']:
                if self.check_ignore_list(str(ip['PublicIp'])):
                    continue
                instance_name = None
                instance_tags = [x['Value'] for x in tags['Tags'] if ((x['Key'] == 'Name') and (x.get('ResourceId') == ip.get('InstanceId')))]
                if instance_tags:
                    (instance_name,) = instance_tags
                    if self.check_ignore_list(instance_name):
                        continue
                item_config = {'assigned_to': instance_name, 'public_ip': ip.get('PublicIp'), 'instance_id': ip.get('InstanceId'), 'domain': ip.get('Domain'), 'allocation_id': ip.get('AllocationId'), 'association_id': ip.get('AssociationId'), 'network_interface_id': ip.get('NetworkInterfaceId'), 'network_interface_owner_id': ip.get('NetworkInterfaceOwnerId'), 'private_ip_address': ip.get('PrivateIpAddress')}
                ip_label = '{0}'.format(ip.get('PublicIp'))
                item = ElasticIPItem(region=region.name, account=account, name=ip_label, config=item_config)
                item_list.append(item)
    return (item_list, exception_map)
