mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Improve performance of the bitwarden lookup plugin (#7468)
* Improve performance of the bitwarden lookup plugin When looking for items using an item id, we can access the item directly with bw get item instead of searching through all items. This doubles the lookup speed. * Update changelogs/fragments/bitwarden-lookup-performance.yaml Co-authored-by: Felix Fontein <felix@fontein.de> * fix indentation * Ensure backwards compatible behavior in case of errors when doing bitwarden lookup by id * chore: Link to correct PR in changelog fragment * Use identity check when comparing with None --------- Co-authored-by: Richard Klose <richard.klose@gec.io> Co-authored-by: Richard Klose <richard@klose.dev> Co-authored-by: Felix Fontein <felix@fontein.de>
This commit is contained in:
parent
c2f08c57e0
commit
65f58afbd9
2 changed files with 13 additions and 2 deletions
2
changelogs/fragments/bitwarden-lookup-performance.yaml
Normal file
2
changelogs/fragments/bitwarden-lookup-performance.yaml
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
minor_changes:
|
||||||
|
- "bitwarden lookup plugin - when looking for items using an item ID, the item is now accessed directly with ``bw get item`` instead of searching through all items. This doubles the lookup speed (https://github.com/ansible-collections/community.general/pull/7468)."
|
|
@ -104,6 +104,8 @@ class Bitwarden(object):
|
||||||
out, err = p.communicate(to_bytes(stdin))
|
out, err = p.communicate(to_bytes(stdin))
|
||||||
rc = p.wait()
|
rc = p.wait()
|
||||||
if rc != expected_rc:
|
if rc != expected_rc:
|
||||||
|
if len(args) > 2 and args[0] == 'get' and args[1] == 'item' and b'Not found.' in err:
|
||||||
|
return 'null', ''
|
||||||
raise BitwardenException(err)
|
raise BitwardenException(err)
|
||||||
return to_text(out, errors='surrogate_or_strict'), to_text(err, errors='surrogate_or_strict')
|
return to_text(out, errors='surrogate_or_strict'), to_text(err, errors='surrogate_or_strict')
|
||||||
|
|
||||||
|
@ -112,6 +114,9 @@ class Bitwarden(object):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Prepare set of params for Bitwarden CLI
|
# Prepare set of params for Bitwarden CLI
|
||||||
|
if search_field == 'id':
|
||||||
|
params = ['get', 'item', search_value]
|
||||||
|
else:
|
||||||
params = ['list', 'items', '--search', search_value]
|
params = ['list', 'items', '--search', search_value]
|
||||||
|
|
||||||
if collection_id:
|
if collection_id:
|
||||||
|
@ -121,7 +126,11 @@ class Bitwarden(object):
|
||||||
|
|
||||||
# This includes things that matched in different fields.
|
# This includes things that matched in different fields.
|
||||||
initial_matches = AnsibleJSONDecoder().raw_decode(out)[0]
|
initial_matches = AnsibleJSONDecoder().raw_decode(out)[0]
|
||||||
|
if search_field == 'id':
|
||||||
|
if initial_matches is None:
|
||||||
|
initial_matches = []
|
||||||
|
else:
|
||||||
|
initial_matches = [initial_matches]
|
||||||
# Filter to only include results from the right field.
|
# Filter to only include results from the right field.
|
||||||
return [item for item in initial_matches if item[search_field] == search_value]
|
return [item for item in initial_matches if item[search_field] == search_value]
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue