1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00

lastpass lookup: use config manager, improve documentation (#5022)

* LastPass lookup: use config manager, improve documentation

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update changelogs/fragments/5022-lastpass-lookup-cleanup.yml

Co-authored-by: Felix Fontein <felix@fontein.de>

Co-authored-by: jonathan lung <lungj@heresjono.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
This commit is contained in:
Jonathan Lung 2022-08-01 03:36:07 -04:00 committed by GitHub
parent 88a3daf2ec
commit e8e6b9bbd7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 26 additions and 18 deletions

View file

@ -0,0 +1,2 @@
minor_changes:
- lastpass - use config manager for handling plugin options (https://github.com/ansible-collections/community.general/pull/5022).

View file

@ -11,21 +11,24 @@ DOCUMENTATION = '''
- Andrew Zenk (!UNKNOWN) <azenk@umn.edu> - Andrew Zenk (!UNKNOWN) <azenk@umn.edu>
requirements: requirements:
- lpass (command line utility) - lpass (command line utility)
- must have already logged into lastpass - must have already logged into LastPass
short_description: fetch data from lastpass short_description: fetch data from LastPass
description: description:
- use the lpass command line utility to fetch specific fields from lastpass - Use the lpass command line utility to fetch specific fields from LastPass.
options: options:
_terms: _terms:
description: key from which you want to retrieve the field description: Key from which you want to retrieve the field.
required: True required: true
type: list
elements: str
field: field:
description: field to return from lastpass description: Field to return from LastPass.
default: 'password' default: 'password'
type: str
''' '''
EXAMPLES = """ EXAMPLES = """
- name: get 'custom_field' from lastpass entry 'entry-name' - name: get 'custom_field' from LastPass entry 'entry-name'
ansible.builtin.debug: ansible.builtin.debug:
msg: "{{ lookup('community.general.lastpass', 'entry-name', field='custom_field') }}" msg: "{{ lookup('community.general.lastpass', 'entry-name', field='custom_field') }}"
""" """
@ -88,12 +91,14 @@ class LPass(object):
class LookupModule(LookupBase): class LookupModule(LookupBase):
def run(self, terms, variables=None, **kwargs): def run(self, terms, variables=None, **kwargs):
self.set_options(var_options=variables, direct=kwargs)
field = self.get_option('field')
lp = LPass() lp = LPass()
if not lp.logged_in: if not lp.logged_in:
raise AnsibleError("Not logged into lastpass: please run 'lpass login' first") raise AnsibleError("Not logged into LastPass: please run 'lpass login' first")
field = kwargs.get('field', 'password')
values = [] values = []
for term in terms: for term in terms:
values.append(lp.get_field(term, field)) values.append(lp.get_field(term, field))

View file

@ -26,6 +26,7 @@ from ansible_collections.community.general.tests.unit.compat.mock import patch
from ansible.errors import AnsibleError from ansible.errors import AnsibleError
from ansible.module_utils import six from ansible.module_utils import six
from ansible.plugins.loader import lookup_loader
from ansible_collections.community.general.plugins.lookup.lastpass import LookupModule, LPass, LPassException from ansible_collections.community.general.plugins.lookup.lastpass import LookupModule, LPass, LPassException
@ -126,6 +127,9 @@ class LoggedOutMockLPass(MockLPass):
class TestLPass(unittest.TestCase): class TestLPass(unittest.TestCase):
def setUp(self):
self.lookup = lookup_loader.get('community.general.lastpass')
def test_lastpass_cli_path(self): def test_lastpass_cli_path(self):
lp = MockLPass(path='/dev/null') lp = MockLPass(path='/dev/null')
self.assertEqual('/dev/null', lp.cli_path) self.assertEqual('/dev/null', lp.cli_path)
@ -158,30 +162,27 @@ class TestLPass(unittest.TestCase):
class TestLastpassPlugin(unittest.TestCase): class TestLastpassPlugin(unittest.TestCase):
def setUp(self):
self.lookup = lookup_loader.get('community.general.lastpass')
@patch('ansible_collections.community.general.plugins.lookup.lastpass.LPass', new=MockLPass) @patch('ansible_collections.community.general.plugins.lookup.lastpass.LPass', new=MockLPass)
def test_lastpass_plugin_normal(self): def test_lastpass_plugin_normal(self):
lookup_plugin = LookupModule()
for entry in MOCK_ENTRIES: for entry in MOCK_ENTRIES:
entry_id = entry.get('id') entry_id = entry.get('id')
for k, v in six.iteritems(entry): for k, v in six.iteritems(entry):
self.assertEqual(v.strip(), self.assertEqual(v.strip(),
lookup_plugin.run([entry_id], field=k)[0]) self.lookup.run([entry_id], field=k)[0])
@patch('ansible_collections.community.general.plugins.lookup.lastpass.LPass', LoggedOutMockLPass) @patch('ansible_collections.community.general.plugins.lookup.lastpass.LPass', LoggedOutMockLPass)
def test_lastpass_plugin_logged_out(self): def test_lastpass_plugin_logged_out(self):
lookup_plugin = LookupModule()
entry = MOCK_ENTRIES[0] entry = MOCK_ENTRIES[0]
entry_id = entry.get('id') entry_id = entry.get('id')
with self.assertRaises(AnsibleError): with self.assertRaises(AnsibleError):
lookup_plugin.run([entry_id], field='password') self.lookup.run([entry_id], field='password')
@patch('ansible_collections.community.general.plugins.lookup.lastpass.LPass', DisconnectedMockLPass) @patch('ansible_collections.community.general.plugins.lookup.lastpass.LPass', DisconnectedMockLPass)
def test_lastpass_plugin_disconnected(self): def test_lastpass_plugin_disconnected(self):
lookup_plugin = LookupModule()
entry = MOCK_ENTRIES[0] entry = MOCK_ENTRIES[0]
entry_id = entry.get('id') entry_id = entry.get('id')
with self.assertRaises(AnsibleError): with self.assertRaises(AnsibleError):
lookup_plugin.run([entry_id], field='password') self.lookup.run([entry_id], field='password')