= Language-puppet
A library to work with Puppet manifests, test them and eventually replace everything ruby.
.Basic usage:
```
puppetresources -p /where/your/puppet/files/are -o node.name.com
```
.Easy build instructions:
```
cd language-puppet
cabal update
cabal sandbox init
cabal install -j -p
```
There are also http://lpuppet.banquise.net/download/[binary packages available] .
== Puppetresources
The `puppetresources` command is a command line utility that let you interactively compute catalogs on your local computer. It will then display them on screen, in a nice,
user-friendly colored fashion. It is much faster than its ruby counterpart, and has been designed for giving assistance to the Puppet catalog writer. Here is a list of command line
arguments :
`-p` or `--puppetdir`::
This is the only mandatory argument. It accepts a directory or file path as the argument. In the absence of `-o`, it will parse and display the puppet file given as a parameter.
With `-o` it must point to the base of the puppet directory (the directory that contains the `modules` and `manifests` directories).
`-o` or `--node`::
This let you specify the name of the node you wish to compute the catalog for.
+
If you use `allnodes` as the node name, it will compute the catalogs for all nodes that are specified in `site.pp` (this will not work for regexp-specified or the default nodes). This is useful
for writing automated tests, to check a change didn't break something.
+
If you use `deadcode` as the node name, it will also compute the catalogs for all nodes, but will display the list of puppet files that have not been used, and that might be
deprecated.
+
You might want to run the program with `+RTS -N` with those two modes.
`-t` or `--type`::
Filters the resources of the resulting catalog by type, but specifying a regular expression. Only the resources whose types match the submitted regexp will be displayed.
`-n` or `--name`::
Filters the resources of the resulting catalog by name, but specifying a regular expression. Only the resources whose names match the submitted regexp will be displayed.
`-c` or `--showcontent`::
If `-n` is the exact name of a file defined in the catalog, this will display its content. This is mainly useful for debugging templates.
`--loglevel` or `-v`::
Expects a log level. Possible values are : DEBUG, INFO, NOTICE, WARNING, ERROR, CRITICAL, ALERT, EMERGENCY.
`--pdburl`::
Expects the url of a live PuppetDB.
`--pdbfile`::
Expects a path to a *fake* PuppetDB, represented as a YAML file on disk. This option is pretty slow but can be invaluable to test exported resources tricks.
`--hiera`::
Expects the path to the `hiera.yaml` file.
`--ignoremodules`::
Expects a list of comma-separated modules. The interpreter will not try to evaluate the defined types and classes from this module. This is useful for using modules that use bad
practices forbidden by `puppetresources`.
`--nousergrouptest`::
By default, `puppetresources` will check that all users and groups referenced by `cron`, `file`, etc. types are defined somewhere in the catalog (except for a list of widely
available users, such as `root`). This flag disables these tests.
`--commitdb`::
When this flag is set, exported resources, catalogs and facts are saved in the PuppetDB. This is useful in conjunction with `--pdbfile`.
`--checkExported`::
When this flag is set, exported resources are saved in the PuppetDB. This is useful in conjunction with `--pdbfile`.
`-j` or `--JSON`::
Displays the catalog as a Puppet-compatible JSON file, that can then be used with `puppet apply`.
`--facts-override` and `--facts-defaults`::
Both options expect a path to a YAML file defining facts. The first option will override the facts that are collected locally, while the second will merely provide default values
for them.
== pdbQuery
The `pdbQuery` command is used to work with different implementations of PuppetDB (the official one with its HTTP API, the file-based backend and dummy ones). Its main use is to
export data from production PuppetDB to a file in order to debug some issue with `puppetresources`. Here is a list of command line arguments :
`-l` or `--location`::
The URL of the PuppetDB when working with a remote PuppetDB, a file path when working with the file-based test implementation.
`-t` or `--pdbtype`::
The type of PuppetDB to work with:
* dummy: a dummy PuppetDB.
* remote: a "real" PuppetDB, accessed by its HTTP API.
* test: a file-based backend emulating a PuppetDB.
.Commands
`dumpfacts`::
Dump all facts, and store them in `/tmp/allfacts.yaml`.
`nodes`::
Dump all nodes
`snapshot`::
Create a test DB from the current DB
`addfacts`::
Adds facts to the test DB for the given node name, if they are not already defined.
== Unsupported Puppet idioms or features
puppet functions::
* the `require` function is not supported (see https://github.com/bartavelle/language-puppet/issues/17[issue #17])
custom ruby functions::
Currently the only way to support your custom ruby functions is to rewrite them in Lua.