[augeas-devel] Improving Augeas' idempotence in Puppet

Raphaël Pinson raphael.pinson at camptocamp.com
Fri Apr 6 08:26:58 UTC 2012


Hello,


As of today, the way the Augeas provider in Puppet manages idempotence
can be somehow problematic. The `onlyif` statements can only be
evaluated on the client, so all Augeas resources are generally run on
the client, and whether to run them cannot be easily determined in the
catalog, unless it relies on other resources as dependencies or on
custom facts (possibly using the Augeas ruby library).

Here is a proposition to improve this, by making the Augeas tree
available on the Puppet server during catalog compilation.

A new aug_to_xml() API call has been added in Augeas 0.10.0 allowing
to export the whole (or part of the) Augeas tree as an XML document.

The idea is the following:

  * Before compiling the catalog, make a request to retrieve the
Augeas tree as XML (using facter or another system);
  * On the server, reinject the XML in a local Augeas instance (using
a yet-to-code aug_from_xml() call);
  * Evaluate the onlyif statements (or a new kind of statement) using
this local copy of the client's Augeas tree;
  * Calculate the dependencies properly (in fact, the local Augeas
tree could then be used pretty much as a fact provider for any kind of
resource);


How could this be best implemented in Puppet? Are there any drawbacks
to doing this?


Raphaël




More information about the augeas-devel mailing list