Introduction
Puppet is an "old school" configuration management tool. It helps you enforce configurations with great ease although it is more complex than Ansible to use. Puppet's declarative language can be compared to a programming language and is difficult to master. However, once you understand how it works, it's fairly easy to use.
Puppet is very good at maintaining a strict set of configurations, but if you aim at verifying the configurations before applying them, you'll find that Puppet is not the sharpest tool in the shed. Puppet does have the audit
metaparameter that you can use in your resources to track changes, but it doesn't let you display where it differs from your manifest. In fact it doesn't allow you to add the audit
metaparameter to your "active" module or manifests. It sits in a separate manifest that audits the requested resources.
The version of Puppet used in these recipes is v3.8 and covers the community edition.