':returns: item_list - list of networkinterface items.
: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')
            app.logger.debug('Checking    {}/{}/{}'.format(self.index, account, 'universal'))
            el_nis = self.wrap_aws_rate_limited_call(ec2.get_all_network_interfaces)
        except Exception as e:
            exc = BotoConnectionIssue(str(e), self.index, account, None)
            self.slurp_exception((self.index, account, 'universal'), exc, exception_map)
            continue
        app.logger.debug('Found    {}    {}.'.format(len(el_nis), self.i_am_plural))
        for network_interface in el_nis:
            if self.check_ignore_list(network_interface.id):
                continue
            item_config = {'availability_zone': network_interface.availability_zone, 'description': network_interface.description, 'network_interface_id': network_interface.id, 'mac_address': network_interface.mac_address, 'owner_id': network_interface.owner_id, 'private_ip_address': network_interface.private_ip_address, 'source_dest_check': network_interface.source_dest_check, 'status': network_interface.status, 'vpc_id': network_interface.vpc_id}
            if hasattr(network_interface, 'allocationId'):
                item_config['allocation_id'] = network_interface.allocationId
            if hasattr(network_interface, 'associationId'):
                item_config['association_id'] = network_interface.associationId
            if (hasattr(network_interface, 'attachment') and (network_interface.attachment is not None)):
                attachment = network_interface.attachment
                item_config['attachment'] = {'attach_time': str(attachment.attach_time), 'delete_on_termination': attachment.delete_on_termination, 'device_index': attachment.device_index, 'id': attachment.id, 'instance_id': attachment.instance_id, 'instance_owner_id': attachment.instance_owner_id, 'status': attachment.status}
            if hasattr(network_interface, 'privateDnsName'):
                item_config['private_dns_name'] = network_interface.privateDnsName
            if hasattr(network_interface, 'publicDnsName'):
                item_config['public_dns_name'] = network_interface.publicDnsName
            if hasattr(network_interface, 'publicIp'):
                item_config['public_ip_address'] = network_interface.publicIp
            if hasattr(network_interface, 'ipOwnerId'):
                item_config['ip_owner_id'] = network_interface.ipOwnerId
            item = ENIItem(region='universal', account=account, name=network_interface.id, config=item_config)
            item_list.append(item)
    return (item_list, exception_map)
