lookup: lmdb_kv: fix for py3
This commit is contained in:
parent
6370c63efc
commit
c24a85c793
1 changed files with 28 additions and 17 deletions
|
@ -5,11 +5,10 @@ from __future__ import (absolute_import, division, print_function)
|
||||||
__metaclass__ = type
|
__metaclass__ = type
|
||||||
|
|
||||||
DOCUMENTATION = """
|
DOCUMENTATION = """
|
||||||
lookup: lmdb
|
lookup: lmdb_kv
|
||||||
author:
|
author:
|
||||||
- Jan-Piet Mens (@jpmens) <jpmens(at)gmail.com>
|
- Jan-Piet Mens (@jpmens)
|
||||||
- Ansible Core
|
version_added: "2.10"
|
||||||
version_added: "2.5"
|
|
||||||
short_description: fetch data from LMDB
|
short_description: fetch data from LMDB
|
||||||
description:
|
description:
|
||||||
- This lookup returns a list of results from an LMDB DB corresponding to a list of items given to it
|
- This lookup returns a list of results from an LMDB DB corresponding to a list of items given to it
|
||||||
|
@ -25,13 +24,25 @@ DOCUMENTATION = """
|
||||||
|
|
||||||
EXAMPLES = """
|
EXAMPLES = """
|
||||||
- name: query LMDB for a list of country codes
|
- name: query LMDB for a list of country codes
|
||||||
debug: msg="{{ lookup('lmdb_kv', 'nl', 'be', 'lu', db='jp.mdb') }}"
|
debug:
|
||||||
|
msg: "{{ query('lmdb_kv', 'nl', 'be', 'lu', db='jp.mdb') }}"
|
||||||
|
|
||||||
- name: use list of values in a loop
|
- name: use list of values in a loop by key wildcard
|
||||||
debug: msg="Hello from {{ item.0 }} a.k.a. {{ item.1 }}"
|
debug:
|
||||||
|
msg: "Hello from {{ item.0 }} a.k.a. {{ item.1 }}"
|
||||||
|
vars:
|
||||||
|
- lmdb_kv_db: jp.mdb
|
||||||
with_lmdb_kv:
|
with_lmdb_kv:
|
||||||
- "n*"
|
- "n*"
|
||||||
|
|
||||||
|
- name: get an item by key
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- item == 'Belgium'
|
||||||
|
vars:
|
||||||
|
- lmdb_kv_db: jp.mdb
|
||||||
|
with_lmdb_kv:
|
||||||
|
- be
|
||||||
"""
|
"""
|
||||||
|
|
||||||
RETURN = """
|
RETURN = """
|
||||||
|
@ -42,7 +53,7 @@ _raw:
|
||||||
|
|
||||||
from ansible.errors import AnsibleError
|
from ansible.errors import AnsibleError
|
||||||
from ansible.plugins.lookup import LookupBase
|
from ansible.plugins.lookup import LookupBase
|
||||||
|
from ansible.module_utils._text import to_native, to_text
|
||||||
HAVE_LMDB = True
|
HAVE_LMDB = True
|
||||||
try:
|
try:
|
||||||
import lmdb
|
import lmdb
|
||||||
|
@ -78,7 +89,7 @@ class LookupModule(LookupBase):
|
||||||
try:
|
try:
|
||||||
env = lmdb.open(db, readonly=True)
|
env = lmdb.open(db, readonly=True)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise AnsibleError("LMDB can't open database %s: %s" % (db, str(e)))
|
raise AnsibleError("LMDB can't open database %s: %s" % (db, to_native(e)))
|
||||||
|
|
||||||
ret = []
|
ret = []
|
||||||
if len(terms) == 0:
|
if len(terms) == 0:
|
||||||
|
@ -86,7 +97,7 @@ class LookupModule(LookupBase):
|
||||||
cursor = txn.cursor()
|
cursor = txn.cursor()
|
||||||
cursor.first()
|
cursor.first()
|
||||||
for key, value in cursor:
|
for key, value in cursor:
|
||||||
ret.append((key, value))
|
ret.append((to_text(key), to_native(value)))
|
||||||
|
|
||||||
else:
|
else:
|
||||||
for term in terms:
|
for term in terms:
|
||||||
|
@ -94,14 +105,14 @@ class LookupModule(LookupBase):
|
||||||
if term.endswith('*'):
|
if term.endswith('*'):
|
||||||
cursor = txn.cursor()
|
cursor = txn.cursor()
|
||||||
prefix = term[:-1] # strip asterisk
|
prefix = term[:-1] # strip asterisk
|
||||||
# cursor.set_range(prefix)
|
cursor.set_range(to_text(term).encode())
|
||||||
cursor.set_range(term)
|
while cursor.key().startswith(to_text(prefix).encode()):
|
||||||
while cursor.key().startswith(prefix):
|
for key, value in cursor:
|
||||||
ret.append(cursor.item())
|
ret.append((to_text(key), to_native(value)))
|
||||||
cursor.next()
|
cursor.next()
|
||||||
else:
|
else:
|
||||||
value = txn.get(term)
|
value = txn.get(to_text(term).encode())
|
||||||
if value is not None:
|
if value is not None:
|
||||||
ret.append(value)
|
ret.append(to_native(value))
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
Loading…
Reference in a new issue