History of Puppet Language Features

The Puppet language has changed significantly over time, with many features being added and some features being removed. This page tracks a subset of those changes, showing how the language has evolved and when various features became available.

Puppet Language Features by Release

Feature 0.23.x 0.24.x 0.25.x 2.6.x 2.7.0 3.x 3.2.x 3.4.x
Dynamic variable scope (declaring classes/resources assigns parent scope) X X X X X (deprecated)      
Appending to attributes in class inheritance (+>) X X X X X X X X
Multi-line C-style comments   X (0.24.7) X X X X X X
Arrays of resource references allowed in relationships   X X X X X X X
Overrides in class inheritance   X X X X X X X
Appending to variables in child scopes (+=)   X X X X X X X
Class names starting with 0-9   X X X        
Regular expressions in node definitions     X X X X X X
Assigning expressions to variables     X X X X X X
Regular expressions in conditionals/expresions     X X X X X X
elsif in if statements       X X X X X
Chaining Resources       X X X X X
Hashes       X (partial until 2.6.7)** X X X X
Class Parameters       X X X X X
Run Stages       X X X X X
The “in” operator       X X X X X
$title, $name, and $module_name available in parameter lists       X (2.6.5) X X X X
Optional trailing comma in parameter lists         X (2.7.8) X X X
Hyphens/dashes allowed in variable names *         X (2.7.3 - 2.7.14)      
Automatic class parameter lookup via data bindings           X X X
“Unless” conditionals           X X X
Iteration over arrays and hashes             X (future) X (future)
The modulo (%) operator             X X
$trusted hash               X

* In Puppet 2.7.20+ and 3.0.2+, hyphens in variable names can be reenabled with the allow_variables_with_dashes setting. This should only be used as a temporary measure while renaming variables.

** Until Puppet 2.6.7, hashes could not be nested and hash members could not be used in selectors.

↑ Back to top