mirror of
				https://github.com/ansible-collections/community.general.git
				synced 2024-09-14 20:13:21 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			91 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# -*- coding: utf-8 -*-
 | 
						|
# Copyright (c) 2017, Juan Manuel Parrilla <jparrill@redhat.com>
 | 
						|
# Copyright (c) 2012-17 Ansible Project
 | 
						|
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
 | 
						|
# SPDX-License-Identifier: GPL-3.0-or-later
 | 
						|
from __future__ import (absolute_import, division, print_function)
 | 
						|
__metaclass__ = type
 | 
						|
 | 
						|
DOCUMENTATION = '''
 | 
						|
    author:
 | 
						|
      - Juan Manuel Parrilla (@jparrill)
 | 
						|
    name: hiera
 | 
						|
    short_description: get info from hiera data
 | 
						|
    requirements:
 | 
						|
      - hiera (command line utility)
 | 
						|
    description:
 | 
						|
        - Retrieves data from an Puppetmaster node using Hiera as ENC
 | 
						|
    options:
 | 
						|
      _hiera_key:
 | 
						|
            description:
 | 
						|
                - The list of keys to lookup on the Puppetmaster
 | 
						|
            type: list
 | 
						|
            elements: string
 | 
						|
            required: true
 | 
						|
      _bin_file:
 | 
						|
            description:
 | 
						|
                - Binary file to execute Hiera
 | 
						|
            default: '/usr/bin/hiera'
 | 
						|
            env:
 | 
						|
                - name: ANSIBLE_HIERA_BIN
 | 
						|
      _hierarchy_file:
 | 
						|
            description:
 | 
						|
                - File that describes the hierarchy of Hiera
 | 
						|
            default: '/etc/hiera.yaml'
 | 
						|
            env:
 | 
						|
                - name: ANSIBLE_HIERA_CFG
 | 
						|
# FIXME: incomplete options .. _terms? environment/fqdn?
 | 
						|
'''
 | 
						|
 | 
						|
EXAMPLES = """
 | 
						|
# All this examples depends on hiera.yml that describes the hierarchy
 | 
						|
 | 
						|
- name: "a value from Hiera 'DB'"
 | 
						|
  ansible.builtin.debug:
 | 
						|
    msg: "{{ lookup('community.general.hiera', 'foo') }}"
 | 
						|
 | 
						|
- name: "a value from a Hiera 'DB' on other environment"
 | 
						|
  ansible.builtin.debug:
 | 
						|
    msg: "{{ lookup('community.general.hiera', 'foo environment=production') }}"
 | 
						|
 | 
						|
- name: "a value from a Hiera 'DB' for a concrete node"
 | 
						|
  ansible.builtin.debug:
 | 
						|
    msg: "{{ lookup('community.general.hiera', 'foo fqdn=puppet01.localdomain') }}"
 | 
						|
"""
 | 
						|
 | 
						|
RETURN = """
 | 
						|
    _raw:
 | 
						|
        description:
 | 
						|
            - a value associated with input key
 | 
						|
        type: list
 | 
						|
        elements: str
 | 
						|
"""
 | 
						|
 | 
						|
import os
 | 
						|
 | 
						|
from ansible.plugins.lookup import LookupBase
 | 
						|
from ansible.utils.cmd_functions import run_cmd
 | 
						|
from ansible.module_utils.common.text.converters import to_text
 | 
						|
 | 
						|
ANSIBLE_HIERA_CFG = os.getenv('ANSIBLE_HIERA_CFG', '/etc/hiera.yaml')
 | 
						|
ANSIBLE_HIERA_BIN = os.getenv('ANSIBLE_HIERA_BIN', '/usr/bin/hiera')
 | 
						|
 | 
						|
 | 
						|
class Hiera(object):
 | 
						|
    def get(self, hiera_key):
 | 
						|
        pargs = [ANSIBLE_HIERA_BIN]
 | 
						|
        pargs.extend(['-c', ANSIBLE_HIERA_CFG])
 | 
						|
 | 
						|
        pargs.extend(hiera_key)
 | 
						|
 | 
						|
        rc, output, err = run_cmd("{0} -c {1} {2}".format(
 | 
						|
            ANSIBLE_HIERA_BIN, ANSIBLE_HIERA_CFG, hiera_key[0]))
 | 
						|
 | 
						|
        return to_text(output.strip())
 | 
						|
 | 
						|
 | 
						|
class LookupModule(LookupBase):
 | 
						|
    def run(self, terms, variables=''):
 | 
						|
        hiera = Hiera()
 | 
						|
        ret = [hiera.get(terms)]
 | 
						|
        return ret
 |