# Change log # Change log
All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org). All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org).
## [v7.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.1.0) (2021-05-15) ## Supported Release 5.2.0
### Summary
[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.1...v7.1.0) This is a moderate release made in order to roll up various new features.
### Added
- pw\_hash: add support for bcrypt variants [\#1173](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1173) ([kjetilho](https://github.com/kjetilho))
## [v7.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.1) (2021-04-12)
[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.0...v7.0.1)
### Fixed
- Fix typo in validate\_ipv6\_address function [\#1176](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1176) ([nbarrientos](https://github.com/nbarrientos))
## [v7.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.0.0) (2021-03-01)
[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.6.0...v7.0.0)
### Changed
- pdksync - Remove Puppet 5 from testing and bump minimal version to 6.0.0 [\#1164](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1164) ([carabasdaniel](https://github.com/carabasdaniel))
### Added
- Stdlib::Email type [\#1160](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1160) ([b4ldr](https://github.com/b4ldr))
### Fixed
- \(bugfix\) Setting stricter email validation [\#1163](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1163) ([pmcmaw](https://github.com/pmcmaw))
- \(IAC-1414\) Throw error in range\(\) function when step size invalid [\#1161](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1161) ([sanfrancrisko](https://github.com/sanfrancrisko))
## [v6.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.6.0) (2021-02-02)
[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.5.0...v6.6.0)
### Added
- stdlib::ensure: new fuction to cast ensure values [\#1150](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1150) ([b4ldr](https://github.com/b4ldr))
- \(feat\) Add support for Puppet 7 [\#1144](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1144) ([daianamezdrea](https://github.com/daianamezdrea))
- Allow options injection for to\_yaml [\#1137](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1137) ([baurmatt](https://github.com/baurmatt))
- Allow start/end checks on empty strings [\#1135](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1135) ([jvrsantacruz](https://github.com/jvrsantacruz))
- Stdlib::HttpStatus: add type for HTTP status codes as per rfc2616 [\#1132](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1132) ([b4ldr](https://github.com/b4ldr))
### Fixed
- \(IAC-1375\) fix unit tests for pe\_version fact, when using later facte… [\#1155](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1155) ([tphoney](https://github.com/tphoney))
- seeded\_rand: update funtion to ensure it returns an int not String [\#1139](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1139) ([b4ldr](https://github.com/b4ldr))
## [v6.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.5.0) (2020-09-30)
[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.4.0...v6.5.0)
### Added
- Add parsehocon\(\) function [\#1130](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1130) ([reidmv](https://github.com/reidmv))
- Add new types for Stdlib::Ensure::File [\#1129](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1129) ([b4ldr](https://github.com/b4ldr))
- Add additional types Stdlib::Port::Dynamic,Ephemeral,Registered,User} [\#1128](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1128) ([b4ldr](https://github.com/b4ldr))
- Stdlib::Datasize: This CR adds a new data size type alias [\#1126](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1126) ([b4ldr](https://github.com/b4ldr))
## [v6.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.4.0) (2020-08-20)
[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.3.0...v6.4.0)
### Added
- pdksync - \(IAC-973\) - Update travis/appveyor to run on new default branch `main` [\#1117](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1117) ([david22swan](https://github.com/david22swan))
- \(IAC-746\) - Add ubuntu 20.04 support [\#1110](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1110) ([david22swan](https://github.com/david22swan))
### Fixed
- \[MODULES-10781\] Fix defined type defined\_with\_params\(\) [\#1122](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1122) ([trevor-vaughan](https://github.com/trevor-vaughan))
- \[MODULES-10729\] defined\_with\_params - unnamed type [\#1115](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1115) ([trevor-vaughan](https://github.com/trevor-vaughan))
## [v6.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.3.0) (2020-04-16)
[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.2.0...v6.3.0)
### Added
- Add start\_with function [\#1086](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1086) ([baurmatt](https://github.com/baurmatt))
- stdlib::end\_with: create String.end\_with function [\#1084](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1084) ([b4ldr](https://github.com/b4ldr))
- Adding str2saltedpbkdf2 function [\#1040](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1040) ([genebean](https://github.com/genebean))
### Fixed
- \(MODULES-10623\) explicitly top-scope calls to JSON methods [\#1101](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1101) ([tkishel](https://github.com/tkishel))
- \[IAC-547\] Remove strftime from stdlib as it has already been replaced by the puppet agent since 4.8.0 [\#1097](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1097) ([carabasdaniel](https://github.com/carabasdaniel))
- Add correct namespace for start\_with function [\#1095](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1095) ([baurmatt](https://github.com/baurmatt))
- intersection: show types in exception due to invalid arguments [\#1077](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1077) ([runejuhl](https://github.com/runejuhl))
- Make type aliases stricter [\#1066](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1066) ([pegasd](https://github.com/pegasd))
## [v6.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.2.0) (2019-12-10)
[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.1.0...v6.2.0)
### Added
- \(FM-8696\) - Addition of Support for CentOS 8 [\#1065](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1065) ([david22swan](https://github.com/david22swan))
- Add support for additional options to to\_json\_pretty [\#1055](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1055) ([runejuhl](https://github.com/runejuhl))
### Fixed
- Fix PE detection \(for the moment\) [\#1049](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1049) ([trevor-vaughan](https://github.com/trevor-vaughan))
## [v6.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.1.0) (2019-09-20)
[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v6.0.0...v6.1.0)
### Added
- \(MODULES-9915\) Add type aliases for cloud object store uris [\#1048](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1048) ([hooten](https://github.com/hooten))
- FM-8411 - add support for debian10 [\#1045](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1045) ([lionce](https://github.com/lionce))
- \(FM-8230\) Convert testing to litmus [\#1031](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1031) ([eimlav](https://github.com/eimlav))
- \(FM-8160\) Add Windows Server 2019 support [\#1025](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1025) ([eimlav](https://github.com/eimlav))
- \(FM-8048\) Add RedHat 8 support [\#1022](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1022) ([eimlav](https://github.com/eimlav))
- \(MODULES-9049\) Add type alias for 'yes' and 'no'. [\#1017](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1017) ([ghoneycutt](https://github.com/ghoneycutt))
- add Stdlib::Syslogfacility type [\#1005](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1005) ([bastelfreak](https://github.com/bastelfreak))
### Fixed
- fix lib/puppet/parser/functions/fqdn\_rand\_string.rb:21: syntax error [\#1029](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1029) ([pulecp](https://github.com/pulecp))
- Limit the maximum array size produced by range\(\). [\#1023](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1023) ([mbaynton](https://github.com/mbaynton))
## [v6.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v6.0.0) (2019-05-10)
[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.2.0...v6.0.0)
### Changed
- pdksync - \(MODULES-8444\) - Raise lower Puppet bound [\#1011](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1011) ([david22swan](https://github.com/david22swan))
- \(MODULES-8760\) Add iterative feature to merge\(\) function [\#1008](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1008) ([hlindberg](https://github.com/hlindberg))
### Added
- Add a stdlib::ip\_in\_range\(\) function [\#1003](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1003) ([iglov](https://github.com/iglov))
## [5.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.2.0) (2019-01-17)
[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.1.0...5.2.0)
### Added
- \(MODULES-8404\) - Relax `Stdlib::Filesource` type [\#981](https://github.com/puppetlabs/puppetlabs-stdlib/pull/981) ([alexjfisher](https://github.com/alexjfisher))
- Creates new type Stdlib::IP::Address::V6::CIDR [\#980](https://github.com/puppetlabs/puppetlabs-stdlib/pull/980) ([timhughes](https://github.com/timhughes))
- \(MODULES-8137\) - Addition of support for SLES 15 [\#978](https://github.com/puppetlabs/puppetlabs-stdlib/pull/978) ([david22swan](https://github.com/david22swan))
- \(MODULES-8322\) Consider IPs with /0 as valid [\#975](https://github.com/puppetlabs/puppetlabs-stdlib/pull/975) ([simondeziel](https://github.com/simondeziel))
- Add a function to compare the OS version [\#972](https://github.com/puppetlabs/puppetlabs-stdlib/pull/972) ([ekohl](https://github.com/ekohl))
- \(MODULES-8273\) - Make unquoted classes useable [\#971](https://github.com/puppetlabs/puppetlabs-stdlib/pull/971) ([baurmatt](https://github.com/baurmatt))
- add Function extname\(\) [\#949](https://github.com/puppetlabs/puppetlabs-stdlib/pull/949) ([cocker-cc](https://github.com/cocker-cc))
- \(MODULES-7024\) Add 20-octet MAC addresses [\#905](https://github.com/puppetlabs/puppetlabs-stdlib/pull/905) ([ananace](https://github.com/ananace))
### Fixed
- pdksync - \(FM-7655\) Fix rubygems-update for ruby \< 2.3 [\#979](https://github.com/puppetlabs/puppetlabs-stdlib/pull/979) ([tphoney](https://github.com/tphoney))
- fix ensure\_packages duplicate checking [\#969](https://github.com/puppetlabs/puppetlabs-stdlib/pull/969) ([netzvieh](https://github.com/netzvieh))
## [5.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.1.0) (2018-09-28)
[Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.0.0...5.1.0)
### Added #### Fixed
- `ensure-packages()` duplicate checking now works as it should.
- pdksync - \(MODULES-6805\) metadata.json shows support for puppet 6 [\#958](https://github.com/puppetlabs/puppetlabs-stdlib/pull/958) ([tphoney](https://github.com/tphoney)) #### Added
- \(maint\) Convert from mocking with mocha to rspec-mocks [\#948](https://github.com/puppetlabs/puppetlabs-stdlib/pull/948) ([rodjek](https://github.com/rodjek)) - (MODULES-7024) - Support for 20-octet MAC addresses added.
- `extname()` function added - This function returns the extensionof whatever file it is passed.
- (MODULES-8273) - Unquoted classes can now be used with the `defined_with_params()` function.
- (MODULES-8137) - Support has been added for SLES 15.
- (MODULES-8404) - `Stdlib::Filesource` has been relaxed and now supports custom mount points.
- (MODULES-8322) - IPs values of `0.0.0.0/0` and `::/0` are now considered to be valid.
- New type `Stdlib::IP::Address::V6::CIDR` has been created.
## Supported Release 5.1.0
### Summary
This is a moderate release which adds support for Puppet 6.
### Fixed #### Fixed
- Handle nil in `delete_undef_values()` function
- Readme error regarding concatenation fixed.
- Fix to the `pick()` function documentation.
- \(FM-7388\) - Fixing unit tests for puppet 4, 5 and 6 [\#962](https://github.com/puppetlabs/puppetlabs-stdlib/pull/962) ([tphoney](https://github.com/tphoney)) #### Added
- Fix `pick` function docs [\#955](https://github.com/puppetlabs/puppetlabs-stdlib/pull/955) ([alexjfisher](https://github.com/alexjfisher)) - Support added for Puppet 6
- \(MODULES-7768\) Handle nil in delete\_undef\_values\(\) function [\#954](https://github.com/puppetlabs/puppetlabs-stdlib/pull/954) ([hlindberg](https://github.com/hlindberg))
- Update docs for 'concat' to be correct [\#950](https://github.com/puppetlabs/puppetlabs-stdlib/pull/950) ([rhowe-gds](https://github.com/rhowe-gds))
## 5.0.0 ## Supported Release 5.0.0
### Summary ### Summary
This is a major release which removes support for the Scientific 5 and Debian 7 OS, as well as a removal of the `Stdlib::(Ipv4|IPv6|Ip_address)` data types in favour of `Stdlib::IP::*`. This is a major release which removes support for the Scientific 5 and Debian 7 OS, as well as a removal of the `Stdlib::(Ipv4|IPv6|Ip_address)` data types in favour of `Stdlib::IP::*`.
**In addition it contains a substantial piece of work centered around updating functions that have now been migrated into Puppet itself. Please note that this will be the last major release to support Puppet 2 and Puppet 3 and that they will soon be removed.** **In addition it contains a substantial piece of work centered around updating functions that have now been migrated into Puppet itself. Please note that this will be the last major release to support Puppet 2 and Puppet 3 and that they will soon be removed.**
...@@ -482,7 +337,7 @@ This release sees a massive update to all unit tests to test UTF8 characters. Th ...@@ -482,7 +337,7 @@ This release sees a massive update to all unit tests to test UTF8 characters. Th
- Permit double slash in absolute/Unix path types. - Permit double slash in absolute/Unix path types.
#### Bugfixes #### Bugfixes
- Fix unsupported data type error with rspec-puppet server. - Fix unsupported data type error with rspec-puppet master.
- Now allows test module metadata.json to be read by Puppet. - Now allows test module metadata.json to be read by Puppet.
- Fix acceptance test failure "Hiera is not a class". - Fix acceptance test failure "Hiera is not a class".
- Removal of unsupported platforms and future parser setting in acceptance tests. - Removal of unsupported platforms and future parser setting in acceptance tests.
...@@ -642,7 +497,7 @@ Includes the addition of several new functions and considerable improvements to ...@@ -642,7 +497,7 @@ Includes the addition of several new functions and considerable improvements to
#### Bugfixes #### Bugfixes
- Fix backwards compatibility from an improvement to the parseyaml function - Fix backwards compatibility from an improvement to the parseyaml function
- Renaming of load_module_metadata test to include \_spec.rb - Renaming of load_module_metadata test to include _spec.rb
- Fix root_home fact on AIX 5.x, now '-c' rather than '-C' - Fix root_home fact on AIX 5.x, now '-c' rather than '-C'
- Fixed Gemfile to work with ruby 1.8.7 - Fixed Gemfile to work with ruby 1.8.7
...@@ -1126,7 +981,7 @@ This is a supported release ...@@ -1126,7 +981,7 @@ This is a supported release
##### 2012-07-19 - Jeff McCune <jeff@puppetlabs.com> - 2.4.0 ##### 2012-07-19 - Jeff McCune <jeff@puppetlabs.com> - 2.4.0
* (Maint) use PuppetlabsSpec::PuppetInternals.scope (main) (deafe88) * (Maint) use PuppetlabsSpec::PuppetInternals.scope (master) (deafe88)
##### 2012-07-10 - Hailee Kenney <hailee@puppetlabs.com> - 2.4.0 ##### 2012-07-10 - Hailee Kenney <hailee@puppetlabs.com> - 2.4.0
...@@ -1152,7 +1007,7 @@ This is a supported release ...@@ -1152,7 +1007,7 @@ This is a supported release
* (#13595) initialize\_everything\_for\_tests couples modules Puppet ver (3222f35) * (#13595) initialize\_everything\_for\_tests couples modules Puppet ver (3222f35)
* (#13439) Fix MRI 1.9 issue with spec\_helper (15c5fd1) * (#13439) Fix MRI 1.9 issue with spec\_helper (15c5fd1)
* (#13439) Fix test failures with Puppet 2.6.x (665610b) * (#13439) Fix test failures with Puppet 2.6.x (665610b)
* (#13439) refactor spec helper for compatibility with both puppet 2.7 and server (82194ca) * (#13439) refactor spec helper for compatibility with both puppet 2.7 and master (82194ca)
* (#13494) Specify the behavior of zero padded strings (61891bb) * (#13494) Specify the behavior of zero padded strings (61891bb)
##### 2012-03-29 Puppet Labs <support@puppetlabs.com> - 2.1.3 ##### 2012-03-29 Puppet Labs <support@puppetlabs.com> - 2.1.3
...@@ -1243,6 +1098,3 @@ This is a supported release ...@@ -1243,6 +1098,3 @@ This is a supported release
##### 0.1.1 2011-05-24 Jeff McCune <jeff@puppetlabs.com> ##### 0.1.1 2011-05-24 Jeff McCune <jeff@puppetlabs.com>
* Add stdlib::stages class with a standard set of stages * Add stdlib::stages class with a standard set of stages
\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*
# Setting ownership to the modules team
* @puppetlabs/modules
...@@ -108,7 +108,7 @@ process as easy as possible. ...@@ -108,7 +108,7 @@ process as easy as possible.
To submit your changes via a GitHub pull request, we _highly_ To submit your changes via a GitHub pull request, we _highly_
recommend that you have them on a topic branch, instead of recommend that you have them on a topic branch, instead of
directly on "main". directly on "master".
It makes things much easier to keep track of, especially if It makes things much easier to keep track of, especially if
you decide to work on another thing before your first change you decide to work on another thing before your first change
is merged in. is merged in.
......
source ENV['GEM_SOURCE'] || 'https://rubygems.org'
def location_for(place_or_version, fake_version = nil)
git_url_regex = %r{\A(?<url>(https?|git)[:@][^#]*)(#(?<branch>.*))?}
file_url_regex = %r{\Afile:\/\/(?<path>.*)}
if place_or_version && (git_url = place_or_version.match(git_url_regex))
[fake_version, { git: git_url[:url], branch: git_url[:branch], require: false }].compact
elsif place_or_version && (file_url = place_or_version.match(file_url_regex))
['>= 0', { path: File.expand_path(file_url[:path]), require: false }]
else
[place_or_version, { require: false }]
end
end
ruby_version_segments = Gem::Version.new(RUBY_VERSION.dup).segments
minor_version = ruby_version_segments[0..1].join('.')
group :development do
gem "fast_gettext", '1.1.0', require: false if Gem::Version.new(RUBY_VERSION.dup) < Gem::Version.new('2.1.0')
gem "fast_gettext", require: false if Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('2.1.0')
gem "json_pure", '<= 2.0.1', require: false if Gem::Version.new(RUBY_VERSION.dup) < Gem::Version.new('2.0.0')
gem "json", '= 1.8.1', require: false if Gem::Version.new(RUBY_VERSION.dup) == Gem::Version.new('2.1.9')
gem "json", '= 2.0.4', require: false if Gem::Requirement.create('~> 2.4.2').satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
gem "json", '= 2.1.0', require: false if Gem::Requirement.create(['>= 2.5.0', '< 2.7.0']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
gem "puppet-module-posix-default-r#{minor_version}", require: false, platforms: [:ruby]
gem "puppet-module-posix-dev-r#{minor_version}", require: false, platforms: [:ruby]
gem "puppet-module-win-default-r#{minor_version}", require: false, platforms: [:mswin, :mingw, :x64_mingw]
gem "puppet-module-win-dev-r#{minor_version}", require: false, platforms: [:mswin, :mingw, :x64_mingw]
gem "github_changelog_generator", require: false, git: 'https://github.com/skywinder/github-changelog-generator', ref: '20ee04ba1234e9e83eb2ffb5056e23d641c7a018' if Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('2.2.2')
end
group :system_tests do
gem "puppet-module-posix-system-r#{minor_version}", require: false, platforms: [:ruby]
gem "puppet-module-win-system-r#{minor_version}", require: false, platforms: [:mswin, :mingw, :x64_mingw]
end
puppet_version = ENV['PUPPET_GEM_VERSION']
facter_version = ENV['FACTER_GEM_VERSION']
hiera_version = ENV['HIERA_GEM_VERSION']
gems = {}
gems['puppet'] = location_for(puppet_version)
# If facter or hiera versions have been specified via the environment
# variables
gems['facter'] = location_for(facter_version) if facter_version
gems['hiera'] = location_for(hiera_version) if hiera_version
if Gem.win_platform? && puppet_version =~ %r{^(file:///|git://)}
# If we're using a Puppet gem on Windows which handles its own win32-xxx gem
# dependencies (>= 3.5.0), set the maximum versions (see PUP-6445).
gems['win32-dir'] = ['<= 0.4.9', require: false]
gems['win32-eventlog'] = ['<= 0.6.5', require: false]
gems['win32-process'] = ['<= 0.7.5', require: false]
gems['win32-security'] = ['<= 0.2.5', require: false]
gems['win32-service'] = ['0.8.8', require: false]
end
gems.each do |gem_name, gem_params|
gem gem_name, *gem_params
end
# Evaluate Gemfile.local and ~/.gemfile if they exist
extra_gemfiles = [
"#{__FILE__}.local",
File.join(Dir.home, '.gemfile'),
]
extra_gemfiles.each do |gemfile|
if File.file?(gemfile) && File.readable?(gemfile)
eval(File.read(gemfile), binding)
end
end
# vim: syntax=ruby
...@@ -304,7 +304,7 @@ This release sees a massive update to all unit tests to test UTF8 characters. Th ...@@ -304,7 +304,7 @@ This release sees a massive update to all unit tests to test UTF8 characters. Th
- Permit double slash in absolute/Unix path types. - Permit double slash in absolute/Unix path types.
#### Bugfixes #### Bugfixes
- Fix unsupported data type error with rspec-puppet server. - Fix unsupported data type error with rspec-puppet master.
- Now allows test module metadata.json to be read by Puppet. - Now allows test module metadata.json to be read by Puppet.
- Fix acceptance test failure "Hiera is not a class". - Fix acceptance test failure "Hiera is not a class".
- Removal of unsupported platforms and future parser setting in acceptance tests. - Removal of unsupported platforms and future parser setting in acceptance tests.
...@@ -948,7 +948,7 @@ This is a supported release ...@@ -948,7 +948,7 @@ This is a supported release
##### 2012-07-19 - Jeff McCune <jeff@puppetlabs.com> - 2.4.0 ##### 2012-07-19 - Jeff McCune <jeff@puppetlabs.com> - 2.4.0
* (Maint) use PuppetlabsSpec::PuppetInternals.scope (main) (deafe88) * (Maint) use PuppetlabsSpec::PuppetInternals.scope (master) (deafe88)
##### 2012-07-10 - Hailee Kenney <hailee@puppetlabs.com> - 2.4.0 ##### 2012-07-10 - Hailee Kenney <hailee@puppetlabs.com> - 2.4.0
...@@ -974,7 +974,7 @@ This is a supported release ...@@ -974,7 +974,7 @@ This is a supported release
* (#13595) initialize\_everything\_for\_tests couples modules Puppet ver (3222f35) * (#13595) initialize\_everything\_for\_tests couples modules Puppet ver (3222f35)
* (#13439) Fix MRI 1.9 issue with spec\_helper (15c5fd1) * (#13439) Fix MRI 1.9 issue with spec\_helper (15c5fd1)
* (#13439) Fix test failures with Puppet 2.6.x (665610b) * (#13439) Fix test failures with Puppet 2.6.x (665610b)
* (#13439) refactor spec helper for compatibility with both puppet 2.7 and server (82194ca) * (#13439) refactor spec helper for compatibility with both puppet 2.7 and master (82194ca)
* (#13494) Specify the behavior of zero padded strings (61891bb) * (#13494) Specify the behavior of zero padded strings (61891bb)
##### 2012-03-29 Puppet Labs <support@puppetlabs.com> - 2.1.3 ##### 2012-03-29 Puppet Labs <support@puppetlabs.com> - 2.1.3
......
## Maintenance
Maintainers:
- Puppet Forge Modules Team `forge-modules |at| puppet |dot| com`
Tickets: https://tickets.puppet.com/browse/MODULES. Make sure to set component to `stdlib`.
...@@ -2,24 +2,23 @@ ...@@ -2,24 +2,23 @@
#### Table of Contents #### Table of Contents
1. [Overview](#overview) 1. [Module Description - What the module does and why it is useful](#module-description)
1. [Module Description](#module-description) 1. [Setup - The basics of getting started with stdlib](#setup)
1. [Setup](#setup) 1. [Usage - Configuration options and additional functionality](#usage)
1. [Usage](#usage) 1. [Reference - An under-the-hood peek at what the module is doing and how](#reference)
1. [Reference](#reference) 1. [Classes](#classes)
1. [Defined Types](#defined-types)
1. [Data Types](#data-types) 1. [Data Types](#data-types)
1. [Facts](#facts) 1. [Facts](#facts)
1. [Limitations](#limitations) 1. [Functions](#functions)
1. [Development](#development) 1. [Limitations - OS compatibility, etc.](#limitations)
1. [Development - Guide for contributing to the module](#development)
1. [Contributors](#contributors) 1. [Contributors](#contributors)
## Overview <a id="module-description"></a>
This module provides a standard library of resources for Puppet modules.
## Module Description ## Module Description
Puppet modules make heavy use of this standard library. The stdlib module adds the following resources to Puppet: This module provides a standard library of resources for Puppet modules. Puppet modules make heavy use of this standard library. The stdlib module adds the following resources to Puppet:
* Stages * Stages
* Facts * Facts
...@@ -30,12 +29,14 @@ Puppet modules make heavy use of this standard library. The stdlib module adds t ...@@ -30,12 +29,14 @@ Puppet modules make heavy use of this standard library. The stdlib module adds t
> *Note:* As of version 3.7, Puppet Enterprise no longer includes the stdlib module. If you're running Puppet Enterprise, you should install the most recent release of stdlib for compatibility with Puppet modules. > *Note:* As of version 3.7, Puppet Enterprise no longer includes the stdlib module. If you're running Puppet Enterprise, you should install the most recent release of stdlib for compatibility with Puppet modules.
<a id="setup"></a>
## Setup ## Setup
[Install](https://puppet.com/docs/puppet/latest/modules_installing.html) the stdlib module to add the functions, facts, and resources of this standard library to Puppet. [Install](https://puppet.com/docs/puppet/latest/modules_installing.html) the stdlib module to add the functions, facts, and resources of this standard library to Puppet.
If you are authoring a module that depends on stdlib, be sure to [specify dependencies](https://puppet.com/docs/puppet/latest/modules_installing.html) in your metadata.json. If you are authoring a module that depends on stdlib, be sure to [specify dependencies](https://puppet.com/docs/puppet/latest/modules_metadata.html#specifying-dependencies-in-modules) in your metadata.json.
<a id="usage"></a>
## Usage ## Usage
Most of stdlib's features are automatically loaded by Puppet. To use standardized run stages in Puppet, declare this class in your manifest with `include stdlib`. Most of stdlib's features are automatically loaded by Puppet. To use standardized run stages in Puppet, declare this class in your manifest with `include stdlib`.
...@@ -62,9 +63,220 @@ node default { ...@@ -62,9 +63,220 @@ node default {
} }
``` ```
<a id="reference"></a>
## Reference ## Reference
For information on the classes and types, see the [REFERENCE.md](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/REFERENCE.md). * [Public classes](#public-classes)
* [Private classes](#private-classes)
* [Defined types](#defined-types)
* [Data types](#data-types)
* [Facts](#facts)
* [Functions](#functions)
<a id="classes"></a>
### Classes
<a id="public-classes"></a>
#### Public classes
The `stdlib` class has no parameters.
<a id="private-classes"></a>
#### Private classes
* `stdlib::stages`: Manages a standard set of run stages for Puppet.
<a id="defined-types"></a>
### Defined types
#### `file_line`
Ensures that a given line is contained within a file. The implementation matches the full line, including whitespace at the beginning and end. If the line is not contained in the given file, Puppet appends the line to the end of the file to ensure the desired state. Multiple resources can be declared to manage multiple lines in the same file.
Example:
```puppet
file_line { 'sudo_rule':
path => '/etc/sudoers',
line => '%sudo ALL=(ALL) ALL',
}
file_line { 'sudo_rule_nopw':
path => '/etc/sudoers',
line => '%sudonopw ALL=(ALL) NOPASSWD: ALL',
}
```
In the example above, Puppet ensures that both of the specified lines are contained in the file `/etc/sudoers`.
Match Example:
```puppet
file_line { 'bashrc_proxy':
ensure => present,
path => '/etc/bashrc',
line => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',
match => '^export\ HTTP_PROXY\=',
}
```
In the example above, `match` looks for a line beginning with 'export' followed by 'HTTP_PROXY' and replaces it with the value in line.
Match Example:
```puppet
file_line { 'bashrc_proxy':
ensure => present,
path => '/etc/bashrc',
line => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',
match => '^export\ HTTP_PROXY\=',
append_on_no_match => false,
}
```
In this code example, `match` looks for a line beginning with export followed by 'HTTP_PROXY' and replaces it with the value in line. If a match is not found, then no changes are made to the file.
Examples of `ensure => absent`:
This type has two behaviors when `ensure => absent` is set.
The first is to set `match => ...` and `match_for_absence => true`. Match looks for a line beginning with 'export', followed by 'HTTP_PROXY', and then deletes it. If multiple lines match, an error is raised unless the `multiple => true` parameter is set.
The `line => ...` parameter in this example would be accepted but ignored.
For example:
```puppet
file_line { 'bashrc_proxy':
ensure => absent,
path => '/etc/bashrc',
match => '^export\ HTTP_PROXY\=',
match_for_absence => true,
}
```
The second way of using `ensure => absent` is to specify a `line => ...` and no match. When ensuring lines are absent, the default behavior is to remove all lines matching. This behavior can't be disabled.
For example:
```puppet
file_line { 'bashrc_proxy':
ensure => absent,
path => '/etc/bashrc',
line => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',
}
```
Encoding example:
```puppet
file_line { "XScreenSaver":
ensure => present,
path => '/root/XScreenSaver'
line => "*lock: 10:00:00",
match => '^*lock:',
encoding => "iso-8859-1",
}
```
Files with special characters that are not valid UTF-8 give the error message "Invalid byte sequence in UTF-8". In this case, determine the correct file encoding and specify it with the `encoding` attribute.
**Autorequires:** If Puppet is managing the file that contains the line being managed, the `file_line` resource autorequires that file.
**Parameters**
All parameters are optional, unless otherwise noted.
##### `after`
Specifies the line after which Puppet adds any new lines using a regular expression. (Existing lines are added in place.)
Values: String containing a regex.
Default value: `undef`.
##### `encoding`
Specifies the correct file encoding.
Values: String specifying a valid Ruby character encoding.
Default: 'UTF-8'.
##### `ensure`
Specifies whether the resource is present.
Values: 'present', 'absent'.
Default value: 'present'.
##### `line`
**Required.**
Sets the line to be added to the file located by the `path` parameter.
Values: String.
##### `match`
Specifies a regular expression to compare against existing lines in the file; if a match is found, it is replaced rather than adding a new line.
Values: String containing a regex.
Default value: `undef`.
##### `match_for_absence`
Specifies whether a match should be applied when `ensure => absent`. If set to `true` and match is set, the line that matches is deleted. If set to `false` (the default), match is ignored when `ensure => absent` and the value of `line` is used instead. Ignored when `ensure => present`.
Boolean.
Default value: `false`.
##### `multiple`
Specifies whether `match` and `after` can change multiple lines. If set to `false`, allows file_line to replace only one line and raises an error if more than one will be replaced. If set to `true`, allows file_line to replace one or more lines.
Values: `true`, `false`.
Default value: `false`.
##### `name`
Specifies the name to use as the identity of the resource. If you want the resource namevar to differ from the supplied `title` of the resource, specify it with `name`.
Values: String.
Default value: The value of the title.
##### `path`
**Required.**
Specifies the file in which Puppet ensures the line specified by `line`.
Value: String specifying an absolute path to the file.
##### `replace`
Specifies whether the resource overwrites an existing line that matches the `match` parameter when `line` does not otherwise exist.
If set to `false` and a line is found matching the `match` parameter, the line is not placed in the file.
Boolean.
Default value: `true`.
##### `replace_all_matches_not_matching_line`
Replaces all lines matched by `match` parameter, even if `line` already exists in the file.
Default value: `false`.
<a id="data-types"></a> <a id="data-types"></a>
### Data types ### Data types
...@@ -111,7 +323,7 @@ true ...@@ -111,7 +323,7 @@ true
false false
``` ```
#### `Stdlib::HTTPSUrl` #### `Stdlib::Httpsurl`
Matches HTTPS URLs. It is a case insensitive match. Matches HTTPS URLs. It is a case insensitive match.
...@@ -129,7 +341,7 @@ Unacceptable input example: ...@@ -129,7 +341,7 @@ Unacceptable input example:
httds://notquiteright.org` httds://notquiteright.org`
``` ```
#### `Stdlib::HTTPUrl` #### `Stdlib::Httpurl`
Matches both HTTPS and HTTP URLs. It is a case insensitive match. Matches both HTTPS and HTTP URLs. It is a case insensitive match.
...@@ -458,116 +670,2475 @@ Match an IPv6 address which may contain `::` used to compress zeros as documente ...@@ -458,116 +670,2475 @@ Match an IPv6 address which may contain `::` used to compress zeros as documente
Match an IPv6 address in the CIDR format. It will only match if the address contains an address prefix (for example, it will match 'FF01:0:0:0:0:0:0:101/32', 'FF01::101/60', '::/0', Match an IPv6 address in the CIDR format. It will only match if the address contains an address prefix (for example, it will match 'FF01:0:0:0:0:0:0:101/32', 'FF01::101/60', '::/0',
but not 'FF01:0:0:0:0:0:0:101', 'FF01::101', '::'). but not 'FF01:0:0:0:0:0:0:101', 'FF01::101', '::').
#### `Stdlib::ObjectStore` <a id="facts"></a>
### Facts
#### `package_provider`
Matches cloud object store uris. Returns the default provider Puppet uses to manage packages on this system.
Acceptable input example: #### `is_pe`
```shell Returns whether Puppet Enterprise is installed. Does not report anything on platforms newer than PE 3.x.
s3://mybucket/path/to/file
#### `pe_version`
Returns the version of Puppet Enterprise installed. Does not report anything on platforms newer than PE 3.x.
#### `pe_major_version`
Returns the major version Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.
#### `pe_minor_version`
Returns the minor version of Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x.
#### `pe_patch_version`
Returns the patch version of Puppet Enterprise that is installed.
#### `puppet_vardir`
gs://bucket/file Returns the value of the Puppet vardir setting for the node running Puppet or Puppet agent.
#### `puppet_environmentpath`
Returns the value of the Puppet environment path settings for the node running Puppet or Puppet agent.
#### `puppet_server`
Returns the Puppet agent's `server` value, which is the hostname of the Puppet master with which the agent should communicate.
#### `root_home`
Determines the root home directory.
Determines the root home directory, which depends on your operating system. Generally this is '/root'.
#### `service_provider`
Returns the default provider Puppet uses to manage services on this system
<a id="functions"></a>
### Functions
#### `abs`
**Deprecated:** This function has been replaced with a built-in [`abs`](https://puppet.com/docs/puppet/latest/function.html#abs) function as of Puppet 6.0.0.
Returns the absolute value of a number. For example, '-34.56' becomes '34.56'.
Argument: A single argument of either an integer or float value.
*Type*: rvalue.
#### `any2array`
Converts any object to an array containing that object. Converts empty argument lists are to empty arrays. Hashes are converted to arrays of alternating keys and values. Arrays are not touched.
Since Puppet 5.0.0, you can create new values of almost any datatype using the type system — you can use the built-in [`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple) function to create a new array:
$hsh = {'key' => 42, 'another-key' => 100}
notice(Array($hsh))
Would notice `[['key', 42], ['another-key', 100]]`
The array data type also has a special mode to "create an array if not already an array":
notice(Array({'key' => 42, 'another-key' => 100}, true))
Would notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being transformed into an array.
*Type*: rvalue.
#### `any2bool`
Converts any object to a Boolean:
* Strings such as 'Y', 'y', '1', 'T', 't', 'TRUE', 'yes', 'true' return `true`.
* Strings such as '0', 'F', 'f', 'N', 'n', 'FALSE', 'no', 'false' return `false`.
* Booleans return their original value.
* A number (or a string representation of a number) greater than 0 returns `true`, otherwise `false`.
* An undef value returns `false`.
* Anything else returns `true`.
See the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)
*Type*: rvalue.
#### `assert_private`
Sets the current class or definition as private. Calling the class or defined type from outside the current module fails.
For example, `assert_private()` called in class `foo::bar` outputs the following message if class is called from outside module `foo`: `Class foo::bar is private.`
To specify the error message you want to use:
```puppet
assert_private("You're not supposed to do that!")
``` ```
Valid values: cloud object store uris.
*Type*: statement.
#### `Stdlib::ObjectStore::GSUri` #### `base64`
Matches Google Cloud object store uris. Converts a string to and from base64 encoding. Requires an `action` ('encode', 'decode') and either a plain or base64-encoded `string`, and an optional `method` ('default', 'strict', 'urlsafe').
Acceptable input example: For backward compatibility, `method` is set as `default` if not specified.
```shell > **Note**: This function is an implementation of a Ruby class and might not be UTF8 compatible. To ensure compatibility, use this function with Ruby 2.4.0 or greater.
Since Puppet 4.8.0, the `Binary` data type can be used to produce base 64 encoded strings.
See the built-in [`String.new`](https://puppet.com/docs/puppet/latest/function.html#binary-value-to-string) and [`Binary.new`](https://puppet.com/docs/puppet/latest/function.html#creating-a-binary) functions.
See the built-in [`binary_file`](https://puppet.com/docs/puppet/latest/function.html#binary_file) function for reading a file with binary (non UTF-8) content.
gs://bucket/file # encode a string as if it was binary
$encodestring = String(Binary('thestring', '%s'))
# decode a Binary assuming it is an UTF-8 String
$decodestring = String(Binary("dGhlc3RyaW5n"), "%s")
gs://bucket/path/to/file **Examples:**
```puppet
base64('encode', 'hello')
base64('encode', 'hello', 'default')
# return: "aGVsbG8=\n"
base64('encode', 'hello', 'strict')
# return: "aGVsbG8="
base64('decode', 'aGVsbG8=')
base64('decode', 'aGVsbG8=\n')
base64('decode', 'aGVsbG8=', 'default')
base64('decode', 'aGVsbG8=\n', 'default')
base64('decode', 'aGVsbG8=', 'strict')
# return: "hello"
base64('encode', 'https://puppetlabs.com', 'urlsafe')
# return: "aHR0cHM6Ly9wdXBwZXRsYWJzLmNvbQ=="
base64('decode', 'aHR0cHM6Ly9wdXBwZXRsYWJzLmNvbQ==', 'urlsafe')
# return: "https://puppetlabs.com"
``` ```
Valid values: Google Cloud object store uris.
*Type*: rvalue.
#### `Stdlib::ObjectStore::S3Uri` #### `basename`
Matches Amazon Web Services S3 object store uris. Returns the `basename` of a path. An optional argument strips the extension. For example:
Acceptable input example: ```puppet
basename('/path/to/a/file.ext') => 'file.ext'
basename('relative/path/file.ext') => 'file.ext'
basename('/path/to/a/file.ext', '.ext') => 'file'
```
```shell *Type*: rvalue.
s3://bucket/file
#### `bool2num`
Converts a Boolean to a number. Converts values:
* `false`, 'f', '0', 'n', and 'no' to 0.
* `true`, 't', '1', 'y', and 'yes' to 1.
Argument: a single Boolean or string as an input.
Since Puppet 5.0.0, you can create values for almost any data type using the type system — you can use the built-in [`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric), [`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and [`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)
functions to convert to numeric values:
notice(Integer(false)) # Notices 0
notice(Float(true)) # Notices 1.0
*Type*: rvalue.
s3://bucket/path/to/file #### `bool2str`
Converts a Boolean to a string using optionally supplied arguments. The optional second and third arguments represent what true and false are converted to respectively. If only one argument is given, it is converted from a Boolean to a string containing `true` or `false`.
*Examples:*
```puppet
bool2str(true) => `true`
bool2str(true, 'yes', 'no') => 'yes'
bool2str(false, 't', 'f') => 'f'
``` ```
Valid values: Amazon Web Services S3 object store uris.
#### `Stdlib::Syslogfacility` Arguments: Boolean.
An enum that defines all syslog facilities defined in [RFC5424](https://tools.ietf.org/html/rfc5424). This is based on work in the [voxpupuli/nrpe](https://github.com/voxpupuli/puppet-nrpe/commit/5700fd4f5bfc3e237195c8833039f9ed1045cd6b) module. Since Puppet 5.0.0, you can create new values for almost any
data type using the type system — you can use the built-in
[`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)
function to convert to String, with many different format options:
<a id="facts"></a> notice(String(false)) # Notices 'false'
### Facts notice(String(true)) # Notices 'true'
notice(String(false, '%y')) # Notices 'yes'
notice(String(true, '%y')) # Notices 'no'
#### `package_provider` *Type*: rvalue.
Returns the default provider Puppet uses to manage packages on this system. #### `camelcase`
#### `is_pe` **Deprecated:** This function has been replaced with a built-in [`camelcase`](https://puppet.com/docs/puppet/latest/function.html#camelcase) function as of Puppet 6.0.0.
Returns whether Puppet Enterprise is installed. Does not report anything on platforms newer than PE 3.x. Converts the case of a string or all strings in an array to CamelCase (mixed case).
#### `pe_version` Arguments: Either an array or string. Returns the same type of argument as it received, but in CamelCase form.
Returns the version of Puppet Enterprise installed. Does not report anything on platforms newer than PE 3.x. *Note:* This function is an implementation of a Ruby class and might not be UTF8 compatible. To ensure compatibility, use this function with Ruby 2.4.0 or greater.
#### `pe_major_version` *Type*: rvalue.
Returns the major version Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x. #### `capitalize`
#### `pe_minor_version` **Deprecated:** This function has been replaced with a built-in [`capitalize`](https://puppet.com/docs/puppet/latest/function.html#capitalize) function as of Puppet 6.0.0.
Returns the minor version of Puppet Enterprise that is installed. Does not report anything on platforms newer than PE 3.x. Capitalizes the first character of a string or array of strings and lowercases the remaining characters of each string.
#### `pe_patch_version` Arguments: either a single string or an array as an input. *Type*: rvalue.
Returns the patch version of Puppet Enterprise that is installed. *Note:* This function is an implementation of a Ruby class and might not be UTF8 compatible. To ensure compatibility, use this function with Ruby 2.4.0 or greater.
#### `puppet_vardir` #### `ceiling`
Returns the value of the Puppet vardir setting for the node running Puppet or Puppet agent. **Deprecated:** This function has been replaced with a built-in [`ceiling`](https://puppet.com/docs/puppet/latest/function.html#ceiling) function as of Puppet 6.0.0.
#### `puppet_environmentpath` Returns the smallest integer greater than or equal to the argument.
Returns the value of the Puppet environment path settings for the node running Puppet or Puppet agent. Arguments: A single numeric value.
#### `puppet_server` *Type*: rvalue.
Returns the Puppet agent's `server` value, which is the hostname of the Puppet server with which the agent should communicate. #### `chomp`
#### `root_home` **Deprecated:** This function has been replaced with a built-in [`chomp`](https://puppet.com/docs/puppet/latest/function.html#chomp) function as of Puppet 6.0.0.
Determines the root home directory. Removes the record separator from the end of a string or an array of strings; for example, 'hello\n' becomes 'hello'.
Determines the root home directory, which depends on your operating system. Generally this is '/root'. Arguments: a single string or array.
#### `service_provider` *Type*: rvalue.
Returns the default provider Puppet uses to manage services on this system #### `chop`
**Deprecated:** This function has been replaced with a built-in [`chop`](https://puppet.com/docs/puppet/latest/function.html#chop) function as of Puppet 6.0.0.
Returns a new string with the last character removed. If the string ends with '\r\n', both characters are removed. Applying `chop` to an empty string returns an empty string. To only remove record separators, use the `chomp` function.
Arguments: A string or an array of strings as input.
*Type*: rvalue.
#### `clamp`
Keeps value within the range [Min, X, Max] by sort based on integer value (parameter order doesn't matter). Strings are converted and compared numerically. Arrays of values are flattened into a list for further handling. For example:
* `clamp('24', [575, 187])` returns 187.
* `clamp(16, 88, 661)` returns 88.
* `clamp([4, 3, '99'])` returns 4.
Arguments: strings, arrays, or numerics.
Since Puppet 6.0.0, you can use built-in functions to get the same result:
[$minval, $maxval, $value_to_clamp].sort[1]
*Type*: rvalue.
#### `concat`
Appends the contents of multiple arrays onto the first array given. For example:
* `concat(['1','2','3'],'4')` returns ['1','2','3','4'].
* `concat(['1','2','3'],'4',['5','6','7'])` returns ['1','2','3','4','5','6','7'].
Since Puppet 4.0, you can use the `+` operator for concatenation of arrays and merge of hashes, and the `<<` operator for appending:
['1','2','3'] + ['4','5','6'] + ['7','8','9'] # returns ['1','2','3','4','5','6','7','8','9']
[1, 2, 3] << 4 # returns [1, 2, 3, 4]
[1, 2, 3] << [4, 5] # returns [1, 2, 3, [4, 5]]
*Type*: rvalue.
#### `convert_base`
Converts a given integer or base 10 string representing an integer to a specified base, as a string. For example:
* `convert_base(5, 2)` results in: '101'
* `convert_base('254', '16')` results in: 'fe'
Since Puppet 4.5.0, you can do this with the built-in [`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string) function, with various formatting options:
$binary_repr = String(5, '%b') # results in "101"
$hex_repr = String(254, '%x') # results in "fe"
$hex_repr = String(254, '%#x') # results in "0xfe"
#### `count`
Takes an array as the first argument and an optional second argument.
It counts the number of elements in an array that is equal to the second argument.
If called with only an array, it counts the number of elements that are not nil/undef/empty-string.
> **Note**: Equality is tested with a Ruby method. It is subject to what Ruby considers
to be equal. For strings, equality is case sensitive.
In Puppet core, counting is done using a combination of the built-in functions
[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) (since Puppet 4.0.0) and
[`length`](https://puppet.com/docs/puppet/latest/function.html#length) (since Puppet 5.5.0, before that in stdlib).
This example shows counting values that are not `undef`:
notice([42, "hello", undef].filter |$x| { $x =~ NotUndef }.length)
Would notice 2.
*Type*: rvalue.
#### `deep_merge`
Recursively merges two or more hashes together and returns the resulting hash.
```puppet
$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }
$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }
$merged_hash = deep_merge($hash1, $hash2)
```
The resulting hash is equivalent to:
```puppet
$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }
```
If there is a duplicate key that is a hash, they are recursively merged. If there is a duplicate key that is not a hash, the key in the rightmost hash takes precedence.
*Type*: rvalue.
#### `defined_with_params`
Takes a resource reference and an optional hash of attributes. Returns `true` if a resource with the specified attributes has already been added to the catalog. Returns `false` otherwise.
```puppet
user { 'dan':
ensure => present,
}
if ! defined_with_params(User[dan], {'ensure' => 'present' }) {
user { 'dan': ensure => present, }
}
```
*Type*: rvalue.
#### `delete`
Deletes all instances of a given element from an array, substring from a string, or key from a hash.
For example:
* `delete(['a','b','c','b'], 'b')` returns ['a','c'].
* `delete('abracadabra', 'bra')` returns 'acada'.
* `delete({'a' => 1,'b' => 2,'c' => 3},['b','c'])` returns {'a'=> 1}.
* `delete(['ab', 'b'], 'b')` returns ['ab'].
Since Puppet 4.0.0, the minus (`-`) operator deletes values from arrays and deletes keys from a hash:
['a', 'b', 'c', 'b'] - 'b'
# would return ['a', 'c']
{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])
# would return {'a' => '1'}
You can perform a global delete from a string with the built-in
[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function.
'abracadabra'.regsubst(/bra/, '', 'G')
# would return 'acada'
In general, the built-in
[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function
can filter out entries from arrays and hashes based on a combination of keys and values.
*Type*: rvalue.
#### `delete_at`
Deletes a determined indexed value from an array.
For example: `delete_at(['a','b','c'], 1)` returns ['a','c'].
Since Puppet 4, this can be done with the built-in
[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:
['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 } # returns ['a', 'c']
['a', 'b', 'c', 'd'].filter |$pos, $val | { $pos % 2 != 0 } # returns ['b', 'd']
Or, if you want to delete from the beginning or the end of the array — or from both ends at the same time — use the slice operator `[ ]`:
$array[0, -1] # the same as all the values
$array[2, -1] # all but the first 2 elements
$array[0, -3] # all but the last 2 elements
$array[1, -2] # all but the first and last element
*Type*: rvalue.
#### `delete_regex`
Deletes all instances of a given element from an array or hash that match a provided regular expression. A string is treated as a one-item array.
*Note:* This function is an implementation of a Ruby class and might not be UTF8 compatible. To ensure compatibility, use this function with Ruby 2.4.0 or greater.
For example:
* `delete_regex(['a','b','c','b'], 'b')` returns ['a','c'].
* `delete_regex({'a' => 1,'b' => 2,'c' => 3},['b','c'])` returns {'a'=> 1}.
* `delete_regex(['abf', 'ab', 'ac'], '^ab.*')` returns ['ac'].
* `delete_regex(['ab', 'b'], 'b')` returns ['ab'].
Since Puppet 4.0.0, do the equivalent with the built-in
[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:
["aaa", "aba", "aca"].filter |$val| { $val !~ /b/ }
# Would return: ['aaa', 'aca']
*Type*: rvalue.
#### `delete_values`
Deletes all instances of a given value from a hash.
For example:
* `delete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')` returns {'a'=>'A','c'=>'C','B'=>'D'}
Since Puppet 4.0.0, do the equivalent with the built-in
[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:
$array.filter |$val| { $val != 'B' }
$hash.filter |$key, $val| { $val != 'B' }
*Type*: rvalue.
#### `delete_undef_values`
Deletes all instances of the `undef` value from an array or hash.
For example:
* `$hash = delete_undef_values({a=>'A', b=>'', c=>`undef`, d => false})` returns {a => 'A', b => '', d => false}.
Since Puppet 4.0.0, do the equivalent with the built-in
[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:
$array.filter |$val| { $val =~ NotUndef }
$hash.filter |$key, $val| { $val =~ NotUndef }
*Type*: rvalue.
#### `deprecation`
Prints deprecation warnings and logs a warning once for a given key:
```puppet
deprecation(key, message)
```
Arguments:
* A string specifying the key: To keep the number of messages low during the lifetime of a Puppet process, only one message per key is logged.
* A string specifying the message: the text to be logged.
*Type*: Statement.
**Settings that affect `deprecation`**
Other settings in Puppet affect the stdlib `deprecation` function:
* [`disable_warnings`](https://puppet.com/docs/puppet/latest/configuration.html#disablewarnings)
* [`max_deprecations`](https://puppet.com/docs/puppet/latest/configuration.html#maxdeprecations)
* [`strict`](https://puppet.com/docs/puppet/latest/configuration.html#strict):
* `error`: Fails immediately with the deprecation message
* `off`: Output emits no messages.
* `warning`: Logs all warnings. This is the default setting.
* The environment variable `STDLIB_LOG_DEPRECATIONS`
Specifies whether or not to log deprecation warnings. This is especially useful for automated tests to avoid flooding your logs before you are ready to migrate.
This variable is Boolean, with the following effects:
* `true`: Functions log a warning.
* `false`: No warnings are logged.
* No value set: Puppet 4 emits warnings, but Puppet 3 does not.
#### `difference`
Returns the difference between two arrays. The returned array is a copy of the original array, removing any items that also appear in the second array.
For example:
* `difference(["a","b","c"],["b","c","d"])` returns ["a"].
Since Puppet 4, the minus (`-`) operator in the Puppet language does the same:
['a', 'b', 'c'] - ['b', 'c', 'd']
# would return ['a']
*Type*: rvalue.
#### `dig`
**Deprecated:** This function has been replaced with a built-in [`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of Puppet 4.5.0. Use [`dig44()`](#dig44) for backwards compatibility or use the new version.
Retrieves a value within multiple layers of hashes and arrays via an array of keys containing a path. The function goes through the structure by each path component and tries to return the value at the end of the path.
In addition to the required path argument, the function accepts the default argument. It is returned if the path is not correct, if no value was found, or if any other error has occurred.
```ruby
$data = {
'a' => {
'b' => [
'b1',
'b2',
'b3',
]
}
}
$value = dig($data, ['a', 'b', 2])
# $value = 'b3'
# with all possible options
$value = dig($data, ['a', 'b', 2], 'not_found')
# $value = 'b3'
# using the default value
$value = dig($data, ['a', 'b', 'c', 'd'], 'not_found')
# $value = 'not_found'
```
1. **$data** The data structure we are working with.
2. **['a', 'b', 2]** The path array.
3. **'not_found'** The default value. It is returned if nothing is found.
Default value: `undef`.
*Type*: rvalue.
#### `dig44`
Retrieves a value within multiple layers of hashes and arrays via an array of keys containing a path. The function goes through the structure by each path component and tries to return the value at the end of the path.
In addition to the required path argument, the function accepts the default argument. It is returned if the path is incorrect, if no value was found, or if any other error has occurred.
```ruby
$data = {
'a' => {
'b' => [
'b1',
'b2',
'b3',
]
}
}
$value = dig44($data, ['a', 'b', 2])
# $value = 'b3'
# with all possible options
$value = dig44($data, ['a', 'b', 2], 'not_found')
# $value = 'b3'
# using the default value
$value = dig44($data, ['a', 'b', 'c', 'd'], 'not_found')
# $value = 'not_found'
```
*Type*: rvalue.
1. **$data** The data structure we are working with.
2. **['a', 'b', 2]** The path array.
3. **'not_found'** The default value. It will be returned if nothing is found.
(optional, defaults to `undef`)
#### `dirname`
Returns the `dirname` of a path. For example, `dirname('/path/to/a/file.ext')` returns '/path/to/a'.
*Type*: rvalue.
#### `dos2unix`
Returns the Unix version of the given string. Very useful when using a File resource with a cross-platform template.
```puppet
file { $config_file:
ensure => file,
content => dos2unix(template('my_module/settings.conf.erb')),
}
```
See also [unix2dos](#unix2dos).
*Type*: rvalue.
#### `downcase`
**Deprecated:** This function has been replaced with a built-in [`downcase`](https://puppet.com/docs/puppet/latest/function.html#downcase) function as of Puppet 6.0.0.
Converts the case of a string or of all strings in an array to lowercase.
*Note:* This function is an implementation of a Ruby class and might not be UTF8 compatible. To ensure compatibility, use this function with Ruby 2.4.0 or greater.
*Type*: rvalue.
#### `empty`
**Deprecated:** This function has been replaced with a built-in [`empty`](https://puppet.com/docs/puppet/latest/function.html#empty) function as of Puppet 5.5.0.
Returns `true` if the argument is an array or hash that contains no elements, or an empty string. Returns `false` when the argument is a numerical value.
*Type*: rvalue.
#### `enclose_ipv6`
Takes an array of IP addresses and encloses the ipv6 addresses with square brackets.
*Type*: rvalue.
#### `ensure_packages`
Takes a list of packages in an array or hash and installs them only if they don't already exist. Optionally takes a hash as a second parameter to be passed as the third argument to the `ensure_resource()` or `ensure_resources()` function.
*Type*: statement.
For an array:
```puppet
ensure_packages(['ksh','openssl'], {'ensure' => 'present'})
```
For a hash:
```puppet
ensure_packages({'ksh' => { ensure => '20120801-1' } , 'mypackage' => { source => '/tmp/myrpm-1.0.0.x86_64.rpm', provider => "rpm" }}, {'ensure' => 'present'})
```
#### `ensure_resource`
Takes a resource type, title, and a hash of attributes that describe the resource(s).
```
user { 'dan':
ensure => present,
}
```
This example only creates the resource if it does not already exist:
`ensure_resource('user', 'dan', {'ensure' => 'present' })`
If the resource already exists, but does not match the specified parameters, this function attempts to recreate the resource, leading to a duplicate resource definition error.
An array of resources can also be passed in, and each will be created with the type and parameters specified if it doesn't already exist.
`ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})`
*Type*: statement.
#### `ensure_resources`
Creates resource declarations from a hash, but doesn't conflict with resources that are already declared.
Specify a resource type and title and a hash of attributes that describe the resource(s).
```puppet
user { 'dan':
gid => 'mygroup',
ensure => present,
}
ensure_resources($user)
```
Pass in a hash of resources. Any listed resources that don't already exist will be created with the type and parameters specified:
ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' } , 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'})
From Hiera backend:
```yaml
userlist:
dan:
gid: 'mygroup'
uid: '600'
alex:
gid: 'mygroup'
```
```puppet
ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'})
```
#### `stdlib::extname`
Returns the Extension (the Portion of Filename in Path starting from the last Period).
Example usage:
```puppet
stdlib::extname('test.rb') => '.rb'
stdlib::extname('a/b/d/test.rb') => '.rb'
stdlib::extname('test') => ''
stdlib::extname('.profile') => ''
```
*Type*: rvalue.
#### `fact`
Return the value of a given fact. Supports the use of dot-notation for referring to structured facts. If a fact requested does not exist, returns Undef.
Example usage:
```puppet
fact('kernel')
fact('osfamily')
fact('os.architecture')
```
Array indexing:
```puppet
$first_processor = fact('processors.models.0')
$second_processor = fact('processors.models.1')
```
Fact containing a "." in the fact name:
```puppet
fact('vmware."VRA.version"')
```
#### `flatten`
**Deprecated:** This function has been replaced with a built-in [`flatten`](https://puppet.com/docs/puppet/latest/function.html#flatten) function as of Puppet 5.5.0.
Flattens deeply nested arrays and returns a single flat array as a result.
For example, `flatten(['a', ['b', ['c']]])` returns ['a','b','c'].
*Type*: rvalue.
#### `floor`
**Deprecated:** This function has been replaced with a built-in [`floor`](https://puppet.com/docs/puppet/latest/function.html#floor) function as of Puppet 6.0.0.
Returns the largest integer less than or equal to the argument.
Arguments: A single numeric value.
*Type*: rvalue.
#### `fqdn_rand_string`
Generates a random alphanumeric string, combining the `$fqdn` fact and an optional seed for repeatable randomness. Optionally, you can specify a character set for the function (defaults to alphanumeric).
*Usage:*
```puppet
fqdn_rand_string(LENGTH, [CHARSET], [SEED])
```
*Examples:*
```puppet
fqdn_rand_string(10)
fqdn_rand_string(10, 'ABCDEF!@#$%^')
fqdn_rand_string(10, '', 'custom seed')
```
Arguments:
* An integer, specifying the length of the resulting string.
* Optionally, a string specifying the character set.
* Optionally, a string specifying the seed for repeatable randomness.
*Type*: rvalue.
#### `fqdn_rotate`
Rotates an array or string a random number of times, combining the `$fqdn` fact and an optional seed for repeatable randomness.
*Usage:*
```puppet
fqdn_rotate(VALUE, [SEED])
```
*Examples:*
```puppet
fqdn_rotate(['a', 'b', 'c', 'd'])
fqdn_rotate('abcd')
fqdn_rotate([1, 2, 3], 'custom seed')
```
*Type*: rvalue.
#### `fqdn_uuid`
Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based on an FQDN string under the DNS namespace:
* fqdn_uuid('puppetlabs.com') returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'
* fqdn_uuid('google.com') returns '64ee70a4-8cc1-5d25-abf2-dea6c79a09c8'
*Type*: rvalue.
#### `get_module_path`
Returns the absolute path of the specified module for the current environment.
```puppet
$module_path = get_module_path('stdlib')
```
Since Puppet 5.4.0, the built-in [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory) function does the same thing and will return the path to the first module found, if given multiple values or an array.
*Type*: rvalue.
#### `getparam`
Returns the value of a resource's parameter.
Arguments: A resource reference and the name of the parameter.
> Note: User defined resource types are evaluated lazily.
*Examples:*
```puppet
# define a resource type with a parameter
define example_resource($param) {
}
# declare an instance of that type
example_resource { "example_resource_instance":
param => "'the value we are getting in this example''"
}
# Because of order of evaluation, a second definition is needed
# that will be evaluated after the first resource has been declared
#
define example_get_param {
# This will notice the value of the parameter
notice(getparam(Example_resource["example_resource_instance"], "param"))
}
# Declare an instance of the second resource type - this will call notice
example_get_param { 'show_notify': }
```
Would notice: 'the value we are getting in this example'
Since Puppet 4.0.0, you can get a parameter value by using its data type
and the [ ] operator. The example below is equivalent to a call to getparam():
```puppet
Example_resource['example_resource_instance']['param']
```
#### `getvar`
**Deprecated:** This function has been replaced with a built-in [`getvar`](https://puppet.com/docs/puppet/latest/function.html#getvar)
function as of Puppet 6.0.0. The new version also supports digging into a structured value.
Looks up a variable in a remote namespace.
For example:
```puppet
$foo = getvar('site::data::foo')
# Equivalent to $foo = $site::data::foo
```
This is useful if the namespace itself is stored in a string:
```puppet
$datalocation = 'site::data'
$bar = getvar("${datalocation}::bar")
# Equivalent to $bar = $site::data::bar
```
*Type*: rvalue.
#### `glob`
Returns an array of strings of paths matching path patterns.
Arguments: A string or an array of strings specifying path patterns.
```puppet
$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])
```
*Type*: rvalue.
#### `grep`
Searches through an array and returns any elements that match the provided regular expression.
For example, `grep(['aaa','bbb','ccc','aaaddd'], 'aaa')` returns ['aaa','aaaddd'].
Since Puppet 4.0.0, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does the "same" — as any logic can be used to filter, as opposed to just regular expressions:
['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }
*Type*: rvalue.
#### `has_interface_with`
Returns a Boolean based on kind and value:
* macaddress
* netmask
* ipaddress
* network
*Examples:*
```puppet
has_interface_with("macaddress", "x:x:x:x:x:x")
has_interface_with("ipaddress", "127.0.0.1") => true
```
If no kind is given, then the presence of the interface is checked:
```puppet
has_interface_with("lo") => true
```
*Type*: rvalue.
#### `has_ip_address`
Returns `true` if the client has the requested IP address on some interface. This function iterates through the `interfaces` fact and checks the `ipaddress_IFACE` facts, performing a simple string comparison.
Arguments: A string specifying an IP address.
*Type*: rvalue.
#### `has_ip_network`
Returns `true` if the client has an IP address within the requested network. This function iterates through the `interfaces` fact and checks the `network_IFACE` facts, performing a simple string comparision.
Arguments: A string specifying an IP address.
*Type*: rvalue.
#### `has_key`
**Deprecated:** This function has been replaced with the built-in operator `in`.
Determines if a hash has a certain key value.
*Example*:
```
$my_hash = {'key_one' => 'value_one'}
if has_key($my_hash, 'key_two') {
notice('we will not reach here')
}
if has_key($my_hash, 'key_one') {
notice('this will be printed')
}
```
Since Puppet 4.0.0, this can be achieved in the Puppet language with the following equivalent expression:
$my_hash = {'key_one' => 'value_one'}
if 'key_one' in $my_hash {
notice('this will be printed')
}
*Type*: rvalue.
#### `hash`
**Deprecated:** This function has been replaced with the built-in ability to create a new value of almost any
data type - see the built-in [`Hash.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-hash-and-struct) function
in Puppet.
Converts an array into a hash.
For example (deprecated), `hash(['a',1,'b',2,'c',3])` returns {'a'=>1,'b'=>2,'c'=>3}.
For example (built-in), `Hash(['a',1,'b',2,'c',3])` returns {'a'=>1,'b'=>2,'c'=>3}.
*Type*: rvalue.
#### `intersection`
Returns an array an intersection of two.
For example, `intersection(["a","b","c"],["b","c","d"])` returns ["b","c"].
*Type*: rvalue.
#### `is_a`
Boolean check to determine whether a variable is of a given data type. This is equivalent to the `=~` type checks. This function is available only in Puppet 4, or in Puppet 3 with the "future" parser.
```
foo = 3
$bar = [1,2,3]
$baz = 'A string!'
if $foo.is_a(Integer) {
notify { 'foo!': }
}
if $bar.is_a(Array) {
notify { 'bar!': }
}
if $baz.is_a(String) {
notify { 'baz!': }
}
```
* See the [the Puppet type system](https://puppet.com/docs/puppet/latest/lang_data.html) for more information about types.
* See the [`assert_type()`](https://puppet.com/docs/puppet/latest/function.html#asserttype) function for flexible ways to assert the type of a value.
#### `is_absolute_path`
**Deprecated:** Will be removed in a future version of stdlib. See [`validate_legacy`](#validate_legacy).
Returns `true` if the given path is absolute.
*Type*: rvalue.
#### `is_array`
**Deprecated:** Will be removed in a future version of stdlib. See [`validate_legacy`](#validate_legacy).
Returns `true` if the variable passed to this function is an array.
*Type*: rvalue.
#### `is_bool`
**Deprecated:** Will be removed in a future version of stdlib. See [`validate_legacy`](#validate_legacy).
Returns `true` if the variable passed to this function is a Boolean.
*Type*: rvalue.
#### `is_domain_name`
**Deprecated:** Will be removed in a future version of stdlib. See [`validate_legacy`](#validate_legacy).
Returns `true` if the string passed to this function is a syntactically correct domain name.
*Type*: rvalue.
#### `is_email_address`
Returns true if the string passed to this function is a valid email address.
*Type*: rvalue.
#### `is_float`
**Deprecated:** Will be removed in a future version of stdlib. See [`validate_legacy`](#validate_legacy).
Returns `true` if the variable passed to this function is a float.
*Type*: rvalue.
#### `is_function_available`
**Deprecated:** Will be removed in a future version of stdlib. See [`validate_legacy`](#validate_legacy).
Accepts a string as an argument and determines whether the Puppet runtime has access to a function by that name. It returns `true` if the function exists, `false` if not.
*Type*: rvalue.
#### `is_hash`
**Deprecated:** Will be removed in a future version of stdlib. See [`validate_legacy`](#validate_legacy).
Returns `true` if the variable passed to this function is a hash.
*Type*: rvalue.
#### `is_integer`
**Deprecated:** Will be removed in a future version of stdlib. See [`validate_legacy`](#validate_legacy).
Returns `true` if the variable returned to this string is an integer.
*Type*: rvalue.
#### `is_ip_address`
**Deprecated:** Will be removed in a future version of stdlib. See [`validate_legacy`](#validate_legacy).
Returns `true` if the string passed to this function is a valid IP address.
*Type*: rvalue.
#### `is_ipv6_address`
**Deprecated:** Will be removed in a future version of stdlib. See [`validate_legacy`](#validate_legacy).
Returns `true` if the string passed to this function is a valid IPv6 address.
*Type*: rvalue.
#### `is_ipv4_address`
**Deprecated:** Will be removed in a future version of stdlib. See [`validate_legacy`](#validate_legacy).
Returns `true` if the string passed to this function is a valid IPv4 address.
*Type*: rvalue.
#### `is_mac_address`
Returns `true` if the string passed to this function is a valid MAC address.
*Type*: rvalue.
#### `is_numeric`
**Deprecated:** Will be removed in a future version of stdlib. See [`validate_legacy`](#validate_legacy).
Returns `true` if the variable passed to this function is a number.
*Type*: rvalue.
#### `is_string`
**Deprecated:** Will be removed in a future version of stdlib. See [`validate_legacy`](#validate_legacy).
Returns `true` if the variable passed to this function is a string.
*Type*: rvalue.
#### `join`
**Deprecated:** This function has been replaced with a built-in [`join`](https://puppet.com/docs/puppet/latest/function.html#join) function as of Puppet 5.5.0.
Joins an array into a string using a separator. For example, `join(['a','b','c'], ",")` results in: "a,b,c".
*Type*: rvalue.
#### `join_keys_to_values`
Joins each key of a hash to that key's corresponding value with a separator, returning the result as strings.
If a value is an array, the key is prefixed to each element. The return value is a flattened array.
For example, `join_keys_to_values({'a'=>1,'b'=>[2,3]}, " is ")` results in ["a is 1","b is 2","b is 3"].
Since Puppet 5.0.0, there is more control over the formatting (including indentations and line breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual
formatting of values in the array) - see the
built-in [`String.new`](https://docs.puppet.com/puppet/latest/function.html#conversion-to-string) function and its formatting options for `Array` and `Hash`.
*Type*: rvalue.
#### `keys`
**Deprecated:** This function has been replaced with a built-in [`keys`](https://puppet.com/docs/puppet/latest/function.html#keys) function as of Puppet 5.5.0.
Returns the keys of a hash as an array.
*Type*: rvalue.
#### `length`
**Deprecated:** This function has been replaced with a built-in [`length`](https://puppet.com/docs/puppet/latest/function.html#length) function as of Puppet 5.5.0.
Returns the length of a given string, array or hash. Replaces the deprecated `size()` function.
*Type*: rvalue.
#### `loadyaml`
Loads a YAML file containing an array, string, or hash, and returns the data in the corresponding native data type.
For example:
```puppet
$myhash = loadyaml('/etc/puppet/data/myhash.yaml')
```
The second parameter is returned if the file was not found or could not be parsed.
For example:
```puppet
$myhash = loadyaml('no-file.yaml', {'default'=>'value'})
```
*Type*: rvalue.
#### `loadjson`
Loads a JSON file containing an array, string, or hash, and returns the data in the corresponding native data type.
For example:
The first parameter can be an absolute file path, or a URL.
```puppet
$myhash = loadjson('/etc/puppet/data/myhash.json')
```
The second parameter is returned if the file was not found or could not be parsed.
For example:
```puppet
$myhash = loadjson('no-file.json', {'default'=>'value'})
```
*Type*: rvalue.
#### `load_module_metadata`
Loads the metadata.json of a target module. Can be used to determine module version and authorship for dynamic support of modules.
```puppet
$metadata = load_module_metadata('archive')
notify { $metadata['author']: }
```
When a module's metadata file is absent, the catalog compilation fails. To avoid this failure, do the following:
```
$metadata = load_module_metadata('mysql', true)
if empty($metadata) {
notify { "This module does not have a metadata.json file.": }
}
```
*Type*: rvalue.
#### `lstrip`
**Deprecated:** This function has been replaced with a built-in [`lstrip`](https://puppet.com/docs/puppet/latest/function.html#lstrip) function as of Puppet 6.0.0.
Strips spaces to the left of a string.
*Type*: rvalue.
#### `max`
**Deprecated:** This function has been replaced with a built-in [`max`](https://puppet.com/docs/puppet/latest/function.html#max) function as of Puppet 6.0.0.
Returns the highest value of all arguments. Requires at least one argument.
Arguments: A numeric or a string representing a number.
*Type*: rvalue.
#### `member`
This function determines if a variable is a member of an array. The variable can be a string, an array, or a fixnum.
For example, `member(['a','b'], 'b')` and `member(['a','b','c'], ['b','c'])` return `true`, while `member(['a','b'], 'c')` and `member(['a','b','c'], ['c','d'])` return `false`.
*Note*: This function does not support nested arrays. If the first argument contains nested arrays, it will not recurse through them.
Since Puppet 4.0.0, you can perform the same in the Puppet language. For single values,
use the operator `in`:
'a' in ['a', 'b'] # true
And for arrays, use the operator `-` to compute a diff:
['d', 'b'] - ['a', 'b', 'c'] == [] # false because 'd' is not subtracted
['a', 'b'] - ['a', 'b', 'c'] == [] # true because both 'a' and 'b' are subtracted
Also note that since Puppet 5.2.0, the general form to test the content of an array or hash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any) and [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.
*Type*: rvalue.
#### `merge`
Merges two or more hashes together and returns the resulting hash.
*Example*:
```puppet
$hash1 = {'one' => 1, 'two' => 2}
$hash2 = {'two' => 'dos', 'three' => 'tres'}
$merged_hash = merge($hash1, $hash2)
# The resulting hash is equivalent to:
# $merged_hash = {'one' => 1, 'two' => 'dos', 'three' => 'tres'}
```
When there is a duplicate key, the key in the rightmost hash takes precedence.
Since Puppet 4.0.0, you can use the + operator to achieve the same merge.
$merged_hash = $hash1 + $hash2
*Type*: rvalue.
#### `min`
**Deprecated:** This function has been replaced with a built-in [`min`](https://puppet.com/docs/puppet/latest/function.html#min) function as of Puppet 6.0.0.
Returns the lowest value of all arguments. Requires at least one argument.
Arguments: A numeric or a string representing a number.
*Type*: rvalue.
#### `num2bool`
Converts a number, or a string representation of a number, into a true Boolean.
Zero or anything non-numeric becomes `false`.
Numbers greater than zero become `true`.
Since Puppet 5.0.0, the same can be achieved with the Puppet type system.
See the [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)
function in Puppet for the many available type conversions.
Boolean(0) # false
Boolean(1) # true
*Type*: rvalue.
#### `os_version_gte`
Checks to see if the OS version is at least a certain version. Note that only the major version is taken into account.
Example usage:
```
if os_version_gte('Debian', '9') { }
if os_version_gte('Ubuntu', '18.04') { }
```
Returns:
- Boolean(0) # When OS is below the given version.
- Boolean(1) # When OS is equal to or greater than the given version.
#### `parsejson`
Converts a string of JSON into the correct Puppet structure (as a hash, array, string, integer, or a combination of such).
Arguments:
* The JSON string to convert, as a first argument.
* Optionally, the result to return if conversion fails, as a second error.
*Type*: rvalue.
#### `parseyaml`
Converts a string of YAML into the correct Puppet structure.
Arguments:
* The YAML string to convert, as a first argument.
* Optionally, the result to return if conversion fails, as a second error.
*Type*: rvalue.
#### `pick`
From a list of values, returns the first value that is not undefined or an empty string. Takes any number of arguments, and raises an error if all values are undefined or empty.
```puppet
$real_jenkins_version = pick($::jenkins_version, '1.449')
```
*Type*: rvalue.
#### `pick_default`
Returns the first value in a list of values. Unlike the `pick()` function, `pick_default()` does not fail if all arguments are empty. This allows it to use an empty value as default.
*Type*: rvalue.
#### `prefix`
Applies a prefix to all elements in an array, or to the keys in a hash.
For example:
* `prefix(['a','b','c'], 'p')` returns ['pa','pb','pc'].
* `prefix({'a'=>'b','b'=>'c','c'=>'d'}, 'p')` returns {'pa'=>'b','pb'=>'c','pc'=>'d'}.
Since Puppet 4.0.0, modify values in array by using the built-in [`map`](https://docs.puppet.com/puppet/latest/function.html#map) function.
This example does the same as the first example above:
['a', 'b', 'c'].map |$x| { "p${x}" }
*Type*: rvalue.
#### `pry`
Invokes a pry debugging session in the current scope object. Useful for debugging manifest code at specific points during a compilation. Should be used only when running `puppet apply` or running a Puppet master in the foreground. Requires the `pry` gem to be installed in Puppet's rubygems.
*Examples:*
```puppet
pry()
```
In a pry session, useful commands include:
* Run `catalog` to see the contents currently compiling catalog.
* Run `cd catalog` and `ls` to see catalog methods and instance variables.
* Run `@resource_table` to see the current catalog resource table.
#### `pw_hash`
Hashes a password using the crypt function. Provides a hash usable on most POSIX systems.
The first argument to this function is the password to hash. If it is `undef` or an empty string, this function returns `undef`.
The second argument to this function is which type of hash to use. It will be converted into the appropriate crypt(3) hash specifier. Valid hash types are:
|Hash type |Specifier|
|---------------------|---------|
|MD5 |1 |
|SHA-256 |5 |
|SHA-512 (recommended)|6 |
The third argument to this function is the salt to use.
This function uses the Puppet master's implementation of crypt(3). If your environment contains several different operating systems, ensure that they are compatible before using this function.
*Type*: rvalue.
*Note:* This function is an implementation of a Ruby class and might not be UTF8 compatible. To ensure compatibility, use this function with Ruby 2.4.0 or greater.
#### `range`
Extrapolates a range as an array when given in the form of '(start, stop)'. For example, `range("0", "9")` returns [0,1,2,3,4,5,6,7,8,9]. Zero-padded strings are converted to integers automatically, so `range("00", "09")` returns [0,1,2,3,4,5,6,7,8,9].
Non-integer strings are accepted:
* `range("a", "c")` returns ["a","b","c"].
* `range("host01", "host10")` returns ["host01", "host02", ..., "host09", "host10"].
You must explicitly include trailing zeros, or the underlying Ruby function fails.
Passing a third argument causes the generated range to step by that interval. For example:
* `range("0", "9", "2")` returns ["0","2","4","6","8"].
> Note: The Puppet language supports `Integer` and `Float` ranges by using the type system. They are suitable for iterating a given number of times.
See the built-in [`step`](https://docs.puppet.com/puppet/latest/function.html#step) function in Puppet for skipping values.
Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9
*Type*: rvalue.
#### `regexpescape`
Regexp escape a string or array of strings. Requires either a single string or an array as an input.
*Type*: rvalue.
#### `reject`
Searches through an array and rejects all elements that match the provided regular expression.
For example, `reject(['aaa','bbb','ccc','aaaddd'], 'aaa')` returns ['bbb','ccc'].
Since Puppet 4.0.0, the same is true with the built-in [`filter`](https://docs.puppet.com/puppet/latest/function.html#filter) function in Puppet.
The equivalent of the stdlib `reject` function:
['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~ /aaa/ }
*Type*: rvalue.
#### `reverse`
Reverses the order of a string or array.
> *Note*: The same can be done with the built-in [`reverse_each`](https://docs.puppet.com/puppet/latest/function.html#reverse_each) function in Puppet.
#### `round`
**Deprecated:** This function has been replaced with a built-in [`round`](https://puppet.com/docs/puppet/latest/function.html#round) function as of Puppet 6.0.0.
Rounds a number to the nearest integer.
*Type*: rvalue.
#### `rstrip`
**Deprecated:** This function has been replaced with a built-in [`rstrip`](https://puppet.com/docs/puppet/latest/function.html#rstrip) function as of Puppet 6.0.0.
Strips spaces to the right of the string.
*Type*: rvalue.
#### `seeded_rand`
Takes an integer max value and a string seed value and returns a repeatable random integer smaller than max. Similar to `fqdn_rand`, but does not add node specific data to the seed.
*Type*: rvalue.
#### `seeded_rand_string`
Generates a consistent (based on seed value) random string. Useful for generating matching passwords for different hosts.
#### `shell_escape`
Escapes a string so that it can be safely used in a Bourne shell command line. Note that the resulting string should be used unquoted and is not intended for use in either double or single quotes. This function behaves the same as Ruby's `Shellwords.shellescape()` function; see the [Ruby documentation](http://ruby-doc.org/stdlib-2.3.0/libdoc/shellwords/rdoc/Shellwords.html#method-c-shellescape).
For example:
```puppet
shell_escape('foo b"ar') => 'foo\ b\"ar'
```
*Type*: rvalue.
#### `shell_join`
Builds a command line string from a given array of strings. Each array item is escaped for Bourne shell. All items are then joined together, with a single space in between. This function behaves the same as Ruby's `Shellwords.shelljoin()` function; see the [Ruby documentation](http://ruby-doc.org/stdlib-2.3.0/libdoc/shellwords/rdoc/Shellwords.html#method-c-shelljoin).
For example:
```puppet
shell_join(['foo bar', 'ba"z']) => 'foo\ bar ba\"z'
```
*Type*: rvalue.
#### `shell_split`
Splits a string into an array of tokens. This function behaves the same as Ruby's `Shellwords.shellsplit()` function; see the [ruby documentation](http://ruby-doc.org/stdlib-2.3.0/libdoc/shellwords/rdoc/Shellwords.html#method-c-shellsplit).
*Example:*
```puppet
shell_split('foo\ bar ba\"z') => ['foo bar', 'ba"z']
```
*Type*: rvalue.
#### `shuffle`
Randomizes the order of a string or array elements.
*Type*: rvalue.
#### `size`
**Deprecated:** This function has been replaced with a built-in [`size`](https://puppet.com/docs/puppet/latest/function.html#size) function as of Puppet 6.0.0 (`size` is now an alias for `length`).
Returns the number of elements in a string, an array or a hash. This function will be deprecated in a future release. For Puppet 4, use the `length` function.
*Type*: rvalue.
#### `sprintf_hash`
**Deprecated:** The same functionality can be achieved with the built-in [`sprintf`](https://docs.puppet.com/puppet/latest/function.html#sprintf) function as of Puppet 4.10.10 and 5.3.4. This function will be removed in a future release.
Performs printf-style formatting with named references of text.
The first parameter is a format string describing how to format the rest of the parameters in the hash. See Ruby documentation for [`Kernel::sprintf`](https://ruby-doc.org/core-2.4.2/Kernel.html#method-i-sprintf) for details about this function.
For example:
```puppet
$output = sprintf_hash('String: %<foo>s / number converted to binary: %<number>b',
{ 'foo' => 'a string', 'number' => 5 })
# $output = 'String: a string / number converted to binary: 101'
```
*Type*: rvalue
#### `sort`
**Deprecated:** This function has been replaced with a built-in [`sort`](https://puppet.com/docs/puppet/latest/function.html#sort) function as of Puppet 6.0.0.
Sorts strings and arrays lexically.
*Type*: rvalue.
> *Note:* This function is an implementation of a Ruby class and might not be UTF8 compatible. To ensure compatibility, use this function with Ruby 2.4.0 or greater.
#### `squeeze`
Replaces consecutive repeats (such as 'aaaa') in a string with a single character. Returns a new string.
*Type*: rvalue.
#### `str2bool`
Converts certain strings to a Boolean. This attempts to convert strings that contain the values '1', 'true', 't', 'y', or 'yes' to `true`. Strings that contain values '0', 'false', 'f', 'n', or 'no', or that are an empty string or undefined are converted to `false`. Any other value causes an error. These checks are case insensitive.
Since Puppet 5.0.0, the same can be achieved with the Puppet type system.
See the [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)
function in Puppet for the many available type conversions.
Boolean('false'), Boolean('n'), Boolean('no') # all false
Boolean('true'), Boolean('y'), Boolean('yes') # all true
*Type*: rvalue.
#### `str2saltedsha512`
Converts a string to a salted-SHA512 password hash, used for OS X versions 10.7 or greater. Returns a hex version of a salted-SHA512 password hash, which can be inserted into Puppet manifests as a valid password attribute.
*Type*: rvalue.
> *Note:* This function is an implementation of a Ruby class and might not be UTF8 compatible. To ensure compatibility, use this function with Ruby 2.4.0 or greater.
#### `strftime`
**Deprecated:** This function has been replaced with a built-in [`strftime`](https://puppet.com/docs/puppet/latest/function.html#strftime) function as of Puppet 4.8.0.
Returns formatted time.
For example, `strftime("%s")` returns the time since Unix epoch, and `strftime("%Y-%m-%d")` returns the date.
Arguments: A string specifying the time in `strftime` format. See the Ruby [strftime](https://ruby-doc.org/core-2.1.9/Time.html#method-i-strftime) documentation for details.
*Type*: rvalue.
> *Note:* This function is an implementation of a Ruby class and might not be UTF8 compatible. To ensure compatibility, use this function with Ruby 2.4.0 or greater.
*Format:*
* `%a`: The abbreviated weekday name ('Sun')
* `%A`: The full weekday name ('Sunday')
* `%b`: The abbreviated month name ('Jan')
* `%B`: The full month name ('January')
* `%c`: The preferred local date and time representation
* `%C`: Century (20 in 2009)
* `%d`: Day of the month (01..31)
* `%D`: Date (%m/%d/%y)
* `%e`: Day of the month, blank-padded ( 1..31)
* `%F`: Equivalent to %Y-%m-%d (the ISO 8601 date format)
* `%h`: Equivalent to %b
* `%H`: Hour of the day, 24-hour clock (00..23)
* `%I`: Hour of the day, 12-hour clock (01..12)
* `%j`: Day of the year (001..366)
* `%k`: Hour, 24-hour clock, blank-padded ( 0..23)
* `%l`: Hour, 12-hour clock, blank-padded ( 0..12)
* `%L`: Millisecond of the second (000..999)
* `%m`: Month of the year (01..12)
* `%M`: Minute of the hour (00..59)
* `%n`: Newline (\n)
* `%N`: Fractional seconds digits, default is 9 digits (nanosecond)
* `%3N`: Millisecond (3 digits)
* `%6N`: Microsecond (6 digits)
* `%9N`: Nanosecond (9 digits)
* `%p`: Meridian indicator ('AM' or 'PM')
* `%P`: Meridian indicator ('am' or 'pm')
* `%r`: Time, 12-hour (same as %I:%M:%S %p)
* `%R`: Time, 24-hour (%H:%M)
* `%s`: Number of seconds since the Unix epoch, 1970-01-01 00:00:00 UTC.
* `%S`: Second of the minute (00..60)
* `%t`: Tab character ( )
* `%T`: Time, 24-hour (%H:%M:%S)
* `%u`: Day of the week as a decimal, Monday being 1. (1..7)
* `%U`: Week number of the current year, starting with the first Sunday as the first day of the first week (00..53)
* `%v`: VMS date (%e-%b-%Y)
* `%V`: Week number of year according to ISO 8601 (01..53)
* `%W`: Week number of the current year, starting with the first Monday as the first day of the first week (00..53)
* `%w`: Day of the week (Sunday is 0, 0..6)
* `%x`: Preferred representation for the date alone, no time
* `%X`: Preferred representation for the time alone, no date
* `%y`: Year without a century (00..99)
* `%Y`: Year with century
* `%z`: Time zone as hour offset from UTC (for example +0900)
* `%Z`: Time zone name
* `%%`: Literal '%' character
#### `strip`
**Deprecated:** This function has been replaced with a built-in [`strip`](https://puppet.com/docs/puppet/latest/function.html#strip) function as of Puppet 6.0.0.
Removes leading and trailing whitespace from a string or from every string inside an array. For example, `strip(" aaa ")` results in "aaa".
*Type*: rvalue.
#### `suffix`
Applies a suffix to all elements in an array or to all keys in a hash.
For example:
* `suffix(['a','b','c'], 'p')` returns ['ap','bp','cp'].
* `suffix({'a'=>'b','b'=>'c','c'=>'d'}, 'p')` returns {'ap'=>'b','bp'=>'c','cp'=>'d'}.
Note that since Puppet 4.0.0, you can modify values in an array using the built-in [`map`](https://docs.puppet.com/puppet/latest/function.html#map) function. This example does the same as the first example above:
['a', 'b', 'c'].map |$x| { "${x}p" }
*Type*: rvalue.
#### `swapcase`
Swaps the existing case of a string. For example, `swapcase("aBcD")` results in "AbCd".
*Type*: rvalue.
> *Note:* This function is an implementation of a Ruby class and might not be UTF8 compatible. To ensure compatibility, use this function with Ruby 2.4.0 or greater.
#### `time`
Returns the current Unix epoch time as an integer.
For example, `time()` returns something like '1311972653'.
Since Puppet 4.8.0, the Puppet language has the data types `Timestamp` (a point in time) and `Timespan` (a duration). The following example is equivalent to calling `time()` without any arguments:
Timestamp()
*Type*: rvalue.
#### `to_bytes`
Converts the argument into bytes.
For example, "4 kB" becomes "4096".
Arguments: A single string.
*Type*: rvalue.
#### `to_json`
Converts input into a JSON String.
For example, `{ "key" => "value" }` becomes `{"key":"value"}`.
*Type*: rvalue.
#### `to_json_pretty`
Converts input into a pretty JSON String.
For example, `{ "key" => "value" }` becomes `{\n \"key\": \"value\"\n}`.
*Type*: rvalue.
#### `to_yaml`
Converts input into a YAML String.
For example, `{ "key" => "value" }` becomes `"---\nkey: value\n"`.
*Type*: rvalue.
#### `try_get_value`
**Deprecated:** Replaced by `dig()`.
Retrieves a value within multiple layers of hashes and arrays.
Arguments:
* A string containing a path, as the first argument. Provide this argument as a string of hash keys or array indexes starting with zero and separated by the path separator character (default "/"). This function goes through the structure by each path component and tries to return the value at the end of the path.
* A default argument as a second argument. This argument is returned if the path is not correct, if no value was found, or if any other error has occurred.
* The path separator character as a last argument.
```ruby
$data = {
'a' => {
'b' => [
'b1',
'b2',
'b3',
]
}
}
$value = try_get_value($data, 'a/b/2')
# $value = 'b3'
# with all possible options
$value = try_get_value($data, 'a/b/2', 'not_found', '/')
# $value = 'b3'
# using the default value
$value = try_get_value($data, 'a/b/c/d', 'not_found')
# $value = 'not_found'
# using custom separator
$value = try_get_value($data, 'a|b', [], '|')
# $value = ['b1','b2','b3']
```
1. **$data** The data structure we are working with.
2. **'a/b/2'** The path string.
3. **'not_found'** The default value. It will be returned if nothing is found.
(optional, defaults to *`undef`*)
4. **'/'** The path separator character.
(optional, defaults to *'/'*)
*Type*: rvalue.
#### `type3x`
**Deprecated:** This function will be removed in a future release.
Returns a string description of the type of a given value. The type can be a string, array, hash, float, integer, or Boolean. For Puppet 4, use the new type system instead.
Arguments:
* string
* array
* hash
* float
* integer
* Boolean
*Type*: rvalue.
#### `type_of`
This function is provided for backwards compatibility, but the built-in [type() function](https://puppet.com/docs/puppet/latest/function.html#type) provided by Puppet is preferred.
Returns the literal type of a given value. Requires Puppet 4. Useful for comparison of types with `<=` such as in `if type_of($some_value) <= Array[String] { ... }` (which is equivalent to `if $some_value =~ Array[String] { ... }`).
*Type*: rvalue.
#### `union`
Returns a union of two or more arrays, without duplicates.
For example, `union(["a","b","c"],["b","c","d"])` returns ["a","b","c","d"].
*Type*: rvalue.
#### `unique`
Removes duplicates from strings and arrays.
For example, `unique("aabbcc")` returns 'abc', and `unique(["a","a","b","b","c","c"])` returns ["a","b","c"].
*Type*: rvalue.
#### `unix2dos`
Returns the DOS version of a given string. Useful when using a File resource with a cross-platform template.
*Type*: rvalue.
```puppet
file { $config_file:
ensure => file,
content => unix2dos(template('my_module/settings.conf.erb')),
}
```
See also [dos2unix](#dos2unix).
#### `upcase`
**Deprecated:** This function has been replaced with a built-in [`upcase`](https://puppet.com/docs/puppet/latest/function.html#upcase) function as of Puppet 6.0.0.
Converts an object, array, or hash of objects to uppercase. Objects to be converted must respond to upcase.
For example, `upcase('abcd')` returns 'ABCD'.
*Type*: rvalue.
*Note:* This function is an implementation of a Ruby class and might not be UTF8 compatible. To ensure compatibility, use this function with Ruby 2.4.0 or greater.
#### `uriescape`
URLEncodes a string or array of strings.
Arguments: Either a single string or an array of strings.
*Type*: rvalue.
> *Note:* This function is an implementation of a Ruby class and might not be UTF8 compatible. To ensure compatibility, use this function with Ruby 2.4.0 or greater.
#### `validate_absolute_path`
Validates that a given string represents an absolute path in the filesystem. Works for Windows and Unix style paths.
The following values pass:
```puppet
$my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'
validate_absolute_path($my_path)
$my_path2 = '/var/lib/puppet'
validate_absolute_path($my_path2)
$my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet','C:/Program Files/Puppet Labs/Puppet']
validate_absolute_path($my_path3)
$my_path4 = ['/var/lib/puppet','/usr/share/puppet']
validate_absolute_path($my_path4)
```
The following values fail, causing compilation to terminate:
```puppet
validate_absolute_path(true)
validate_absolute_path('../var/lib/puppet')
validate_absolute_path('var/lib/puppet')
validate_absolute_path([ 'var/lib/puppet', '/var/foo' ])
validate_absolute_path([ '/var/lib/puppet', 'var/foo' ])
$undefined = `undef`
validate_absolute_path($undefined)
```
*Type*: statement.
#### `validate_array`
**Deprecated:** Will be removed in a future version of stdlib. See [`validate_legacy`](#validate_legacy).
Validates that all passed values are array data structures. Terminates catalog compilation if any value fails this check.
The following values pass:
```puppet
$my_array = [ 'one', 'two' ]
validate_array($my_array)
```
The following values fail, causing compilation to terminate:
```puppet
validate_array(true)
validate_array('some_string')
$undefined = `undef`
validate_array($undefined)
```
*Type*: statement.
#### `validate_augeas`
Validates a string using an Augeas lens.
Arguments:
* The string to test, as the first argument.
* The name of the Augeas lens to use, as the second argument.
* Optionally, a list of paths which should **not** be found in the file, as a third argument.
* Optionally, an error message to raise and show to the user, as a fourth argument.
If Augeas fails to parse the string with the lens, the compilation terminates with a parse error.
The `$file` variable points to the location of the temporary file being tested in the Augeas tree.
For example, to make sure your $passwdcontent never contains user `foo`, include the third argument:
```puppet
validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])
```
To raise and display an error message, include the fourth argument:
```puppet
validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')
```
*Type*: statement.
#### `validate_bool`
**Deprecated:** Will be removed in a future version of stdlib. See [`validate_legacy`](#validate_legacy).
Validates that all passed values are either `true` or `false`.
Terminates catalog compilation if any value fails this check.
The following values pass:
```puppet
$iamtrue = true
validate_bool(true)
validate_bool(true, true, false, $iamtrue)
```
The following values fail, causing compilation to terminate:
```puppet
$some_array = [ true ]
validate_bool("false")
validate_bool("true")
validate_bool($some_array)
```
*Type*: statement.
#### `validate_cmd`
Validates a string with an external command.
Arguments:
* The string to test, as the first argument.
* The path to a test command, as the second argument. This argument takes a % as a placeholder for the file path (if no % placeholder is given, defaults to the end of the command). If the command is launched against a tempfile containing the passed string, or returns a non-null value, compilation will terminate with a parse error.
* Optionally, an error message to raise and show to the user, as a third argument.
```puppet
# Defaults to end of path
validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')
```
```puppet
# % as file location
validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')
```
*Type*: statement.
#### `validate_domain_name`
**Deprecated:** Will be removed in a future version of stdlib. See [`validate_legacy`](#validate_legacy).
Validate that all values passed are syntactically correct domain names. Aborts catalog compilation if any value fails this check.
The following values pass:
~~~
$my_domain_name = 'server.domain.tld'
validate_domain_name($my_domain_name)
validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)
~~~
The following values fail, causing compilation to abort:
~~~
validate_domain_name(1)
validate_domain_name(true)
validate_domain_name('invalid domain')
validate_domain_name('-foo.example.com')
validate_domain_name('www.example.2com')
~~~
*Type*: statement.
#### `validate_email_address`
Validate that all values passed are valid email addresses. Fail compilation if any value fails this check.
The following values will pass:
~~~
$my_email = "waldo@gmail.com"
validate_email_address($my_email)
validate_email_address("bob@gmail.com", "alice@gmail.com", $my_email)
~~~
The following values will fail, causing compilation to abort:
~~~
$some_array = [ 'bad_email@/d/efdf.com' ]
validate_email_address($some_array)
~~~
*Type*: statement.
#### `validate_hash`
**Deprecated:** Will be removed in a future version of stdlib. See [`validate_legacy`](#validate_legacy).
Validates that all passed values are hash data structures. Terminates catalog compilation if any value fails this check.
The following values will pass:
```puppet
$my_hash = { 'one' => 'two' }
validate_hash($my_hash)
```
The following values will fail, causing compilation to terminate:
```puppet
validate_hash(true)
validate_hash('some_string')
$undefined = `undef`
validate_hash($undefined)
```
*Type*: statement.
#### `validate_integer`
**Deprecated:** Will be removed in a future version of stdlib. See [`validate_legacy`](#validate_legacy).
Validates an integer or an array of integers. Terminates catalog compilation if any of the checks fail.
Arguments:
* An integer or an array of integers, as the first argument.
* Optionally, a maximum, as the second argument. (All elements of) the first argument must be equal to or less than this maximum.
* Optionally, a minimum, as the third argument. (All elements of) the first argument must be equal to or greater than than this maximum.
This function fails if the first argument is not an integer or array of integers, or if the second or third arguments are not convertable to an integer. However, if (and only if) a minimum is given, the second argument may be an empty string or `undef`, which serves as a placeholder to ensure the minimum check.
The following values pass:
```puppet
validate_integer(1)
validate_integer(1, 2)
validate_integer(1, 1)
validate_integer(1, 2, 0)
validate_integer(2, 2, 2)
validate_integer(2, '', 0)
validate_integer(2, `undef`, 0)
$foo = `undef`
validate_integer(2, $foo, 0)
validate_integer([1,2,3,4,5], 6)
validate_integer([1,2,3,4,5], 6, 0)
```
* Plus all of the above, but any combination of values passed as strings ('1' or "1").
* Plus all of the above, but with (correct) combinations of negative integer values.
The following values fail, causing compilation to terminate:
```puppet
validate_integer(true)
validate_integer(false)
validate_integer(7.0)
validate_integer({ 1 => 2 })
$foo = `undef`
validate_integer($foo)
validate_integer($foobaridontexist)
validate_integer(1, 0)
validate_integer(1, true)
validate_integer(1, '')
validate_integer(1, `undef`)
validate_integer(1, , 0)
validate_integer(1, 2, 3)
validate_integer(1, 3, 2)
validate_integer(1, 3, true)
```
* Plus all of the above, but any combination of values passed as strings (`false` or "false").
* Plus all of the above, but with incorrect combinations of negative integer values.
* Plus all of the above, but with non-integer items in arrays or maximum / minimum argument.
*Type*: statement.
#### `validate_ip_address`
**Deprecated:** Will be removed in a future version of stdlib. See [`validate_legacy`](#validate_legacy).
Validates that the argument is an IP address, regardless of whether it is an IPv4 or an IPv6 address. It also validates IP address with netmask.
Arguments: A string specifying an IP address.
The following values will pass:
```puppet
validate_ip_address('0.0.0.0')
validate_ip_address('8.8.8.8')
validate_ip_address('127.0.0.1')
validate_ip_address('194.232.104.150')
validate_ip_address('3ffe:0505:0002::')
validate_ip_address('::1/64')
validate_ip_address('fe80::a00:27ff:fe94:44d6/64')
validate_ip_address('8.8.8.8/32')
```
The following values will fail, causing compilation to terminate:
```puppet
validate_ip_address(1)
validate_ip_address(true)
validate_ip_address(0.0.0.256)
validate_ip_address('::1', {})
validate_ip_address('0.0.0.0.0')
validate_ip_address('3.3.3')
validate_ip_address('23.43.9.22/64')
validate_ip_address('260.2.32.43')
```
#### `validate_legacy`
Validates a value against both a specified type and a deprecated validation function. Silently passes if both pass, errors if only one validation passes, and fails if both validations return false.
Arguments:
* The type to check the value against,
* The full name of the previous validation function,
* The value to be checked,
* An unspecified number of arguments needed for the previous validation function.
Example:
```puppet
validate_legacy('Optional[String]', 'validate_re', 'Value to be validated', ["."])
```
This function supports updating modules from Puppet 3-style argument validation (using the stdlib `validate_*` functions) to Puppet 4 data types, without breaking functionality for those depending on Puppet 3-style validation.
> Note: This function is compatible only with Puppet 4.4.0 (PE 2016.1) and later.
##### For module users
If you are running Puppet 4, the `validate_legacy` function can help you find and resolve deprecated Puppet 3 `validate_*` functions. These functions are deprecated as of stdlib version 4.13 and will be removed in a future version of stdlib.
Puppet 4 allows improved defined type checking using [data types](https://puppet.com/docs/puppet/latest/lang_data.html). Data types avoid some of the problems with Puppet 3's `validate_*` functions, which were sometimes inconsistent. For example, [validate_numeric](#validate_numeric) unintentionally allowed not only numbers, but also arrays of numbers or strings that looked like numbers.
If you run Puppet 4 and use modules with deprecated `validate_*` functions, you might encounter deprecation messages. The `validate_legacy` function makes these differences visible and makes it easier to move to the clearer Puppet 4 syntax.
The deprecation messages you get can vary, depending on the modules and data that you use. These deprecation messages appear by default only in Puppet 4:
* `Notice: Accepting previously invalid value for target type '<type>'`: This message is informational only. You're using values that are allowed by the new type, but would have been invalid by the old validation function.
* `Warning: This method is deprecated, please use the stdlib validate_legacy function`: The module has not yet upgraded to `validate_legacy`. Use the [deprecation](#deprecation) options to silence warnings for now, or submit a fix with the module's developer. See the information [for module developers](#for-module-developers) below for how to fix the issue.
* `Warning: validate_legacy(<function>) expected <type> value, got <actual type>_`: Your code passes a value that was accepted by the Puppet 3-style validation, but will not be accepted by the next version of the module. Most often, you can fix this by removing quotes from numbers or booleans.
* `Error: Evaluation Error: Error while evaluating a Resource Statement, Evaluation Error: Error while evaluating a Function Call, validate_legacy(<function>) expected <type> value, got <actual type>`: Your code passes a value that is not acceptable to either the new or the old style validation.
##### For module developers
The `validate_legacy` function helps you move from Puppet 3 style validation to Puppet 4 validation without breaking functionality your module's users depend on.
Moving to Puppet 4 type validation allows much better defined type checking using [data types](https://puppet.com/docs/puppet/latest/lang_data.html). Many of Puppet 3's `validate_*` functions have surprising holes in their validation. For example, [validate_numeric](#validate_numeric) allows not only numbers, but also arrays of numbers or strings that look like numbers, without giving you any control over the specifics.
For each parameter of your classes and defined types, choose a new Puppet 4 data type to use. In most cases, the new data type allows a different set of values than the original `validate_*` function. The situation then looks like this:
| | `validate_` pass | `validate_` fail |
| ------------ | ---------------- | ---------------- |
| matches type | pass | pass, notice |
| fails type | pass, deprecated | fail |
The code after the validation still has to handle all possible values for now, but users of your code can change their manifests to pass only values that match the new type.
For each `validate_*` function in stdlib, there is a matching `Stdlib::Compat::*` type that allows the appropriate set of values. See the documentation in the `types/` directory in the stdlib source code for caveats.
For example, given a class that should accept only numbers, like this:
```puppet
class example($value) {
validate_numeric($value)
```
the resulting validation code looks like this:
```puppet
class example(
Variant[Stdlib::Compat::Numeric, Numeric] $value
) {
validate_legacy(Numeric, 'validate_numeric', $value)
```
Here, the type of `$value` is defined as `Variant[Stdlib::Compat::Numeric, Numeric]`, which allows any `Numeric` (the new type), as well as all values previously accepted by `validate_numeric` (through `Stdlib::Compat::Numeric`).
The call to `validate_legacy` takes care of triggering the correct log or fail message for you. It requires the new type, the previous validation function name, and all arguments to that function.
If your module still supported Puppet 3, this is a breaking change. Update your `metadata.json` requirements section to indicate that your module no longer supports Puppet 3, and bump the major version of your module. With this change, all existing tests for your module should still pass. Create additional tests for the new possible values.
As a breaking change, this is also a good time to call [`deprecation`](#deprecation) for any parameters you want to get rid of, or to add additional constraints on your parameters.
After releasing this version, you can release another breaking change release where you remove all compat types and all calls to `validate_legacy`. At that time, you can also go through your code and remove any leftovers dealing with the previously possible values.
Always note such changes in your CHANGELOG and README.
#### `validate_numeric`
**Deprecated:** Will be removed in a future version of stdlib. See [`validate_legacy`](#validate_legacy).
Validates a numeric value, or an array or string of numeric values. Terminates catalog compilation if any of the checks fail.
Arguments:
* A numeric value, or an array or string of numeric values.
* Optionally, a maximum value. (All elements of) the first argument has to be less or equal to this max.
* Optionally, a minimum value. (All elements of) the first argument has to be greater or equal to this min.
This function fails if the first argument is not a numeric (Integer or Float) or an array or string of numerics, or if the second and third arguments are not convertable to a numeric. If, and only if, a minimum is given, the second argument can be an empty string or `undef`, which serves as a placeholder to ensure the minimum check.
For passing and failing usage, see [`validate_integer`](#validate-integer). The same values pass and fail, except that `validate_numeric` also allows floating point values.
*Type*: statement.
#### `validate_re`
**Deprecated:** Will be removed in a future version of stdlib. See [`validate_legacy`](#validate_legacy).
Performs simple validation of a string against one or more regular expressions.
Arguments:
* The string to test, as the first argument. If this argument is not a string, compilation terminates. Use quotes to force stringification.
* A stringified regular expression (without the // delimiters) or an array of regular expressions, as the second argument.
* Optionally, the error message raised and shown to the user, as a third argument.
If none of the regular expressions in the second argument match the string passed in the first argument, compilation terminates with a parse error.
The following strings validate against the regular expressions:
```puppet
validate_re('one', '^one$')
validate_re('one', [ '^one', '^two' ])
```
The following string fails to validate, causing compilation to terminate:
```puppet
validate_re('one', [ '^two', '^three' ])
```
To set the error message:
```puppet
validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7')
```
To force stringification, use quotes:
```
validate_re("${::operatingsystemmajrelease}", '^[57]$')
```
*Type*: statement.
#### `validate_slength`
**Deprecated:** Will be removed in a future version of stdlib. See [`validate_legacy`](#validate_legacy).
Validates that a string (or an array of strings) is less than or equal to a specified length
Arguments:
* A string or an array of strings, as a first argument.
* A numeric value for maximum length, as a second argument.
* Optionally, a numeric value for minimum length, as a third argument.
The following values pass:
```puppet
validate_slength("discombobulate",17)
validate_slength(["discombobulate","moo"],17)
validate_slength(["discombobulate","moo"],17,3)
```
The following values fail:
```puppet
validate_slength("discombobulate",1)
validate_slength(["discombobulate","thermometer"],5)
validate_slength(["discombobulate","moo"],17,10)
```
*Type*: statement.
#### `validate_string`
**Deprecated:** Will be removed in a future version of stdlib. See [`validate_legacy`](#validate_legacy).
Validates that all passed values are string data structures. Aborts catalog compilation if any value fails this check.
The following values pass:
```puppet
$my_string = "one two"
validate_string($my_string, 'three')
```
The following values fail, causing compilation to terminate:
```puppet
validate_string(true)
validate_string([ 'some', 'array' ])
```
> *Note:* validate_string(`undef`) will not fail in this version of the functions API.
Instead, use:
```
if $var == `undef` {
fail('...')
}
```
*Type*: statement.
#### `validate_x509_rsa_key_pair`
Validates a PEM-formatted X.509 certificate and private key using OpenSSL.
Verifies that the certificate's signature was created from the supplied key.
Fails catalog compilation if any value fails this check.
Arguments:
* An X.509 certificate as the first argument.
* An RSA private key, as the second argument.
```puppet
validate_x509_rsa_key_pair($cert, $key)
```
*Type*: statement.
#### `values`
**Deprecated:** This function has been replaced with a built-in [`values`](https://puppet.com/docs/puppet/latest/function.html#values) function as of Puppet 5.5.0.
Returns the values of a given hash.
For example, given `$hash = {'a'=1, 'b'=2, 'c'=3} values($hash)` returns [1,2,3].
*Type*: rvalue.
#### `values_at`
Finds values inside an array based on location.
Arguments:
* The array you want to analyze, as the first argument.
* Any combination of the following values, as the second argument:
* A single numeric index
* A range in the form of 'start-stop' (eg. 4-9)
* An array combining the above
For example:
* `values_at(['a','b','c'], 2)` returns ['c'].
* `values_at(['a','b','c'], ["0-1"])` returns ['a','b'].
* `values_at(['a','b','c','d','e'], [0, "2-3"])` returns ['a','c','d'].
Since Puppet 4.0.0, you can slice an array with index and count directly in the language.
A negative value is taken to be "from the end" of the array, for example:
```puppet
['a', 'b', 'c', 'd'][1, 2] # results in ['b', 'c']
['a', 'b', 'c', 'd'][2, -1] # results in ['c', 'd']
['a', 'b', 'c', 'd'][1, -2] # results in ['b', 'c']
```
*Type*: rvalue.
#### `zip`
Takes one element from first array given and merges corresponding elements from second array given. This generates a sequence of n-element arrays, where *n* is one more than the count of arguments. For example, `zip(['1','2','3'],['4','5','6'])` results in ["1", "4"], ["2", "5"], ["3", "6"]. *Type*: rvalue.
<a id="limitations"></a>
## Limitations ## Limitations
As of Puppet Enterprise 3.7, the stdlib module is no longer included in PE. PE users should install the most recent release of stdlib for compatibility with Puppet modules. As of Puppet Enterprise 3.7, the stdlib module is no longer included in PE. PE users should install the most recent release of stdlib for compatibility with Puppet modules.
For an extensive list of supported operating systems, see [metadata.json](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/metadata.json) For an extensive list of supported operating systems, see [metadata.json](https://github.com/puppetlabs/puppetlabs-stdlib/blob/master/metadata.json)
<a id="development"></a>
## Development ## Development
Puppet modules on the Puppet Forge are open projects, and community contributions are essential for keeping them great. We can’t access the huge number of platforms and myriad hardware, software, and deployment configurations that Puppet is intended to serve. We want to keep it as easy as possible to contribute changes so that our modules work in your environment. There are a few guidelines that we need contributors to follow so that we can have a chance of keeping on top of things. For more information, see our [module contribution guide](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/CONTRIBUTING.md). Puppet modules on the Puppet Forge are open projects, and community contributions are essential for keeping them great. We can’t access the huge number of platforms and myriad hardware, software, and deployment configurations that Puppet is intended to serve. We want to keep it as easy as possible to contribute changes so that our modules work in your environment. There are a few guidelines that we need contributors to follow so that we can have a chance of keeping on top of things. For more information, see our [module contribution guide](https://docs.puppet.com/forge/contributing.html).
To report or research a bug with any part of this module, please go to [http://tickets.puppetlabs.com/browse/MODULES](http://tickets.puppetlabs.com/browse/MODULES). To report or research a bug with any part of this module, please go to
[http://tickets.puppetlabs.com/browse/MODULES](http://tickets.puppetlabs.com/browse/MODULES).
<a id="contributors"></a>
## Contributors ## Contributors
The list of contributors can be found at: [https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors](https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors). The list of contributors can be found at: [https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors](https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors).
# Reference
<!-- DO NOT EDIT: This document was generated by Puppet Strings -->
## Table of Contents
### Classes
* [`stdlib`](#stdlib): This module manages stdlib.
* [`stdlib::stages`](#stdlibstages): This class manages a standard set of run stages for Puppet. It is managed by
the stdlib class, and should not be declared independently.
### Resource types
* [`anchor`](#anchor): A simple resource type intended to be used as an anchor in a composite class.
* [`file_line`](#file_line): Ensures that a given line is contained within a file.
### Functions
* [`abs`](#abs): **Deprecated:** Returns the absolute value of a number
* [`any2array`](#any2array): This converts any object to an array containing that object.
* [`any2bool`](#any2bool): Converts 'anything' to a boolean.
* [`assert_private`](#assert_private): Sets the current class or definition as private.
* [`base64`](#base64): Base64 encode or decode a string based on the command and the string submitted
* [`basename`](#basename): Strips directory (and optional suffix) from a filename
* [`bool2num`](#bool2num): Converts a boolean to a number.
* [`bool2str`](#bool2str): Converts a boolean to a string using optionally supplied arguments.
* [`camelcase`](#camelcase): **Deprecated** Converts the case of a string or all strings in an array to camel case.
* [`capitalize`](#capitalize): **Deprecated** Capitalizes the first letter of a string or array of strings.
* [`ceiling`](#ceiling): **Deprecated** Returns the smallest integer greater or equal to the argument.
* [`chomp`](#chomp): **Deprecated** Removes the record separator from the end of a string or an array of strings.
* [`chop`](#chop): **Deprecated** Returns a new string with the last character removed.
* [`clamp`](#clamp): Keeps value within the range [Min, X, Max] by sort based on integer value
(parameter order doesn't matter).
* [`concat`](#concat): Appends the contents of multiple arrays into array 1.
* [`convert_base`](#convert_base): Converts a given integer or base 10 string representing an integer to a
specified base, as a string.
* [`count`](#count): Counts the number of elements in array.
* [`deep_merge`](#deep_merge): Recursively merges two or more hashes together and returns the resulting hash.
* [`defined_with_params`](#defined_with_params)
* [`delete`](#delete): Deletes all instances of a given element from an array, substring from a
string, or key from a hash.
* [`delete_at`](#delete_at): Deletes a determined indexed value from an array.
* [`delete_regex`](#delete_regex): Deletes all instances of a given element that match a regular expression
from an array or key from a hash.
* [`delete_undef_values`](#delete_undef_values): Returns a copy of input hash or array with all undefs deleted.
* [`delete_values`](#delete_values): Deletes all instances of a given value from a hash.
* [`deprecation`](#deprecation): Function to print deprecation warnings, Logs a warning once for a given key. The uniqueness key - can appear once. The msg is the message te
* [`deprecation`](#deprecation): Function to print deprecation warnings (this is the 3.X version of it).
* [`difference`](#difference): This function returns the difference between two arrays.
* [`dig`](#dig): **DEPRECATED** Retrieves a value within multiple layers of hashes and arrays via an
array of keys containing a path.
* [`dig44`](#dig44)
* [`dirname`](#dirname): Returns the dirname of a path.
* [`dos2unix`](#dos2unix): Returns the Unix version of the given string.
* [`downcase`](#downcase): **Deprecated:** Converts the case of a string or all strings in an array to lower case.
* [`empty`](#empty): **Deprecated:** Returns true if the variable is empty.
* [`enclose_ipv6`](#enclose_ipv6): Takes an array of ip addresses and encloses the ipv6 addresses with square brackets.
* [`ensure_packages`](#ensure_packages): Takes a list of packages and only installs them if they don't already exist.
* [`ensure_resource`](#ensure_resource)
* [`ensure_resources`](#ensure_resources)
* [`fact`](#fact): Digs into the facts hash using dot-notation
* [`flatten`](#flatten): This function flattens any deeply nested arrays and returns a single flat array
as a result.
* [`floor`](#floor): Returns the largest integer less or equal to the argument.
* [`fqdn_rand_string`](#fqdn_rand_string)
* [`fqdn_rotate`](#fqdn_rotate): fqdn_rotate.rb
* [`fqdn_uuid`](#fqdn_uuid): Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based
on an FQDN string under the DNS namespace
* [`get_module_path`](#get_module_path): Returns the absolute path of the specified module for the current
environment.
* [`getparam`](#getparam)
* [`getvar`](#getvar): Lookup a variable in a given namespace.
* [`glob`](#glob): Uses same patterns as Dir#glob.
* [`grep`](#grep): This function searches through an array and returns any elements that match
the provided regular expression.
* [`has_interface_with`](#has_interface_with): Returns boolean based on kind and value.
* [`has_ip_address`](#has_ip_address): Returns true if the client has the requested IP address on some interface.
* [`has_ip_network`](#has_ip_network): Returns true if the client has an IP address within the requested network.
* [`has_key`](#has_key): **Deprecated:** Determine if a hash has a certain key value.
* [`hash`](#hash): **Deprecated:** This function converts an array into a hash.
* [`intersection`](#intersection): This function returns an array of the intersection of two.
* [`is_a`](#is_a): Boolean check to determine whether a variable is of a given data type.
This is equivalent to the `=~` type checks.
* [`is_absolute_path`](#is_absolute_path): Wrapper that calls the Puppet 3.x function of the same name.
* [`is_absolute_path`](#is_absolute_path): **Deprecated:** Returns boolean true if the string represents an absolute path in the filesystem.
* [`is_array`](#is_array): Wrapper that calls the Puppet 3.x function of the same name.
* [`is_array`](#is_array): **Deprecated:** Returns true if the variable passed to this function is an array.
* [`is_bool`](#is_bool): Wrapper that calls the Puppet 3.x function of the same name.
* [`is_bool`](#is_bool): **Deprecated:** Returns true if the variable passed to this function is a boolean.
* [`is_domain_name`](#is_domain_name): **Deprecated:** Returns true if the string passed to this function is
a syntactically correct domain name.
* [`is_email_address`](#is_email_address): **Deprecated:** Returns true if the string passed to this function is a valid email address.
* [`is_float`](#is_float): Wrapper that calls the Puppet 3.x function of the same name.
* [`is_float`](#is_float): **Deprecated:** Returns true if the variable passed to this function is a float.
* [`is_function_available`](#is_function_available): **Deprecated:** Determines whether the Puppet runtime has access to a function by that name.
* [`is_hash`](#is_hash): **Deprecated:** Returns true if the variable passed to this function is a hash.
* [`is_integer`](#is_integer): **Deprecated:** Returns true if the variable passed to this function is an Integer or
a decimal (base 10) integer in String form.
* [`is_ip_address`](#is_ip_address): Wrapper that calls the Puppet 3.x function of the same name.
* [`is_ip_address`](#is_ip_address): **Deprecated:** Returns true if the string passed to this function is a valid IP address.
* [`is_ipv4_address`](#is_ipv4_address): Wrapper that calls the Puppet 3.x function of the same name.
* [`is_ipv4_address`](#is_ipv4_address): **Deprecated:** Returns true if the string passed to this function is a valid IPv4 address.
* [`is_ipv6_address`](#is_ipv6_address): Wrapper that calls the Puppet 3.x function of the same name.
* [`is_ipv6_address`](#is_ipv6_address): **Deprecated:** Returns true if the string passed to this function is a valid IPv6 address.
* [`is_mac_address`](#is_mac_address): **Deprecated:** Returns true if the string passed to this function is a valid mac address.
* [`is_numeric`](#is_numeric): Wrapper that calls the Puppet 3.x function of the same name.
* [`is_numeric`](#is_numeric): **Deprecated:** Returns true if the given value is numeric.
* [`is_string`](#is_string): Wrapper that calls the Puppet 3.x function of the same name.
* [`is_string`](#is_string): **Deprecated:** Returns true if the variable passed to this function is a string.
* [`join`](#join): **Deprecated:** This function joins an array into a string using a separator.
* [`join_keys_to_values`](#join_keys_to_values): This function joins each key of a hash to that key's corresponding value with a
separator.
* [`keys`](#keys): **Deprecated:** Returns the keys of a hash as an array.
* [`length`](#length): **Deprecated:** A function to eventually replace the old size() function for stdlib
* [`load_module_metadata`](#load_module_metadata): This function loads the metadata of a given module.
* [`loadjson`](#loadjson): Load a JSON file containing an array, string, or hash, and return the data
in the corresponding native data type.
* [`loadyaml`](#loadyaml): Load a YAML file containing an array, string, or hash, and return the data
in the corresponding native data type.
* [`lstrip`](#lstrip): **Deprecated:** Strips leading spaces to the left of a string.
* [`max`](#max): **Deprecated:** Returns the highest value of all arguments.
* [`member`](#member): This function determines if a variable is a member of an array.
* [`merge`](#merge): Merges two or more hashes together or hashes resulting from iteration, and returns
the resulting hash.
* [`merge`](#merge): Merges two or more hashes together and returns the resulting hash.
* [`min`](#min): **Deprecated:** Returns the lowest value of all arguments.
* [`num2bool`](#num2bool): This function converts a number or a string representation of a number into a
true boolean.
* [`os_version_gte`](#os_version_gte): Checks if the OS version is at least a certain version.
* [`parsehocon`](#parsehocon): This function accepts HOCON as a string and converts it into the correct
Puppet structure
* [`parsejson`](#parsejson): This function accepts JSON as a string and converts it into the correct
Puppet structure.
* [`parseyaml`](#parseyaml): This function accepts YAML as a string and converts it into the correct
Puppet structure.
* [`pick`](#pick): This function is similar to a coalesce function in SQL in that it will return
the first value in a list of values that is not undefined or an empty string.
* [`pick_default`](#pick_default): This function will return the first value in a list of values that is not undefined or an empty string.
* [`prefix`](#prefix): This function applies a prefix to all elements in an array or a hash.
* [`private`](#private): **Deprecated:** Sets the current class or definition as private.
Calling the class or definition from outside the current module will fail.
* [`pry`](#pry): This function invokes a pry debugging session in the current scope object.
* [`pw_hash`](#pw_hash): Please note: This function is an implementation of a Ruby class and as such may not be entirely UTF8 compatible. To ensure compatibility ple
* [`range`](#range): When given range in the form of (start, stop) it will extrapolate a range as
an array.
* [`regexpescape`](#regexpescape): Regexp escape a string or array of strings.
Requires either a single string or an array as an input.
* [`reject`](#reject): This function searches through an array and rejects all elements that match
the provided regular expression.
* [`reverse`](#reverse): Reverses the order of a string or array.
* [`round`](#round): Rounds a number to the nearest integer
* [`rstrip`](#rstrip): Strips leading spaces to the right of the string.
* [`seeded_rand`](#seeded_rand): seeded_rand.rb
* [`seeded_rand_string`](#seeded_rand_string): Generates a consistent random string of specific length based on provided seed.
* [`shell_escape`](#shell_escape): Escapes a string so that it can be safely used in a Bourne shell command line.
* [`shell_join`](#shell_join): Builds a command line string from the given array of strings. Each array item is escaped for Bourne shell. All items are then joined together
* [`shell_split`](#shell_split): Splits a string into an array of tokens in the same way the Bourne shell does.
* [`shuffle`](#shuffle): @summary Randomizes the order of a string or array elements.
* [`size`](#size): Returns the number of elements in a string, an array or a hash
* [`sort`](#sort): Sorts strings and arrays lexically.
* [`sprintf_hash`](#sprintf_hash): Uses sprintf with named references.
* [`squeeze`](#squeeze): Returns a new string where runs of the same character that occur in this set are replaced by a single character.
* [`stdlib::end_with`](#stdlibend_with): Returns true if str ends with one of the prefixes given. Each of the prefixes should be a String.
* [`stdlib::ensure`](#stdlibensure): function to cast ensure parameter to resource specific value
* [`stdlib::extname`](#stdlibextname): Returns the Extension (the Portion of Filename in Path starting from the
last Period).
* [`stdlib::ip_in_range`](#stdlibip_in_range): Returns true if the ipaddress is within the given CIDRs
* [`stdlib::start_with`](#stdlibstart_with): Returns true if str starts with one of the prefixes given. Each of the prefixes should be a String.
* [`str2bool`](#str2bool): This converts a string to a boolean.
* [`str2saltedpbkdf2`](#str2saltedpbkdf2): Convert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+
* [`str2saltedsha512`](#str2saltedsha512): This converts a string to a salted-SHA512 password hash (which is used for
OS X versions >= 10.7).
* [`strip`](#strip): This function removes leading and trailing whitespace from a string or from
every string inside an array.
* [`suffix`](#suffix): This function applies a suffix to all elements in an array, or to the keys
in a hash.
* [`swapcase`](#swapcase): This function will swap the existing case of a string.
* [`time`](#time): This function will return the current time since epoch as an integer.
* [`to_bytes`](#to_bytes): Converts the argument into bytes, for example 4 kB becomes 4096.
* [`to_json`](#to_json): }
* [`to_json_pretty`](#to_json_pretty): Convert data structure and output to pretty JSON
* [`to_yaml`](#to_yaml): }
* [`try_get_value`](#try_get_value)
* [`type`](#type): **DEPRECATED:** This function will cease to function on Puppet 4;
* [`type3x`](#type3x): **DEPRECATED:** This function will be removed when Puppet 3 support is dropped; please migrate to the new parser's typing system.
* [`type_of`](#type_of): Returns the type of the passed value.
* [`union`](#union): This function returns a union of two or more arrays.
* [`unique`](#unique): This function will remove duplicates from strings and arrays.
* [`unix2dos`](#unix2dos): Returns the DOS version of the given string.
* [`upcase`](#upcase): Converts a string or an array of strings to uppercase.
* [`uriescape`](#uriescape): Urlencodes a string or array of strings.
Requires either a single string or an array as an input.
* [`validate_absolute_path`](#validate_absolute_path): Validate the string represents an absolute path in the filesystem.
* [`validate_absolute_path`](#validate_absolute_path): Validate the string represents an absolute path in the filesystem. This function works
for windows and unix style paths.
* [`validate_array`](#validate_array): Validate the passed value represents an array.
* [`validate_array`](#validate_array): Validate that all passed values are array data structures. Abort catalog
compilation if any value fails this check.
* [`validate_augeas`](#validate_augeas): Perform validation of a string using an Augeas lens
* [`validate_bool`](#validate_bool): Validate the passed value represents a boolean.
* [`validate_bool`](#validate_bool): Validate that all passed values are either true or false. Abort catalog
compilation if any value fails this check.
* [`validate_cmd`](#validate_cmd): Perform validation of a string with an external command.
* [`validate_domain_name`](#validate_domain_name): Validate that all values passed are syntactically correct domain names.
Fail compilation if any value fails this check.
* [`validate_email_address`](#validate_email_address): Validate that all values passed are valid email addresses.
Fail compilation if any value fails this check.
* [`validate_hash`](#validate_hash): Validate the passed value represents a hash.
* [`validate_hash`](#validate_hash): Validate that all passed values are hash data structures. Abort catalog
compilation if any value fails this check.
* [`validate_integer`](#validate_integer): Validate the passed value represents an integer.
* [`validate_integer`](#validate_integer): Validate that the first argument is an integer (or an array of integers). Abort catalog compilation if any of the checks fail.
* [`validate_ip_address`](#validate_ip_address): Validate the passed value represents an ip_address.
* [`validate_ip_address`](#validate_ip_address): Validate that all values passed are valid IP addresses,
regardless they are IPv4 or IPv6
Fail compilation if any value fails this check.
* [`validate_ipv4_address`](#validate_ipv4_address): Validate the passed value represents an ipv4_address.
* [`validate_ipv4_address`](#validate_ipv4_address): Validate that all values passed are valid IPv4 addresses.
Fail compilation if any value fails this check.
* [`validate_ipv6_address`](#validate_ipv6_address): Validate the passed value represents an ipv6_address.
* [`validate_ipv6_address`](#validate_ipv6_address): Validate that all values passed are valid IPv6 addresses.
Fail compilation if any value fails this check.
* [`validate_legacy`](#validate_legacy): Validate a value against both the target_type (new) and the previous_validation function (old).
* [`validate_numeric`](#validate_numeric): Validate the passed value represents a numeric value.
* [`validate_numeric`](#validate_numeric): Validate that the first argument is a numeric value (or an array of numeric values). Abort catalog compilation if any of the checks fail.
* [`validate_re`](#validate_re): Perform validation of a string against one or more regular
expressions.
* [`validate_re`](#validate_re): Perform simple validation of a string against one or more regular
expressions.
* [`validate_slength`](#validate_slength): Validate that a passed string has length less/equal with the passed value
* [`validate_slength`](#validate_slength): Validate that the first argument is a string (or an array of strings), and less/equal to than the length of the second argument.
An optional third parameter can be given the minimum length. It fails if the first argument is not a string or array of strings,
and if arg 2 and arg 3 are not convertable to a number.
* [`validate_string`](#validate_string): Validate that all passed values are string data structures.
* [`validate_string`](#validate_string): Validate that all passed values are string data structures
* [`validate_x509_rsa_key_pair`](#validate_x509_rsa_key_pair): Validates a PEM-formatted X.509 certificate and RSA private key using
OpenSSL. Verifies that the certficate's signature was created from the
supplied key.
* [`values`](#values): When given a hash this function will return the values of that hash.
* [`values_at`](#values_at): Finds value inside an array based on location.
* [`zip`](#zip): Takes one element from first array and merges corresponding elements from second array.
### Data types
* [`Stdlib::Absolutepath`](#stdlibabsolutepath): A strict absolutepath type
* [`Stdlib::Base32`](#stdlibbase32): Type to match base32 String
* [`Stdlib::Base64`](#stdlibbase64): Type to match base64 String
* [`Stdlib::Compat::Absolute_path`](#stdlibcompatabsolute_path): Emulate the is_absolute_path and validate_absolute_path functions The first pattern is originally from is_absolute_path, which had it from 2
* [`Stdlib::Compat::Array`](#stdlibcompatarray): Emulate the is_array and validate_array functions
* [`Stdlib::Compat::Bool`](#stdlibcompatbool): Emulate the is_bool and validate_bool functions
* [`Stdlib::Compat::Float`](#stdlibcompatfloat): Emulate the is_float function The regex is what's currently used in is_float To keep your development moving forward, you can also add a depr
* [`Stdlib::Compat::Hash`](#stdlibcompathash): Emulate the is_hash and validate_hash functions
* [`Stdlib::Compat::Integer`](#stdlibcompatinteger): Emulate the is_integer and validate_integer functions The regex is what's currently used in is_integer validate_numeric also allows range che
* [`Stdlib::Compat::Ip_address`](#stdlibcompatip_address)
* [`Stdlib::Compat::Ipv4`](#stdlibcompatipv4): Emulate the validate_ipv4_address and is_ipv4_address functions
* [`Stdlib::Compat::Ipv6`](#stdlibcompatipv6)
* [`Stdlib::Compat::Numeric`](#stdlibcompatnumeric): Emulate the is_numeric and validate_numeric functions The regex is what's currently used in is_numeric validate_numeric also allows range che
* [`Stdlib::Compat::String`](#stdlibcompatstring): Emulate the is_string and validate_string functions
* [`Stdlib::Datasize`](#stdlibdatasize)
* [`Stdlib::Email`](#stdlibemail): https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address
* [`Stdlib::Ensure::File`](#stdlibensurefile)
* [`Stdlib::Ensure::File::Directory`](#stdlibensurefiledirectory)
* [`Stdlib::Ensure::File::File`](#stdlibensurefilefile)
* [`Stdlib::Ensure::File::Link`](#stdlibensurefilelink)
* [`Stdlib::Ensure::Service`](#stdlibensureservice)
* [`Stdlib::Filemode`](#stdlibfilemode): See `man chmod.1` for the regular expression for symbolic mode lint:ignore:140chars
* [`Stdlib::Filesource`](#stdlibfilesource): Validate the source parameter on file types
* [`Stdlib::Fqdn`](#stdlibfqdn)
* [`Stdlib::HTTPSUrl`](#stdlibhttpsurl)
* [`Stdlib::HTTPUrl`](#stdlibhttpurl)
* [`Stdlib::Host`](#stdlibhost)
* [`Stdlib::HttpStatus`](#stdlibhttpstatus)
* [`Stdlib::IP::Address`](#stdlibipaddress)
* [`Stdlib::IP::Address::Nosubnet`](#stdlibipaddressnosubnet)
* [`Stdlib::IP::Address::V4`](#stdlibipaddressv4)
* [`Stdlib::IP::Address::V4::CIDR`](#stdlibipaddressv4cidr): lint:ignore:140chars
* [`Stdlib::IP::Address::V4::Nosubnet`](#stdlibipaddressv4nosubnet): lint:ignore:140chars
* [`Stdlib::IP::Address::V6`](#stdlibipaddressv6)
* [`Stdlib::IP::Address::V6::Alternative`](#stdlibipaddressv6alternative): lint:ignore:140chars
* [`Stdlib::IP::Address::V6::CIDR`](#stdlibipaddressv6cidr): lint:ignore:140chars
* [`Stdlib::IP::Address::V6::Compressed`](#stdlibipaddressv6compressed)
* [`Stdlib::IP::Address::V6::Full`](#stdlibipaddressv6full)
* [`Stdlib::IP::Address::V6::Nosubnet`](#stdlibipaddressv6nosubnet)
* [`Stdlib::IP::Address::V6::Nosubnet::Alternative`](#stdlibipaddressv6nosubnetalternative): lint:ignore:140chars
* [`Stdlib::IP::Address::V6::Nosubnet::Compressed`](#stdlibipaddressv6nosubnetcompressed)
* [`Stdlib::IP::Address::V6::Nosubnet::Full`](#stdlibipaddressv6nosubnetfull)
* [`Stdlib::MAC`](#stdlibmac): A type for a MAC address
* [`Stdlib::ObjectStore`](#stdlibobjectstore)
* [`Stdlib::ObjectStore::GSUri`](#stdlibobjectstoregsuri)
* [`Stdlib::ObjectStore::S3Uri`](#stdlibobjectstores3uri)
* [`Stdlib::Port`](#stdlibport)
* [`Stdlib::Port::Dynamic`](#stdlibportdynamic)
* [`Stdlib::Port::Ephemeral`](#stdlibportephemeral)
* [`Stdlib::Port::Privileged`](#stdlibportprivileged)
* [`Stdlib::Port::Registered`](#stdlibportregistered)
* [`Stdlib::Port::Unprivileged`](#stdlibportunprivileged)
* [`Stdlib::Port::User`](#stdlibportuser)
* [`Stdlib::Syslogfacility`](#stdlibsyslogfacility)
* [`Stdlib::Unixpath`](#stdlibunixpath): this regex rejects any path component that does not start with "/" or is NUL
* [`Stdlib::Windowspath`](#stdlibwindowspath)
* [`Stdlib::Yes_no`](#stdlibyes_no)
## Classes
### <a name="stdlib"></a>`stdlib`
Most of stdlib's features are automatically loaded by Puppet, but this class should be
declared in order to use the standardized run stages.
Declares all other classes in the stdlib module. Currently, this consists
of stdlib::stages.
### <a name="stdlibstages"></a>`stdlib::stages`
Declares various run-stages for deploying infrastructure,
language runtimes, and application layers.
The high level stages are (in order):
* setup
* main
* runtime
* setup_infra
* deploy_infra
* setup_app
* deploy_app
* deploy
#### Examples
#####
```puppet
node default {
include ::stdlib
class { java: stage => 'runtime' }
}
```
## Resource types
### <a name="anchor"></a>`anchor`
> Note: this has been replaced by core puppet `contain()` method. Please see https://puppet.com/docs/puppet/latest/lang_containment.html for more information.
In Puppet 2.6, when a class declares another class, the resources in the
interior class are not contained by the exterior class. This interacts badly
with the pattern of composing complex modules from smaller classes, as it
makes it impossible for end users to specify order relationships between the
exterior class and other modules.
The anchor type lets you work around this. By sandwiching any interior
classes between two no-op resources that _are_ contained by the exterior
class, you can ensure that all resources in the module are contained.
```
class ntp {
# These classes will have the correct order relationship with each
# other. However, without anchors, they won't have any order
# relationship to Class['ntp'].
class { 'ntp::package': }
-> class { 'ntp::config': }
-> class { 'ntp::service': }
# These two resources "anchor" the composed classes within the ntp
# class.
anchor { 'ntp::begin': } -> Class['ntp::package']
Class['ntp::service'] -> anchor { 'ntp::end': }
}
```
This allows the end user of the ntp module to establish require and before
relationships with Class['ntp']:
```
class { 'ntp': } -> class { 'mcollective': }
class { 'mcollective': } -> class { 'ntp': }
```
#### Parameters
The following parameters are available in the `anchor` type.
* [`name`](#name)
##### <a name="name"></a>`name`
namevar
The name of the anchor resource.
### <a name="file_line"></a>`file_line`
The implementation matches the full line, including whitespace at the
beginning and end. If the line is not contained in the given file, Puppet
will append the line to the end of the file to ensure the desired state.
Multiple resources may be declared to manage multiple lines in the same file.
* Ensure Example
```
file_line { 'sudo_rule':
path => '/etc/sudoers',
line => '%sudo ALL=(ALL) ALL',
}
file_line { 'sudo_rule_nopw':
path => '/etc/sudoers',
line => '%sudonopw ALL=(ALL) NOPASSWD: ALL',
}
```
In this example, Puppet will ensure both of the specified lines are
contained in the file /etc/sudoers.
* Match Example
```
file_line { 'bashrc_proxy':
ensure => present,
path => '/etc/bashrc',
line => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',
match => '^export\ HTTP_PROXY\=',
}
```
In this code example match will look for a line beginning with export
followed by HTTP_PROXY and replace it with the value in line.
* Examples With `ensure => absent`:
This type has two behaviors when `ensure => absent` is set.
One possibility is to set `match => ...` and `match_for_absence => true`,
as in the following example:
```
file_line { 'bashrc_proxy':
ensure => absent,
path => '/etc/bashrc',
match => '^export\ HTTP_PROXY\=',
match_for_absence => true,
}
```
In this code example match will look for a line beginning with export
followed by HTTP_PROXY and delete it. If multiple lines match, an
error will be raised unless the `multiple => true` parameter is set.
Note that the `line => ...` parameter would be accepted BUT IGNORED in
the above example.
The second way of using `ensure => absent` is to specify a `line => ...`,
and no match:
```
file_line { 'bashrc_proxy':
ensure => absent,
path => '/etc/bashrc',
line => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128',
}
```
> *Note:*
When ensuring lines are absent this way, the default behavior
this time is to always remove all lines matching, and this behavior
can't be disabled.
* Encoding example:
```
file_line { "XScreenSaver":
ensure => present,
path => '/root/XScreenSaver',
line => "*lock: 10:00:00",
match => '^*lock:',
encoding => "iso-8859-1",
}
```
Files with special characters that are not valid UTF-8 will give the
error message "invalid byte sequence in UTF-8". In this case, determine
the correct file encoding and specify the correct encoding using the
encoding attribute, the value of which needs to be a valid Ruby character
encoding.
**Autorequires:** If Puppet is managing the file that will contain the line
being managed, the file_line resource will autorequire that file.
#### Properties
The following properties are available in the `file_line` type.
##### `ensure`
Valid values: `present`, `absent`
Manage the state of this type.
Default value: `present`
##### `line`
The line to be appended to the file or used to replace matches found by the match attribute.
#### Parameters
The following parameters are available in the `file_line` type.
* [`after`](#after)
* [`append_on_no_match`](#append_on_no_match)
* [`encoding`](#encoding)
* [`match`](#match)
* [`match_for_absence`](#match_for_absence)
* [`multiple`](#multiple)
* [`name`](#name)
* [`path`](#path)
* [`provider`](#provider)
* [`replace`](#replace)
* [`replace_all_matches_not_matching_line`](#replace_all_matches_not_matching_line)
##### <a name="after"></a>`after`
An optional value used to specify the line after which we will add any new lines. (Existing lines are added in place)
This is also takes a regex.
##### <a name="append_on_no_match"></a>`append_on_no_match`
Valid values: ``true``, ``false``
If true, append line if match is not found. If false, do not append line if a match is not found
Default value: ``true``
##### <a name="encoding"></a>`encoding`
For files that are not UTF-8 encoded, specify encoding such as iso-8859-1
Default value: `UTF-8`
##### <a name="match"></a>`match`
An optional ruby regular expression to run against existing lines in the file.
If a match is found, we replace that line rather than adding a new line.
A regex comparison is performed against the line value and if it does not
match an exception will be raised.
##### <a name="match_for_absence"></a>`match_for_absence`
Valid values: ``true``, ``false``
An optional value to determine if match should be applied when ensure => absent.
If set to true and match is set, the line that matches match will be deleted.
If set to false (the default), match is ignored when ensure => absent.
When `ensure => present`, match_for_absence is ignored.
Default value: ``false``
##### <a name="multiple"></a>`multiple`
Valid values: ``true``, ``false``
An optional value to determine if match can change multiple lines.
If set to false, an exception will be raised if more than one line matches
##### <a name="name"></a>`name`
namevar
An arbitrary name used as the identity of the resource.
##### <a name="path"></a>`path`
The file Puppet will ensure contains the line specified by the line parameter.
##### <a name="provider"></a>`provider`
The specific backend to use for this `file_line` resource. You will seldom need to specify this --- Puppet will usually
discover the appropriate provider for your platform.
##### <a name="replace"></a>`replace`
Valid values: ``true``, ``false``
If true, replace line that matches. If false, do not write line if a match is found
Default value: ``true``
##### <a name="replace_all_matches_not_matching_line"></a>`replace_all_matches_not_matching_line`
Valid values: ``true``, ``false``
Configures the behavior of replacing all lines in a file which match the `match` parameter regular expression,
regardless of whether the specified line is already present in the file.
Default value: ``false``
## Functions
### <a name="abs"></a>`abs`
Type: Ruby 3.x API
For example -34.56 becomes 34.56.
Takes a single integer or float value as an argument.
> *Note:*
**Deprected** from Puppet 6.0.0, the built-in
['abs'](https://puppet.com/docs/puppet/6.4/function.html#abs)function will be used instead.
#### `abs()`
For example -34.56 becomes 34.56.
Takes a single integer or float value as an argument.
> *Note:*
**Deprected** from Puppet 6.0.0, the built-in
['abs'](https://puppet.com/docs/puppet/6.4/function.html#abs)function will be used instead.
Returns: `Any` The absolute value of the given number if it was an Integer
### <a name="any2array"></a>`any2array`
Type: Ruby 3.x API
Empty argument lists are converted to an empty array. Arrays are left
untouched. Hashes are converted to arrays of alternating keys and values.
> *Note:*
since Puppet 5.0.0 it is possible to create new data types for almost any
datatype using the type system and the built-in
[`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)
function is used to create a new Array..
```
$hsh = {'key' => 42, 'another-key' => 100}
notice(Array($hsh))
```
Would notice `[['key', 42], ['another-key', 100]]`
The Array data type also has a special mode to "create an array if not already an array"
```
notice(Array({'key' => 42, 'another-key' => 100}, true))
```
Would notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being
transformed into an array.
#### `any2array()`
Empty argument lists are converted to an empty array. Arrays are left
untouched. Hashes are converted to arrays of alternating keys and values.
> *Note:*
since Puppet 5.0.0 it is possible to create new data types for almost any
datatype using the type system and the built-in
[`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)
function is used to create a new Array..
```
$hsh = {'key' => 42, 'another-key' => 100}
notice(Array($hsh))
```
Would notice `[['key', 42], ['another-key', 100]]`
The Array data type also has a special mode to "create an array if not already an array"
```
notice(Array({'key' => 42, 'another-key' => 100}, true))
```
Would notice `[{'key' => 42, 'another-key' => 100}]`, as the `true` flag prevents the hash from being
transformed into an array.
Returns: `Array` The new array containing the given object
### <a name="any2bool"></a>`any2bool`
Type: Ruby 3.x API
In practise it does the following:
* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true
* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false
* Booleans will just return their original value
* Number (or a string representation of a number) > 0 will return true, otherwise false
* undef will return false
* Anything else will return true
Also see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)
function.
#### `any2bool()`
In practise it does the following:
* Strings such as Y,y,1,T,t,TRUE,yes,'true' will return true
* Strings such as 0,F,f,N,n,FALSE,no,'false' will return false
* Booleans will just return their original value
* Number (or a string representation of a number) > 0 will return true, otherwise false
* undef will return false
* Anything else will return true
Also see the built-in [`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)
function.
Returns: `Boolean` The boolean value of the object that was given
### <a name="assert_private"></a>`assert_private`
Type: Ruby 3.x API
Calling the class or definition from outside the current module will fail.
#### `assert_private()`
Calling the class or definition from outside the current module will fail.
Returns: `Any` set the current class or definition as private.
### <a name="base64"></a>`base64`
Type: Ruby 3.x API
> **Note:*
Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.
See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`
function for reading a file with binary (non UTF-8) content.
#### Examples
##### Example usage
```puppet
Encode and decode a string
$encodestring = base64('encode', 'thestring')
$decodestring = base64('decode', 'dGhlc3RyaW5n')
Explicitly define encode/decode method: default, strict, urlsafe
$method = 'default'
$encodestring = base64('encode', 'thestring', $method)
$decodestring = base64('decode', 'dGhlc3RyaW5n', $method)
Encode a string as if it was binary
$encodestring = String(Binary('thestring', '%s'))
Decode a Binary assuming it is an UTF-8 String
$decodestring = String(Binary("dGhlc3RyaW5n"), "%s")
```
#### `base64()`
> **Note:*
Since Puppet 4.8.0, the Binary data type can be used to produce base 64 encoded strings.
See the `new()` function for the Binary and String types for documentation. Also see `binary_file()`
function for reading a file with binary (non UTF-8) content.
Returns: `String` The encoded/decoded va
##### Examples
###### Example usage
```puppet
Encode and decode a string
$encodestring = base64('encode', 'thestring')
$decodestring = base64('decode', 'dGhlc3RyaW5n')
Explicitly define encode/decode method: default, strict, urlsafe
$method = 'default'
$encodestring = base64('encode', 'thestring', $method)
$decodestring = base64('decode', 'dGhlc3RyaW5n', $method)
Encode a string as if it was binary
$encodestring = String(Binary('thestring', '%s'))
Decode a Binary assuming it is an UTF-8 String
$decodestring = String(Binary("dGhlc3RyaW5n"), "%s")
```
### <a name="basename"></a>`basename`
Type: Ruby 3.x API
Strips directory (and optional suffix) from a filename
#### `basename()`
The basename function.
Returns: `String` The stripped filename
### <a name="bool2num"></a>`bool2num`
Type: Ruby 3.x API
Converts the values:
```
false, f, 0, n, and no to 0
true, t, 1, y, and yes to 1
```
Requires a single boolean or string as an input.
> *Note:*
since Puppet 5.0.0 it is possible to create new data types for almost any
datatype using the type system and the built-in
[`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),
[`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and
[`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)
function are used to convert to numeric values.
```
notice(Integer(false)) # Notices 0
notice(Float(true)) # Notices 1.0
```
#### `bool2num()`
Converts the values:
```
false, f, 0, n, and no to 0
true, t, 1, y, and yes to 1
```
Requires a single boolean or string as an input.
> *Note:*
since Puppet 5.0.0 it is possible to create new data types for almost any
datatype using the type system and the built-in
[`Numeric.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-numeric),
[`Integer.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-integer), and
[`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float)
function are used to convert to numeric values.
```
notice(Integer(false)) # Notices 0
notice(Float(true)) # Notices 1.0
```
Returns: `Integer` The converted value as a number
### <a name="bool2str"></a>`bool2str`
Type: Ruby 3.x API
The optional second and third arguments represent what true and false will be
converted to respectively. If only one argument is given, it will be
converted from a boolean to a string containing 'true' or 'false'.
**Examples of usage**
```
bool2str(true) => 'true'
bool2str(true, 'yes', 'no') => 'yes'
bool2str(false, 't', 'f') => 'f'
```
Requires a single boolean as an input.
> *Note:*
since Puppet 5.0.0 it is possible to create new data types for almost any
datatype using the type system and the built-in
[`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)
function is used to convert to String with many different format options.
```
notice(String(false)) # Notices 'false'
notice(String(true)) # Notices 'true'
notice(String(false, '%y')) # Notices 'yes'
notice(String(true, '%y')) # Notices 'no'
```
#### `bool2str()`
The optional second and third arguments represent what true and false will be
converted to respectively. If only one argument is given, it will be
converted from a boolean to a string containing 'true' or 'false'.
**Examples of usage**
```
bool2str(true) => 'true'
bool2str(true, 'yes', 'no') => 'yes'
bool2str(false, 't', 'f') => 'f'
```
Requires a single boolean as an input.
> *Note:*
since Puppet 5.0.0 it is possible to create new data types for almost any
datatype using the type system and the built-in
[`String.new`](https://puppet.com/docs/puppet/latest/function.html#boolean-to-string)
function is used to convert to String with many different format options.
```
notice(String(false)) # Notices 'false'
notice(String(true)) # Notices 'true'
notice(String(false, '%y')) # Notices 'yes'
notice(String(true, '%y')) # Notices 'no'
```
Returns: `Any` The converted value to string of the given Boolean
### <a name="camelcase"></a>`camelcase`
Type: Ruby 3.x API
> *Note:*
**Deprecated** from Puppet 6.0.0, this function has been replaced with
a built-in [`camelcase`](https://puppet.com/docs/puppet/latest/function.html#camelcase)
function.
#### `camelcase()`
> *Note:*
**Deprecated** from Puppet 6.0.0, this function has been replaced with
a built-in [`camelcase`](https://puppet.com/docs/puppet/latest/function.html#camelcase)
function.
Returns: `String` The converted String, if it was a String that was given
### <a name="capitalize"></a>`capitalize`
Type: Ruby 3.x API
Requires either a single string or an array as an input.
> *Note:*
**Deprecated** from Puppet 6.0.0, yhis function has been replaced with a
built-in [`capitalize`](https://puppet.com/docs/puppet/latest/function.html#capitalize)
function.
#### `capitalize()`
Requires either a single string or an array as an input.
> *Note:*
**Deprecated** from Puppet 6.0.0, yhis function has been replaced with a
built-in [`capitalize`](https://puppet.com/docs/puppet/latest/function.html#capitalize)
function.
Returns: `String` The converted String, if it was a String that was given
### <a name="ceiling"></a>`ceiling`
Type: Ruby 3.x API
Takes a single numeric value as an argument.
> *Note:*
**Deprecated** from Puppet 6.0.0, this function has been replaced with a
built-in [`ceiling`](https://puppet.com/docs/puppet/latest/function.html#ceiling) function.
#### `ceiling()`
Takes a single numeric value as an argument.
> *Note:*
**Deprecated** from Puppet 6.0.0, this function has been replaced with a
built-in [`ceiling`](https://puppet.com/docs/puppet/latest/function.html#ceiling) function.
Returns: `Integer` The rounded value
### <a name="chomp"></a>`chomp`
Type: Ruby 3.x API
For example `hello\n` becomes `hello`.
Requires a single string or array as an input.
> *Note:*
**Deprecated** from Puppet 6.0.0, this function has been replaced with a
built-in [`chomp`](https://puppet.com/docs/puppet/latest/function.html#chomp) function.
#### `chomp()`
For example `hello\n` becomes `hello`.
Requires a single string or array as an input.
> *Note:*
**Deprecated** from Puppet 6.0.0, this function has been replaced with a
built-in [`chomp`](https://puppet.com/docs/puppet/latest/function.html#chomp) function.
Returns: `String` The converted String, if it was a String that was given
### <a name="chop"></a>`chop`
Type: Ruby 3.x API
If the string ends with `\r\n`, both characters are removed. Applying
chop to an empty string returns an empty string. If you wish to merely
remove record separators then you should use the `chomp` function.
Requires a string or array of strings as input.
> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a
built-in [`chop`](https://puppet.com/docs/puppet/latest/function.html#chop) function.
#### `chop()`
If the string ends with `\r\n`, both characters are removed. Applying
chop to an empty string returns an empty string. If you wish to merely
remove record separators then you should use the `chomp` function.
Requires a string or array of strings as input.
> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a
built-in [`chop`](https://puppet.com/docs/puppet/latest/function.html#chop) function.
Returns: `String` The given String, sans the last character.
### <a name="clamp"></a>`clamp`
Type: Ruby 3.x API
Strings are converted and compared numerically. Arrays of values are flattened
into a list for further handling.
> *Note:*
From Puppet 6.0.0 this can be done with only core Puppet like this:
`[$minval, $maxval, $value_to_clamp].sort[1]`
#### Examples
##### Example usage
```puppet
clamp('24', [575, 187])` returns 187.
clamp(16, 88, 661)` returns 88.
clamp([4, 3, '99'])` returns 4.
```
#### `clamp()`
Strings are converted and compared numerically. Arrays of values are flattened
into a list for further handling.
> *Note:*
From Puppet 6.0.0 this can be done with only core Puppet like this:
`[$minval, $maxval, $value_to_clamp].sort[1]`
Returns: `Array[Integer]` The sorted Array
##### Examples
###### Example usage
```puppet
clamp('24', [575, 187])` returns 187.
clamp(16, 88, 661)` returns 88.
clamp([4, 3, '99'])` returns 4.
```
### <a name="concat"></a>`concat`
Type: Ruby 3.x API
> *Note:*
Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and
merge of hashes, and the `<<`` operator for appending:
`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`
`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`
`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`
#### Examples
##### Example usage
```puppet
concat(['1','2','3'],'4') returns ['1','2','3','4']
concat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']
```
#### `concat()`
> *Note:*
Since Puppet 4.0, you can use the `+`` operator for concatenation of arrays and
merge of hashes, and the `<<`` operator for appending:
`['1','2','3'] + ['4','5','6'] + ['7','8','9']` returns `['1','2','3','4','5','6','7','8','9']`
`[1, 2, 3] << 4` returns `[1, 2, 3, 4]`
`[1, 2, 3] << [4, 5]` returns `[1, 2, 3, [4, 5]]`
Returns: `Array` The single concatenated array
##### Examples
###### Example usage
```puppet
concat(['1','2','3'],'4') returns ['1','2','3','4']
concat(['1','2','3'],'4',['5','6','7']) returns ['1','2','3','4','5','6','7']
```
### <a name="convert_base"></a>`convert_base`
Type: Ruby 3.x API
convert_base(5, 2)` results in: `'101'`
convert_base('254', '16')` results in: `'fe'`
> *Note:*
Since Puppet 4.5.0 this can be done with the built-in
[`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)
function and its many formatting options:
`$binary_repr = String(5, '%b')` return `"101"`
`$hex_repr = String(254, "%x")` return `"fe"`
`$hex_repr = String(254, "%#x")` return `"0xfe"`
@return [String] The converted value as a Str
#### Examples
##### Example usage
```puppet
```
#### `convert_base()`
convert_base(5, 2)` results in: `'101'`
convert_base('254', '16')` results in: `'fe'`
> *Note:*
Since Puppet 4.5.0 this can be done with the built-in
[`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)
function and its many formatting options:
`$binary_repr = String(5, '%b')` return `"101"`
`$hex_repr = String(254, "%x")` return `"fe"`
`$hex_repr = String(254, "%#x")` return `"0xfe"`
@return [String] The converted value as a Str
Returns: `Any` converted value as a string
##### Examples
###### Example usage
```puppet
```
### <a name="count"></a>`count`
Type: Ruby 3.x API
Takes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.
If called with only an array, it counts the number of elements that are not nil/undef/empty-string.
> *Note:*
equality is tested with a Ruby method and it is therefore subject to what Ruby considers
to be equal. For strings this means that equality is case sensitive.
In Puppet core, counting can be done in general by using a combination of the core functions
filter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).
Example below shows counting values that are not undef.
```notice([42, "hello", undef].filter |$x| { $x =~ NotUndef }.length)```
Would notice the value 2.
#### `count()`
Takes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.
If called with only an array, it counts the number of elements that are not nil/undef/empty-string.
> *Note:*
equality is tested with a Ruby method and it is therefore subject to what Ruby considers
to be equal. For strings this means that equality is case sensitive.
In Puppet core, counting can be done in general by using a combination of the core functions
filter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).
Example below shows counting values that are not undef.
```notice([42, "hello", undef].filter |$x| { $x =~ NotUndef }.length)```
Would notice the value 2.
Returns: `Integer` The amount of elements counted within the array
### <a name="deep_merge"></a>`deep_merge`
Type: Ruby 3.x API
Recursively merges two or more hashes together and returns the resulting hash.
#### Examples
##### Example usage
```puppet
$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }
$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }
$merged_hash = deep_merge($hash1, $hash2)
The resulting hash is equivalent to:
$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }
When there is a duplicate key that is a hash, they are recursively merged.
When there is a duplicate key that is not a hash, the key in the rightmost hash will "win."
```
#### `deep_merge()`
The deep_merge function.
Returns: `Hash` The merged h
##### Examples
###### Example usage
```puppet
$hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }
$hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } }
$merged_hash = deep_merge($hash1, $hash2)
The resulting hash is equivalent to:
$merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } }
When there is a duplicate key that is a hash, they are recursively merged.
When there is a duplicate key that is not a hash, the key in the rightmost hash will "win."
```
### <a name="defined_with_params"></a>`defined_with_params`
Type: Ruby 3.x API
The defined_with_params function.
#### `defined_with_params()`
The defined_with_params function.
Returns: `Any`
### <a name="delete"></a>`delete`
Type: Ruby 3.x API
> *Note:*
From Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash
`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`
>
A global delete from a string can be performed with the
[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:
`'abracadabra'.regsubst(/bra/, '', 'G')`
In general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)
function can filter out entries from arrays and hashes based on keys and/or values.
#### Examples
##### Example usage
```puppet
delete(['a','b','c','b'], 'b')
Would return: ['a','c']
delete({'a'=>1,'b'=>2,'c'=>3}, 'b')
Would return: {'a'=>1,'c'=>3}
delete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])
Would return: {'a'=>1}
delete('abracadabra', 'bra')
Would return: 'acada'
['a', 'b', 'c', 'b'] - 'b'
Would return: ['a', 'c']
{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])
Would return: {'a' => '1'}
'abracadabra'.regsubst(/bra/, '', 'G')
Would return: 'acada'
```
#### `delete()`
> *Note:*
From Puppet 4.0.0 the minus (-) operator deletes values from arrays and keys from a hash
`{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])`
>
A global delete from a string can be performed with the
[`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst) function:
`'abracadabra'.regsubst(/bra/, '', 'G')`
In general, the built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)
function can filter out entries from arrays and hashes based on keys and/or values.
Returns: `String` The filtered String, if one was given.
##### Examples
###### Example usage
```puppet
delete(['a','b','c','b'], 'b')
Would return: ['a','c']
delete({'a'=>1,'b'=>2,'c'=>3}, 'b')
Would return: {'a'=>1,'c'=>3}
delete({'a'=>1,'b'=>2,'c'=>3}, ['b','c'])
Would return: {'a'=>1}
delete('abracadabra', 'bra')
Would return: 'acada'
['a', 'b', 'c', 'b'] - 'b'
Would return: ['a', 'c']
{'a'=>1,'b'=>2,'c'=>3} - ['b','c'])
Would return: {'a' => '1'}
'abracadabra'.regsubst(/bra/, '', 'G')
Would return: 'acada'
```
### <a name="delete_at"></a>`delete_at`
Type: Ruby 3.x API
For example
```delete_at(['a','b','c'], 1)```
Would return: `['a','c']`
> *Note:*
Since Puppet 4 this can be done in general with the built-in
[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:
```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```
Or if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:
```
$array[0, -1] # the same as all the values
$array[2, -1] # all but the first 2 elements
$array[0, -3] # all but the last 2 elements
$array[1, -2] # all but the first and last element
```
#### `delete_at()`
For example
```delete_at(['a','b','c'], 1)```
Would return: `['a','c']`
> *Note:*
Since Puppet 4 this can be done in general with the built-in
[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:
```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }```
Or if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]:
```
$array[0, -1] # the same as all the values
$array[2, -1] # all but the first 2 elements
$array[0, -3] # all but the last 2 elements
$array[1, -2] # all but the first and last element
```
Returns: `Array` The given array, now missing the tar
### <a name="delete_regex"></a>`delete_regex`
Type: Ruby 3.x API
Multiple regular expressions are assumed to be matched as an OR.
> *Note:*
Since Puppet 4 this can be done in general with the built-in
[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:
["aaa", "aba", "aca"].filter |$val| { $val !~ /b/ }
Would return: ['aaa', 'aca']
#### Examples
##### Example usage
```puppet
delete_regex(['a','b','c','b'], 'b')
Would return: ['a','c']
delete_regex(['a','b','c','b'], ['b', 'c'])
Would return: ['a']
delete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')
Would return: {'a'=>1,'c'=>3}
delete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')
Would return: {'b'=>2,'c'=>3}
```
#### `delete_regex()`
Multiple regular expressions are assumed to be matched as an OR.
> *Note:*
Since Puppet 4 this can be done in general with the built-in
[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:
["aaa", "aba", "aca"].filter |$val| { $val !~ /b/ }
Would return: ['aaa', 'aca']
Returns: `Array` The given array now missing all targeted values.
##### Examples
###### Example usage
```puppet
delete_regex(['a','b','c','b'], 'b')
Would return: ['a','c']
delete_regex(['a','b','c','b'], ['b', 'c'])
Would return: ['a']
delete_regex({'a'=>1,'b'=>2,'c'=>3}, 'b')
Would return: {'a'=>1,'c'=>3}
delete_regex({'a'=>1,'b'=>2,'c'=>3}, '^a$')
Would return: {'b'=>2,'c'=>3}
```
### <a name="delete_undef_values"></a>`delete_undef_values`
Type: Ruby 3.x API
> *Note:*
Since Puppet 4.0.0 the equivalent can be performed with the built-in
[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:
$array.filter |$val| { $val =~ NotUndef }
$hash.filter |$key, $val| { $val =~ NotUndef }
#### Examples
##### Example usage
```puppet
$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})
Would return: {a => 'A', b => '', d => false}
While:
$array = delete_undef_values(['A','',undef,false])
Would return: ['A','',false]
```
#### `delete_undef_values()`
> *Note:*
Since Puppet 4.0.0 the equivalent can be performed with the built-in
[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:
$array.filter |$val| { $val =~ NotUndef }
$hash.filter |$key, $val| { $val =~ NotUndef }
Returns: `Array` The given array now issing of undefined values.
##### Examples
###### Example usage
```puppet
$hash = delete_undef_values({a=>'A', b=>'', c=>undef, d => false})
Would return: {a => 'A', b => '', d => false}
While:
$array = delete_undef_values(['A','',undef,false])
Would return: ['A','',false]
```
### <a name="delete_values"></a>`delete_values`
Type: Ruby 3.x API
> *Note:*
Since Puppet 4.0.0 the equivalent can be performed with the
built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:
$array.filter |$val| { $val != 'B' }
$hash.filter |$key, $val| { $val != 'B' }
#### Examples
##### Example usage
```puppet
delete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')
Would return: {'a'=>'A','c'=>'C','B'=>'D'}
```
#### `delete_values()`
> *Note:*
Since Puppet 4.0.0 the equivalent can be performed with the
built-in [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function:
$array.filter |$val| { $val != 'B' }
$hash.filter |$key, $val| { $val != 'B' }
Returns: `Hash` The given hash now missing all instances of the targeted value
##### Examples
###### Example usage
```puppet
delete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')
Would return: {'a'=>'A','c'=>'C','B'=>'D'}
```
### <a name="deprecation"></a>`deprecation`
Type: Ruby 4.x API
Function to print deprecation warnings, Logs a warning once for a given key.
The uniqueness key - can appear once.
The msg is the message text including any positional information that is formatted by the
user/caller of the method.
It is affected by the puppet setting 'strict', which can be set to :error
(outputs as an error message), :off (no message / error is displayed) and :warning
(default, outputs a warning) *Type*: String, String.
#### `deprecation(String $key, String $message)`
Function to print deprecation warnings, Logs a warning once for a given key.
The uniqueness key - can appear once.
The msg is the message text including any positional information that is formatted by the
user/caller of the method.
It is affected by the puppet setting 'strict', which can be set to :error
(outputs as an error message), :off (no message / error is displayed) and :warning
(default, outputs a warning) *Type*: String, String.
Returns: `Any` deprecated warnings
##### `key`
Data type: `String`
##### `message`
Data type: `String`
### <a name="deprecation"></a>`deprecation`
Type: Ruby 3.x API
The uniqueness key - can appear once. The msg is the message text including any positional
information that is formatted by the user/caller of the method.).
#### `deprecation()`
The uniqueness key - can appear once. The msg is the message text including any positional
information that is formatted by the user/caller of the method.).
Returns: `String` return deprecation warnings
### <a name="difference"></a>`difference`
Type: Ruby 3.x API
The returned array is a copy of the original array, removing any items that
also appear in the second array.
> *Note:*
Since Puppet 4 the minus (-) operator in the Puppet language does the same thing:
['a', 'b', 'c'] - ['b', 'c', 'd']
Would return: `['a']`
#### Examples
##### Example usage
```puppet
difference(["a","b","c"],["b","c","d"])
Would return: `["a"]`
```
#### `difference()`
The returned array is a copy of the original array, removing any items that
also appear in the second array.
> *Note:*
Since Puppet 4 the minus (-) operator in the Puppet language does the same thing:
['a', 'b', 'c'] - ['b', 'c', 'd']
Would return: `['a']`
Returns: `Array` The difference between the two given arrays
##### Examples
###### Example usage
```puppet
difference(["a","b","c"],["b","c","d"])
Would return: `["a"]`
```
### <a name="dig"></a>`dig`
Type: Ruby 3.x API
In addition to the required path argument, the function accepts the default argument.
It is returned if the path is not correct, if no value was found, or if any other error
has occurred.
```ruby
$data = {
'a' => {
'b' => [
'b1',
'b2',
'b3',
]
}
}
$value = dig($data, ['a', 'b', 2])
# $value = 'b3'
# with all possible options
$value = dig($data, ['a', 'b', 2], 'not_found')
# $value = 'b3'
# using the default value
$value = dig($data, ['a', 'b', 'c', 'd'], 'not_found')
# $value = 'not_found'
```
1. `$data` The data structure we are working with.
2. `['a', 'b', 2]` The path array.
3. `not_found` The default value. It is returned if nothing is found.
> **Note:*
**Deprecated** This function has been replaced with a built-in
[`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of
Puppet 4.5.0. Use [`dig44()`](#dig44) for backwards compatibility or use the new version.
#### `dig()`
In addition to the required path argument, the function accepts the default argument.
It is returned if the path is not correct, if no value was found, or if any other error
has occurred.
```ruby
$data = {
'a' => {
'b' => [
'b1',
'b2',
'b3',
]
}
}
$value = dig($data, ['a', 'b', 2])
# $value = 'b3'
# with all possible options
$value = dig($data, ['a', 'b', 2], 'not_found')
# $value = 'b3'
# using the default value
$value = dig($data, ['a', 'b', 'c', 'd'], 'not_found')
# $value = 'not_found'
```
1. `$data` The data structure we are working with.
2. `['a', 'b', 2]` The path array.
3. `not_found` The default value. It is returned if nothing is found.
> **Note:*
**Deprecated** This function has been replaced with a built-in
[`dig`](https://puppet.com/docs/puppet/latest/function.html#dig) function as of
Puppet 4.5.0. Use [`dig44()`](#dig44) for backwards compatibility or use the new version.
Returns: `Any` The function goes through the structure by each path component and tries to return
the value at the end of the path.
### <a name="dig44"></a>`dig44`
Type: Ruby 3.x API
The dig44 function.
#### `dig44()`
The dig44 function.
Returns: `Any`
### <a name="dirname"></a>`dirname`
Type: Ruby 3.x API
Returns the dirname of a path.
#### `dirname()`
The dirname function.
Returns: `String` the given path's dirname
### <a name="dos2unix"></a>`dos2unix`
Type: Ruby 3.x API
Takes a single string argument.
#### `dos2unix()`
Takes a single string argument.
Returns: `Any` The retrieved version
### <a name="downcase"></a>`downcase`
Type: Ruby 3.x API
> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a
built-in [`downcase`](https://puppet.com/docs/puppet/latest/function.html#downcase) function.
>
This function is an implementation of a Ruby class and might not be UTF8 compatible.
To ensure compatibility, use this function with Ruby 2.4.0 or greater.
#### `downcase()`
> *Note:* **Deprecated** from Puppet 6.0.0, this function has been replaced with a
built-in [`downcase`](https://puppet.com/docs/puppet/latest/function.html#downcase) function.
>
This function is an implementation of a Ruby class and might not be UTF8 compatible.
To ensure compatibility, use this function with Ruby 2.4.0 or greater.
Returns: `String` The converted String, if it was a String that was given
### <a name="empty"></a>`empty`
Type: Ruby 3.x API
> *Note*: **Deprecated** from Puppet 5.5.0, the built-in
[`empty`](https://puppet.com/docs/puppet/6.4/function.html#empty) function will be used instead.
#### `empty()`
> *Note*: **Deprecated** from Puppet 5.5.0, the built-in
[`empty`](https://puppet.com/docs/puppet/6.4/function.html#empty) function will be used instead.
Returns: `Any` Returns `true` if the argument is an array or hash that contains no elements,
or an empty string. Returns `false` when the argument is a numerical value.
### <a name="enclose_ipv6"></a>`enclose_ipv6`
Type: Ruby 3.x API
Takes an array of ip addresses and encloses the ipv6 addresses with square brackets.
#### `enclose_ipv6()`
The enclose_ipv6 function.
Returns: `Any` encloses the ipv6 addresses with square brackets.
### <a name="ensure_packages"></a>`ensure_packages`
Type: Ruby 3.x API
It optionally takes a hash as a second parameter that will be passed as the
third argument to the ensure_resource() function.
#### `ensure_packages()`
It optionally takes a hash as a second parameter that will be passed as the
third argument to the ensure_resource() function.
Returns: `Any` install the passed packages
### <a name="ensure_resource"></a>`ensure_resource`
Type: Ruby 3.x API
The ensure_resource function.
#### `ensure_resource()`
The ensure_resource function.
Returns: `Any`
### <a name="ensure_resources"></a>`ensure_resources`
Type: Ruby 3.x API
The ensure_resources function.
#### `ensure_resources()`
The ensure_resources function.
Returns: `Any`
### <a name="fact"></a>`fact`
Type: Ruby 4.x API
Supports the use of dot-notation for referring to structured facts. If a fact requested
does not exist, returns Undef.
#### Examples
##### Example usage:
```puppet
fact('osfamily')
fact('os.architecture')
```
##### Array indexing:
```puppet
fact('mountpoints."/dev".options.1')
```
##### Fact containing a "." in the name:
```puppet
fact('vmware."VRA.version"')
```
#### `fact(String $fact_name)`
Supports the use of dot-notation for referring to structured facts. If a fact requested
does not exist, returns Undef.
Returns: `Any` All information retrieved on the given fact_name
##### Examples
###### Example usage:
```puppet
fact('osfamily')
fact('os.architecture')
```
###### Array indexing:
```puppet
fact('mountpoints."/dev".options.1')
```
###### Fact containing a "." in the name:
```puppet
fact('vmware."VRA.version"')
```
##### `fact_name`
Data type: `String`
The name of the fact to check
### <a name="flatten"></a>`flatten`
Type: Ruby 3.x API
> **Note:** **Deprecated** from Puppet 5.5.0, this function has been replaced with a
built-in [`flatten`](https://puppet.com/docs/puppet/latest/function.html#flatten) function.
#### Examples
##### Example usage
```puppet
flatten(['a', ['b', ['c']]])` returns: `['a','b','c']
```
#### `flatten()`
> **Note:** **Deprecated** from Puppet 5.5.0, this function has been replaced with a
built-in [`flatten`](https://puppet.com/docs/puppet/latest/function.html#flatten) function.
Returns: `Any` convert nested arrays into a single flat array
##### Examples
###### Example usage
```puppet
flatten(['a', ['b', ['c']]])` returns: `['a','b','c']
```
### <a name="floor"></a>`floor`
Type: Ruby 3.x API
Takes a single numeric value as an argument.
> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with
a built-in [`floor`](https://puppet.com/docs/puppet/latest/function.html#floor) function.
#### `floor()`
Takes a single numeric value as an argument.
> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with
a built-in [`floor`](https://puppet.com/docs/puppet/latest/function.html#floor) function.
Returns: `Any` the largest integer less or equal to the argument.
### <a name="fqdn_rand_string"></a>`fqdn_rand_string`
Type: Ruby 3.x API
The fqdn_rand_string function.
#### `fqdn_rand_string()`
The fqdn_rand_string function.
Returns: `Any`
### <a name="fqdn_rotate"></a>`fqdn_rotate`
Type: Ruby 3.x API
fqdn_rotate.rb
#### `fqdn_rotate()`
fqdn_rotate.rb
Returns: `Any`
### <a name="fqdn_uuid"></a>`fqdn_uuid`
Type: Ruby 3.x API
Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based
on an FQDN string under the DNS namespace
#### Examples
##### Example Usage:
```puppet
fqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'
fqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a09
```
#### `fqdn_uuid()`
The fqdn_uuid function.
Returns: `Any` Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID
##### Examples
###### Example Usage:
```puppet
fqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c'
fqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a09
```
### <a name="get_module_path"></a>`get_module_path`
Type: Ruby 3.x API
> *Note:*
that since Puppet 5.4.0 the built-in
[`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)
function in Puppet does the same thing and will return the path to the first found module
if given multiple values or an array.
#### Examples
##### Example Usage:
```puppet
$module_path = get_module_path('stdlib')
```
#### `get_module_path()`
> *Note:*
that since Puppet 5.4.0 the built-in
[`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)
function in Puppet does the same thing and will return the path to the first found module
if given multiple values or an array.
Returns: `Any` Returns the absolute path of the specified module for the current
environment.
##### Examples
###### Example Usage:
```puppet
$module_path = get_module_path('stdlib')
```
### <a name="getparam"></a>`getparam`
Type: Ruby 3.x API
The getparam function.
#### `getparam()`
The getparam function.
Returns: `Any`
### <a name="getvar"></a>`getvar`
Type: Ruby 3.x API
> **Note:** from Puppet 6.0.0, the compatible function with the same name in Puppet core
will be used instead of this function. The new function also has support for
digging into a structured value. See the built-in
[`getvar`](https://puppet.com/docs/puppet/latest/function.html#getvar) funct
#### Examples
##### Example usage
```puppet
$foo = getvar('site::data::foo') # Equivalent to $foo = $site::data::foo
```
##### Where namespace is stored in a string
```puppet
$datalocation = 'site::data'
$bar = getvar("${datalocation}::bar") # Equivalent to $bar = $site::data::bar
```
#### `getvar()`
> **Note:** from Puppet 6.0.0, the compatible function with the same name in Puppet core
will be used instead of this function. The new function also has support for
digging into a structured value. See the built-in
[`getvar`](https://puppet.com/docs/puppet/latest/function.html#getvar) funct
Returns: `Any` undef - if variable does not exist
##### Examples
###### Example usage
```puppet
$foo = getvar('site::data::foo') # Equivalent to $foo = $site::data::foo
```
###### Where namespace is stored in a string
```puppet
$datalocation = 'site::data'
$bar = getvar("${datalocation}::bar") # Equivalent to $bar = $site::data::bar
```
### <a name="glob"></a>`glob`
Type: Ruby 3.x API
Uses same patterns as Dir#glob.
#### Examples
##### Example Usage:
```puppet
$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])
```
#### `glob()`
The glob function.
Returns: `Any` Returns an Array of file entries of a directory or an Array of directories.
##### Examples
###### Example Usage:
```puppet
$confs = glob(['/etc/**/*.conf', '/opt/**/*.conf'])
```
### <a name="grep"></a>`grep`
Type: Ruby 3.x API
> **Note:** that since Puppet 4.0.0, the built-in
[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does
the "same" - as any logic can be used to filter, as opposed to just regular expressions:
```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```
#### Examples
##### Example Usage:
```puppet
grep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']
```
#### `grep()`
> **Note:** that since Puppet 4.0.0, the built-in
[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function does
the "same" - as any logic can be used to filter, as opposed to just regular expressions:
```['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' }```
Returns: `Any` array of elements that match the provided regular expression.
##### Examples
###### Example Usage:
```puppet
grep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd']
```
### <a name="has_interface_with"></a>`has_interface_with`
Type: Ruby 3.x API
Valid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.
#### Examples
##### **Usage**
```puppet
has_interface_with("macaddress", "x:x:x:x:x:x") # Returns `false`
has_interface_with("ipaddress", "127.0.0.1") # Returns `true`
```
##### If no "kind" is given, then the presence of the interface is checked:
```puppet
has_interface_with("lo") # Returns `true`
```
#### `has_interface_with()`
Valid kinds are `macaddress`, `netmask`, `ipaddress` and `network`.
Returns: `Any` boolean values `true` or `false`
##### Examples
###### **Usage**
```puppet
has_interface_with("macaddress", "x:x:x:x:x:x") # Returns `false`
has_interface_with("ipaddress", "127.0.0.1") # Returns `true`
```
###### If no "kind" is given, then the presence of the interface is checked:
```puppet
has_interface_with("lo") # Returns `true`
```
### <a name="has_ip_address"></a>`has_ip_address`
Type: Ruby 3.x API
This function iterates through the 'interfaces' fact and checks the
'ipaddress_IFACE' facts, performing a simple string comparison.
#### `has_ip_address()`
This function iterates through the 'interfaces' fact and checks the
'ipaddress_IFACE' facts, performing a simple string comparison.
Returns: `Boolean` `true` or `false`
### <a name="has_ip_network"></a>`has_ip_network`
Type: Ruby 3.x API
This function iterates through the 'interfaces' fact and checks the
'network_IFACE' facts, performing a simple string comparision.
#### `has_ip_network()`
This function iterates through the 'interfaces' fact and checks the
'network_IFACE' facts, performing a simple string comparision.
Returns: `Any` Boolean value, `true` if the client has an IP address within the requested network.
### <a name="has_key"></a>`has_key`
Type: Ruby 3.x API
> **Note:** **Deprecated** since Puppet 4.0.0, this can now be achieved in the Puppet
language with the following equivalent expression:
$my_hash = {'key_one' => 'value_one'}
if 'key_one' in $my_hash {
notice('this will be printed')
#### Examples
##### Example Usage:
```puppet
$my_hash = {'key_one' => 'value_one'}
if has_key($my_hash, 'key_two') {
notice('we will not reach here')
}
if has_key($my_hash, 'key_one') {
notice('this will be printed')
}
```
#### `has_key()`
> **Note:** **Deprecated** since Puppet 4.0.0, this can now be achieved in the Puppet
language with the following equivalent expression:
$my_hash = {'key_one' => 'value_one'}
if 'key_one' in $my_hash {
notice('this will be printed')
Returns: `Any` Boolean value
##### Examples
###### Example Usage:
```puppet
$my_hash = {'key_one' => 'value_one'}
if has_key($my_hash, 'key_two') {
notice('we will not reach here')
}
if has_key($my_hash, 'key_one') {
notice('this will be printed')
}
```
### <a name="hash"></a>`hash`
Type: Ruby 3.x API
> **Note:** This function has been replaced with the built-in ability to create a new value of almost any
data type - see the built-in [`Hash.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-hash-and-struct) function
in Puppet.
This example shows the equivalent expression in the Puppet language:
```
Hash(['a',1,'b',2,'c',3])
Hash([['a',1],['b',2],['c',3]])
```
#### Examples
##### Example Usage:
```puppet
hash(['a',1,'b',2,'c',3]) # Returns: {'a'=>1,'b'=>2,'c'=>3}
```
#### `hash()`
> **Note:** This function has been replaced with the built-in ability to create a new value of almost any
data type - see the built-in [`Hash.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-hash-and-struct) function
in Puppet.
This example shows the equivalent expression in the Puppet language:
```
Hash(['a',1,'b',2,'c',3])
Hash([['a',1],['b',2],['c',3]])
```
Returns: `Any` the converted array as a hash
##### Examples
###### Example Usage:
```puppet
hash(['a',1,'b',2,'c',3]) # Returns: {'a'=>1,'b'=>2,'c'=>3}
```
### <a name="intersection"></a>`intersection`
Type: Ruby 3.x API
This function returns an array of the intersection of two.
#### Examples
##### Example Usage:
```puppet
intersection(["a","b","c"],["b","c","d"]) # returns ["b","c"]
intersection(["a","b","c"],[1,2,3,4]) # returns [] (true, when evaluated as a Boolean)
```
#### `intersection()`
The intersection function.
Returns: `Any` an array of the intersection of two.
##### Examples
###### Example Usage:
```puppet
intersection(["a","b","c"],["b","c","d"]) # returns ["b","c"]
intersection(["a","b","c"],[1,2,3,4]) # returns [] (true, when evaluated as a Boolean)
```
### <a name="is_a"></a>`is_a`
Type: Ruby 4.x API
See the documentation for "The Puppet Type System" for more information about types.
See the `assert_type()` function for flexible ways to assert the type of a value.
#### Examples
##### Example Usage:
```puppet
# check a data type
foo = 3
$bar = [1,2,3]
$baz = 'A string!'
if $foo.is_a(Integer) {
notify { 'foo!': }
}
if $bar.is_a(Array) {
notify { 'bar!': }
}
if $baz.is_a(String) {
notify { 'baz!': }
}
```
#### `is_a(Any $value, Type $type)`
See the documentation for "The Puppet Type System" for more information about types.
See the `assert_type()` function for flexible ways to assert the type of a value.
Returns: `Boolean` Return's `true` or `false`.
##### Examples
###### Example Usage:
```puppet
# check a data type
foo = 3
$bar = [1,2,3]
$baz = 'A string!'
if $foo.is_a(Integer) {
notify { 'foo!': }
}
if $bar.is_a(Array) {
notify { 'bar!': }
}
if $baz.is_a(String) {
notify { 'baz!': }
}
```
##### `value`
Data type: `Any`
The value to be checked
##### `type`
Data type: `Type`
The expected type
### <a name="is_absolute_path"></a>`is_absolute_path`
Type: Ruby 4.x API
Wrapper that calls the Puppet 3.x function of the same name.
#### `is_absolute_path(Any $scope, Any *$args)`
The is_absolute_path function.
Returns: `Boolea` A boolean value returned from the called 3.x function.
##### `scope`
Data type: `Any`
The main value that will be passed to the wrapped method
##### `*args`
Data type: `Any`
Any additional values that are to be passed to the wrapped method
### <a name="is_absolute_path"></a>`is_absolute_path`
Type: Ruby 3.x API
This function works for windows and unix style paths.
> **Note:* **Deprecated** Will be removed in a future version of stdlib. See
[`validate_legacy`](#validate_leg
#### Examples
##### The following values will return true:
```puppet
$my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'
is_absolute_path($my_path)
$my_path2 = '/var/lib/puppet'
is_absolute_path($my_path2)
$my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet']
is_absolute_path($my_path3)
$my_path4 = ['/var/lib/puppet']
is_absolute_path($my_path4)
```
##### The following values will return false:
```puppet
is_absolute_path(true)
is_absolute_path('../var/lib/puppet')
is_absolute_path('var/lib/puppet')
$undefined = undef
is_absolute_path($undefined)
```
#### `is_absolute_path()`
This function works for windows and unix style paths.
> **Note:* **Deprecated** Will be removed in a future version of stdlib. See
[`validate_legacy`](#validate_leg
Returns: `Boolean` Returns `true` or `false`
##### Examples
###### The following values will return true:
```puppet
$my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'
is_absolute_path($my_path)
$my_path2 = '/var/lib/puppet'
is_absolute_path($my_path2)
$my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet']
is_absolute_path($my_path3)
$my_path4 = ['/var/lib/puppet']
is_absolute_path($my_path4)
```
###### The following values will return false:
```puppet
is_absolute_path(true)
is_absolute_path('../var/lib/puppet')
is_absolute_path('var/lib/puppet')
$undefined = undef
is_absolute_path($undefined)
```
### <a name="is_array"></a>`is_array`
Type: Ruby 4.x API
Wrapper that calls the Puppet 3.x function of the same name.
#### `is_array(Any $scope, Any *$args)`
The is_array function.
Returns: `Boolea` A boolean value returned from the called 3.x function.
##### `scope`
Data type: `Any`
The main value that will be passed to the wrapped method
##### `*args`
Data type: `Any`
Any additional values that are to be passed to the wrapped method
### <a name="is_array"></a>`is_array`
Type: Ruby 3.x API
> **Note:* **Deprecated** Will be removed in a future version of stdlib. See
[`validate_legacy`](#validate_legacy).
#### `is_array()`
> **Note:* **Deprecated** Will be removed in a future version of stdlib. See
[`validate_legacy`](#validate_legacy).
Returns: `Boolean` Returns `true` or `false`
### <a name="is_bool"></a>`is_bool`
Type: Ruby 4.x API
Wrapper that calls the Puppet 3.x function of the same name.
#### `is_bool(Any $scope, Any *$args)`
The is_bool function.
Returns: `Boolea` A boolean value returned from the called 3.x function.
##### `scope`
Data type: `Any`
The main value that will be passed to the wrapped method
##### `*args`
Data type: `Any`
Any additional values that are to be passed to the wrapped method
### <a name="is_bool"></a>`is_bool`
Type: Ruby 3.x API
> **Note:* **Deprecated** Will be removed in a future version of stdlib. See
[`validate_legacy`](#validate_legacy).
#### `is_bool()`
> **Note:* **Deprecated** Will be removed in a future version of stdlib. See
[`validate_legacy`](#validate_legacy).
Returns: `Boolean` Returns `true` or `false`
### <a name="is_domain_name"></a>`is_domain_name`
Type: Ruby 3.x API
> **Note:* **Deprecated** Will be removed in a future version of stdlib. See
[`validate_legacy`](#validate_legacy).
#### `is_domain_name()`
> **Note:* **Deprecated** Will be removed in a future version of stdlib. See
[`validate_legacy`](#validate_legacy).
Returns: `Boolean` Returns `true` or `false`
### <a name="is_email_address"></a>`is_email_address`
Type: Ruby 3.x API
> **Note:* **Deprecated** Will be removed in a future version of stdlib. See
[`validate_legacy`](#validate_legacy).
#### `is_email_address()`
> **Note:* **Deprecated** Will be removed in a future version of stdlib. See
[`validate_legacy`](#validate_legacy).
Returns: `Boolean` Returns `true` or `false`
### <a name="is_float"></a>`is_float`
Type: Ruby 4.x API
Wrapper that calls the Puppet 3.x function of the same name.
#### `is_float(Any $scope, Any *$args)`
The is_float function.
Returns: `Boolea` A boolean value returned from the called 3.x function.
##### `scope`
Data type: `Any`
The main value that will be passed to the wrapped method
##### `*args`
Data type: `Any`
Any additional values that are to be passed to the wrapped method
### <a name="is_float"></a>`is_float`
Type: Ruby 3.x API
> **Note:* **Deprecated** Will be removed in a future version of stdlib. See
[`validate_legacy`](#validate_legacy).
#### `is_float()`
> **Note:* **Deprecated** Will be removed in a future version of stdlib. See
[`validate_legacy`](#validate_legacy).
Returns: `Boolean` Returns `true` or `false`
### <a name="is_function_available"></a>`is_function_available`
Type: Ruby 3.x API
This function accepts a string as an argument.
> **Note:* **Deprecated** Will be removed in a future version of stdlib. See
[`validate_legacy`](#validate_legacy).
#### `is_function_available()`
This function accepts a string as an argument.
> **Note:* **Deprecated** Will be removed in a future version of stdlib. See
[`validate_legacy`](#validate_legacy).
Returns: `Boolean` Returns `true` or `false`
### <a name="is_hash"></a>`is_hash`
Type: Ruby 3.x API
> **Note:* **Deprecated** Will be removed in a future version of stdlib. See
[`validate_legacy`](#validate_legacy).
#### `is_hash()`
> **Note:* **Deprecated** Will be removed in a future version of stdlib. See
[`validate_legacy`](#validate_legacy).
Returns: `Boolean` Returns `true` or `false`
### <a name="is_integer"></a>`is_integer`
Type: Ruby 3.x API
The string may start with a '-' (minus). A value of '0' is allowed, but a leading '0'
digit may not be followed by other digits as this indicates that the value is octal (base 8).
If given any other argument `false` is returned.
> **Note:* **Deprecated** Will be removed in a future version of stdlib. See
[`validate_legacy`](#validate_legacy).
#### `is_integer()`
The string may start with a '-' (minus). A value of '0' is allowed, but a leading '0'
digit may not be followed by other digits as this indicates that the value is octal (base 8).
If given any other argument `false` is returned.
> **Note:* **Deprecated** Will be removed in a future version of stdlib. See
[`validate_legacy`](#validate_legacy).
Returns: `Boolean` Returns `true` or `false`
### <a name="is_ip_address"></a>`is_ip_address`
Type: Ruby 4.x API
Wrapper that calls the Puppet 3.x function of the same name.
#### `is_ip_address(Any $scope, Any *$args)`
The is_ip_address function.
Returns: `Boolea` A boolean value returned from the called 3.x function.
##### `scope`
Data type: `Any`
The main value that will be passed to the wrapped method
##### `*args`
Data type: `Any`
Any additional values that are to be passed to the wrapped method
### <a name="is_ip_address"></a>`is_ip_address`
Type: Ruby 3.x API
> **Note:* **Deprecated** Will be removed in a future version of stdlib. See
[`validate_legacy`](#validate_legacy).
#### `is_ip_address()`
> **Note:* **Deprecated** Will be removed in a future version of stdlib. See
[`validate_legacy`](#validate_legacy).
Returns: `Boolean` Returns `true` or `false`
### <a name="is_ipv4_address"></a>`is_ipv4_address`
Type: Ruby 4.x API
Wrapper that calls the Puppet 3.x function of the same name.
#### `is_ipv4_address(Any $scope, Any *$args)`
The is_ipv4_address function.
Returns: `Boolea` A boolean value returned from the called 3.x function.
##### `scope`
Data type: `Any`
The main value that will be passed to the wrapped method
##### `*args`
Data type: `Any`
Any additional values that are to be passed to the wrapped method
### <a name="is_ipv4_address"></a>`is_ipv4_address`
Type: Ruby 3.x API
> **Note:* **Deprecated** Will be removed in a future version of stdlib. See
[`validate_legacy`](#validate_legacy).
#### `is_ipv4_address()`
> **Note:* **Deprecated** Will be removed in a future version of stdlib. See
[`validate_legacy`](#validate_legacy).
Returns: `Boolean` Returns `true` or `false`
### <a name="is_ipv6_address"></a>`is_ipv6_address`
Type: Ruby 4.x API
Wrapper that calls the Puppet 3.x function of the same name.
#### `is_ipv6_address(Any $scope, Any *$args)`
The is_ipv6_address function.
Returns: `Boolea` A boolean value returned from the called 3.x function.
##### `scope`
Data type: `Any`
The main value that will be passed to the wrapped method
##### `*args`
Data type: `Any`
Any additional values that are to be passed to the wrapped method
### <a name="is_ipv6_address"></a>`is_ipv6_address`
Type: Ruby 3.x API
> **Note:* **Deprecated** Will be removed in a future version of stdlib. See
[`validate_legacy`](#validate_legacy).
#### `is_ipv6_address()`
> **Note:* **Deprecated** Will be removed in a future version of stdlib. See
[`validate_legacy`](#validate_legacy).
Returns: `Boolean` Returns `true` or `false`
### <a name="is_mac_address"></a>`is_mac_address`
Type: Ruby 3.x API
> **Note:* **Deprecated** Will be removed in a future version of stdlib. See
[`validate_legacy`](#validate_legacy).
#### `is_mac_address()`
> **Note:* **Deprecated** Will be removed in a future version of stdlib. See
[`validate_legacy`](#validate_legacy).
Returns: `Boolean` Returns `true` or `false`
### <a name="is_numeric"></a>`is_numeric`
Type: Ruby 4.x API
Wrapper that calls the Puppet 3.x function of the same name.
#### `is_numeric(Any $scope, Any *$args)`
The is_numeric function.
Returns: `Boolea` A boolean value returned from the called 3.x function.
##### `scope`
Data type: `Any`
The main value that will be passed to the wrapped method
##### `*args`
Data type: `Any`
Any additional values that are to be passed to the wrapped method
### <a name="is_numeric"></a>`is_numeric`
Type: Ruby 3.x API
Returns true if the given argument is a Numeric (Integer or Float),
or a String containing either a valid integer in decimal base 10 form, or
a valid floating point string representation.
The function recognizes only decimal (base 10) integers and float but not
integers in hex (base 16) or octal (base 8) form.
The string representation may start with a '-' (minus). If a decimal '.' is used,
it must be followed by at least one digit.
> **Note:* **Deprecated** Will be removed in a future version of stdlib. See
[`validate_legacy`](#validate_legacy).
#### `is_numeric()`
Returns true if the given argument is a Numeric (Integer or Float),
or a String containing either a valid integer in decimal base 10 form, or
a valid floating point string representation.
The function recognizes only decimal (base 10) integers and float but not
integers in hex (base 16) or octal (base 8) form.
The string representation may start with a '-' (minus). If a decimal '.' is used,
it must be followed by at least one digit.
> **Note:* **Deprecated** Will be removed in a future version of stdlib. See
[`validate_legacy`](#validate_legacy).
Returns: `Boolean` Returns `true` or `false`
### <a name="is_string"></a>`is_string`
Type: Ruby 4.x API
Wrapper that calls the Puppet 3.x function of the same name.
#### `is_string(Any $scope, Any *$args)`
The is_string function.
Returns: `Boolean` A boolean value returned from the called 3.x function.
##### `scope`
Data type: `Any`
The main value that will be passed to the wrapped method
##### `*args`
Data type: `Any`
Any additional values that are to be passed to the wrapped method
### <a name="is_string"></a>`is_string`
Type: Ruby 3.x API
> **Note:* **Deprecated** Will be removed in a future version of stdlib. See
[`validate_legacy`](#validate_legacy).
#### `is_string()`
> **Note:* **Deprecated** Will be removed in a future version of stdlib. See
[`validate_legacy`](#validate_legacy).
Returns: `Boolean` Returns `true` or `false`
### <a name="join"></a>`join`
Type: Ruby 3.x API
> **Note:** **Deprecated** from Puppet 5.4.0 this function has been replaced
with a built-in [`join`](https://puppet.com/docs/puppet/latest/function.html#join) function.
#### Examples
##### Example Usage:
```puppet
join(['a','b','c'], ",") # Results in: "a,b,c"
```
#### `join()`
> **Note:** **Deprecated** from Puppet 5.4.0 this function has been replaced
with a built-in [`join`](https://puppet.com/docs/puppet/latest/function.html#join) function.
Returns: `String` The String containing each of the array values
##### Examples
###### Example Usage:
```puppet
join(['a','b','c'], ",") # Results in: "a,b,c"
```
### <a name="join_keys_to_values"></a>`join_keys_to_values`
Type: Ruby 3.x API
Keys are cast to strings. If values are arrays, multiple keys
are added for each element. The return value is an array in
which each element is one joined key/value pair.
> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and
line breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual
formatting of values in the array) - see the `new` function for `String` and its formatting
options for `Array` and `Hash`.
#### Examples
##### Example Usage:
```puppet
join_keys_to_values({'a'=>1,'b'=>2}, " is ") # Results in: ["a is 1","b is 2"]
join_keys_to_values({'a'=>1,'b'=>[2,3]}, " is ") # Results in: ["a is 1","b is 2","b is 3"]
```
#### `join_keys_to_values()`
Keys are cast to strings. If values are arrays, multiple keys
are added for each element. The return value is an array in
which each element is one joined key/value pair.
> **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and
line breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual
formatting of values in the array) - see the `new` function for `String` and its formatting
options for `Array` and `Hash`.
Returns: `Hash` The joined hash
##### Examples
###### Example Usage:
```puppet
join_keys_to_values({'a'=>1,'b'=>2}, " is ") # Results in: ["a is 1","b is 2"]
join_keys_to_values({'a'=>1,'b'=>[2,3]}, " is ") # Results in: ["a is 1","b is 2","b is 3"]
```
### <a name="keys"></a>`keys`
Type: Ruby 3.x API
> **Note:** **Deprecated** from Puppet 5.5.0, the built-in [`keys`](https://puppet.com/docs/puppet/latest/function.html#keys)
function will be used instead of this function.
#### `keys()`
> **Note:** **Deprecated** from Puppet 5.5.0, the built-in [`keys`](https://puppet.com/docs/puppet/latest/function.html#keys)
function will be used instead of this function.
Returns: `Array` An array containing each of the hashes key values.
### <a name="length"></a>`length`
Type: Ruby 4.x API
The original size() function did not handle Puppets new type capabilities, so this function
is a Puppet 4 compatible solution.
> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a
built-in [`length`](https://puppet.com/docs/puppet/latest/function.html#length) function.
#### `length(Variant[String,Array,Hash] $value)`
The original size() function did not handle Puppets new type capabilities, so this function
is a Puppet 4 compatible solution.
> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a
built-in [`length`](https://puppet.com/docs/puppet/latest/function.html#length) function.
Returns: `Integer` The length of the given object
##### `value`
Data type: `Variant[String,Array,Hash]`
The value whose length is to be found
### <a name="load_module_metadata"></a>`load_module_metadata`
Type: Ruby 3.x API
This function loads the metadata of a given module.
#### Examples
##### Example USage:
```puppet
$metadata = load_module_metadata('archive')
notify { $metadata['author']: }
```
#### `load_module_metadata()`
The load_module_metadata function.
Returns: `Any` The modules metadata
##### Examples
###### Example USage:
```puppet
$metadata = load_module_metadata('archive')
notify { $metadata['author']: }
```
### <a name="loadjson"></a>`loadjson`
Type: Ruby 3.x API
The first parameter can be a file path or a URL.
The second parameter is the default value. It will be returned if the file
was not found or could not be parsed.
#### Examples
##### Example Usage:
```puppet
$myhash = loadjson('/etc/puppet/data/myhash.json')
$myhash = loadjson('https://example.local/my_hash.json')
$myhash = loadjson('https://username:password@example.local/my_hash.json')
$myhash = loadjson('no-file.json', {'default' => 'val
```
#### `loadjson()`
The first parameter can be a file path or a URL.
The second parameter is the default value. It will be returned if the file
was not found or could not be parsed.
Returns: `Array|String|Hash` The data stored in the JSON file, the type depending on the type of data that was stored.
##### Examples
###### Example Usage:
```puppet
$myhash = loadjson('/etc/puppet/data/myhash.json')
$myhash = loadjson('https://example.local/my_hash.json')
$myhash = loadjson('https://username:password@example.local/my_hash.json')
$myhash = loadjson('no-file.json', {'default' => 'val
```
### <a name="loadyaml"></a>`loadyaml`
Type: Ruby 3.x API
The first parameter can be a file path or a URL.
The second parameter is the default value. It will be returned if the file
was not found or could not be parsed.
#### Examples
##### Example Usage:
```puppet
$myhash = loadyaml('/etc/puppet/data/myhash.yaml')
$myhash = loadyaml('https://example.local/my_hash.yaml')
$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')
$myhash = loadyaml('no-file.yaml', {'default' => 'val
```
#### `loadyaml()`
The first parameter can be a file path or a URL.
The second parameter is the default value. It will be returned if the file
was not found or could not be parsed.
Returns: `Array|String|Hash` The data stored in the YAML file, the type depending on the type of data that was stored.
##### Examples
###### Example Usage:
```puppet
$myhash = loadyaml('/etc/puppet/data/myhash.yaml')
$myhash = loadyaml('https://example.local/my_hash.yaml')
$myhash = loadyaml('https://username:password@example.local/my_hash.yaml')
$myhash = loadyaml('no-file.yaml', {'default' => 'val
```
### <a name="lstrip"></a>`lstrip`
Type: Ruby 3.x API
> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a
built-in [`max`](https://puppet.com/docs/puppet/latest/function.html#max) function.
#### `lstrip()`
> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a
built-in [`max`](https://puppet.com/docs/puppet/latest/function.html#max) function.
Returns: `String` The stripped string
### <a name="max"></a>`max`
Type: Ruby 3.x API
Requires at least one argument.
> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a
built-in [`lstrip`](https://puppet.com/docs/puppet/latest/function.html#lstrip) function.
#### `max()`
Requires at least one argument.
> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a
built-in [`lstrip`](https://puppet.com/docs/puppet/latest/function.html#lstrip) function.
Returns: `Any` The highest value among those passed in
### <a name="member"></a>`member`
Type: Ruby 3.x API
The variable can be a string, fixnum, or array.
> **Note**: This function does not support nested arrays. If the first argument contains
nested arrays, it will not recurse through them.
> *Note:*
Since Puppet 4.0.0 the same can be performed in the Puppet language.
For single values the operator `in` can be used:
`'a' in ['a', 'b'] # true`
For arrays by using operator `-` to compute a diff:
`['d', 'b'] - ['a', 'b', 'c'] == [] # false because 'd' is not subtracted`
`['a', 'b'] - ['a', 'b', 'c'] == [] # true because both 'a' and 'b' are subtracted`
> **Note** that since Puppet 5.2.0, the general form to test the content of an array or
hash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)
and [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.
#### Examples
##### **Usage**
```puppet
member(['a','b'], 'b') # Returns: true
member(['a', 'b', 'c'], ['a', 'b']) # Returns: true
member(['a','b'], 'c') # Returns: false
member(['a', 'b', 'c'], ['d', 'b']) # Returns: false
```
#### `member()`
The variable can be a string, fixnum, or array.
> **Note**: This function does not support nested arrays. If the first argument contains
nested arrays, it will not recurse through them.
> *Note:*
Since Puppet 4.0.0 the same can be performed in the Puppet language.
For single values the operator `in` can be used:
`'a' in ['a', 'b'] # true`
For arrays by using operator `-` to compute a diff:
`['d', 'b'] - ['a', 'b', 'c'] == [] # false because 'd' is not subtracted`
`['a', 'b'] - ['a', 'b', 'c'] == [] # true because both 'a' and 'b' are subtracted`
> **Note** that since Puppet 5.2.0, the general form to test the content of an array or
hash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any)
and [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions.
Returns: `Any` Returns whether the given value was a member of the array
##### Examples
###### **Usage**
```puppet
member(['a','b'], 'b') # Returns: true
member(['a', 'b', 'c'], ['a', 'b']) # Returns: true
member(['a','b'], 'c') # Returns: false
member(['a', 'b', 'c'], ['d', 'b']) # Returns: false
```
### <a name="merge"></a>`merge`
Type: Ruby 4.x API
When there is a duplicate key, the key in the rightmost hash will "win."
Note that since Puppet 4.0.0 the same merge can be achieved with the + operator.
`$merged_hash = $hash1 + $hash2`
If merge is given a single Iterable (Array, Hash, etc.) it will call a given block with
up to three parameters, and merge each resulting Hash into the accumulated result. All other types
of values returned from the block (typically undef) are skipped (not merged).
The codeblock can take 2 or three parameters:
* with two, it gets the current hash (as built to this point), and each value (for hash the value is a [key, value] tuple)
* with three, it gets the current hash (as built to this point), the key/index of each value, and then the value
If the iterable is empty, or no hash was returned from the given block, an empty hash is returned. In the given block, a call to `next()`
will skip that entry, and a call to `break()` will end the iteration.
The iterative `merge()` has an advantage over doing the same with a general `reduce()` in that the constructed hash
does not have to be copied in each iteration and thus will perform much better with large inputs.
#### Examples
##### Using merge()
```puppet
$hash1 = {'one' => 1, 'two', => 2}
$hash2 = {'two' => 'dos', 'three', => 'tres'}
$merged_hash = merge($hash1, $hash2) # $merged_hash = {'one' => 1, 'two' => 'dos', 'three' => 'tres'}
```
##### counting occurrences of strings in an array
```puppet
['a', 'b', 'c', 'c', 'd', 'b'].merge | $hsh, $v | { { $v => $hsh[$v].lest || { 0 } + 1 } } # results in { a => 1, b => 2, c => 2, d => 1 }
```
##### skipping values for entries that are longer than 1 char
```puppet
['a', 'b', 'c', 'c', 'd', 'b', 'blah', 'blah'].merge | $hsh, $v | { if $v =~ String[1,1] { { $v => $hsh[$v].lest || { 0 } + 1 } } } # results in { a => 1, b => 2, c => 2, d => 1 }
```
#### `merge(Variant[Hash, Undef, String[0,0]] *$args)`
The merge function.
Returns: `Hash` The merged hash
##### `*args`
Data type: `Variant[Hash, Undef, String[0,0]]`
Repeated Param - The hashes that are to be merged
#### `merge(Iterable *$args, Callable[3,3] &$block)`
The merge function.
Returns: `Hash` The merged hash
##### `*args`
Data type: `Iterable`
Repeated Param - The hashes that are to be merged
##### `&block`
Data type: `Callable[3,3]`
A block placed on the repeatable param `args`
#### `merge(Iterable *$args, Callable[2,2] &$block)`
The merge function.
Returns: `Hash` The merged hash
##### `*args`
Data type: `Iterable`
Repeated Param - The hashes that are to be merged
##### `&block`
Data type: `Callable[2,2]`
A block placed on the repeatable param `args`
### <a name="merge"></a>`merge`
Type: Ruby 3.x API
When there is a duplicate key, the key in the rightmost hash will "win."
Note that since Puppet 4.0.0 the same merge can be achieved with the + operator.
`$merged_hash = $hash1 + $has
#### Examples
##### **Usage**
```puppet
$hash1 = {'one' => 1, 'two', => 2}
$hash2 = {'two' => 'dos', 'three', => 'tres'}
$merged_hash = merge($hash1, $hash2) # $merged_hash = {'one' => 1, 'two' => 'dos', 'three' => 'tres'}
```
#### `merge()`
When there is a duplicate key, the key in the rightmost hash will "win."
Note that since Puppet 4.0.0 the same merge can be achieved with the + operator.
`$merged_hash = $hash1 + $has
Returns: `Hash` The merged hash
##### Examples
###### **Usage**
```puppet
$hash1 = {'one' => 1, 'two', => 2}
$hash2 = {'two' => 'dos', 'three', => 'tres'}
$merged_hash = merge($hash1, $hash2) # $merged_hash = {'one' => 1, 'two' => 'dos', 'three' => 'tres'}
```
### <a name="min"></a>`min`
Type: Ruby 3.x API
Requires at least one argument.
> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a
built-in [`min`](https://puppet.com/docs/puppet/latest/function.html#min) function.
#### `min()`
Requires at least one argument.
> **Note:** **Deprecated** from Puppet 6.0.0, this function has been replaced with a
built-in [`min`](https://puppet.com/docs/puppet/latest/function.html#min) function.
Returns: `Any` The lowest value among the given arguments
### <a name="num2bool"></a>`num2bool`
Type: Ruby 3.x API
> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.
See the new() function in Puppet for the many available type conversions.
#### `num2bool()`
> *Note:* that since Puppet 5.0.0 the same can be achieved with the Puppet Type System.
See the new() function in Puppet for the many available type conversions.
Returns: `Boolean` Boolean(0) # false for any zero or negative number
Boolean(1) # true for any positive number
### <a name="os_version_gte"></a>`os_version_gte`
Type: Ruby 4.x API
> *Note:*
Only the major version is taken into account.
#### Examples
##### Example usage:#
```puppet
if os_version_gte('Debian', '9') { }
if os_version_gte('Ubuntu', '18.04') { }
```
#### `os_version_gte(String[1] $os, String[1] $version)`
> *Note:*
Only the major version is taken into account.
Returns: `Boolean` `true` or `false
##### Examples
###### Example usage:#
```puppet
if os_version_gte('Debian', '9') { }
if os_version_gte('Ubuntu', '18.04') { }
```
##### `os`
Data type: `String[1]`
operating system
##### `version`
Data type: `String[1]`
### <a name="parsehocon"></a>`parsehocon`
Type: Ruby 4.x API
This function accepts HOCON as a string and converts it into the correct
Puppet structure
#### Examples
##### How to parse hocon
```puppet
$data = parsehocon("{any valid hocon: string}")
```
#### `parsehocon(String $hocon_string, Optional[Any] $default)`
The parsehocon function.
Returns: `Any`
##### Examples
###### How to parse hocon
```puppet
$data = parsehocon("{any valid hocon: string}")
```
##### `hocon_string`
Data type: `String`
A valid HOCON string
##### `default`
Data type: `Optional[Any]`
An optional default to return if parsing hocon_string fails
### <a name="parsejson"></a>`parsejson`
Type: Ruby 3.x API
> *Note:*
The optional second argument can be used to pass a default value that will
be returned if the parsing of YAML string have failed.
#### `parsejson()`
> *Note:*
The optional second argument can be used to pass a default value that will
be returned if the parsing of YAML string have failed.
Returns: `Any` convert JSON into Puppet structure
### <a name="parseyaml"></a>`parseyaml`
Type: Ruby 3.x API
> *Note:*
The optional second argument can be used to pass a default value that will
be returned if the parsing of YAML string have failed.
#### `parseyaml()`
> *Note:*
The optional second argument can be used to pass a default value that will
be returned if the parsing of YAML string have failed.
Returns: `Any` converted YAML into Puppet structure
### <a name="pick"></a>`pick`
Type: Ruby 3.x API
Typically, this function is used to check for a value in the Puppet
Dashboard/Enterprise Console, and failover to a default value like the following:
```$real_jenkins_version = pick($::jenkins_version, '1.449')```
> *Note:*
The value of $real_jenkins_version will first look for a top-scope variable
called 'jenkins_version' (note that parameters set in the Puppet Dashboard/
Enterprise Console are brought into Puppet as top-scope variables), and,
failing that, will use a default value of 1.449.
#### `pick()`
Typically, this function is used to check for a value in the Puppet
Dashboard/Enterprise Console, and failover to a default value like the following:
```$real_jenkins_version = pick($::jenkins_version, '1.449')```
> *Note:*
The value of $real_jenkins_version will first look for a top-scope variable
called 'jenkins_version' (note that parameters set in the Puppet Dashboard/
Enterprise Console are brought into Puppet as top-scope variables), and,
failing that, will use a default value of 1.449.
Returns: `Any` the first value in a list of values that is not undefined or an empty string.
### <a name="pick_default"></a>`pick_default`
Type: Ruby 3.x API
Typically, this function is used to check for a value in the Puppet
Dashboard/Enterprise Console, and failover to a default value like the
following:
$real_jenkins_version = pick_default($::jenkins_version, '1.449')
> *Note:*
The value of $real_jenkins_version will first look for a top-scope variable
called 'jenkins_version' (note that parameters set in the Puppet Dashboard/
Enterprise Console are brought into Puppet as top-scope variables), and,
failing that, will use a default value of 1.449.
Contrary to the pick() function, the pick_default does not fail if
all arguments are empty. This allows pick_default to use an empty value as
default.
#### `pick_default()`
Typically, this function is used to check for a value in the Puppet
Dashboard/Enterprise Console, and failover to a default value like the
following:
$real_jenkins_version = pick_default($::jenkins_version, '1.449')
> *Note:*
The value of $real_jenkins_version will first look for a top-scope variable
called 'jenkins_version' (note that parameters set in the Puppet Dashboard/
Enterprise Console are brought into Puppet as top-scope variables), and,
failing that, will use a default value of 1.449.
Contrary to the pick() function, the pick_default does not fail if
all arguments are empty. This allows pick_default to use an empty value as
default.
Returns: `Any` This function is similar to a coalesce function in SQL in that it will return
the first value in a list of values that is not undefined or an empty string
If no value is found, it will return the last argument.
### <a name="prefix"></a>`prefix`
Type: Ruby 3.x API
> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map
function in Puppet. This example does the same as the example above:
['a', 'b', 'c'].map |$x| { "p${x}" }
#### Examples
##### **Usage**
```puppet
prefix(['a','b','c'], 'p')
Will return: ['pa','pb','pc']
```
#### `prefix()`
> *Note:* since Puppet 4.0.0 the general way to modify values is in array is by using the map
function in Puppet. This example does the same as the example above:
['a', 'b', 'c'].map |$x| { "p${x}" }
Returns: `Hash` or [Array] The passed values now contains the passed prefix
##### Examples
###### **Usage**
```puppet
prefix(['a','b','c'], 'p')
Will return: ['pa','pb','pc']
```
### <a name="private"></a>`private`
Type: Ruby 3.x API
**Deprecated:** Sets the current class or definition as private.
Calling the class or definition from outside the current module will fail.
#### `private()`
The private function.
Returns: `Any` Sets the current class or definition as private
### <a name="pry"></a>`pry`
Type: Ruby 3.x API
This is useful for debugging manifest code at specific points during a compilation.
#### Examples
##### **Usage**
```puppet
`pry()`
```
#### `pry()`
This is useful for debugging manifest code at specific points during a compilation.
Returns: `Any` debugging information
##### Examples
###### **Usage**
```puppet
`pry()`
```
### <a name="pw_hash"></a>`pw_hash`
Type: Ruby 3.x API
Please note: This function is an implementation of a Ruby class and as such may not be entirely UTF8 compatible.
To ensure compatibility please use this function with Ruby 2.4.0 or greater - https://bugs.ruby-lang.org/issues/10085.
#### `pw_hash()`
Please note: This function is an implementation of a Ruby class and as such may not be entirely UTF8 compatible.
To ensure compatibility please use this function with Ruby 2.4.0 or greater - https://bugs.ruby-lang.org/issues/10085.
Returns: `Any`
### <a name="range"></a>`range`
Type: Ruby 3.x API
NB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.
> *Note:*
Passing a third argument will cause the generated range to step by that
interval, e.g.
The Puppet Language support Integer and Float ranges by using the type system. Those are suitable for
iterating a given number of times.
Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9
#### Examples
##### **Usage**
```puppet
range("0", "9")
Will return: [0,1,2,3,4,5,6,7,8,9]
range("00", "09")
Will return: [0,1,2,3,4,5,6,7,8,9]
(Zero padded strings are converted to integers automatically)
range("a", "c")
Will return: ["a","b","c"]
range("host01", "host10")
Will return: ["host01", "host02", ..., "host09", "host10"]
range("0", "9", "2")
Will return: [0,2,4,6,8]
```
#### `range()`
NB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail.
> *Note:*
Passing a third argument will cause the generated range to step by that
interval, e.g.
The Puppet Language support Integer and Float ranges by using the type system. Those are suitable for
iterating a given number of times.
Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9
Returns: `Any` the range is extrapolated as an array
##### Examples
###### **Usage**
```puppet
range("0", "9")
Will return: [0,1,2,3,4,5,6,7,8,9]
range("00", "09")
Will return: [0,1,2,3,4,5,6,7,8,9]
(Zero padded strings are converted to integers automatically)
range("a", "c")
Will return: ["a","b","c"]
range("host01", "host10")
Will return: ["host01", "host02", ..., "host09", "host10"]
range("0", "9", "2")
Will return: [0,2,4,6,8]
```
### <a name="regexpescape"></a>`regexpescape`
Type: Ruby 3.x API
Regexp escape a string or array of strings.
Requires either a single string or an array as an input.
#### `regexpescape()`
The regexpescape function.
Returns: `String` A string of characters with metacharacters converted to their escaped form.
### <a name="reject"></a>`reject`
Type: Ruby 3.x API
> *Note:*
Since Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:
['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~
#### Examples
##### **Usage**
```puppet
reject(['aaa','bbb','ccc','aaaddd'], 'aaa')
Would return: ['bbb','ccc']
```
#### `reject()`
> *Note:*
Since Puppet 4.0.0 the same is in general done with the filter function. Here is the equivalence of the reject() function:
['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~
Returns: `Any` an array containing all the elements which doesn'' match the provided regular expression
##### Examples
###### **Usage**
```puppet
reject(['aaa','bbb','ccc','aaaddd'], 'aaa')
Would return: ['bbb','ccc']
```
### <a name="reverse"></a>`reverse`
Type: Ruby 3.x API
> *Note:* that the same can be done with the reverse_each() function in Puppet.
#### `reverse()`
> *Note:* that the same can be done with the reverse_each() function in Puppet.
Returns: `Any` reversed string or array
### <a name="round"></a>`round`
Type: Ruby 3.x API
```round(2.9)``` returns ```3```
```round(2.4)``` returns ```2```
> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core
will be used instead of this function.
#### `round()`
```round(2.9)``` returns ```3```
```round(2.4)``` returns ```2```
> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core
will be used instead of this function.
Returns: `Any` the rounded value as integer
### <a name="rstrip"></a>`rstrip`
Type: Ruby 3.x API
> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core
will be used instead of this function.
#### `rstrip()`
> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core
will be used instead of this function.
Returns: `Any` the string with leading spaces removed
### <a name="seeded_rand"></a>`seeded_rand`
Type: Ruby 3.x API
seeded_rand.rb
#### `seeded_rand()`
seeded_rand.rb
Returns: `Any`
### <a name="seeded_rand_string"></a>`seeded_rand_string`
Type: Ruby 4.x API
Generates a consistent random string of specific length based on provided seed.
#### Examples
##### Generate a consistently random string of length 8 with a seed:
```puppet
seeded_rand_string(8, "${module_name}::redis_password")
```
##### Generate a random string from a specific set of characters:
```puppet
seeded_rand_string(5, '', 'abcdef')
```
#### `seeded_rand_string(Integer[1] $length, String $seed, Optional[String[2]] $charset)`
The seeded_rand_string function.
Returns: `String` Random string.
##### Examples
###### Generate a consistently random string of length 8 with a seed:
```puppet
seeded_rand_string(8, "${module_name}::redis_password")
```
###### Generate a random string from a specific set of characters:
```puppet
seeded_rand_string(5, '', 'abcdef')
```
##### `length`
Data type: `Integer[1]`
Length of string to be generated.
##### `seed`
Data type: `String`
Seed string.
##### `charset`
Data type: `Optional[String[2]]`
String that contains characters to use for the random string.
### <a name="shell_escape"></a>`shell_escape`
Type: Ruby 3.x API
>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single
quotes.
This function behaves the same as ruby's Shellwords.shellescape() function.
#### `shell_escape()`
>* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single
quotes.
This function behaves the same as ruby's Shellwords.shellescape() function.
Returns: `Any` A string of characters with metacharacters converted to their escaped form.
### <a name="shell_join"></a>`shell_join`
Type: Ruby 3.x API
Builds a command line string from the given array of strings.
Each array item is escaped for Bourne shell. All items are then joined together, with a single space in between.
This function behaves the same as ruby's Shellwords.shelljoin() function
#### `shell_join()`
Builds a command line string from the given array of strings.
Each array item is escaped for Bourne shell. All items are then joined together, with a single space in between.
This function behaves the same as ruby's Shellwords.shelljoin() function
Returns: `Any` a command line string
### <a name="shell_split"></a>`shell_split`
Type: Ruby 3.x API
This function behaves the same as ruby's Shellwords.shellsplit() function
#### `shell_split()`
This function behaves the same as ruby's Shellwords.shellsplit() function
Returns: `Any` array of tokens
### <a name="shuffle"></a>`shuffle`
Type: Ruby 3.x API
@summary
Randomizes the order of a string or array elements.
#### `shuffle()`
@summary
Randomizes the order of a string or array elements.
Returns: `Any` randomized string or array
### <a name="size"></a>`size`
Type: Ruby 3.x API
> *Note:* that since Puppet 5.4.0, the length() function in Puppet is preferred over this. For versions
of Puppet < 5.4.0 use the stdlib length() function.
#### `size()`
> *Note:* that since Puppet 5.4.0, the length() function in Puppet is preferred over this. For versions
of Puppet < 5.4.0 use the stdlib length() function.
Returns: `Any` the number of elements in a string, an array or a hash
### <a name="sort"></a>`sort`
Type: Ruby 3.x API
Note that from Puppet 6.0.0 the same function in Puppet will be used instead of this.
#### `sort()`
Note that from Puppet 6.0.0 the same function in Puppet will be used instead of this.
Returns: `Any` sorted string or array
### <a name="sprintf_hash"></a>`sprintf_hash`
Type: Ruby 4.x API
The first parameter is format string describing how the rest of the parameters in the hash
should be formatted. See the documentation for the `Kernel::sprintf` function in Ruby for
all the details.
In the given argument hash with parameters, all keys are converted to symbols so they work
with the `sprintf` function.
Note that since Puppet 4.10.10, and 5.3.4 this functionality is supported by the
`sprintf` function in puppet core.
#### Examples
##### Format a string and number
```puppet
$output = sprintf_hash('String: %<foo>s / number converted to binary: %<number>b',
{ 'foo' => 'a string', 'number' => 5 })
# $output = 'String: a string / number converted to binary: 101'
```
#### `sprintf_hash(String $format, Hash $arguments)`
The first parameter is format string describing how the rest of the parameters in the hash
should be formatted. See the documentation for the `Kernel::sprintf` function in Ruby for
all the details.
In the given argument hash with parameters, all keys are converted to symbols so they work
with the `sprintf` function.
Note that since Puppet 4.10.10, and 5.3.4 this functionality is supported by the
`sprintf` function in puppet core.
Returns: `Any` The formatted string.
##### Examples
###### Format a string and number
```puppet
$output = sprintf_hash('String: %<foo>s / number converted to binary: %<number>b',
{ 'foo' => 'a string', 'number' => 5 })
# $output = 'String: a string / number converted to binary: 101'
```
##### `format`
Data type: `String`
The format to use.
##### `arguments`
Data type: `Hash`
Hash with parameters.
### <a name="squeeze"></a>`squeeze`
Type: Ruby 3.x API
Returns a new string where runs of the same character that occur in this set are replaced by a single character.
#### `squeeze()`
The squeeze function.
Returns: `Any` a new string where runs of the same character that occur in this set are replaced by a single character.
### <a name="stdlibend_with"></a>`stdlib::end_with`
Type: Ruby 4.x API
Returns true if str ends with one of the prefixes given. Each of the prefixes should be a String.
#### Examples
#####
```puppet
'foobar'.stdlib::end_with('bar') => true
'foobar'.stdlib::end_with('foo') => false
'foobar'.stdlib::end_with(['foo', 'baz']) => false
```
#### `stdlib::end_with(String $test_string, Variant[String[1],Array[String[1], 1]] $suffixes)`
The stdlib::end_with function.
Returns: `Boolean` True or False
##### Examples
######
```puppet
'foobar'.stdlib::end_with('bar') => true
'foobar'.stdlib::end_with('foo') => false
'foobar'.stdlib::end_with(['foo', 'baz']) => false
```
##### `test_string`
Data type: `String`
The string to check
##### `suffixes`
Data type: `Variant[String[1],Array[String[1], 1]]`
The suffixes to check
### <a name="stdlibensure"></a>`stdlib::ensure`
Type: Puppet Language
function to cast ensure parameter to resource specific value
#### `stdlib::ensure(Variant[Boolean, Enum['present', 'absent']] $ensure, Enum['directory', 'link', 'mounted', 'service', 'file'] $resource)`
The stdlib::ensure function.
Returns: `String`
##### `ensure`
Data type: `Variant[Boolean, Enum['present', 'absent']]`
##### `resource`
Data type: `Enum['directory', 'link', 'mounted', 'service', 'file']`
### <a name="stdlibextname"></a>`stdlib::extname`
Type: Ruby 4.x API
If Path is a Dotfile, or starts with a Period, then the starting Dot is not
dealt with the Start of the Extension.
An empty String will also be returned, when the Period is the last Character
in Path.
#### Examples
##### Determining the Extension of a Filename
```puppet
stdlib::extname('test.rb') => '.rb'
stdlib::extname('a/b/d/test.rb') => '.rb'
stdlib::extname('test') => ''
stdlib::extname('.profile') => ''
```
#### `stdlib::extname(String $filename)`
If Path is a Dotfile, or starts with a Period, then the starting Dot is not
dealt with the Start of the Extension.
An empty String will also be returned, when the Period is the last Character
in Path.
Returns: `String` The Extension starting from the last Period
##### Examples
###### Determining the Extension of a Filename
```puppet
stdlib::extname('test.rb') => '.rb'
stdlib::extname('a/b/d/test.rb') => '.rb'
stdlib::extname('test') => ''
stdlib::extname('.profile') => ''
```
##### `filename`
Data type: `String`
The Filename
### <a name="stdlibip_in_range"></a>`stdlib::ip_in_range`
Type: Ruby 4.x API
Returns true if the ipaddress is within the given CIDRs
#### Examples
##### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)
```puppet
stdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true
```
#### `stdlib::ip_in_range(String $ipaddress, Variant[String, Array] $range)`
The stdlib::ip_in_range function.
Returns: `Boolean` True or False
##### Examples
###### ip_in_range(<IPv4 Address>, <IPv4 CIDR>)
```puppet
stdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true
```
##### `ipaddress`
Data type: `String`
The IP address to check
##### `range`
Data type: `Variant[String, Array]`
One CIDR or an array of CIDRs
defining the range(s) to check against
### <a name="stdlibstart_with"></a>`stdlib::start_with`
Type: Ruby 4.x API
Returns true if str starts with one of the prefixes given. Each of the prefixes should be a String.
#### Examples
#####
```puppet
'foobar'.stdlib::start_with('foo') => true
'foobar'.stdlib::start_with('bar') => false
'foObar'.stdlib::start_with(['bar', 'baz']) => false
```
#### `stdlib::start_with(String $test_string, Variant[String[1],Array[String[1], 1]] $prefixes)`
The stdlib::start_with function.
Returns: `Boolean` True or False
##### Examples
######
```puppet
'foobar'.stdlib::start_with('foo') => true
'foobar'.stdlib::start_with('bar') => false
'foObar'.stdlib::start_with(['bar', 'baz']) => false
```
##### `test_string`
Data type: `String`
The string to check
##### `prefixes`
Data type: `Variant[String[1],Array[String[1], 1]]`
The prefixes to check.
### <a name="str2bool"></a>`str2bool`
Type: Ruby 3.x API
> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.
See the function new() in Puppet for details what the Boolean data type supports.
#### `str2bool()`
> *Note:* that since Puppet 5.0.0 the Boolean data type can convert strings to a Boolean value.
See the function new() in Puppet for details what the Boolean data type supports.
Returns: `Any` This attempt to convert to boolean strings that contain things like: Y,y, 1, T,t, TRUE,true to 'true' and strings that contain things
like: 0, F,f, N,n, false, FALSE, no to 'false'.
### <a name="str2saltedpbkdf2"></a>`str2saltedpbkdf2`
Type: Ruby 3.x API
Convert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.
Note, however, that Apple changes what's required periodically and this may not work for the latest
version of macOS. If that is the case you should get a helpful error message when Puppet tries to set
the pasword using the parameters you provide to the user resource.
#### Examples
##### Plain text password and salt
```puppet
$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Using s0m3 s@lt', 50000)
user { 'jdoe':
ensure => present,
iterations => $pw_info['interations'],
password => $pw_info['password_hex'],
salt => $pw_info['salt_hex'],
}
```
##### Sensitive password and salt
```puppet
$pw = Sensitive.new('Pa55w0rd')
$salt = Sensitive.new('Using s0m3 s@lt')
$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))
user { 'jdoe':
ensure => present,
iterations => unwrap($pw_info)['interations'],
password => unwrap($pw_info)['password_hex'],
salt => unwrap($pw_info)['salt_hex'],
}
```
#### `str2saltedpbkdf2()`
Convert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+.
Note, however, that Apple changes what's required periodically and this may not work for the latest
version of macOS. If that is the case you should get a helpful error message when Puppet tries to set
the pasword using the parameters you provide to the user resource.
Returns: `Hash` Provides a hash containing the hex version of the password, the hex version of the salt, and iterations.
##### Examples
###### Plain text password and salt
```puppet
$pw_info = str2saltedpbkdf2('Pa55w0rd', 'Using s0m3 s@lt', 50000)
user { 'jdoe':
ensure => present,
iterations => $pw_info['interations'],
password => $pw_info['password_hex'],
salt => $pw_info['salt_hex'],
}
```
###### Sensitive password and salt
```puppet
$pw = Sensitive.new('Pa55w0rd')
$salt = Sensitive.new('Using s0m3 s@lt')
$pw_info = Sensitive.new(str2saltedpbkdf2($pw, $salt, 50000))
user { 'jdoe':
ensure => present,
iterations => unwrap($pw_info)['interations'],
password => unwrap($pw_info)['password_hex'],
salt => unwrap($pw_info)['salt_hex'],
}
```
### <a name="str2saltedsha512"></a>`str2saltedsha512`
Type: Ruby 3.x API
Given any simple string, you will get a hex version
of a salted-SHA512 password hash that can be inserted into your Puppet
manifests as a valid password attribute.
#### `str2saltedsha512()`
Given any simple string, you will get a hex version
of a salted-SHA512 password hash that can be inserted into your Puppet
manifests as a valid password attribute.
Returns: `Any` converted string as a hex version of a salted-SHA512 password hash
### <a name="strip"></a>`strip`
Type: Ruby 3.x API
> *Note:*: from Puppet 6.0.0, the compatible function with the same name in Puppet core
will be used instead of this function.
#### Examples
##### **Usage**
```puppet
strip(" aaa ")
Would result in: "aaa"
```
#### `strip()`
> *Note:*: from Puppet 6.0.0, the compatible function with the same name in Puppet core
will be used instead of this function.
Returns: `Any` String or Array converted
##### Examples
###### **Usage**
```puppet
strip(" aaa ")
Would result in: "aaa"
```
### <a name="suffix"></a>`suffix`
Type: Ruby 3.x API
> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map
function in Puppet. This example does the same as the example above:
```['a', 'b', 'c'].map |$x| { "${x}p" }```
#### Examples
##### **Usage**
```puppet
suffix(['a','b','c'], 'p')
Will return: ['ap','bp','cp']
```
#### `suffix()`
> *Note:* that since Puppet 4.0.0 the general way to modify values is in array is by using the map
function in Puppet. This example does the same as the example above:
```['a', 'b', 'c'].map |$x| { "${x}p" }```
Returns: `Any` Array or Hash with updated elements containing the passed suffix
##### Examples
###### **Usage**
```puppet
suffix(['a','b','c'], 'p')
Will return: ['ap','bp','cp']
```
### <a name="swapcase"></a>`swapcase`
Type: Ruby 3.x API
This function will swap the existing case of a string.
#### Examples
##### **Usage**
```puppet
swapcase("aBcD")
Would result in: "AbCd"
```
#### `swapcase()`
The swapcase function.
Returns: `Any` string with uppercase alphabetic characters converted to lowercase and lowercase characters converted to uppercase
##### Examples
###### **Usage**
```puppet
swapcase("aBcD")
Would result in: "AbCd"
```
### <a name="time"></a>`time`
Type: Ruby 3.x API
> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and
Timespan (a duration). The following example is equivalent to calling time() without
any arguments:
```Timestamp()```
#### Examples
##### **Usage**
```puppet
time()
Will return something like: 1311972653
```
#### `time()`
> *Note:* that since Puppet 4.8.0 the Puppet language has the data types Timestamp (a point in time) and
Timespan (a duration). The following example is equivalent to calling time() without
any arguments:
```Timestamp()```
Returns: `Any` the current time since epoch as an integer.
##### Examples
###### **Usage**
```puppet
time()
Will return something like: 1311972653
```
### <a name="to_bytes"></a>`to_bytes`
Type: Ruby 3.x API
Takes a single string value as an argument.
These conversions reflect a layperson's understanding of
1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.
#### `to_bytes()`
Takes a single string value as an argument.
These conversions reflect a layperson's understanding of
1 MB = 1024 KB, when in fact 1 MB = 1000 KB, and 1 MiB = 1024 KiB.
Returns: `Any` converted value into bytes
### <a name="to_json"></a>`to_json`
Type: Ruby 4.x API
}
#### `to_json(Any $data)`
}
Returns: `Any` converted data to json
##### `data`
Data type: `Any`
data structure which needs to be converted into JSON
### <a name="to_json_pretty"></a>`to_json_pretty`
Type: Ruby 4.x API
Convert data structure and output to pretty JSON
#### Examples
##### **Usage**
```puppet
* how to output pretty JSON to file
file { '/tmp/my.json':
ensure => file,
content => to_json_pretty($myhash),
}
* how to output pretty JSON skipping over keys with undef values
file { '/tmp/my.json':
ensure => file,
content => to_json_pretty({
param_one => 'value',
param_two => undef,
}, true),
}
* how to output pretty JSON using tabs for indentation
file { '/tmp/my.json':
ensure => file,
content => to_json_pretty({
param_one => 'value',
param_two => {
param_more => 42,
},
}, nil, {indent => ' '}),
}
```
#### `to_json_pretty(Variant[Hash, Array] $data, Optional[Optional[Boolean]] $skip_undef, Optional[Struct[{
indent => Optional[String],
space => Optional[String],
space_before => Optional[String],
object_nl => Optional[String],
array_nl => Optional[String],
allow_nan => Optional[Boolean],
max_nesting => Optional[Integer[-1,default]],
}]] $opts)`
The to_json_pretty function.
Returns: `Any` converted data to pretty json
##### Examples
###### **Usage**
```puppet
* how to output pretty JSON to file
file { '/tmp/my.json':
ensure => file,
content => to_json_pretty($myhash),
}
* how to output pretty JSON skipping over keys with undef values
file { '/tmp/my.json':
ensure => file,
content => to_json_pretty({
param_one => 'value',
param_two => undef,
}, true),
}
* how to output pretty JSON using tabs for indentation
file { '/tmp/my.json':
ensure => file,
content => to_json_pretty({
param_one => 'value',
param_two => {
param_more => 42,
},
}, nil, {indent => ' '}),
}
```
##### `data`
Data type: `Variant[Hash, Array]`
data structure which needs to be converted to pretty json
##### `skip_undef`
Data type: `Optional[Optional[Boolean]]`
value `true` or `false`
##### `opts`
Data type: `Optional[Struct[{
indent => Optional[String],
space => Optional[String],
space_before => Optional[String],
object_nl => Optional[String],
array_nl => Optional[String],
allow_nan => Optional[Boolean],
max_nesting => Optional[Integer[-1,default]],
}]]`
hash-map of settings passed to JSON.pretty_generate, see
https://ruby-doc.org/stdlib-2.0.0/libdoc/json/rdoc/JSON.html#method-i-generate.
Note that `max_nesting` doesn't take the value `false`; use `-1` instead.
### <a name="to_yaml"></a>`to_yaml`
Type: Ruby 4.x API
}
#### `to_yaml(Any $data, Optional[Hash] $options)`
}
Returns: `String`
##### `data`
Data type: `Any`
##### `options`
Data type: `Optional[Hash]`
### <a name="try_get_value"></a>`try_get_value`
Type: Ruby 3.x API
The try_get_value function.
#### `try_get_value()`
The try_get_value function.
Returns: `Any`
### <a name="type"></a>`type`
Type: Ruby 3.x API
please use type3x() before upgrading to Puppet 4 for backwards-compatibility, or migrate to the new parser's typing system.
* string
* array
* hash
* float
* integer
* boolean
#### `type()`
please use type3x() before upgrading to Puppet 4 for backwards-compatibility, or migrate to the new parser's typing system.
* string
* array
* hash
* float
* integer
* boolean
Returns: `Any` the type when passed a value. Type can be one of:
### <a name="type3x"></a>`type3x`
Type: Ruby 3.x API
* string
* array
* hash
* float
* integer
* boolean
#### `type3x()`
* string
* array
* hash
* float
* integer
* boolean
Returns: `Any` the type when passed a value. Type can be one of:
### <a name="type_of"></a>`type_of`
Type: Ruby 4.x API
See the documentation for "The Puppet Type System" for more information about types.
See the `assert_type()` function for flexible ways to assert the type of a value.
The built-in type() function in puppet is generally preferred over this function
this function is provided for backwards compatibility.
#### Examples
##### how to compare values' types
```puppet
# compare the types of two values
if type_of($first_value) != type_of($second_value) { fail("first_value and second_value are different types") }
```
##### how to compare against an abstract type
```puppet
unless type_of($first_value) <= Numeric { fail("first_value must be Numeric") }
unless type_of{$first_value) <= Collection[1] { fail("first_value must be an Array or Hash, and contain at least one element") }
```
#### `type_of(Any $value)`
See the documentation for "The Puppet Type System" for more information about types.
See the `assert_type()` function for flexible ways to assert the type of a value.
The built-in type() function in puppet is generally preferred over this function
this function is provided for backwards compatibility.
Returns: `String` the type of the passed value
##### Examples
###### how to compare values' types
```puppet
# compare the types of two values
if type_of($first_value) != type_of($second_value) { fail("first_value and second_value are different types") }
```
###### how to compare against an abstract type
```puppet
unless type_of($first_value) <= Numeric { fail("first_value must be Numeric") }
unless type_of{$first_value) <= Collection[1] { fail("first_value must be an Array or Hash, and contain at least one element") }
```
##### `value`
Data type: `Any`
### <a name="union"></a>`union`
Type: Ruby 3.x API
This function returns a union of two or more arrays.
#### Examples
##### **Usage**
```puppet
union(["a","b","c"],["b","c","d"])
Would return: ["a","b","c","d"]
```
#### `union()`
The union function.
Returns: `Any` a unionized array of two or more arrays
##### Examples
###### **Usage**
```puppet
union(["a","b","c"],["b","c","d"])
Would return: ["a","b","c","d"]
```
### <a name="unique"></a>`unique`
Type: Ruby 3.x API
This function will remove duplicates from strings and arrays.
#### Examples
##### **Usage**
```puppet
unique("aabbcc")
Will return: abc
You can also use this with arrays:
unique(["a","a","b","b","c","c"])
This returns: ["a","b","c"]
```
#### `unique()`
The unique function.
Returns: `Any` String or array with duplicates removed
##### Examples
###### **Usage**
```puppet
unique("aabbcc")
Will return: abc
You can also use this with arrays:
unique(["a","a","b","b","c","c"])
This returns: ["a","b","c"]
```
### <a name="unix2dos"></a>`unix2dos`
Type: Ruby 3.x API
Takes a single string argument.
#### `unix2dos()`
Takes a single string argument.
Returns: `Any` the DOS version of the given string.
### <a name="upcase"></a>`upcase`
Type: Ruby 3.x API
> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core
will be used instead of this function.
#### Examples
##### **Usage**
```puppet
upcase("abcd")
Will return ABCD
```
#### `upcase()`
> *Note:* from Puppet 6.0.0, the compatible function with the same name in Puppet core
will be used instead of this function.
Returns: `Any` converted string ot array of strings to uppercase
##### Examples
###### **Usage**
```puppet
upcase("abcd")
Will return ABCD
```
### <a name="uriescape"></a>`uriescape`
Type: Ruby 3.x API
Urlencodes a string or array of strings.
Requires either a single string or an array as an input.
#### `uriescape()`
The uriescape function.
Returns: `String` a string that contains the converted value
### <a name="validate_absolute_path"></a>`validate_absolute_path`
Type: Ruby 4.x API
Validate the string represents an absolute path in the filesystem.
#### `validate_absolute_path(Any $scope, Any *$args)`
The validate_absolute_path function.
Returns: `Boolean` A boolean value returned from the called function.
##### `scope`
Data type: `Any`
The main value that will be passed to the method
##### `*args`
Data type: `Any`
Any additional values that are to be passed to the method
### <a name="validate_absolute_path"></a>`validate_absolute_path`
Type: Ruby 3.x API
Validate the string represents an absolute path in the filesystem. This function works
for windows and unix style paths.
#### Examples
##### **Usage**
```puppet
The following values will pass:
$my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'
validate_absolute_path($my_path)
$my_path2 = '/var/lib/puppet'
validate_absolute_path($my_path2)
$my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet','C:/Program Files/Puppet Labs/Puppet']
validate_absolute_path($my_path3)
$my_path4 = ['/var/lib/puppet','/usr/share/puppet']
validate_absolute_path($my_path4)
The following values will fail, causing compilation to abort:
validate_absolute_path(true)
validate_absolute_path('../var/lib/puppet')
validate_absolute_path('var/lib/puppet')
validate_absolute_path([ 'var/lib/puppet', '/var/foo' ])
validate_absolute_path([ '/var/lib/puppet', 'var/foo' ])
$undefined = undef
validate_absolute_path($undefin
```
#### `validate_absolute_path()`
The validate_absolute_path function.
Returns: `Any` passes when the string is an absolute path or raise an error when it is not and fails compilation
##### Examples
###### **Usage**
```puppet
The following values will pass:
$my_path = 'C:/Program Files (x86)/Puppet Labs/Puppet'
validate_absolute_path($my_path)
$my_path2 = '/var/lib/puppet'
validate_absolute_path($my_path2)
$my_path3 = ['C:/Program Files (x86)/Puppet Labs/Puppet','C:/Program Files/Puppet Labs/Puppet']
validate_absolute_path($my_path3)
$my_path4 = ['/var/lib/puppet','/usr/share/puppet']
validate_absolute_path($my_path4)
The following values will fail, causing compilation to abort:
validate_absolute_path(true)
validate_absolute_path('../var/lib/puppet')
validate_absolute_path('var/lib/puppet')
validate_absolute_path([ 'var/lib/puppet', '/var/foo' ])
validate_absolute_path([ '/var/lib/puppet', 'var/foo' ])
$undefined = undef
validate_absolute_path($undefin
```
### <a name="validate_array"></a>`validate_array`
Type: Ruby 4.x API
Validate the passed value represents an array.
#### `validate_array(Any $scope, Any *$args)`
The validate_array function.
Returns: `Any` A boolean value (`true` or `false`) returned from the called function.
##### `scope`
Data type: `Any`
The main value that will be passed to the method
##### `*args`
Data type: `Any`
Any additional values that are to be passed to the method
### <a name="validate_array"></a>`validate_array`
Type: Ruby 3.x API
Validate that all passed values are array data structures. Abort catalog
compilation if any value fails this check.
#### Examples
##### **Usage**
```puppet
The following values will pass:
$my_array = [ 'one', 'two' ]
validate_array($my_array)
The following values will fail, causing compilation to abort:
validate_array(true)
validate_array('some_string')
$undefined = undef
validate_array($undefined
```
#### `validate_array()`
The validate_array function.
Returns: `Any` validate array
##### Examples
###### **Usage**
```puppet
The following values will pass:
$my_array = [ 'one', 'two' ]
validate_array($my_array)
The following values will fail, causing compilation to abort:
validate_array(true)
validate_array('some_string')
$undefined = undef
validate_array($undefined
```
### <a name="validate_augeas"></a>`validate_augeas`
Type: Ruby 3.x API
The first argument of this function should be a string to
test, and the second argument should be the name of the Augeas lens to use.
If Augeas fails to parse the string with the lens, the compilation will
abort with a parse error.
A third argument can be specified, listing paths which should
not be found in the file. The `$file` variable points to the location
of the temporary file being tested in the Augeas tree.
#### Examples
##### **Usage**
```puppet
If you want to make sure your passwd content never contains
a user `foo`, you could write:
validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])
If you wanted to ensure that no users used the '/bin/barsh' shell,
you could use:
validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell="/bin/barsh"]']
If a fourth argument is specified, this will be the error message raised and
seen by the user.
A helpful error message can be returned like this:
validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')
```
#### `validate_augeas()`
The first argument of this function should be a string to
test, and the second argument should be the name of the Augeas lens to use.
If Augeas fails to parse the string with the lens, the compilation will
abort with a parse error.
A third argument can be specified, listing paths which should
not be found in the file. The `$file` variable points to the location
of the temporary file being tested in the Augeas tree.
Returns: `Any` validate string using an Augeas lens
##### Examples
###### **Usage**
```puppet
If you want to make sure your passwd content never contains
a user `foo`, you could write:
validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo'])
If you wanted to ensure that no users used the '/bin/barsh' shell,
you could use:
validate_augeas($passwdcontent, 'Passwd.lns', ['$file/*[shell="/bin/barsh"]']
If a fourth argument is specified, this will be the error message raised and
seen by the user.
A helpful error message can be returned like this:
validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas')
```
### <a name="validate_bool"></a>`validate_bool`
Type: Ruby 4.x API
Validate the passed value represents a boolean.
#### `validate_bool(Any $scope, Any *$args)`
The validate_bool function.
Returns: `Boolean` `true` or `false`
A boolean value returned from the called function.
##### `scope`
Data type: `Any`
The main value that will be passed to the method
##### `*args`
Data type: `Any`
Any additional values that are to be passed to the method
### <a name="validate_bool"></a>`validate_bool`
Type: Ruby 3.x API
Validate that all passed values are either true or false. Abort catalog
compilation if any value fails this check.
#### Examples
##### **Usage**
```puppet
The following values will pass:
$iamtrue = true
validate_bool(true)
validate_bool(true, true, false, $iamtrue)
The following values will fail, causing compilation to abort:
$some_array = [ true ]
validate_bool("false")
validate_bool("true")
validate_bool($some_array)
```
#### `validate_bool()`
The validate_bool function.
Returns: `Any` validate boolean
##### Examples
###### **Usage**
```puppet
The following values will pass:
$iamtrue = true
validate_bool(true)
validate_bool(true, true, false, $iamtrue)
The following values will fail, causing compilation to abort:
$some_array = [ true ]
validate_bool("false")
validate_bool("true")
validate_bool($some_array)
```
### <a name="validate_cmd"></a>`validate_cmd`
Type: Ruby 3.x API
The first argument of this function should be a string to
test, and the second argument should be a path to a test command
taking a % as a placeholder for the file path (will default to the end).
If the command, launched against a tempfile containing the passed string,
returns a non-null value, compilation will abort with a parse error.
If a third argument is specified, this will be the error message raised and
seen by the user.
A helpful error message can be returned like this:
#### Examples
##### **Usage**
```puppet
Defaults to end of path
validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')
% as file location
validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')
```
#### `validate_cmd()`
The first argument of this function should be a string to
test, and the second argument should be a path to a test command
taking a % as a placeholder for the file path (will default to the end).
If the command, launched against a tempfile containing the passed string,
returns a non-null value, compilation will abort with a parse error.
If a third argument is specified, this will be the error message raised and
seen by the user.
A helpful error message can be returned like this:
Returns: `Any` validate of a string with an external command
##### Examples
###### **Usage**
```puppet
Defaults to end of path
validate_cmd($sudoerscontent, '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')
% as file location
validate_cmd($haproxycontent, '/usr/sbin/haproxy -f % -c', 'Haproxy failed to validate config content')
```
### <a name="validate_domain_name"></a>`validate_domain_name`
Type: Ruby 3.x API
Validate that all values passed are syntactically correct domain names.
Fail compilation if any value fails this check.
#### Examples
##### **Usage**
```puppet
The following values will pass:
$my_domain_name = 'server.domain.tld'
validate_domain_name($my_domain_name)
validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)
The following values will fail, causing compilation to abort:
validate_domain_name(1)
validate_domain_name(true)
validate_domain_name('invalid domain')
validate_domain_name('-foo.example.com')
validate_domain_name('www.example.2com')
```
#### `validate_domain_name()`
The validate_domain_name function.
Returns: `Any` passes when the given values are syntactically correct domain names or raise an error when they are not and fails compilation
##### Examples
###### **Usage**
```puppet
The following values will pass:
$my_domain_name = 'server.domain.tld'
validate_domain_name($my_domain_name)
validate_domain_name('domain.tld', 'puppet.com', $my_domain_name)
The following values will fail, causing compilation to abort:
validate_domain_name(1)
validate_domain_name(true)
validate_domain_name('invalid domain')
validate_domain_name('-foo.example.com')
validate_domain_name('www.example.2com')
```
### <a name="validate_email_address"></a>`validate_email_address`
Type: Ruby 3.x API
Validate that all values passed are valid email addresses.
Fail compilation if any value fails this check.
#### Examples
##### **Usage**
```puppet
The following values will pass:
$my_email = "waldo@gmail.com"
validate_email_address($my_email)
validate_email_address("bob@gmail.com", "alice@gmail.com", $my_email)
The following values will fail, causing compilation to abort:
$some_array = [ 'bad_email@/d/efdf.com' ]
validate_email_address($some_array)
```
#### `validate_email_address()`
The validate_email_address function.
Returns: `Any` Fail compilation if any value fails this check.
##### Examples
###### **Usage**
```puppet
The following values will pass:
$my_email = "waldo@gmail.com"
validate_email_address($my_email)
validate_email_address("bob@gmail.com", "alice@gmail.com", $my_email)
The following values will fail, causing compilation to abort:
$some_array = [ 'bad_email@/d/efdf.com' ]
validate_email_address($some_array)
```
### <a name="validate_hash"></a>`validate_hash`
Type: Ruby 4.x API
Validate the passed value represents a hash.
#### `validate_hash(Any $scope, Any *$args)`
The validate_hash function.
Returns: `Any` A boolean value (`true` or `false`) returned from the called function.
##### `scope`
Data type: `Any`
The main value that will be passed to the method
##### `*args`
Data type: `Any`
Any additional values that are to be passed to the method
### <a name="validate_hash"></a>`validate_hash`
Type: Ruby 3.x API
Validate that all passed values are hash data structures. Abort catalog
compilation if any value fails this check.
#### Examples
##### **Usage**
```puppet
The following values will pass:
$my_hash = { 'one' => 'two' }
validate_hash($my_hash)
The following values will fail, causing compilation to abort:
validate_hash(true)
validate_hash('some_string')
$undefined = undef
validate_hash($undefined)
```
#### `validate_hash()`
The validate_hash function.
Returns: `Any` validate hash
##### Examples
###### **Usage**
```puppet
The following values will pass:
$my_hash = { 'one' => 'two' }
validate_hash($my_hash)
The following values will fail, causing compilation to abort:
validate_hash(true)
validate_hash('some_string')
$undefined = undef
validate_hash($undefined)
```
### <a name="validate_integer"></a>`validate_integer`
Type: Ruby 4.x API
Validate the passed value represents an integer.
#### `validate_integer(Any $scope, Any *$args)`
The validate_integer function.
Returns: `Boolean` `true` or `false`
A boolean value returned from the called function.
##### `scope`
Data type: `Any`
The main value that will be passed to the method
##### `*args`
Data type: `Any`
Any additional values that are to be passed to the method
### <a name="validate_integer"></a>`validate_integer`
Type: Ruby 3.x API
The second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.
The third argument is optional and passes a minimum. (All elements of) the first argument has to be greater or equal to this min.
If, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check
if (all elements of) the first argument are greater or equal to the given minimum.
It will fail if the first argument is not an integer or array of integers, and if arg 2 and arg 3 are not convertable to an integer.
#### Examples
##### **Usage**
```puppet
The following values will pass:
validate_integer(1)
validate_integer(1, 2)
validate_integer(1, 1)
validate_integer(1, 2, 0)
validate_integer(2, 2, 2)
validate_integer(2, '', 0)
validate_integer(2, undef, 0)
$foo = undef
validate_integer(2, $foo, 0)
validate_integer([1,2,3,4,5], 6)
validate_integer([1,2,3,4,5], 6, 0)
Plus all of the above, but any combination of values passed as strings ('1' or "1").
Plus all of the above, but with (correct) combinations of negative integer values.
The following values will not:
validate_integer(true)
validate_integer(false)
validate_integer(7.0)
validate_integer({ 1 => 2 })
$foo = undef
validate_integer($foo)
validate_integer($foobaridontexist)
validate_integer(1, 0)
validate_integer(1, true)
validate_integer(1, '')
validate_integer(1, undef)
validate_integer(1, , 0)
validate_integer(1, 2, 3)
validate_integer(1, 3, 2)
validate_integer(1, 3, true)
Plus all of the above, but any combination of values passed as strings ('false' or "false").
Plus all of the above, but with incorrect combinations of negative integer values.
Plus all of the above, but with non-integer items in arrays or maximum / minimum argument.
```
#### `validate_integer()`
The second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.
The third argument is optional and passes a minimum. (All elements of) the first argument has to be greater or equal to this min.
If, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check
if (all elements of) the first argument are greater or equal to the given minimum.
It will fail if the first argument is not an integer or array of integers, and if arg 2 and arg 3 are not convertable to an integer.
Returns: `Any` Validate that the first argument is an integer (or an array of integers). Fail compilation if any of the checks fail.
##### Examples
###### **Usage**
```puppet
The following values will pass:
validate_integer(1)
validate_integer(1, 2)
validate_integer(1, 1)
validate_integer(1, 2, 0)
validate_integer(2, 2, 2)
validate_integer(2, '', 0)
validate_integer(2, undef, 0)
$foo = undef
validate_integer(2, $foo, 0)
validate_integer([1,2,3,4,5], 6)
validate_integer([1,2,3,4,5], 6, 0)
Plus all of the above, but any combination of values passed as strings ('1' or "1").
Plus all of the above, but with (correct) combinations of negative integer values.
The following values will not:
validate_integer(true)
validate_integer(false)
validate_integer(7.0)
validate_integer({ 1 => 2 })
$foo = undef
validate_integer($foo)
validate_integer($foobaridontexist)
validate_integer(1, 0)
validate_integer(1, true)
validate_integer(1, '')
validate_integer(1, undef)
validate_integer(1, , 0)
validate_integer(1, 2, 3)
validate_integer(1, 3, 2)
validate_integer(1, 3, true)
Plus all of the above, but any combination of values passed as strings ('false' or "false").
Plus all of the above, but with incorrect combinations of negative integer values.
Plus all of the above, but with non-integer items in arrays or maximum / minimum argument.
```
### <a name="validate_ip_address"></a>`validate_ip_address`
Type: Ruby 4.x API
Validate the passed value represents an ip_address.
#### `validate_ip_address(Any $scope, Any *$args)`
The validate_ip_address function.
Returns: `Boolean` `true` or `false`
A boolean value returned from the called function.
##### `scope`
Data type: `Any`
The main value that will be passed to the method
##### `*args`
Data type: `Any`
Any additional values that are to be passed to the method
### <a name="validate_ip_address"></a>`validate_ip_address`
Type: Ruby 3.x API
Validate that all values passed are valid IP addresses,
regardless they are IPv4 or IPv6
Fail compilation if any value fails this check.
#### Examples
##### **Usage**
```puppet
The following values will pass:
$my_ip = "1.2.3.4"
validate_ip_address($my_ip)
validate_ip_address("8.8.8.8", "172.16.0.1", $my_ip)
$my_ip = "3ffe:505:2"
validate_ip_address(1)
validate_ip_address($my_ip)
validate_ip_address("fe80::baf6:b1ff:fe19:7507", $my_ip)
The following values will fail, causing compilation to abort:
$some_array = [ 1, true, false, "garbage string", "3ffe:505:2" ]
validate_ip_address($some_array)
```
#### `validate_ip_address()`
The validate_ip_address function.
Returns: `Any` passes when the given values are valid IP addresses or raise an error when they are not and fails compilation
##### Examples
###### **Usage**
```puppet
The following values will pass:
$my_ip = "1.2.3.4"
validate_ip_address($my_ip)
validate_ip_address("8.8.8.8", "172.16.0.1", $my_ip)
$my_ip = "3ffe:505:2"
validate_ip_address(1)
validate_ip_address($my_ip)
validate_ip_address("fe80::baf6:b1ff:fe19:7507", $my_ip)
The following values will fail, causing compilation to abort:
$some_array = [ 1, true, false, "garbage string", "3ffe:505:2" ]
validate_ip_address($some_array)
```
### <a name="validate_ipv4_address"></a>`validate_ipv4_address`
Type: Ruby 4.x API
Validate the passed value represents an ipv4_address.
#### `validate_ipv4_address(Any $scope, Any *$args)`
The validate_ipv4_address function.
Returns: `Boolean` `true` or `false`
A boolean value returned from the called function.
##### `scope`
Data type: `Any`
The main value that will be passed to the method
##### `*args`
Data type: `Any`
Any additional values that are to be passed to the method
### <a name="validate_ipv4_address"></a>`validate_ipv4_address`
Type: Ruby 3.x API
Validate that all values passed are valid IPv4 addresses.
Fail compilation if any value fails this check.
#### Examples
##### **Usage**
```puppet
The following values will pass:
$my_ip = "1.2.3.4"
validate_ipv4_address($my_ip)
validate_ipv4_address("8.8.8.8", "172.16.0.1", $my_ip)
The following values will fail, causing compilation to abort:
$some_array = [ 1, true, false, "garbage string", "3ffe:505:2" ]
validate_ipv4_address($some_array)
```
#### `validate_ipv4_address()`
The validate_ipv4_address function.
Returns: `Any` passes when the given values are valid IPv4 addresses or raise an error when they are not and fails compilation
##### Examples
###### **Usage**
```puppet
The following values will pass:
$my_ip = "1.2.3.4"
validate_ipv4_address($my_ip)
validate_ipv4_address("8.8.8.8", "172.16.0.1", $my_ip)
The following values will fail, causing compilation to abort:
$some_array = [ 1, true, false, "garbage string", "3ffe:505:2" ]
validate_ipv4_address($some_array)
```
### <a name="validate_ipv6_address"></a>`validate_ipv6_address`
Type: Ruby 4.x API
Validate the passed value represents an ipv6_address.
#### `validate_ipv6_address(Any $scope, Any *$args)`
The validate_ipv6_address function.
Returns: `Boolean` `true` or `false`
A boolean value returned from the called function.
##### `scope`
Data type: `Any`
The main value that will be passed to the method
##### `*args`
Data type: `Any`
Any additional values that are to be passed to the method
### <a name="validate_ipv6_address"></a>`validate_ipv6_address`
Type: Ruby 3.x API
Validate that all values passed are valid IPv6 addresses.
Fail compilation if any value fails this check.
#### Examples
##### **Usage**
```puppet
The following values will pass:
$my_ip = "3ffe:505:2"
validate_ipv6_address(1)
validate_ipv6_address($my_ip)
validate_bool("fe80::baf6:b1ff:fe19:7507", $my_ip)
The following values will fail, causing compilation to abort:
$some_array = [ true, false, "garbage string", "1.2.3.4" ]
validate_ipv6_address($some_array)
```
#### `validate_ipv6_address()`
The validate_ipv6_address function.
Returns: `Any` passes when the given values are valid IPv6 addresses or raise an error when they are not and fails compilation
##### Examples
###### **Usage**
```puppet
The following values will pass:
$my_ip = "3ffe:505:2"
validate_ipv6_address(1)
validate_ipv6_address($my_ip)
validate_bool("fe80::baf6:b1ff:fe19:7507", $my_ip)
The following values will fail, causing compilation to abort:
$some_array = [ true, false, "garbage string", "1.2.3.4" ]
validate_ipv6_address($some_array)
```
### <a name="validate_legacy"></a>`validate_legacy`
Type: Ruby 4.x API
Validate a value against both the target_type (new) and the previous_validation function (old).
#### `validate_legacy(Any $scope, Type $target_type, String $function_name, Any $value, Any *$args)`
The function checks a value against both the target_type (new) and the previous_validation function (old).
Returns: `Any` A boolean value (`true` or `false`) returned from the called function.
##### `scope`
Data type: `Any`
The main value that will be passed to the method
##### `target_type`
Data type: `Type`
##### `function_name`
Data type: `String`
##### `value`
Data type: `Any`
##### `*args`
Data type: `Any`
Any additional values that are to be passed to the method
#### `validate_legacy(Any $scope, String $type_string, String $function_name, Any $value, Any *$args)`
The validate_legacy function.
Returns: `Any` Legacy validation method
##### `scope`
Data type: `Any`
The main value that will be passed to the method
##### `type_string`
Data type: `String`
##### `function_name`
Data type: `String`
##### `value`
Data type: `Any`
##### `*args`
Data type: `Any`
Any additional values that are to be passed to the method
### <a name="validate_numeric"></a>`validate_numeric`
Type: Ruby 4.x API
Validate the passed value represents a numeric value.
#### `validate_numeric(Any $scope, Any *$args)`
The validate_numeric function.
Returns: `Boolean` `true` or `false`
A boolean value returned from the called function.
##### `scope`
Data type: `Any`
The main value that will be passed to the method
##### `*args`
Data type: `Any`
Any additional values that are to be passed to the method
### <a name="validate_numeric"></a>`validate_numeric`
Type: Ruby 3.x API
The second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.
The third argument is optional and passes a minimum. (All elements of) the first argument has to be greater or equal to this min.
If, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check
if (all elements of) the first argument are greater or equal to the given minimum.
It will fail if the first argument is not a numeric (Integer or Float) or array of numerics, and if arg 2 and arg 3 are not convertable to a numeric.
For passing and failing usage, see `validate_integer()`. It is all the same for validate_numeric, yet now floating point values are allowed, too.
#### `validate_numeric()`
The second argument is optional and passes a maximum. (All elements of) the first argument has to be less or equal to this max.
The third argument is optional and passes a minimum. (All elements of) the first argument has to be greater or equal to this min.
If, and only if, a minimum is given, the second argument may be an empty string or undef, which will be handled to just check
if (all elements of) the first argument are greater or equal to the given minimum.
It will fail if the first argument is not a numeric (Integer or Float) or array of numerics, and if arg 2 and arg 3 are not convertable to a numeric.
For passing and failing usage, see `validate_integer()`. It is all the same for validate_numeric, yet now floating point values are allowed, too.
Returns: `Any` Validate that the first argument is a numeric value (or an array of numeric values). Fail compilation if any of the checks fail.
### <a name="validate_re"></a>`validate_re`
Type: Ruby 4.x API
Perform validation of a string against one or more regular
expressions.
#### `validate_re(Any $scope, Any *$args)`
The validate_re function.
Returns: `Boolean` `true` or `false` returned from the called function.
##### `scope`
Data type: `Any`
The main value that will be passed to the method
##### `*args`
Data type: `Any`
Any additional values that are to be passed to the method
The first argument of this function should be a string to
test, and the second argument should be a stringified regular expression
(without the // delimiters) or an array of regular expressions
### <a name="validate_re"></a>`validate_re`
Type: Ruby 3.x API
The first argument of this function should be a string to
test, and the second argument should be a stringified regular expression
(without the // delimiters) or an array of regular expressions. If none
of the regular expressions match the string passed in, compilation will
abort with a parse error.
If a third argument is specified, this will be the error message raised and
seen by the user.
> *Note:*
Compilation will also abort, if the first argument is not a String. Always use
quotes to force stringification:
validate_re("${::operatingsystemmajrelease}", '^[57]$')
#### Examples
##### **Usage**
```puppet
The following strings will validate against the regular expressions:
validate_re('one', '^one$')
validate_re('one', [ '^one', '^two' ])
The following strings will fail to validate, causing compilation to abort:
validate_re('one', [ '^two', '^three' ])
A helpful error message can be returned like this:
validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7')
```
#### `validate_re()`
The first argument of this function should be a string to
test, and the second argument should be a stringified regular expression
(without the // delimiters) or an array of regular expressions. If none
of the regular expressions match the string passed in, compilation will
abort with a parse error.
If a third argument is specified, this will be the error message raised and
seen by the user.
> *Note:*
Compilation will also abort, if the first argument is not a String. Always use
quotes to force stringification:
validate_re("${::operatingsystemmajrelease}", '^[57]$')
Returns: `Any` validation of a string against one or more regular expressions.
##### Examples
###### **Usage**
```puppet
The following strings will validate against the regular expressions:
validate_re('one', '^one$')
validate_re('one', [ '^one', '^two' ])
The following strings will fail to validate, causing compilation to abort:
validate_re('one', [ '^two', '^three' ])
A helpful error message can be returned like this:
validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7')
```
### <a name="validate_slength"></a>`validate_slength`
Type: Ruby 4.x API
Validate that a passed string has length less/equal with the passed value
#### `validate_slength(Any $scope, Any *$args)`
Validate that a passed string has length less/equal with the passed value
Returns: `Boolean` `true` or `false`
A boolean value returned from the called function.
##### `scope`
Data type: `Any`
The main value that will be passed to the method
##### `*args`
Data type: `Any`
Any additional values that are to be passed to the method
### <a name="validate_slength"></a>`validate_slength`
Type: Ruby 3.x API
Validate that the first argument is a string (or an array of strings), and less/equal to than the length of the second argument.
An optional third parameter can be given the minimum length. It fails if the first argument is not a string or array of strings,
and if arg 2 and arg 3 are not convertable to a number.
#### Examples
##### **Usage**
```puppet
The following values will pass:
validate_slength("discombobulate",17)
validate_slength(["discombobulate","moo"],17)
validate_slength(["discombobulate","moo"],17,3)
The following valueis will not:
validate_slength("discombobulate",1)
validate_slength(["discombobulate","thermometer"],5)
validate_slength(["discombobulate","moo"],17,10)
```
#### `validate_slength()`
The validate_slength function.
Returns: `Any` validate that the first argument is a string (or an array of strings), and less/equal to than the length of the second argument. Fail compilation if any of the checks fail.
##### Examples
###### **Usage**
```puppet
The following values will pass:
validate_slength("discombobulate",17)
validate_slength(["discombobulate","moo"],17)
validate_slength(["discombobulate","moo"],17,3)
The following valueis will not:
validate_slength("discombobulate",1)
validate_slength(["discombobulate","thermometer"],5)
validate_slength(["discombobulate","moo"],17,10)
```
### <a name="validate_string"></a>`validate_string`
Type: Ruby 4.x API
Validate that all passed values are string data structures.
#### `validate_string(Any $scope, Any *$args)`
The validate_string function.
Returns: `Boolean` `true` or `false`
A boolean value returned from the called function.
##### `scope`
Data type: `Any`
The main value that will be passed to the method
##### `*args`
Data type: `Any`
Any additional values that are to be passed to the method
### <a name="validate_string"></a>`validate_string`
Type: Ruby 3.x API
> *Note:*
Validate_string(undef) will not fail in this version of the
functions API (incl. current and future parser). Instead, use:
```
if $var == undef {
fail('...')
}
```
#### Examples
##### **Usage**
```puppet
The following values will pass:
$my_string = "one two"
validate_string($my_string, 'three')
The following values will fail, causing compilation to abort:
validate_string(true)
validate_string([ 'some', 'array' ])
```
#### `validate_string()`
> *Note:*
Validate_string(undef) will not fail in this version of the
functions API (incl. current and future parser). Instead, use:
```
if $var == undef {
fail('...')
}
```
Returns: `Any` Validate that all passed values are string data structures. Failed
compilation if any value fails this check.
##### Examples
###### **Usage**
```puppet
The following values will pass:
$my_string = "one two"
validate_string($my_string, 'three')
The following values will fail, causing compilation to abort:
validate_string(true)
validate_string([ 'some', 'array' ])
```
### <a name="validate_x509_rsa_key_pair"></a>`validate_x509_rsa_key_pair`
Type: Ruby 3.x API
```validate_x509_rsa_key_pair($cert, $key)```
#### `validate_x509_rsa_key_pair()`
```validate_x509_rsa_key_pair($cert, $key)```
Returns: `Any` Fail compilation if any value fails this check.
### <a name="values"></a>`values`
Type: Ruby 3.x API
> *Note:*
From Puppet 5.5.0, the compatible function with the same name in Puppet core
will be used instead of this function.
#### Examples
##### **Usage**
```puppet
$hash = {
'a' => 1,
'b' => 2,
'c' => 3,
}
values($hash)
This example would return: ```[1,2,3]```
```
#### `values()`
> *Note:*
From Puppet 5.5.0, the compatible function with the same name in Puppet core
will be used instead of this function.
Returns: `Any` array of values
##### Examples
###### **Usage**
```puppet
$hash = {
'a' => 1,
'b' => 2,
'c' => 3,
}
values($hash)
This example would return: ```[1,2,3]```
```
### <a name="values_at"></a>`values_at`
Type: Ruby 3.x API
The first argument is the array you want to analyze, and the second element can
be a combination of:
* A single numeric index
* A range in the form of 'start-stop' (eg. 4-9)
* An array combining the above
> *Note:*
Since Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.
A negative value is taken to be "from the end" of the array:
`['a', 'b', 'c', 'd'][1, 2]` results in `['b', 'c']`
`['a', 'b', 'c', 'd'][2, -1]` results in `['c', 'd']`
`['a', 'b', 'c', 'd'][1, -2]` results in `['b', 'c']`
#### Examples
##### **Usage**
```puppet
values_at(['a','b','c'], 2)
Would return ['c']
values_at(['a','b','c'], ["0-1"])
Would return ['a','b']
values_at(['a','b','c','d','e'], [0, "2-3"])
Would return ['a','c','d']
```
#### `values_at()`
The first argument is the array you want to analyze, and the second element can
be a combination of:
* A single numeric index
* A range in the form of 'start-stop' (eg. 4-9)
* An array combining the above
> *Note:*
Since Puppet 4.0.0 it is possible to slice an array with index and count directly in the language.
A negative value is taken to be "from the end" of the array:
`['a', 'b', 'c', 'd'][1, 2]` results in `['b', 'c']`
`['a', 'b', 'c', 'd'][2, -1]` results in `['c', 'd']`
`['a', 'b', 'c', 'd'][1, -2]` results in `['b', 'c']`
Returns: `Any` an array of values identified by location
##### Examples
###### **Usage**
```puppet
values_at(['a','b','c'], 2)
Would return ['c']
values_at(['a','b','c'], ["0-1"])
Would return ['a','b']
values_at(['a','b','c','d','e'], [0, "2-3"])
Would return ['a','c','d']
```
### <a name="zip"></a>`zip`
Type: Ruby 3.x API
Takes one element from first array and merges corresponding elements from second array.
#### Examples
#####
```puppet
zip(['1','2','3'],['4','5','6'])
Would result in: ["1", "4"], ["2", "5"], ["3", "6"]
```
#### `zip()`
The zip function.
Returns: `Any` This generates a sequence of n-element arrays, where n is one more than the count of arguments.
##### Examples
######
```puppet
zip(['1','2','3'],['4','5','6'])
Would result in: ["1", "4"], ["2", "5"], ["3", "6"]
```
## Data types
### <a name="stdlibabsolutepath"></a>`Stdlib::Absolutepath`
A strict absolutepath type
Alias of
```puppet
Variant[Stdlib::Windowspath, Stdlib::Unixpath]
```
### <a name="stdlibbase32"></a>`Stdlib::Base32`
Type to match base32 String
Alias of
```puppet
Pattern[/\A[a-z2-7]+={,6}\z/, /\A[A-Z2-7]+={,6}\z/]
```
### <a name="stdlibbase64"></a>`Stdlib::Base64`
Type to match base64 String
Alias of
```puppet
Pattern[/\A[a-zA-Z0-9\/\+]+={,2}\z/]
```
### <a name="stdlibcompatabsolute_path"></a>`Stdlib::Compat::Absolute_path`
Emulate the is_absolute_path and validate_absolute_path functions
The first pattern is originally from is_absolute_path, which had it from 2.7.x's lib/puppet/util.rb Puppet::Util.absolute_path?
slash = '[\\\\/]'
name = '[^\\\\/]+'
%r!^(([A-Z]:#{slash})|(#{slash}#{slash}#{name}#{slash}#{name})|(#{slash}#{slash}\?#{slash}#{name}))!i,
Alias of
```puppet
Variant[Pattern[/^(([a-zA-Z]:[\\\/])|([\\\/][\\\/][^\\\/]+[\\\/][^\\\/]+)|([\\\/][\\\/]\?[\\\/][^\\\/]+))/], Pattern[/^\//]]
```
### <a name="stdlibcompatarray"></a>`Stdlib::Compat::Array`
Emulate the is_array and validate_array functions
Alias of
```puppet
Array[Any]
```
### <a name="stdlibcompatbool"></a>`Stdlib::Compat::Bool`
Emulate the is_bool and validate_bool functions
Alias of
```puppet
Boolean
```
### <a name="stdlibcompatfloat"></a>`Stdlib::Compat::Float`
Emulate the is_float function
The regex is what's currently used in is_float
To keep your development moving forward, you can also add a deprecation warning using the Integer type:
```class example($value) { validate_float($value,) }```
would turn into
```
class example(Stdlib::Compat::Float $value) {
validate_float($value, 10, 0)
assert_type(Integer[0, 10], $value) |$expected, $actual| {
warning("The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.")
}
}
```
This allows you to find all places where a consumers of your code call it with unexpected values.
Alias of
```puppet
Variant[Float, Pattern[/^-?(?:(?:[1-9]\d*)|0)(?:\.\d+)(?:[eE]-?\d+)?$/]]
```
### <a name="stdlibcompathash"></a>`Stdlib::Compat::Hash`
Emulate the is_hash and validate_hash functions
Alias of
```puppet
Hash[Any, Any]
```
### <a name="stdlibcompatinteger"></a>`Stdlib::Compat::Integer`
Emulate the is_integer and validate_integer functions
The regex is what's currently used in is_integer
validate_numeric also allows range checking, which cannot be mapped to the string parsing inside the function.
For full backwards compatibility, you will need to keep the validate_numeric call around to catch everything.
To keep your development moving forward, you can also add a deprecation warning using the Integer type:
```class example($value) { validate_integer($value, 10, 0) }```
would turn into
```
class example(Stdlib::Compat::Integer $value) {
validate_numeric($value, 10, 0)
assert_type(Integer[0, 10], $value) |$expected, $actual| {
warning("The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.")
}
}
```
> Note that you need to use Variant[Integer[0, 10], Float[0, 10]] if you want to match both integers and floating point numbers.
This allows you to find all places where a consumers of your code call it with unexpected values.
Alias of
```puppet
Variant[Integer, Pattern[/^-?(?:(?:[1-9]\d*)|0)$/], Array[Variant[Integer, Pattern[/^-?(?:(?:[1-9]\d*)|0)$/]]]]
```
### <a name="stdlibcompatip_address"></a>`Stdlib::Compat::Ip_address`
The Stdlib::Compat::Ip_address data type.
Alias of
```puppet
Variant[Stdlib::Compat::Ipv4, Stdlib::Compat::Ipv6]
```
### <a name="stdlibcompatipv4"></a>`Stdlib::Compat::Ipv4`
Emulate the validate_ipv4_address and is_ipv4_address functions
Alias of
```puppet
Pattern[/^((([0-9](?!\d)|[1-9][0-9](?!\d)|1[0-9]{2}(?!\d)|2[0-4][0-9](?!\d)|25[0-5](?!\d))[.]){3}([0-9](?!\d)|[1-9][0-9](?!\d)|1[0-9]{2}(?!\d)|2[0-4][0-9](?!\d)|25[0-5](?!\d)))(\/((([0-9](?!\d)|[1-9][0-9](?!\d)|1[0-9]{2}(?!\d)|2[0-4][0-9](?!\d)|25[0-5](?!\d))[.]){3}([0-9](?!\d)|[1-9][0-9](?!\d)|1[0-9]{2}(?!\d)|2[0-4][0-9](?!\d)|25[0-5](?!\d))|[0-9]+))?$/]
```
### <a name="stdlibcompatipv6"></a>`Stdlib::Compat::Ipv6`
The Stdlib::Compat::Ipv6 data type.
Alias of
```puppet
Pattern[/\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/]
```
### <a name="stdlibcompatnumeric"></a>`Stdlib::Compat::Numeric`
Emulate the is_numeric and validate_numeric functions
The regex is what's currently used in is_numeric
validate_numeric also allows range checking, which cannot be mapped to the string parsing inside the function.
For full backwards compatibility, you will need to keep the validate_numeric call around to catch everything.
To keep your development moving forward, you can also add a deprecation warning using the Integer type:
```class example($value) { validate_numeric($value, 10, 0) }```
would turn into
```
class example(Stdlib::Compat::Numeric $value) {
validate_numeric($value, 10, 0)
assert_type(Integer[0, 10], $value) |$expected, $actual| {
warning("The 'value' parameter for the 'ntp' class has type ${actual}, but should be ${expected}.")
}
}
```
> Note that you need to use Variant[Integer[0, 10], Float[0, 10]] if you want to match both integers and floating point numbers.
This allows you to find all places where a consumers of your code call it with unexpected values.
Alias of
```puppet
Variant[Numeric, Pattern[/^-?(?:(?:[1-9]\d*)|0)(?:\.\d+)?(?:[eE]-?\d+)?$/], Array[Variant[Numeric, Pattern[/^-?(?:(?:[1-9]\d*)|0)(?:\.\d+)?(?:[eE]-?\d+)?$/]]]]
```
### <a name="stdlibcompatstring"></a>`Stdlib::Compat::String`
Emulate the is_string and validate_string functions
Alias of
```puppet
Optional[String]
```
### <a name="stdlibdatasize"></a>`Stdlib::Datasize`
The Stdlib::Datasize data type.
Alias of
```puppet
Pattern[/^\d+(?i:[kmgt]b?|b)$/]
```
### <a name="stdlibemail"></a>`Stdlib::Email`
https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address
Alias of
```puppet
Pattern[/\A[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*\z/]
```
### <a name="stdlibensurefile"></a>`Stdlib::Ensure::File`
The Stdlib::Ensure::File data type.
Alias of
```puppet
Enum['present', 'file', 'directory', 'link', 'absent']
```
### <a name="stdlibensurefiledirectory"></a>`Stdlib::Ensure::File::Directory`
The Stdlib::Ensure::File::Directory data type.
Alias of
```puppet
Enum['directory', 'absent']
```
### <a name="stdlibensurefilefile"></a>`Stdlib::Ensure::File::File`
The Stdlib::Ensure::File::File data type.
Alias of
```puppet
Enum['file', 'absent']
```
### <a name="stdlibensurefilelink"></a>`Stdlib::Ensure::File::Link`
The Stdlib::Ensure::File::Link data type.
Alias of
```puppet
Enum['link', 'absent']
```
### <a name="stdlibensureservice"></a>`Stdlib::Ensure::Service`
The Stdlib::Ensure::Service data type.
Alias of
```puppet
Enum['stopped', 'running']
```
### <a name="stdlibfilemode"></a>`Stdlib::Filemode`
See `man chmod.1` for the regular expression for symbolic mode
lint:ignore:140chars
Alias of
```puppet
Pattern[/\A(([0-7]{1,4})|(([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+)(,([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+))*))\z/]
```
### <a name="stdlibfilesource"></a>`Stdlib::Filesource`
Validate the source parameter on file types
Alias of
```puppet
Variant[Stdlib::Absolutepath, Stdlib::HTTPUrl, Pattern[
/\Afile:\/\/\/([^\n\/\0]+(\/)?)+\z/,
/\Apuppet:\/\/(([\w-]+\.?)+)?\/([^\n\/\0]+(\/)?)+\z/,
]]
```
### <a name="stdlibfqdn"></a>`Stdlib::Fqdn`
The Stdlib::Fqdn data type.
Alias of
```puppet
Pattern[/\A(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])\z/]
```
### <a name="stdlibhttpsurl"></a>`Stdlib::HTTPSUrl`
The Stdlib::HTTPSUrl data type.
Alias of
```puppet
Pattern[/(?i:\Ahttps:\/\/.*\z)/]
```
### <a name="stdlibhttpurl"></a>`Stdlib::HTTPUrl`
The Stdlib::HTTPUrl data type.
Alias of
```puppet
Pattern[/(?i:\Ahttps?:\/\/.*\z)/]
```
### <a name="stdlibhost"></a>`Stdlib::Host`
The Stdlib::Host data type.
Alias of
```puppet
Variant[Stdlib::Fqdn, Stdlib::Compat::Ip_address]
```
### <a name="stdlibhttpstatus"></a>`Stdlib::HttpStatus`
The Stdlib::HttpStatus data type.
Alias of
```puppet
Integer[100, 599]
```
### <a name="stdlibipaddress"></a>`Stdlib::IP::Address`
The Stdlib::IP::Address data type.
Alias of
```puppet
Variant[Stdlib::IP::Address::V4, Stdlib::IP::Address::V6]
```
### <a name="stdlibipaddressnosubnet"></a>`Stdlib::IP::Address::Nosubnet`
The Stdlib::IP::Address::Nosubnet data type.
Alias of
```puppet
Variant[Stdlib::IP::Address::V4::Nosubnet, Stdlib::IP::Address::V6::Nosubnet]
```
### <a name="stdlibipaddressv4"></a>`Stdlib::IP::Address::V4`
The Stdlib::IP::Address::V4 data type.
Alias of
```puppet
Variant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V4::Nosubnet]
```
### <a name="stdlibipaddressv4cidr"></a>`Stdlib::IP::Address::V4::CIDR`
lint:ignore:140chars
Alias of
```puppet
Pattern[/\A([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\/([0-9]|[12][0-9]|3[0-2])\z/]
```
### <a name="stdlibipaddressv4nosubnet"></a>`Stdlib::IP::Address::V4::Nosubnet`
lint:ignore:140chars
Alias of
```puppet
Pattern[/\A([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\z/]
```
### <a name="stdlibipaddressv6"></a>`Stdlib::IP::Address::V6`
The Stdlib::IP::Address::V6 data type.
Alias of
```puppet
Variant[Stdlib::IP::Address::V6::Full, Stdlib::IP::Address::V6::Compressed, Stdlib::IP::Address::V6::Alternative, Stdlib::IP::Address::V6::Nosubnet]
```
### <a name="stdlibipaddressv6alternative"></a>`Stdlib::IP::Address::V6::Alternative`
lint:ignore:140chars
Alias of
```puppet
Pattern[/\A([[:xdigit:]]{1,4}:){6}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){5}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){4}(:[[:xdigit:]]{1,4}){0,1}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){3}(:[[:xdigit:]]{1,4}){0,2}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){2}(:[[:xdigit:]]{1,4}){0,3}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){1}(:[[:xdigit:]]{1,4}){0,4}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A:(:[[:xdigit:]]{1,4}){0,5}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/]
```
### <a name="stdlibipaddressv6cidr"></a>`Stdlib::IP::Address::V6::CIDR`
lint:ignore:140chars
Alias of
```puppet
Pattern[/\A((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*\/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8])?\z/]
```
### <a name="stdlibipaddressv6compressed"></a>`Stdlib::IP::Address::V6::Compressed`
The Stdlib::IP::Address::V6::Compressed data type.
Alias of
```puppet
Pattern[/\A:(:|(:[[:xdigit:]]{1,4}){1,7})(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){1}(:|(:[[:xdigit:]]{1,4}){1,6})(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){2}(:|(:[[:xdigit:]]{1,4}){1,5})(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){3}(:|(:[[:xdigit:]]{1,4}){1,4})(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){4}(:|(:[[:xdigit:]]{1,4}){1,3})(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){5}(:|(:[[:xdigit:]]{1,4}){1,2})(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){6}(:|(:[[:xdigit:]]{1,4}){1,1})(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/, /\A([[:xdigit:]]{1,4}:){7}:(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/]
```
### <a name="stdlibipaddressv6full"></a>`Stdlib::IP::Address::V6::Full`
The Stdlib::IP::Address::V6::Full data type.
Alias of
```puppet
Pattern[/\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/]
```
### <a name="stdlibipaddressv6nosubnet"></a>`Stdlib::IP::Address::V6::Nosubnet`
The Stdlib::IP::Address::V6::Nosubnet data type.
Alias of
```puppet
Variant[Stdlib::IP::Address::V6::Nosubnet::Full, Stdlib::IP::Address::V6::Nosubnet::Compressed, Stdlib::IP::Address::V6::Nosubnet::Alternative]
```
### <a name="stdlibipaddressv6nosubnetalternative"></a>`Stdlib::IP::Address::V6::Nosubnet::Alternative`
lint:ignore:140chars
Alias of
```puppet
Pattern[/\A([[:xdigit:]]{1,4}:){6}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\z/, /\A([[:xdigit:]]{1,4}:){5}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\z/, /\A([[:xdigit:]]{1,4}:){4}(:[[:xdigit:]]{1,4}){0,1}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\z/, /\A([[:xdigit:]]{1,4}:){3}(:[[:xdigit:]]{1,4}){0,2}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\z/, /\A([[:xdigit:]]{1,4}:){2}(:[[:xdigit:]]{1,4}){0,3}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\z/, /\A([[:xdigit:]]{1,4}:){1}(:[[:xdigit:]]{1,4}){0,4}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\z/, /\A:(:[[:xdigit:]]{1,4}){0,5}:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\z/]
```
### <a name="stdlibipaddressv6nosubnetcompressed"></a>`Stdlib::IP::Address::V6::Nosubnet::Compressed`
The Stdlib::IP::Address::V6::Nosubnet::Compressed data type.
Alias of
```puppet
Pattern[/\A:(:|(:[[:xdigit:]]{1,4}){1,7})\z/, /\A([[:xdigit:]]{1,4}:){1}(:|(:[[:xdigit:]]{1,4}){1,6})\z/, /\A([[:xdigit:]]{1,4}:){2}(:|(:[[:xdigit:]]{1,4}){1,5})\z/, /\A([[:xdigit:]]{1,4}:){3}(:|(:[[:xdigit:]]{1,4}){1,4})\z/, /\A([[:xdigit:]]{1,4}:){4}(:|(:[[:xdigit:]]{1,4}){1,3})\z/, /\A([[:xdigit:]]{1,4}:){5}(:|(:[[:xdigit:]]{1,4}){1,2})\z/, /\A([[:xdigit:]]{1,4}:){6}(:|(:[[:xdigit:]]{1,4}){1,1})\z/, /\A([[:xdigit:]]{1,4}:){7}:\z/]
```
### <a name="stdlibipaddressv6nosubnetfull"></a>`Stdlib::IP::Address::V6::Nosubnet::Full`
The Stdlib::IP::Address::V6::Nosubnet::Full data type.
Alias of
```puppet
Pattern[/\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}\z/]
```
### <a name="stdlibmac"></a>`Stdlib::MAC`
A type for a MAC address
Alias of
```puppet
Pattern[/\A([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})\z/, /\A([0-9A-Fa-f]{2}[:-]){19}([0-9A-Fa-f]{2})\z/]
```
### <a name="stdlibobjectstore"></a>`Stdlib::ObjectStore`
The Stdlib::ObjectStore data type.
Alias of
```puppet
Variant[Stdlib::ObjectStore::GSUri, Stdlib::ObjectStore::S3Uri]
```
### <a name="stdlibobjectstoregsuri"></a>`Stdlib::ObjectStore::GSUri`
The Stdlib::ObjectStore::GSUri data type.
Alias of
```puppet
Pattern[/\Ags:\/\/.*\z/]
```
### <a name="stdlibobjectstores3uri"></a>`Stdlib::ObjectStore::S3Uri`
The Stdlib::ObjectStore::S3Uri data type.
Alias of
```puppet
Pattern[/\As3:\/\/.*\z/]
```
### <a name="stdlibport"></a>`Stdlib::Port`
The Stdlib::Port data type.
Alias of
```puppet
Integer[0, 65535]
```
### <a name="stdlibportdynamic"></a>`Stdlib::Port::Dynamic`
The Stdlib::Port::Dynamic data type.
Alias of
```puppet
Integer[49152, 65535]
```
### <a name="stdlibportephemeral"></a>`Stdlib::Port::Ephemeral`
The Stdlib::Port::Ephemeral data type.
Alias of
```puppet
Stdlib::Port::Dynamic
```
### <a name="stdlibportprivileged"></a>`Stdlib::Port::Privileged`
The Stdlib::Port::Privileged data type.
Alias of
```puppet
Integer[1, 1023]
```
### <a name="stdlibportregistered"></a>`Stdlib::Port::Registered`
The Stdlib::Port::Registered data type.
Alias of
```puppet
Stdlib::Port::User
```
### <a name="stdlibportunprivileged"></a>`Stdlib::Port::Unprivileged`
The Stdlib::Port::Unprivileged data type.
Alias of
```puppet
Integer[1024, 65535]
```
### <a name="stdlibportuser"></a>`Stdlib::Port::User`
The Stdlib::Port::User data type.
Alias of
```puppet
Integer[1024, 49151]
```
### <a name="stdlibsyslogfacility"></a>`Stdlib::Syslogfacility`
The Stdlib::Syslogfacility data type.
Alias of
```puppet
Enum['kern', 'user', 'mail', 'daemon', 'auth', 'syslog', 'lpr', 'news', 'uucp', 'cron', 'authpriv', 'ftp', 'ntp', 'security', 'console', 'solaris-cron', 'local0', 'local1', 'local2', 'local3', 'local4', 'local5', 'local6', 'local7']
```
### <a name="stdlibunixpath"></a>`Stdlib::Unixpath`
this regex rejects any path component that does not start with "/" or is NUL
Alias of
```puppet
Pattern[/\A\/([^\n\/\0]+\/*)*\z/]
```
### <a name="stdlibwindowspath"></a>`Stdlib::Windowspath`
The Stdlib::Windowspath data type.
Alias of
```puppet
Pattern[/\A(([a-zA-Z]:[\\\/])|([\\\/][\\\/][^\\\/]+[\\\/][^\\\/]+)|([\\\/][\\\/]\?[\\\/][^\\\/]+)).*\z/]
```
### <a name="stdlibyes_no"></a>`Stdlib::Yes_no`
The Stdlib::Yes_no data type.
Alias of
```puppet
Pattern[/\A(?i:(yes|no))\z/]
```
...@@ -3,12 +3,12 @@ ...@@ -3,12 +3,12 @@
* Work in a topic branch * Work in a topic branch
* Submit a github pull request * Submit a github pull request
* Address any comments / feeback * Address any comments / feeback
* Merge into main using --no-ff * Merge into master using --no-ff
# Releasing this module # # Releasing this module #
* This module adheres to http://semver.org/ * This module adheres to http://semver.org/
* Look for API breaking changes using git diff vX.Y.Z.. * Look for API breaking changes using git diff vX.Y.Z..master
* If no API breaking changes, the minor version may be bumped. * If no API breaking changes, the minor version may be bumped.
* If there are API breaking changes, the major version must be bumped. * If there are API breaking changes, the major version must be bumped.
* If there are only small minor changes, the patch version may be bumped. * If there are only small minor changes, the patch version may be bumped.
......
require 'puppetlabs_spec_helper/rake_tasks'
require 'puppet-syntax/tasks/puppet-syntax'
require 'puppet_blacksmith/rake_tasks' if Bundler.rubygems.find_name('puppet-blacksmith').any?
require 'github_changelog_generator/task' if Bundler.rubygems.find_name('github_changelog_generator').any?
require 'puppet-strings/tasks' if Bundler.rubygems.find_name('puppet-strings').any?
require 'puppet-lint/tasks/puppet-lint'
def changelog_user
return unless Rake.application.top_level_tasks.include? "changelog"
returnVal = nil || JSON.load(File.read('metadata.json'))['author']
raise "unable to find the changelog_user in .sync.yml, or the author in metadata.json" if returnVal.nil?
puts "GitHubChangelogGenerator user:#{returnVal}"
returnVal
end
def changelog_project
return unless Rake.application.top_level_tasks.include? "changelog"
returnVal = nil || JSON.load(File.read('metadata.json'))['name']
raise "unable to find the changelog_project in .sync.yml or the name in metadata.json" if returnVal.nil?
puts "GitHubChangelogGenerator project:#{returnVal}"
returnVal
end
def changelog_future_release
return unless Rake.application.top_level_tasks.include? "changelog"
returnVal = JSON.load(File.read('metadata.json'))['version']
raise "unable to find the future_release (version) in metadata.json" if returnVal.nil?
puts "GitHubChangelogGenerator future_release:#{returnVal}"
returnVal
end
PuppetLint.configuration.send('disable_relative')
if Bundler.rubygems.find_name('github_changelog_generator').any?
GitHubChangelogGenerator::RakeTask.new :changelog do |config|
raise "Set CHANGELOG_GITHUB_TOKEN environment variable eg 'export CHANGELOG_GITHUB_TOKEN=valid_token_here'" if Rake.application.top_level_tasks.include? "changelog" and ENV['CHANGELOG_GITHUB_TOKEN'].nil?
config.user = "#{changelog_user}"
config.project = "#{changelog_project}"
config.future_release = "#{changelog_future_release}"
config.exclude_labels = ['maintenance']
config.header = "# Change log\n\nAll notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org)."
config.add_pr_wo_labels = true
config.issues = false
config.merge_prefix = "### UNCATEGORIZED PRS; GO LABEL THEM"
config.configure_sections = {
"Changed" => {
"prefix" => "### Changed",
"labels" => ["backwards-incompatible"],
},
"Added" => {
"prefix" => "### Added",
"labels" => ["feature", "enhancement"],
},
"Fixed" => {
"prefix" => "### Fixed",
"labels" => ["bugfix"],
},
}
end
else
desc 'Generate a Changelog from GitHub'
task :changelog do
raise <<EOM
The changelog tasks depends on unreleased features of the github_changelog_generator gem.
Please manually add it to your .sync.yml for now, and run `pdk update`:
---
Gemfile:
optional:
':development':
- gem: 'github_changelog_generator'
git: 'https://github.com/skywinder/github-changelog-generator'
ref: '20ee04ba1234e9e83eb2ffb5056e23d641c7a018'
condition: "Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('2.2.2')"
EOM
end
end
---
version: 1.1.x.{build}
branches:
only:
- master
skip_commits:
message: /^\(?doc\)?.*/
clone_depth: 10
init:
- SET
- 'mkdir C:\ProgramData\PuppetLabs\code && exit 0'
- 'mkdir C:\ProgramData\PuppetLabs\facter && exit 0'
- 'mkdir C:\ProgramData\PuppetLabs\hiera && exit 0'
- 'mkdir C:\ProgramData\PuppetLabs\puppet\var && exit 0'
environment:
matrix:
-
RUBY_VERSION: 24-x64
CHECK: syntax lint metadata_lint check:symlinks check:git_ignore check:dot_underscore check:test_file rubocop
-
PUPPET_GEM_VERSION: ~> 5.0
RUBY_VERSION: 24
CHECK: parallel_spec
-
PUPPET_GEM_VERSION: ~> 5.0
RUBY_VERSION: 24-x64
CHECK: parallel_spec
-
PUPPET_GEM_VERSION: ~> 6.0
RUBY_VERSION: 25
CHECK: parallel_spec
-
PUPPET_GEM_VERSION: ~> 6.0
RUBY_VERSION: 25-x64
CHECK: parallel_spec
matrix:
fast_finish: true
install:
- set PATH=C:\Ruby%RUBY_VERSION%\bin;%PATH%
- bundle install --jobs 4 --retry 2 --without system_tests
- type Gemfile.lock
build: off
test_script:
- bundle exec puppet -V
- ruby -v
- gem -v
- bundle -v
- bundle exec rake %CHECK%
notifications:
- provider: Email
to:
- nobody@nowhere.com
on_build_success: false
on_build_failure: false
on_build_status_changed: false
include stdlib include ::stdlib
info('has_interface_with(\'lo\'):', has_interface_with('lo')) info('has_interface_with(\'lo\'):', has_interface_with('lo'))
info('has_interface_with(\'loX\'):', has_interface_with('loX')) info('has_interface_with(\'loX\'):', has_interface_with('loX'))
info('has_interface_with(\'ipaddress\', \'127.0.0.1\'):', has_interface_with('ipaddress', '127.0.0.1')) info('has_interface_with(\'ipaddress\', \'127.0.0.1\'):', has_interface_with('ipaddress', '127.0.0.1'))
......
include stdlib include ::stdlib
info('has_ip_address(\'192.168.1.256\'):', has_ip_address('192.168.1.256')) info('has_ip_address(\'192.168.1.256\'):', has_ip_address('192.168.1.256'))
info('has_ip_address(\'127.0.0.1\'):', has_ip_address('127.0.0.1')) info('has_ip_address(\'127.0.0.1\'):', has_ip_address('127.0.0.1'))
include stdlib include ::stdlib
info('has_ip_network(\'127.0.0.0\'):', has_ip_network('127.0.0.0')) info('has_ip_network(\'127.0.0.0\'):', has_ip_network('127.0.0.0'))
info('has_ip_network(\'128.0.0.0\'):', has_ip_network('128.0.0.0')) info('has_ip_network(\'128.0.0.0\'):', has_ip_network('128.0.0.0'))
# @summary function to cast ensure parameter to resource specific value
function stdlib::ensure(
Variant[Boolean, Enum['present', 'absent']] $ensure,
Enum['directory', 'link', 'mounted', 'service', 'file'] $resource,
) >> String {
$_ensure = $ensure ? {
Boolean => $ensure.bool2str('present', 'absent'),
default => $ensure,
}
case $resource {
'service': {
$_ensure ? {
'present' => 'running',
default => 'stopped',
}
}
default: {
$_ensure ? {
'present' => $resource,
default => $_ensure,
}
}
}
}
---
version: 5
defaults: # Used for any hierarchy level that omits these keys.
datadir: data # This path is relative to hiera.yaml's directory.
data_hash: yaml_data # Use the built-in YAML backend.
hierarchy:
- name: "osfamily/major release"
paths:
# Used to distinguish between Debian and Ubuntu
- "os/%{facts.os.name}/%{facts.os.release.major}.yaml"
- "os/%{facts.os.family}/%{facts.os.release.major}.yaml"
# Used for Solaris
- "os/%{facts.os.family}/%{facts.kernelrelease}.yaml"
- name: "osfamily"
paths:
- "os/%{facts.os.name}.yaml"
- "os/%{facts.os.family}.yaml"
- name: 'common'
path: 'common.yaml'
# A Facter plugin that loads facts from /etc/facter/facts.d
# and /etc/puppetlabs/facter/facts.d.
#
# Facts can be in the form of JSON, YAML or Text files
# and any executable that returns key=value pairs.
#
# In the case of scripts you can also create a file that
# contains a cache TTL. For foo.sh store the ttl as just
# a number in foo.sh.ttl
#
# The cache is stored in $libdir/facts_dot_d.cache as a mode
# 600 file and will have the end result of not calling your
# fact scripts more often than is needed
class Facter::Util::DotD
require 'yaml'
def initialize(dir = '/etc/facts.d', cache_file = File.join(Puppet[:libdir], 'facts_dot_d.cache'))
@dir = dir
@cache_file = cache_file
@cache = nil
@types = { '.txt' => :txt, '.json' => :json, '.yaml' => :yaml }
end
def entries
Dir.entries(@dir).reject { |f| f =~ %r{^\.|\.ttl$} }.sort.map { |f| File.join(@dir, f) }
rescue
[]
end
def fact_type(file)
extension = File.extname(file)
type = @types[extension] || :unknown
type = :script if type == :unknown && File.executable?(file)
type
end
def txt_parser(file)
File.readlines(file).each do |line|
next unless line =~ %r{^([^=]+)=(.+)$}
var = Regexp.last_match(1)
val = Regexp.last_match(2)
Facter.add(var) do
setcode { val }
end
end
rescue StandardError => e
Facter.warn("Failed to handle #{file} as text facts: #{e.class}: #{e}")
end
def json_parser(file)
begin
require 'json'
rescue LoadError
retry if require 'rubygems'
raise
end
JSON.parse(File.read(file)).each_pair do |f, v|
Facter.add(f) do
setcode { v }
end
end
rescue StandardError => e
Facter.warn("Failed to handle #{file} as json facts: #{e.class}: #{e}")
end
def yaml_parser(file)
require 'yaml'
YAML.load_file(file).each_pair do |f, v|
Facter.add(f) do
setcode { v }
end
end
rescue StandardError => e
Facter.warn("Failed to handle #{file} as yaml facts: #{e.class}: #{e}")
end
def script_parser(file)
result = cache_lookup(file)
ttl = cache_time(file)
if result
Facter.debug("Using cached data for #{file}")
else
result = Facter::Util::Resolution.exec(file)
if ttl > 0
Facter.debug("Updating cache for #{file}")
cache_store(file, result)
cache_save!
end
end
result.split("\n").each do |line|
next unless line =~ %r{^(.+)=(.+)$}
var = Regexp.last_match(1)
val = Regexp.last_match(2)
Facter.add(var) do
setcode { val }
end
end
rescue StandardError => e
Facter.warn("Failed to handle #{file} as script facts: #{e.class}: #{e}")
Facter.debug(e.backtrace.join("\n\t"))
end
def cache_save!
cache = load_cache
File.open(@cache_file, 'w', 0o600) { |f| f.write(YAML.dump(cache)) }
rescue # rubocop:disable Lint/HandleExceptions
end
def cache_store(file, data)
load_cache
@cache[file] = { :data => data, :stored => Time.now.to_i }
rescue # rubocop:disable Lint/HandleExceptions
end
def cache_lookup(file)
cache = load_cache
return nil if cache.empty?
ttl = cache_time(file)
return nil unless cache[file]
now = Time.now.to_i
return cache[file][:data] if ttl == -1
return cache[file][:data] if (now - cache[file][:stored]) <= ttl
return nil
rescue
return nil
end
def cache_time(file)
meta = file + '.ttl'
return File.read(meta).chomp.to_i
rescue
return 0
end
def load_cache
@cache ||= if File.exist?(@cache_file)
YAML.load_file(@cache_file)
else
{}
end
return @cache
rescue
@cache = {}
return @cache
end
def create
entries.each do |fact|
type = fact_type(fact)
parser = "#{type}_parser"
next unless respond_to?("#{type}_parser")
Facter.debug("Parsing #{fact} using #{parser}")
send(parser, fact)
end
end
end
mdata = Facter.version.match(%r{(\d+)\.(\d+)\.(\d+)})
if mdata
(major, minor, _patch) = mdata.captures.map { |v| v.to_i }
if major < 2
# Facter 1.7 introduced external facts support directly
unless major == 1 && minor > 6
Facter::Util::DotD.new('/etc/facter/facts.d').create
Facter::Util::DotD.new('/etc/puppetlabs/facter/facts.d').create
# Windows has a different configuration directory that defaults to a vendor
# specific sub directory of the %COMMON_APPDATA% directory.
if Dir.const_defined? 'COMMON_APPDATA' # rubocop:disable Metrics/BlockNesting : Any attempt to alter this breaks it
windows_facts_dot_d = File.join(Dir::COMMON_APPDATA, 'PuppetLabs', 'facter', 'facts.d')
Facter::Util::DotD.new(windows_facts_dot_d).create
end
end
end
end
# frozen_string_literal: true
# Fact: package_provider # Fact: package_provider
# #
# Purpose: Returns the default provider Puppet will choose to manage packages # Purpose: Returns the default provider Puppet will choose to manage packages
...@@ -12,14 +10,12 @@ ...@@ -12,14 +10,12 @@
require 'puppet/type' require 'puppet/type'
require 'puppet/type/package' require 'puppet/type/package'
# These will be nil if Puppet is not available.
Facter.add(:package_provider) do Facter.add(:package_provider) do
# Instantiates a dummy package resource and return the provider
setcode do setcode do
if defined? Gem && Gem::Version.new(Facter.value(:puppetversion).split(' ')[0]) >= Gem::Version.new('3.6') if defined? Gem && Gem::Version.new(Facter.value(:puppetversion).split(' ')[0]) >= Gem::Version.new('3.6')
Puppet::Type.type(:package).newpackage(name: 'dummy', allow_virtual: 'true')[:provider].to_s Puppet::Type.type(:package).newpackage(:name => 'dummy', :allow_virtual => 'true')[:provider].to_s
else else
Puppet::Type.type(:package).newpackage(name: 'dummy')[:provider].to_s Puppet::Type.type(:package).newpackage(:name => 'dummy')[:provider].to_s
end end
end end
end end