config lookup plugin (#32392)

* config lookup plugin

* added info about ansible-config list

* fixed typoes

* now with option and error handling

* fixed import, better docs
pull/32471/head
Brian Coca 7 years ago committed by GitHub
parent 51c5b51ea3
commit 0f7fcd2b40
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -0,0 +1,85 @@
# (c) 2017 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: config
author: Ansible Core
version_added: "2.5"
short_description: Lookup current Ansilbe configuration values
description:
- Retrieves the value of an Ansible configuration setting.
- You can use ``ansible-config list`` to see all available settings.
options:
_terms:
description: The key(s) to look up
required: True
on_missing:
description:
- action to take if term is missing from config
- Error will raise a fatal error
- Skip will just ignore the term
- Warn will skip over it but issue a warning
default: error
type: string
choices: ['error', 'skip', 'warn']
"""
EXAMPLES = """
- name: Show configured default become user
debug: msg="{{ lookup('config', 'DEFAULT_BECOME_USER')}}"
- name: print out role paths
debug: msg="These are the configured role paths: {{lookup('config', 'DEFAULT_ROLES_PATH')}}"
- name: find retry files, skip if missing that key
find:
paths: "{{lookup('config', 'RETRY_FILES_SAVE_PATH')|default(playbook_dir, True)}}"
patterns: "*.retry"
- name: see the colors
debug: msg="{{item}}"
loop: "{{lookup('config', 'COLOR_OK', 'COLOR_CHANGED', 'COLOR_SKIP', wantlist=True)}}"
- name: skip if bad value in var
debug: msg="{{ lookup('config', config_in_var, on_missing='skip')}}"
var:
config_in_var: UNKNOWN
"""
RETURN = """
_raw:
description:
- value(s) of the key(s) in the config
"""
from ansible import constants as C
from ansible.errors import AnsibleError
from ansible.module_utils.six import string_types
from ansible.plugins.lookup import LookupBase
class LookupModule(LookupBase):
def run(self, terms, variables=None, **kwargs):
missing = kwargs.get('on_missing', 'error').lower()
if not isinstance(missing, string_types) or missing not in ['error', 'warn', 'skip']:
raise AnsibleError('"on_missing" must be a string and one of "error", "warn" or "skip", not %s' % missing)
ret = []
for term in terms:
if not isinstance(term, string_types):
raise AnsibleError('Invalid setting identifier, "%s" is not a string, its a %s' % (term, type(term)))
try:
result = getattr(C, term)
if callable(result):
raise AnsibleError('Invalid setting "%s" attempted' % term)
ret.append(result)
except AttributeError:
if missing == 'error':
raise AnsibleError('Unable to find setting %s' % term)
elif missing == 'warn':
self._display.warning('Skipping, did not find setting %s' % term)
return ret
Loading…
Cancel
Save