Puppet: System Administration Automated

Support

This is a fleshed-out description of #570.

Puppet clients need some way to know whether they're in sync with the version that the server is running. The current mechanism for that is that the client keeps track of the last time it asked for a fresh compile from the server and periodically compares it to the last time the server reparsed the configuration. This runs into problems if the server and client clocks are out of sync, but the main problem is that this makes this concept of freshness ad-hoc and not reusable.

Instead, the server should have some formal concept of 'version', whether it be derived from the version number of the configuration repository or is just the compile time, it should be considered a fundamental trait of all nodes.

To really solve this problem, the server's version should be easily derivable from the version control repository, or really, any other external source.

This should maybe be part of an overall move to create an abstract interface between the server and its file back-end, with initial support for Subversion but pluggable support for other back-ends.