parent
4c4406b2df
commit
cedfe34619
7 changed files with 87 additions and 0 deletions
61
lib/ansible/plugins/lookup/unvault.py
Normal file
61
lib/ansible/plugins/lookup/unvault.py
Normal file
|
@ -0,0 +1,61 @@
|
|||
# (c) 2020 Ansible Project
|
||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
from __future__ import (absolute_import, division, print_function)
|
||||
__metaclass__ = type
|
||||
|
||||
DOCUMENTATION = """
|
||||
lookup: unvault
|
||||
author: ansible core team
|
||||
version_added: "2.10"
|
||||
short_description: read vaulted file(s) contents
|
||||
description:
|
||||
- This lookup returns the contents from vaulted (or not) file(s) on the Ansible controller's file system.
|
||||
options:
|
||||
_terms:
|
||||
description: path(s) of files to read
|
||||
required: True
|
||||
notes:
|
||||
- This lookup does not understand 'globing' nor shell environment variables.
|
||||
"""
|
||||
|
||||
EXAMPLES = """
|
||||
- debug: msg="the value of foo.txt is {{lookup('vault', '/etc/foo.txt')|to_string }}"
|
||||
"""
|
||||
|
||||
RETURN = """
|
||||
_raw:
|
||||
description:
|
||||
- content of file(s) as bytes
|
||||
"""
|
||||
|
||||
from ansible.errors import AnsibleParserError
|
||||
from ansible.plugins.lookup import LookupBase
|
||||
from ansible.module_utils._text import to_text
|
||||
from ansible.utils.display import Display
|
||||
|
||||
display = Display()
|
||||
|
||||
|
||||
class LookupModule(LookupBase):
|
||||
|
||||
def run(self, terms, variables=None, **kwargs):
|
||||
|
||||
self.set_options(direct=kwargs)
|
||||
|
||||
ret = []
|
||||
|
||||
for term in terms:
|
||||
display.debug("Unvault lookup term: %s" % term)
|
||||
|
||||
# Find the file in the expected search path
|
||||
lookupfile = self.find_file_in_search_path(variables, 'files', term)
|
||||
display.vvvv(u"Unvault lookup found %s" % lookupfile)
|
||||
if lookupfile:
|
||||
actual_file = self._loader.get_real_file(lookupfile, decrypt=True)
|
||||
with open(actual_file, 'rb') as f:
|
||||
b_contents = f.read()
|
||||
ret.append(b_contents)
|
||||
else:
|
||||
raise AnsibleParserError('Unable to find file matching "%s" ' % term)
|
||||
|
||||
return ret
|
3
test/integration/targets/lookup_unvault/aliases
Normal file
3
test/integration/targets/lookup_unvault/aliases
Normal file
|
@ -0,0 +1,3 @@
|
|||
shippable/posix/group2
|
||||
needs/root
|
||||
skip/aix
|
1
test/integration/targets/lookup_unvault/files/foot.txt
Normal file
1
test/integration/targets/lookup_unvault/files/foot.txt
Normal file
|
@ -0,0 +1 @@
|
|||
bar
|
|
@ -0,0 +1,6 @@
|
|||
$ANSIBLE_VAULT;1.1;AES256
|
||||
35363932323438383333343462373431376162373631636238353061616565323630656464393939
|
||||
3937313630326662336264636662313163343832643239630a646436313833633135353834343364
|
||||
63363039663765363365626531643533616232333533383239323234393934356639373136323635
|
||||
3632356163343031300a373766636130626237346630653537633764663063313439666135623032
|
||||
6139
|
6
test/integration/targets/lookup_unvault/runme.sh
Executable file
6
test/integration/targets/lookup_unvault/runme.sh
Executable file
|
@ -0,0 +1,6 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -eux
|
||||
|
||||
# run tests
|
||||
ansible-playbook unvault.yml --vault-password-file='secret' -v "$@"
|
1
test/integration/targets/lookup_unvault/secret
Normal file
1
test/integration/targets/lookup_unvault/secret
Normal file
|
@ -0,0 +1 @@
|
|||
ssssshhhhhh
|
9
test/integration/targets/lookup_unvault/unvault.yml
Normal file
9
test/integration/targets/lookup_unvault/unvault.yml
Normal file
|
@ -0,0 +1,9 @@
|
|||
- name: test vault lookup plugin
|
||||
hosts: localhost
|
||||
gather_facts: false
|
||||
tasks:
|
||||
- debug: msg={{lookup('unvault', 'foot.txt.vault')}}
|
||||
- name: verify vault lookup works with both vaulted and unvaulted
|
||||
assert:
|
||||
that:
|
||||
- lookup('unvault', 'foot.txt.vault') == lookup('unvault', 'foot.txt')
|
Loading…
Reference in a new issue