= 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.