%PDF- %PDF-
Direktori : /lib/python2.7/site-packages/salt/pillar/ |
Current File : //lib/python2.7/site-packages/salt/pillar/foreman.py |
# -*- strcoding: utf-8 -*- ''' A module to pull data from Foreman via its API into the Pillar dictionary Configuring the Foreman ext_pillar ================================== Set the following Salt config to setup Foreman as external pillar source: .. code-block:: yaml ext_pillar: - foreman: key: foreman # Nest results within this key only: ['hostgroup_name', 'parameters'] # Add only these keys to pillar foreman.url: https://example.com/foreman_api foreman.user: username # default is admin foreman.password: password # default is changeme The following options are optional: .. code-block:: yaml foreman.api: apiversion # default is 2 (1 is not supported yet) foreman.verifyssl: False # default is True foreman.certfile: /etc/ssl/certs/mycert.pem # default is None foreman.keyfile: /etc/ssl/private/mykey.pem # default is None foreman.cafile: /etc/ssl/certs/mycert.ca.pem # default is None foreman.lookup_parameters: True # default is True An alternative would be to use the Foreman modules integrating Salt features in the Smart Proxy and the webinterface. Further information can be found on `GitHub <https://github.com/theforeman/foreman_salt>`_. Module Documentation ==================== ''' from __future__ import absolute_import, print_function, unicode_literals # Import python libs import logging from salt.ext import six try: import requests HAS_REQUESTS = True except ImportError: HAS_REQUESTS = False __opts__ = {'foreman.url': 'http://foreman/api', 'foreman.user': 'admin', 'foreman.password': 'changeme', 'foreman.api': 2, 'foreman.verifyssl': True, 'foreman.certfile': None, 'foreman.keyfile': None, 'foreman.cafile': None, 'foreman.lookup_parameters': True, } # Set up logging log = logging.getLogger(__name__) # Declare virtualname __virtualname__ = 'foreman' def __virtual__(): ''' Only return if all the modules are available ''' if not HAS_REQUESTS: return False return __virtualname__ def ext_pillar(minion_id, pillar, # pylint: disable=W0613 key=None, only=()): ''' Read pillar data from Foreman via its API. ''' url = __opts__['foreman.url'] user = __opts__['foreman.user'] password = __opts__['foreman.password'] api = __opts__['foreman.api'] verify = __opts__['foreman.verifyssl'] certfile = __opts__['foreman.certfile'] keyfile = __opts__['foreman.keyfile'] cafile = __opts__['foreman.cafile'] lookup_parameters = __opts__['foreman.lookup_parameters'] log.info("Querying Foreman at %r for information for %r", url, minion_id) try: # Foreman API version 1 is currently not supported if api != 2: log.error('Foreman API v2 is supported only, please specify' 'version 2 in your Salt master config') raise Exception headers = {'accept': 'version=' + six.text_type(api) + ',application/json'} if verify and cafile is not None: verify = cafile resp = requests.get( url + '/hosts/' + minion_id, auth=(user, password), headers=headers, verify=verify, cert=(certfile, keyfile) ) result = resp.json() log.debug('Raw response of the Foreman request is %r', result) if lookup_parameters: parameters = dict() for param in result['all_parameters']: parameters.update({param['name']: param['value']}) result['parameters'] = parameters if only: result = dict((k, result[k]) for k in only if k in result) except Exception: log.exception( 'Could not fetch host data via Foreman API:' ) return {} if key: result = {key: result} return result