puppetdb
========

Authentication
--------------

We need a client certificate (including the key) accepted by the Puppet server
for authentication. On Puppet-enabled nodes the node's certificate works, ie

- Certificate: ``/etc/puppetlabs/puppet/ssl/certs/$(hostname -f).pem``
- Key: ``/etc/puppetlabs/puppet/ssl/private_keys/$(hostname -f).pem``

These can be supplied to ``curl(1)`` using the ``--key``, ``--cert``, and
``--cacert`` options::

    curl --cacert /etc/puppetlabs/puppet/ssl/certs/ca.pem \
         --key /etc/puppetlabs/puppet/ssl/private_keys/$(hostname -f).pem \
         --cert /etc/puppetlabs/puppet/ssl/certs/$(hostname -f).pem \
         https://puppet01.psi.ch:8080/pdb/query/v4/nodes


Queries
-------

There are several API endpoints, eg. ``/pdb/query/v4`` (note that there is no
``/`` at the end), or ``/pdb/query/v4/nodes``.


Examples
--------

First, let's define a function to simplify the queries::

    function pdb {
      local pql=$1
    
      curl --cacert /etc/puppetlabs/puppet/ssl/certs/ca.pem \
           --key /etc/puppetlabs/puppet/ssl/private_keys/$(hostname -f).pem \
           --cert /etc/puppetlabs/puppet/ssl/certs/$(hostname -f).pem \
           -H content-type:application/json --data "{ \"query\": \"$pql\" }" \
           https://puppet01.psi.ch:8080/pdb/query/v4 | json_reformat
    }


List all nodes::

    pdb "nodes[certname] { order by certname }"


List environments and times of the last Puppet run::

    pdb "reports[certname,environment,start_time,end_time] { order by certname }"
