Git Product home page Git Product logo

pypuppetdb's Introduction

pypuppetdb

https://api.travis-ci.org/nedap/pypuppetdb.png https://coveralls.io/repos/nedap/pypuppetdb/badge.png https://pypip.in/d/pypuppetdb/badge.png https://pypip.in/v/pypuppetdb/badge.png

pypuppetdtb is a library to work with PuppetDB's REST API. It is implemented using the requests library.

This library is a thin wrapper around the REST API providing some convinience functions and objects to request and hold data from PuppetDB.

To use this library you will need:
  • Python 2.6 or 2.7
  • Python 3.3

Installation

You can install this package from source or from PyPi.

$ pip install pypuppetdb
$ git clone https://github.com/nedap/pypuppetdb
$ python setup.py install

If you wish to hack on it clone the repository but after that run:

$ pip install -r requirements.txt

This will install all the runtime requirements of pypuppetdb and the dependencies for the test suite and generation of documentation.

Packages

Native packages for your operating system will be provided in the near future.

OS Status  
Debian 6/Squeeze planned Requires Backports
Debian 7/Wheezy planned  
Ubuntu 13.04 planned  
Ubuntu 13.10 planned  
CentOS/RHEL 5 n/a Python 2.4
CentOS/RHEL 6 planned  
ArchLinux available Maintained by Niels Abspoel
OpenBSD available Maintained by Jasper Lievisse Adriaanse

Usage

Once you have pypuppetdb installed you can configure it to connect to PuppetDB and take it from there.

Connecting

The first thing you need to do is to connect with PuppetDB:

>>> from pypuppetdb import connect
>>> db = connect()

Nodes

The following will return a generator object yielding Node objects for every returned node from PuppetDB.

>>> nodes = db.nodes()
>>> for node in nodes:
>>>   print(node)
host1
host2
...

To query a single node the singular node() can be used:

>>> node = db.node('hostname')
>>> print(node)
hostname

Node scope

The Node objects are a bit more special in that they can query for facts and resources themselves. Using those methods from a node object will automatically add a query to the request scoping the request to the node.

>>> node = db.node('hostname')
>>> print(node.fact('osfamily'))
osfamily/hostname

Facts

>>> facts = db.facts('osfamily')
>>> for fact in facts:
>>>   print(fact)
osfamily/host1
osfamily/host2

That queries PuppetDB for the 'osfamily' fact and will yield Fact objects, one per node this fact is known for.

Resources

>>> resources = db.resources('file')

Will return a generator object containing all file resources you're managing across your infrastructure. This is probably a bad idea if you have a big number of nodes as the response will be huge.

Catalogs

>>> catalog = db.catalog('hostname')
>>> for res in catalog.get_resources():
>>>     print(res)

Will return a Catalog object with the latest Catalog of the definded host. This catalog contains the defined Resources and Edges.

>>> catalog = db.catalog('hostname')
>>> resource = catalog.get_resource('Service','ntp')
>>> for rel in resource.relationships:
>>>     print(rel)
Class[Ntp] - contains - Service[ntp]
File[/etc/ntp.conf] - notifies - Service[ntp]
File[/etc/ntp.conf] - required-by - Service[ntp]

Will return all Relationships of a given Resource defined by type and title. This will list all linked other Resources and the type of relationship.

Getting Help

This project is still very new so it's not inconceivable you'll run into issues.

For bug reports you can file an issue. If you need help with something feel free to hit up @daenney by e-mail or find him on IRC. He can usually be found on IRCnet and Freenode and idles in #puppet.

There's now also the #puppetboard channel on Freenode where we hang out and answer questions related to pypuppetdb and Puppetboard.

Documentation

API documentation is automatically generated from the docstrings using Sphinx's autodoc feature.

Documentation will automatically be rebuilt on every push thanks to the Read The Docs webhook. You can find it here.

You can build the documentation manually by doing:

$ cd docs
$ make html

Doing so will only work if you have Sphinx installed, which you can acheive through:

$ pip install -r requirements.txt

Contributing

We welcome contributions to this library. However, there are a few ground rules contributors should be aware of.

License

This project is licensed under the Apache v2.0 License. As such, your contributions, once accepted, are automatically covered by this license.

Copyright (c) 2013-2014 Daniele Sluijters

Commit messages

Write decent commit messages. Don't use swear words and refrain from uninformative commit messages as 'fixed typo'.

The preferred format of a commit message:

docs/quickstart: Fixed a typo in the Nodes section.

If needed, elaborate further on this commit. Feel free to write a
complete blog post here if that helps us understand what this is
all about.

Fixes #4 and resolves #2.

If you'd like a more elaborate guide on how to write and format your commit messages have a look at this post by Tim Pope.

Tests

Commits are expected to contain tests or updates to tests if they add to or modify the current behaviour.

The test suite is powered by pytest and requires pytest, pytest-pep8, httpretty and pytest-httpretty which will be installed for you if you run:

$ pip install -r requirements.txt

To run the unit tests (the ones that don't require a live PuppetDB):

$ py.test -v -m unit

If the tests pass, you're golden. If not we'll have to figure out why and fix that. Feel free to ask for help on this.

pypuppetdb's People

Contributors

andrewspiers avatar daenney avatar daniellawrence avatar fgimian avatar frederikhappel avatar hggh avatar href avatar juliushaertl avatar klavsklavsen avatar t-8ch avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.