Skip to content

Instantly share code, notes, and snippets.

@mgwilliams
Last active December 18, 2015 11:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mgwilliams/1c92cdcb446dc48ba521 to your computer and use it in GitHub Desktop.
Save mgwilliams/1c92cdcb446dc48ba521 to your computer and use it in GitHub Desktop.
'''
Cobbler Pillar
==============
A pillar module to pull data from Cobbler via its API into the pillar dictionary.
Configuring the Cobbler ext_pillar
==================================
The same cobbler.* parameters are used for both the Cobbler tops and Cobbler pillar
modules.
.. code-block:: yaml
ext_pillar:
- cobbler:
- key: cobbler # Nest results within this key. By default, values are not nested.
- only: [parameters] # Add only these keys to pillar.
cobbler.url: https://example.com/cobbler_api #default is http://localhost/cobbler_api
cobbler.user: username # default is no username
cobbler.password: password # default is no password
Module Documentation
====================
'''
# Import python libs
import logging
import xmlrpclib
__opts__ = {'cobbler.url': 'http://localhost/cobbler_api',
'cobbler.user': None,
'cobbler.password': None
}
# Set up logging
log = logging.getLogger(__name__)
def ext_pillar(pillar, key=None, only=()):
'''
Read pillar data from Cobbler via its API.
'''
url = __opts__['cobbler.url']
user = __opts__['cobbler.user']
password = __opts__['cobbler.password']
minion_id = __opts__['id']
log.info("Querying cobbler at %r for information for %r", url, minion_id)
try:
server = xmlrpclib.Server(url, allow_none=True)
if user:
token = server.login(user, password)
else:
token = None
result = server.get_blended_data(token, minion_id)
except Exception:
log.exception(
'Could not connect to cobbler.'
)
return {}
if only:
result = dict((k, result[k]) for k in only if k in result)
if key:
result = {key: result}
return result
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment