Puppet is a configuration management tool that follows a ‘control node and managed nodes’ principle. The desired state of a system is described in a declarative language. With this, administrators define the desired final state – not how to reach it (idempotency). The definitions for the managed systems are in so-called ‘manifests’ on the Puppet control node, for example your orcharhino or orcharhino proxy.
The agent running on the managed nodes regularly asks the control node for the desired status and corrects any deviations. Configuration drifts, for example if users made local changes and the system is therefore no longer in the desired state, are automatically corrected the next time the agent runs. Possible commands range from creating and modifying individual files, managing user accounts and software packages, to even more complex tasks.
Manifests and dynamic file templates are written in Ruby or a Ruby-oriented syntax and follow a strict class concept. Parameters for the manifests are either stored in a database on the Puppet control node or are dynamically queried by an external node classifier such as a Data Center Inventory Management (DCIM) or a Configuration Management Database (CMDB).