This bugfix release addresses the undefined method 'optional_repeated_param'
error messages seen by users of puppet 3.7.
It also improves the user experience around function deprecations by emitting one warning per function(-name) instead of only one deprecation overall. This allows users to identify all deprecated functions used in one agent run, with less back-and-forth.
- Emit deprecations warnings for each function, instead of once per process. (MODULES-3961)
- Use a universally available API for the v4 deprecation stubs of
is_*
andvalidate_*
. (MODULES-3962) - Make
getvar()
compatible to ruby 1.8.7. (MODULES-3969) - Add v4 deprecation stubs for the
is_
counterparts of the deprecated functions to emit the deprecations warnings in all cases.
This version of stdlib deprecates a whole host of functions, and provides stepping stones to move to Puppet 4 type validations. Be sure to check out the new deprecation()
and validate_legacy()
functions to migrate off the deprecated v3-style data validations.
Many thanks to all community contributors: bob, Dmitry Ilyin, Dominic Cleal, Joris, Joseph Yaworski, Loic Antoine-Gombeaud, Maksym Melnychok, Michiel Brandenburg, Nate Potter, Romain Tartière, Stephen Benjamin, and Steve Moore, as well as anyone contributing in the code review process and by submitting issues.
Special thanks to Voxpupuli's Igor Galić for donating the puppet-tea types to kickstart this part of stdlib.
validate_absolute_path
,validate_array
,validate_bool
,validate_hash
,validate_integer
,validate_ip_address
,validate_ipv4_address
,validate_ipv6_address
,validate_numeric
,validate_re
,validate_slength
,validate_string
, and theiris_
counter parts are now deprecated on Puppet 4. See thevalidate_legacy()
description in the README for help on migrating away from those functions.- The
dig
function is provided by core puppet since 4.5.0 with slightly different calling convention. The stdlib version can still be accessed asdig44
for now.
-
Add Puppet 4 data types for Unix, and Windows paths, and URLs.
-
Add
deprecation
function to warn users of functionality that will be removed soon. -
Add
validate_legacy
function to help with migrating to Puppet 4 data types. -
Add
any2bool
function, a combination of ofstring2bool
andnum2bool
. -
Add
delete_regex
function to delete array elements matching a regular expression. -
Add
puppet_environmentpath
fact to expose theenvironmentpath
setting. -
Add
regexpescape
function to safely insert arbitrary strings into regular expressions. -
Add
shell_escape
,shell_join
, andshell_split
functions for safer working with shell scripts.. -
The
delete
function now also accepts regular expressions as search term. -
The
loadyaml
function now accepts a default value, which is returned when there is an error loading the file.
- Fix
file_line.match_for_absence
implementation and description to actually work. (MODULES-3590) - Fix
getparam
so that it can now also returnfalse
. (MODULES-3933) - Fix the fixture setup for testing and adjust
load_module_metadata
andloadjson
tests. - Fix
defined_with_params
to handleundef
correctly on all puppet versions. (PUP-6422, MODULES-3543) - Fix
file_line.path
validation to use puppet's built inabsolute_path?
matcher.
- README changes: improved descriptions of
deep_merge
,delete
,ensure_packages
,file_line.after
,range
, andvalidate_numeric
. - The
getvar
function now returns nil in all situations where the variable is not found. - Update the
dig44
function with betterundef
,nil
, andfalse
handling. - Better wording on
str2bool
argument validation error message.
- The
validate_legacy
function relies on internal APIs from Puppet 4.4.0 (PE 2016.1) onwards, and doesn't work on earlier versions. - Puppet 4.5.0 (PE 2016.2) has a number of improvements around data types - especially error handling - that make working with them much nicer.
###Summary
This release provides several new functions, bugfixes, modulesync changes, and some documentation updates.
####Features
- Adds
clamp
. This function keeps values within a specified range. - Adds
validate_x509_rsa_key_pair
. This function validates an x509 RSA certificate and key pair. - Adds
dig
. This function performs a deep lookup in nested hashes or arrays. - Extends the
base64
support to fitrfc2045
andrfc4648
. - Adds
is_ipv6_address
andis_ipv4_address
. These functions validate the specified ipv4 or ipv6 addresses. - Adds
enclose_ipv6
. This function encloses IPv6 addresses in square brackets. - Adds
ensure_resources
. This function takes a list of resources and creates them if they do not exist. - Extends
suffix
to support applying a suffix to keys in a hash. - Apply modulesync changes.
- Add validate_email_address function.
####Bugfixes
- Fixes
fqdn_rand_string
tests, since Puppet 4.4.0 and later have a higherfqdn_rand
ceiling. - (MODULES-3152) Adds a check to
package_provider
to prevent failures if Gem is not installed. - Fixes to README.md.
- Fixes catch StandardError rather than the gratuitous Exception
- Fixes file_line attribute validation.
- Fixes concat with Hash arguments.
###Summary
Provides a validate_absolute_paths and Debian 8 support. There is a fix to the is_package_provider fact and a test improvement.
####Features
- Adds new parser called is_absolute_path
- Supports Debian 8
####Bugfixes
- Allow package_provider fact to resolve on PE 3.x
####Improvements
- ensures that the test passes independently of changes to rubygems for ensure_resource
##2015-12-15 - Supported Release 4.10.0 ###Summary
Includes the addition of several new functions and considerable improvements to the existing functions, tests and documentation. Includes some bug fixes which includes compatibility, test and fact issues.
####Features
- Adds service_provider fact
- Adds is_a() function
- Adds package_provider fact
- Adds validate_ip_address function
- Adds seeded_rand function
####Bugfixes
- Fix backwards compatibility from an improvement to the parseyaml function
- Renaming of load_module_metadata test to include _spec.rb
- Fix root_home fact on AIX 5.x, now '-c' rather than '-C'
- Fixed Gemfile to work with ruby 1.8.7
####Improvements
- (MODULES-2462) Improvement of parseyaml function
- Improvement of str2bool function
- Improvement to readme
- Improvement of intersection function
- Improvement of validate_re function
- Improved speed on Facter resolution of service_provider
- empty function now handles numeric values
- Package_provider now prevents deprecation warning about the allow_virtual parameter
- load_module_metadata now succeeds on empty file
- Check added to ensure puppetversion value is not nil
- Improvement to bool2str to return a string of choice using boolean
- Improvement to naming convention in validate_ipv4_address function
###Summary
Small release for support of newer PE versions. This increments the version of PE in the metadata.json file.
##2015-09-08 - Supported Release 4.9.0 ###Summary
This release adds new features including the new functions dos2unix, unix2dos, try_get_value, convert_base as well as other features and improvements.
####Features
- (MODULES-2370) allow
match
parameter to influenceensure => absent
behavior - (MODULES-2410) Add new functions dos2unix and unix2dos
- (MODULE-2456) Modify union to accept more than two arrays
- Adds a convert_base function, which can convert numbers between bases
- Add a new function "try_get_value"
####Bugfixes
- n/a
####Improvements
- (MODULES-2478) Support root_home fact on AIX through "lsuser" command
- Acceptance test improvements
- Unit test improvements
- Readme improvements
This release adds a function for reading metadata.json from any module, and expands file_line's abilities.
- New parameter
replace
onfile_line
- New function
load_module_metadata()
to load metadata.json and return the content as a hash. - Added hash support to
size()
- Fix various docs typos
- Fix
file_line
resource on puppet < 3.3
##2015-06-22 - Supported Release 4.7.0 ###Summary
Adds Solaris 12 support along with improved Puppet 4 support. There are significant test improvements, and some minor fixes.
####Features
- Add support for Solaris 12
####Bugfixes
- Fix for AIO Puppet 4
- Fix time for ruby 1.8.7
- Specify rspec-puppet version
- range() fix for typeerror and missing functionality
- Fix pw_hash() on JRuby < 1.7.17
- fqdn_rand_string: fix argument error message
- catch and rescue from looking up non-existent facts
- Use puppet_install_helper, for Puppet 4
####Improvements
- Enforce support for Puppet 4 testing
- fqdn_rotate/fqdn_rand_string acceptance tests and implementation
- Simplify mac address regex
- validate_integer, validate_numeric: explicitely reject hashes in arrays
- Readme edits
- Remove all the pops stuff for rspec-puppet
- Sync via modulesync
- Add validate_slength optional 3rd arg
- Move tests directory to examples directory
##2015-04-14 - Supported Release 4.6.0 ###Summary
Adds functions and function argument abilities, and improves compatibility with the new puppet parser
####Features
- MODULES-444:
concat()
can now take more than two arrays basename()
added to have Ruby File.basename functionalitydelete()
can now take an array of items to removeprefix()
can now take a hashupcase()
can now take a hash or array of upcaseable thingsvalidate_absolute_path()
can now take an arrayvalidate_cmd()
can now use % in the command to embed the validation file argument in the string- MODULES-1473: deprecate
type()
function in favor oftype3x()
- MODULES-1473: Add
type_of()
to give better type information on future parser - Deprecate
private()
forassert_private()
due to future parser - Adds
ceiling()
to take the ceiling of a number - Adds
fqdn_rand_string()
to generate random string based on fqdn - Adds
pw_hash()
to generate password hashes - Adds
validate_integer()
- Adds
validate_numeric()
(likevalidate_integer()
but also accepts floats)
####Bugfixes
- Fix seeding of
fqdn_rotate()
ensure_resource()
is more verbose on debug mode- Stricter argument checking for
dirname()
- Fix
is_domain_name()
to better match RFC - Fix
uriescape()
when called with array - Fix
file_line
resource when using theafter
attribute withmatch
##2015-01-14 - Supported Release 4.5.1 ###Summary
This release changes the temporary facter_dot_d cache locations outside of the /tmp directory due to a possible security vunerability. CVE-2015-1029
####Bugfixes
- Facter_dot_d cache will now be stored in puppet libdir instead of tmp
##2014-12-15 - Supported Release 4.5.0 ###Summary
This release improves functionality of the member function and adds improved future parser support.
####Features
- MODULES-1329: Update member() to allow the variable to be an array.
- Sync .travis.yml, Gemfile, Rakefile, and CONTRIBUTING.md via modulesync
####Bugfixes
- Fix range() to work with numeric ranges with the future parser
- Accurately express SLES support in metadata.json (was missing 10SP4 and 12)
- Don't require
line
to match thematch
parameter
##2014-11-10 - Supported Release 4.4.0 ###Summary This release has an overhauled readme, new private manifest function, and fixes many future parser bugs.
####Features
- All new shiny README
- New
private()
function for making private manifests (yay!)
####Bugfixes
- Code reuse in
bool2num()
andzip()
- Fix many functions to handle
generate()
no longer returning a string on new puppets concat()
no longer modifies the first argument (whoops)- strict variable support for
getvar()
,member()
,values_at
, andhas_interface_with()
to_bytes()
handles PB and EB now- Fix
tempfile
ruby requirement forvalidate_augeas()
andvalidate_cmd()
- Fix
validate_cmd()
for windows - Correct
validate_string()
docs to reflect non-handling ofundef
- Fix
file_line
matching on older rubies
##2014-07-15 - Supported Release 4.3.2 ###Summary
This release merely updates metadata.json so the module can be uninstalled and upgraded via the puppet module command.
##2014-07-14 - Supported Release 4.3.1
This supported release updates the metadata.json to work around upgrade behavior of the PMT.
- Synchronize metadata.json with PMT-generated metadata to pass checksums
##2014-06-27 - Supported Release 4.3.0
This release is the first supported release of the stdlib 4 series. It remains backwards-compatible with the stdlib 3 series. It adds two new functions, one bugfix, and many testing updates.
- New
bool2str()
function - New
camelcase()
function
- Fix
has_interface_with()
when interfaces fact is nil
##2014-06-04 - Release 4.2.2
This release adds PE3.3 support in the metadata and fixes a few tests.
This release moves a stray symlink that can cause problems.
This release adds many new functions and fixes, and continues to be backwards compatible with stdlib 3.x
- New
base64()
function - New
deep_merge()
function - New
delete_undef_values()
function - New
delete_values()
function - New
difference()
function - New
intersection()
function - New
is_bool()
function - New
pick_default()
function - New
union()
function - New
validate_ipv4_address
function - New
validate_ipv6_address
function - Update
ensure_packages()
to take an option hash as a second parameter. - Update
range()
to take an optional third argument for range step - Update
validate_slength()
to take an optional third argument for minimum length - Update
file_line
resource to takeafter
andmultiple
attributes
- Correct
is_string
,is_domain_name
,is_array
,is_float
, andis_function_available
for parsing odd types such as bools and hashes. - Allow facts.d facts to contain
=
in the value - Fix
root_home
fact on darwin systems - Fix
concat()
to work with a second non-array argument - Fix
floor()
to work with integer strings - Fix
is_integer()
to return true if passed integer strings - Fix
is_numeric()
to return true if passed integer strings - Fix
merge()
to work with empty strings - Fix
pick()
to raise the correct error type - Fix
uriescape()
to use the default URI.escape list - Add/update unit & acceptance tests.
##2014-03-04 - Supported Release - 3.2.1 ###Summary This is a supported release
####Bugfixes
- Fixed
is_integer
/is_float
/is_numeric
for checking the value of arithmatic expressions.
####Known bugs
- No known bugs
2013-05-06 - Jeff McCune [email protected] - 4.1.0
- (#20582) Restore facter_dot_d to stdlib for PE users (3b887c8)
- (maint) Update Gemfile with GEM_FACTER_VERSION (f44d535)
2013-05-06 - Alex Cline [email protected] - 4.1.0
- Terser method of string to array conversion courtesy of ethooz. (d38bce0)
2013-05-06 - Alex Cline [email protected] 4.1.0
- Refactor ensure_resource expectations (b33cc24)
2013-05-06 - Alex Cline [email protected] 4.1.0
- Changed str-to-array conversion and removed abbreviation. (de253db)
2013-05-03 - Alex Cline [email protected] 4.1.0
- (#20548) Allow an array of resource titles to be passed into the ensure_resource function (e08734a)
2013-05-02 - Raphaël Pinson [email protected] - 4.1.0
- Add a dirname function (2ba9e47)
2013-04-29 - Mark Smith-Guerrero [email protected] - 4.1.0
- (maint) Fix a small typo in hash() description (928036a)
2013-04-12 - Jeff McCune [email protected] - 4.0.2
- Update user information in gemspec to make the intent of the Gem clear.
2013-04-11 - Jeff McCune [email protected] - 4.0.1
- Fix README function documentation (ab3e30c)
2013-04-11 - Jeff McCune [email protected] - 4.0.0
- stdlib 4.0 drops support with Puppet 2.7
- stdlib 4.0 preserves support with Puppet 3
2013-04-11 - Jeff McCune [email protected] - 4.0.0
- Add ability to use puppet from git via bundler (9c5805f)
2013-04-10 - Jeff McCune [email protected] - 4.0.0
- (maint) Make stdlib usable as a Ruby GEM (e81a45e)
2013-04-10 - Erik Dalén [email protected] - 4.0.0
- Add a count function (f28550e)
2013-03-31 - Amos Shapira [email protected] - 4.0.0
- (#19998) Implement any2array (7a2fb80)
2013-03-29 - Steve Huff [email protected] - 4.0.0
- (19864) num2bool match fix (8d217f0)
2013-03-20 - Erik Dalén [email protected] - 4.0.0
- Allow comparisons of Numeric and number as String (ff5dd5d)
2013-03-26 - Richard Soderberg [email protected] - 4.0.0
- add suffix function to accompany the prefix function (88a93ac)
2013-03-19 - Kristof Willaert [email protected] - 4.0.0
- Add floor function implementation and unit tests (0527341)
2012-04-03 - Eric Shamow [email protected] - 4.0.0
- (#13610) Add is_function_available to stdlib (961dcab)
2012-12-17 - Justin Lambert [email protected] - 4.0.0
- str2bool should return a boolean if called with a boolean (5d5a4d4)
2012-10-23 - Uwe Stuehler [email protected] - 4.0.0
- Fix number of arguments check in flatten() (e80207b)
2013-03-11 - Jeff McCune [email protected] - 4.0.0
- Add contributing document (96e19d0)
2013-03-04 - Raphaël Pinson [email protected] - 4.0.0
- Add missing documentation for validate_augeas and validate_cmd to README.markdown (a1510a1)
2013-02-14 - Joshua Hoblitt [email protected] - 4.0.0
- (#19272) Add has_element() function (95cf3fe)
2013-02-07 - Raphaël Pinson [email protected] - 4.0.0
- validate_cmd(): Use Puppet::Util::Execution.execute when available (69248df)
2012-12-06 - Raphaël Pinson [email protected] - 4.0.0
- Add validate_augeas function (3a97c23)
2012-12-06 - Raphaël Pinson [email protected] - 4.0.0
- Add validate_cmd function (6902cc5)
2013-01-14 - David Schmitt [email protected] - 4.0.0
- Add geppetto project definition (b3fc0a3)
2013-01-02 - Jaka Hudoklin [email protected] - 4.0.0
- Add getparam function to get defined resource parameters (20e0e07)
2013-01-05 - Jeff McCune [email protected] - 4.0.0
- (maint) Add Travis CI Support (d082046)
2012-12-04 - Jeff McCune [email protected] - 4.0.0
- Clarify that stdlib 3 supports Puppet 3 (3a6085f)
2012-11-30 - Erik Dalén [email protected] - 4.0.0
- maint: style guideline fixes (7742e5f)
2012-11-09 - James Fryman [email protected] - 4.0.0
- puppet-lint cleanup (88acc52)
2012-11-06 - Joe Julian [email protected] - 4.0.0
- Add function, uriescape, to URI.escape strings. Redmine #17459 (fd52b8d)
2012-09-18 - Chad Metcalf [email protected] - 3.2.0
- Add an ensure_packages function. (8a8c09e)
2012-11-23 - Erik Dalén [email protected] - 3.2.0
- (#17797) min() and max() functions (9954133)
2012-05-23 - Peter Meier [email protected] - 3.2.0
- (#14670) autorequire a file_line resource's path (dfcee63)
2012-11-19 - Joshua Harlan Lifton [email protected] - 3.2.0
- Add join_keys_to_values function (ee0f2b3)
2012-11-17 - Joshua Harlan Lifton [email protected] - 3.2.0
- Extend delete function for strings and hashes (7322e4d)
2012-08-03 - Gary Larizza [email protected] - 3.2.0
- Add the pick() function (ba6dd13)
2012-03-20 - Wil Cooley [email protected] - 3.2.0
- (#13974) Add predicate functions for interface facts (f819417)
2012-11-06 - Joe Julian [email protected] - 3.2.0
- Add function, uriescape, to URI.escape strings. Redmine #17459 (70f4a0e)
2012-10-25 - Jeff McCune [email protected] - 3.1.1
- (maint) Fix spec failures resulting from Facter API changes (97f836f)
2012-10-23 - Matthaus Owens [email protected] - 3.1.0
- Add PE facts to stdlib (cdf3b05)
2012-08-16 - Jeff McCune [email protected] - 3.0.1
- Fix accidental removal of facts_dot_d.rb in 3.0.0 release
2012-08-16 - Jeff McCune [email protected] - 3.0.0
- stdlib 3.0 drops support with Puppet 2.6
- stdlib 3.0 preserves support with Puppet 2.7
2012-08-07 - Dan Bode [email protected] - 3.0.0
- Add function ensure_resource and defined_with_params (ba789de)
2012-07-10 - Hailee Kenney [email protected] - 3.0.0
- (#2157) Remove facter_dot_d for compatibility with external facts (f92574f)
2012-04-10 - Chris Price [email protected] - 3.0.0
- (#13693) moving logic from local spec_helper to puppetlabs_spec_helper (85f96df)
2012-10-25 - Jeff McCune [email protected] - 2.5.1
- (maint) Fix spec failures resulting from Facter API changes (97f836f)
2012-10-23 - Matthaus Owens [email protected] - 2.5.0
- Add PE facts to stdlib (cdf3b05)
2012-08-15 - Dan Bode [email protected] - 2.5.0
- Explicitly load functions used by ensure_resource (9fc3063)
2012-08-13 - Dan Bode [email protected] - 2.5.0
- Add better docs about duplicate resource failures (97d327a)
2012-08-13 - Dan Bode [email protected] - 2.5.0
- Handle undef for parameter argument (4f8b133)
2012-08-07 - Dan Bode [email protected] - 2.5.0
- Add function ensure_resource and defined_with_params (a0cb8cd)
2012-08-20 - Jeff McCune [email protected] - 2.5.0
- Disable tests that fail on 2.6.x due to #15912 (c81496e)
2012-08-20 - Jeff McCune [email protected] - 2.5.0
- (Maint) Fix mis-use of rvalue functions as statements (4492913)
2012-08-20 - Jeff McCune [email protected] - 2.5.0
- Add .rspec file to repo root (88789e8)
2012-06-07 - Chris Price [email protected] - 2.4.0
- Add support for a 'match' parameter to file_line (a06c0d8)
2012-08-07 - Erik Dalén [email protected] - 2.4.0
- (#15872) Add to_bytes function (247b69c)
2012-07-19 - Jeff McCune [email protected] - 2.4.0
- (Maint) use PuppetlabsSpec::PuppetInternals.scope (master) (deafe88)
2012-07-10 - Hailee Kenney [email protected] - 2.4.0
- (#2157) Make facts_dot_d compatible with external facts (5fb0ddc)
2012-03-16 - Steve Traylen [email protected] - 2.4.0
- (#13205) Rotate array/string randomley based on fqdn, fqdn_rotate() (fef247b)
2012-05-22 - Peter Meier [email protected] - 2.3.3
- fix regression in #11017 properly (f0a62c7)
2012-05-10 - Jeff McCune [email protected] - 2.3.3
- Fix spec tests using the new spec_helper (7d34333)
2012-05-10 - Puppet Labs [email protected] - 2.3.2
- Make file_line default to ensure => present (1373e70)
- Memoize file_line spec instance variables (20aacc5)
- Fix spec tests using the new spec_helper (1ebfa5d)
- (#13595) initialize_everything_for_tests couples modules Puppet ver (3222f35)
- (#13439) Fix MRI 1.9 issue with spec_helper (15c5fd1)
- (#13439) Fix test failures with Puppet 2.6.x (665610b)
- (#13439) refactor spec helper for compatibility with both puppet 2.7 and master (82194ca)
- (#13494) Specify the behavior of zero padded strings (61891bb)
2012-03-29 Puppet Labs [email protected] - 2.1.3
- (#11607) Add Rakefile to enable spec testing
- (#12377) Avoid infinite loop when retrying require json
2012-03-13 Puppet Labs [email protected] - 2.3.1
- (#13091) Fix LoadError bug with puppet apply and puppet_vardir fact
2012-03-12 Puppet Labs [email protected] - 2.3.0
- Add a large number of new Puppet functions
- Backwards compatibility preserved with 2.2.x
2011-12-30 Puppet Labs [email protected] - 2.2.1
- Documentation only release for the Forge
2011-12-30 Puppet Labs [email protected] - 2.1.2
- Documentation only release for PE 2.0.x
2011-11-08 Puppet Labs [email protected] - 2.2.0
- #10285 - Refactor json to use pson instead.
- Maint - Add watchr autotest script
- Maint - Make rspec tests work with Puppet 2.6.4
- #9859 - Add root_home fact and tests
2011-08-18 Puppet Labs [email protected] - 2.1.1
- Change facts.d paths to match Facter 2.0 paths.
- /etc/facter/facts.d
- /etc/puppetlabs/facter/facts.d
2011-08-17 Puppet Labs [email protected] - 2.1.0
- Add R.I. Pienaar's facts.d custom facter fact
- facts defined in /etc/facts.d and /etc/puppetlabs/facts.d are automatically loaded now.
2011-08-04 Puppet Labs [email protected] - 2.0.0
- Rename whole_line to file_line
- This is an API change and as such motivating a 2.0.0 release according to semver.org.
2011-08-04 Puppet Labs [email protected] - 1.1.0
- Rename append_line to whole_line
- This is an API change and as such motivating a 1.1.0 release.
2011-08-04 Puppet Labs [email protected] - 1.0.0
- Initial stable release
- Add validate_array and validate_string functions
- Make merge() function work with Ruby 1.8.5
- Add hash merging function
- Add has_key function
- Add loadyaml() function
- Add append_line native
2011-06-21 Jeff McCune [email protected] - 0.1.7
- Add validate_hash() and getvar() functions
2011-06-15 Jeff McCune [email protected] - 0.1.6
- Add anchor resource type to provide containment for composite classes
2011-06-03 Jeff McCune [email protected] - 0.1.5
- Add validate_bool() function to stdlib
0.1.4 2011-05-26 Jeff McCune [email protected]
- Move most stages after main
0.1.3 2011-05-25 Jeff McCune [email protected]
- Add validate_re() function
0.1.2 2011-05-24 Jeff McCune [email protected]
- Update to add annotated tag
0.1.1 2011-05-24 Jeff McCune [email protected]
- Add stdlib::stages class with a standard set of stages