puppetlabs-stdlib-9.4.10040755000000000000000000000000014523206607012043 5ustar00puppetlabs-stdlib-9.4.1/.gitpod.Dockerfile0100644000175100001770000000227514523206606015516 0ustar00FROM gitpod/workspace-full RUN sudo wget https://apt.puppet.com/puppet-tools-release-bionic.deb && \ wget https://apt.puppetlabs.com/puppet6-release-bionic.deb && \ sudo dpkg -i puppet6-release-bionic.deb && \ sudo dpkg -i puppet-tools-release-bionic.deb && \ sudo apt-get update && \ sudo apt-get install -y pdk zsh puppet-agent && \ sudo apt-get clean && \ sudo rm -rf /var/lib/apt/lists/* RUN sudo usermod -s $(which zsh) gitpod && \ sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" && \ echo "plugins=(git gitignore github gem pip bundler python ruby docker docker-compose)" >> /home/gitpod/.zshrc && \ echo 'PATH="$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/opt/puppetlabs/bin:/opt/puppetlabs/puppet/bin"' >> /home/gitpod/.zshrc && \ sudo /opt/puppetlabs/puppet/bin/gem install puppet-debugger hub -N && \ mkdir -p /home/gitpod/.config/puppet && \ /opt/puppetlabs/puppet/bin/ruby -r yaml -e "puts ({'disabled' => true}).to_yaml" > /home/gitpod/.config/puppet/analytics.yml RUN rm -f puppet6-release-bionic.deb puppet-tools-release-bionic.deb ENTRYPOINT /usr/bin/zsh puppetlabs-stdlib-9.4.1/.gitpod.yml0100644000175100001770000000023014523206606014235 0ustar00image: file: .gitpod.Dockerfile tasks: - init: pdk bundle install vscode: extensions: - puppet.puppet-vscode@1.2.0:f5iEPbmOj6FoFTOV6q8LTg== puppetlabs-stdlib-9.4.1/.rubocop_todo.yml0100644000175100001770000001314414523206606015455 0ustar00# This configuration was generated by # `rubocop --auto-gen-config` # on 2023-05-18 14:27:28 UTC using RuboCop version 1.48.1. # The point is for the user to remove these configuration records # one by one as the offenses are removed from the code base. # Note that changes in the inspected code, or installation of new # versions of RuboCop, may require this file to be generated again. # Offense count: 3 # This cop supports unsafe autocorrection (--autocorrect-all). Lint/BooleanSymbol: Exclude: - 'spec/unit/puppet/type/file_line_spec.rb' # Offense count: 2 # Configuration parameters: AllowedMethods. # AllowedMethods: enums Lint/ConstantDefinitionInBlock: Exclude: - 'spec/functions/get_module_path_spec.rb' - 'spec/unit/facter/util/puppet_settings_spec.rb' # Offense count: 2 # Configuration parameters: IgnoreLiteralBranches, IgnoreConstantBranches. Lint/DuplicateBranch: Exclude: - 'lib/puppet/parser/functions/str2bool.rb' # Offense count: 2 # Configuration parameters: MaximumRangeSize. Lint/MissingCopEnableDirective: Exclude: - 'spec/functions/merge_spec.rb' - 'spec/unit/puppet/provider/file_line/ruby_spec_alter.rb' # Offense count: 3 # Configuration parameters: AllowComments, AllowNil. Lint/SuppressedException: Exclude: - 'lib/puppet/functions/stdlib/merge.rb' - 'lib/puppet/parser/functions/has_interface_with.rb' # Offense count: 5 # Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes. Metrics/AbcSize: Max: 44 # Offense count: 18 # Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns, inherit_mode. # AllowedMethods: refine Metrics/BlockLength: Max: 150 # Offense count: 4 # Configuration parameters: AllowedMethods, AllowedPatterns. Metrics/CyclomaticComplexity: Max: 14 # Offense count: 8 # Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns. Metrics/MethodLength: Max: 33 # Offense count: 3 # Configuration parameters: AllowedMethods, AllowedPatterns. Metrics/PerceivedComplexity: Max: 18 # Offense count: 2 # Configuration parameters: ForbiddenDelimiters. # ForbiddenDelimiters: (?i-mx:(^|\s)(EO[A-Z]{1}|END)(\s|$)) Naming/HeredocDelimiterNaming: Exclude: - 'lib/puppet/parser/functions/pick.rb' - 'spec/functions/stdlib_deferrable_epp_spec.rb' # Offense count: 2 # Configuration parameters: MinNameLength, AllowNamesEndingInNumbers, AllowedNames, ForbiddenNames. # AllowedNames: as, at, by, cc, db, id, if, in, io, ip, of, on, os, pp, to Naming/MethodParameterName: Exclude: - 'spec/functions/pick_default_spec.rb' # Offense count: 1 # Configuration parameters: EnforcedStyle, CheckMethodNames, CheckSymbols, AllowedIdentifiers, AllowedPatterns. # SupportedStyles: snake_case, normalcase, non_integer # AllowedIdentifiers: capture3, iso8601, rfc1123_date, rfc822, rfc2822, rfc3339, x86_64 Naming/VariableNumber: Exclude: - 'spec/functions/delete_undef_values_spec.rb' # Offense count: 2 # Configuration parameters: MinSize. Performance/CollectionLiteralInLoop: Exclude: - 'lib/puppet/functions/stdlib/ensure_packages.rb' # Offense count: 36 # Configuration parameters: Prefixes, AllowedPatterns. # Prefixes: when, with, without RSpec/ContextWording: Enabled: false # Offense count: 110 # Configuration parameters: IgnoredMetadata. RSpec/DescribeClass: Enabled: false # Offense count: 10 # Configuration parameters: CountAsOne. RSpec/ExampleLength: Max: 9 # Offense count: 2 # Configuration parameters: Include, CustomTransform, IgnoreMethods, SpecSuffixOnly. # Include: **/*_spec*rb*, **/spec/**/* RSpec/SpecFilePathSuffix: Exclude: - 'spec/unit/puppet/provider/file_line/ruby_spec_alter.rb' - 'spec/unit/puppet/provider/file_line/ruby_spec_use_cases.rb' # Offense count: 2 RSpec/LeakyConstantDeclaration: Exclude: - 'spec/functions/get_module_path_spec.rb' - 'spec/unit/facter/util/puppet_settings_spec.rb' # Offense count: 40 RSpec/MultipleExpectations: Max: 5 # Offense count: 15 # Configuration parameters: AllowSubject. RSpec/MultipleMemoizedHelpers: Max: 9 # Offense count: 253 # Configuration parameters: EnforcedStyle, IgnoreSharedExamples. # SupportedStyles: always, named_only RSpec/NamedSubject: Enabled: false # Offense count: 25 # Configuration parameters: AllowedGroups. RSpec/NestedGroups: Max: 4 # Offense count: 4 # Configuration parameters: AllowedPatterns. # AllowedPatterns: ^expect_, ^assert_ RSpec/NoExpectationExample: Exclude: - 'spec/acceptance/file_line_spec.rb' - 'spec/unit/facter/util/puppet_settings_spec.rb' # Offense count: 2 RSpec/PendingWithoutReason: Exclude: - 'spec/functions/is_a_spec.rb' - 'spec/functions/type_of_spec.rb' # Offense count: 4 RSpec/RepeatedExampleGroupDescription: Exclude: - 'spec/functions/delete_regex_spec.rb' - 'spec/functions/delete_spec.rb' # Offense count: 24 RSpec/StubbedMock: Exclude: - 'spec/functions/assert_private_spec.rb' - 'spec/functions/loadjson_spec.rb' - 'spec/functions/loadyaml_spec.rb' - 'spec/functions/reverse_spec.rb' - 'spec/functions/squeeze_spec.rb' # Offense count: 1 # This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: EnforcedStyle. # SupportedStyles: always, always_true, never Style/FrozenStringLiteralComment: Exclude: - 'lib/puppet_x/stdlib/toml_dumper.rb' # Offense count: 1 Style/MixinUsage: Exclude: - 'spec/spec_helper.rb' # Offense count: 3 # Configuration parameters: AllowedMethods. # AllowedMethods: respond_to_missing? Style/OptionalBooleanParameter: Exclude: - 'lib/puppet/functions/stdlib/to_json_pretty.rb' - 'lib/puppet_x/stdlib/toml_dumper.rb' puppetlabs-stdlib-9.4.1/CHANGELOG.md0100644000175100001770000027163114523206606013776 0ustar00 # Changelog 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). ## [v9.4.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.4.1) - 2023-11-08 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.4.0...v9.4.1) ### Fixed - Correct casing of Stdlib::IP::Address [#1406](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1406) ([ekohl](https://github.com/ekohl)) ## [v9.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.4.0) - 2023-09-29 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.3.0...v9.4.0) ### Added - Modernise `fqdn_rotate` function [#1341](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1341) ([alexjfisher](https://github.com/alexjfisher)) ### Other - Remove unused parser deprecation function [#1392](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1392) ([ekohl](https://github.com/ekohl)) ## [v9.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.3.0) - 2023-08-01 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.2.0...v9.3.0) ### Added - Add stdlib::has_function [#1386](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1386) ([seanmil](https://github.com/seanmil)) ### Fixed - Re-add block support to deprecated top-level merge [#1385](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1385) ([seanmil](https://github.com/seanmil)) ## [v9.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.2.0) - 2023-06-27 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.1.0...v9.2.0) ### Added - Add `use_strict_setting` parameter to `deprecation` function [#1378](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1378) ([alexjfisher](https://github.com/alexjfisher)) ### Fixed - Ignore Puppet's `strict` setting when calling function without namespace [#1377](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1377) ([alexjfisher](https://github.com/alexjfisher)) - Pass calling scope to `stdlib::ensure_packages` from shim [#1366](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1366) ([alexjfisher](https://github.com/alexjfisher)) ## [v9.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.1.0) - 2023-06-15 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v9.0.0...v9.1.0) ### Added - re-add support for loading aliases in yaml files [#1362](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1362) ([lollipopman](https://github.com/lollipopman)) ### Fixed - (CONT-1035) Alter logic of pw_hash [#1370](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1370) ([david22swan](https://github.com/david22swan)) - Fix `fqdn_rand_string` regression [#1367](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1367) ([alexjfisher](https://github.com/alexjfisher)) - (CONT-1023) - Enhancing deferrable_epp to support nested hash [#1359](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1359) ([Ramesh7](https://github.com/Ramesh7)) ## [v9.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v9.0.0) - 2023-05-30 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.6.0...v9.0.0) ### Added - Namespace Puppet 4.x functions [#1356](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1356) ([smortex](https://github.com/smortex)) - Add a function to update / regenerate deprecated shims [#1349](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1349) ([smortex](https://github.com/smortex)) ### Changed - Deprecate the `validate_legacy()` function [#1353](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1353) ([smortex](https://github.com/smortex)) - Remove deprecated functions [#1352](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1352) ([smortex](https://github.com/smortex)) - Rewrite validate_email_address() as a Puppet 4.x function [#1350](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1350) ([smortex](https://github.com/smortex)) - Rewrite validate_domain_name() as a Puppet 4.x function [#1345](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1345) ([smortex](https://github.com/smortex)) - Rewrite seeded_rand() as a Puppet 4.x function [#1344](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1344) ([smortex](https://github.com/smortex)) - Rewrite fqdn_rand_string() as a Puppet 4.x function [#1343](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1343) ([smortex](https://github.com/smortex)) - Remove deprecated strip function [#1338](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1338) ([smortex](https://github.com/smortex)) - Remove deprecated rstrip function [#1337](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1337) ([smortex](https://github.com/smortex)) - Remove deprecated getvar function [#1336](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1336) ([smortex](https://github.com/smortex)) - Remove deprecated sort function [#1335](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1335) ([smortex](https://github.com/smortex)) - Remove deprecated upcase function [#1334](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1334) ([smortex](https://github.com/smortex)) - Remove deprecated round function [#1333](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1333) ([smortex](https://github.com/smortex)) - Remove deprecated chop function [#1331](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1331) ([smortex](https://github.com/smortex)) - Remove deprecated chomp function [#1330](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1330) ([smortex](https://github.com/smortex)) - Remove deprecated ceiling function [#1329](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1329) ([smortex](https://github.com/smortex)) - Remove deprecated capitalize functions [#1328](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1328) ([smortex](https://github.com/smortex)) - Remove deprecated camelcase function [#1327](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1327) ([smortex](https://github.com/smortex)) - Modernise `has_interface_with` function [#1326](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1326) ([alexjfisher](https://github.com/alexjfisher)) - Remove deprecated is_array function [#1325](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1325) ([MartyEwings](https://github.com/MartyEwings)) - Remove deprecated is_absolute_path function [#1324](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1324) ([MartyEwings](https://github.com/MartyEwings)) - Remove deprecated min function [#1323](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1323) ([MartyEwings](https://github.com/MartyEwings)) - Remove deprecated max function [#1322](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1322) ([MartyEwings](https://github.com/MartyEwings)) - Remove deprecated lstrip function [#1321](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1321) ([MartyEwings](https://github.com/MartyEwings)) - Remove deprecated hash function [#1320](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1320) ([MartyEwings](https://github.com/MartyEwings)) - Remove deprecated has_key function [#1319](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1319) ([MartyEwings](https://github.com/MartyEwings)) - Remove deprecated downcase function [#1318](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1318) ([MartyEwings](https://github.com/MartyEwings)) - Remove deprecated abs function [#1317](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1317) ([MartyEwings](https://github.com/MartyEwings)) - Remove dig and dig44 functions [#1316](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1316) ([MartyEwings](https://github.com/MartyEwings)) - Remove Puppet 5.5 deprecations [#1314](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1314) ([MartyEwings](https://github.com/MartyEwings)) - Remove deprecated unique function [#1311](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1311) ([MartyEwings](https://github.com/MartyEwings)) - Remove deprecated Private function [#1310](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1310) ([MartyEwings](https://github.com/MartyEwings)) - Remove deprecated type and type3x functions [#1309](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1309) ([MartyEwings](https://github.com/MartyEwings)) - (CONT-801) Puppet 8 support / Drop Puppet 6 support [#1307](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1307) ([LukasAud](https://github.com/LukasAud)) ### Fixed - Remove deprecated File.exists? [#1357](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1357) ([ekohl](https://github.com/ekohl)) - Fix validate_domain_name called without parameters [#1351](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1351) ([smortex](https://github.com/smortex)) - Add Stdlib::IP::Address::CIDR [#1348](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1348) ([Geod24](https://github.com/Geod24)) - Allow `deferrable_epp` to return a `Sensitive[String]` [#1342](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1342) ([alexjfisher](https://github.com/alexjfisher)) ## [v8.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.6.0) - 2023-04-24 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.5.0...v8.6.0) ### Added - Stdlib::Http::Method: Add new type for http methods [#1299](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1299) ([b4ldr](https://github.com/b4ldr)) - Add `stdlib::sha256` [#1289](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1289) ([jcpunk](https://github.com/jcpunk)) - Add `stdlib::crc32` [#1288](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1288) ([jcpunk](https://github.com/jcpunk)) - Add Stdlib::Ensure::Package type [#1281](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1281) ([arjenz](https://github.com/arjenz)) ### Fixed - (PUP-11752) Fix fqdn_rand_string_spec.rb test [#1308](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1308) ([alexjfisher](https://github.com/alexjfisher)) - Make ensure_packages work with `ensure => present` [#1300](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1300) ([alexjfisher](https://github.com/alexjfisher)) - Safely handle a missing root user [#1295](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1295) ([ekohl](https://github.com/ekohl)) - stdlib::ensure: update function to support the generic case [#1286](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1286) ([b4ldr](https://github.com/b4ldr)) - Drop Puppet < 3.6 support in package_provider fact [#1280](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1280) ([ekohl](https://github.com/ekohl)) - Correct bcrypt salt regex [#1279](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1279) ([sabo](https://github.com/sabo)) - Determine root_home without shelling out [#1278](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1278) ([ekohl](https://github.com/ekohl)) - (CONT-173) - Updating deprecated facter instances [#1277](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1277) ([jordanbreen28](https://github.com/jordanbreen28)) ## [v8.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.5.0) - 2022-10-13 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.4.0...v8.5.0) ### Added - Add a Stdlib::CreateResources type [#1267](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1267) ([ekohl](https://github.com/ekohl)) - pdksync - (GH-cat-11) Certify Support for Ubuntu 22.04 [#1261](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1261) ([david22swan](https://github.com/david22swan)) - (FEAT) Add function parsepson [#1259](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1259) ([david22swan](https://github.com/david22swan)) ### Fixed - (CONT-200) Fix require relative paths [#1275](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1275) ([chelnak](https://github.com/chelnak)) - pdksync - (CONT-189) Remove support for RedHat6 / OracleLinux6 / Scientific6 [#1272](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1272) ([david22swan](https://github.com/david22swan)) - pdksync - (CONT-130) - Dropping Support for Debian 9 [#1269](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1269) ([jordanbreen28](https://github.com/jordanbreen28)) - (MAINT) Drop support for AIX + Windows EOL OSs [#1265](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1265) ([jordanbreen28](https://github.com/jordanbreen28)) - (GH-1262) Use 'require_relative' to load stdlib due to lookup errors [#1264](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1264) ([david22swan](https://github.com/david22swan)) - Switch parsejson() from PSON to JSON parsing [#1240](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1240) ([seanmil](https://github.com/seanmil)) ## [v8.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.4.0) - 2022-07-21 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.3.0...v8.4.0) ### Added - deferrable epp function simplifying deferred templates [#1253](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1253) ([binford2k](https://github.com/binford2k)) ## [v8.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.3.0) - 2022-07-11 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.2.0...v8.3.0) ### Added - pdksync - (GH-cat-12) Add Support for Redhat 9 [#1247](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1247) ([david22swan](https://github.com/david22swan)) - Convert `ensure_packages` to new API and refactor [#1244](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1244) ([alexjfisher](https://github.com/alexjfisher)) ### Fixed - (MODULES-2892) Handle missing file in file_line [#1251](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1251) ([silug](https://github.com/silug)) - Simplify stdlib::manage [#1250](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1250) ([jcpunk](https://github.com/jcpunk)) - Unbreak `rake strings:generate:reference` [#1239](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1239) ([smortex](https://github.com/smortex)) - loadjson: do not send http_basic_authentication if not needed [#1208](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1208) ([chaen](https://github.com/chaen)) ## [v8.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.2.0) - 2022-05-16 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.1.0...v8.2.0) ### Added - Add `xml_encode` function [#1236](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1236) ([alexjfisher](https://github.com/alexjfisher)) - (MODULES-4976) Add windows escaping functions [#1235](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1235) ([smortex](https://github.com/smortex)) - MODULES-11309 : convert a string to a resource [#1233](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1233) ([jcpunk](https://github.com/jcpunk)) - pdksync - (FM-8922) - Add Support for Windows 2022 [#1222](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1222) ([david22swan](https://github.com/david22swan)) - (MODULES-11196) Add support for AIX 7.2 [#1220](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1220) ([david22swan](https://github.com/david22swan)) - pdksync - (IAC-1753) - Add Support for AlmaLinux 8 [#1216](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1216) ([david22swan](https://github.com/david22swan)) ### Fixed - Update load_module_metadata.rb to correct capitalisation in strings documentartion [#1241](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1241) ([davidsandilands](https://github.com/davidsandilands)) - Modernize escape functions [#1238](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1238) ([smortex](https://github.com/smortex)) - Convert data to Pcore before serialisation in to_ruby/to_python [#1237](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1237) ([smortex](https://github.com/smortex)) - (maint) Update str2saltedpbkdf2.rb to use the correct salt length [#1232](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1232) ([AriaXLi](https://github.com/AriaXLi)) - Fix `to_yaml` `options` parameter [#1231](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1231) ([alexjfisher](https://github.com/alexjfisher)) - pdksync - (GH-iac-334) Remove Support for Ubuntu 14.04/16.04 [#1224](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1224) ([david22swan](https://github.com/david22swan)) - pdksync - (IAC-1787) Remove Support for CentOS 6 [#1219](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1219) ([david22swan](https://github.com/david22swan)) - Fix serialization of undef in to_python() [#1205](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1205) ([smortex](https://github.com/smortex)) ## [v8.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.1.0) - 2021-10-04 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v8.0.0...v8.1.0) ### Added - pdksync - (IAC-1751) - Add Support for Rocky 8 [#1214](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1214) ([david22swan](https://github.com/david22swan)) - stdlib::ensure: Add support for package resource [#1213](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1213) ([david-caro](https://github.com/david-caro)) - Added to_toml function [#1209](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1209) ([nmaludy](https://github.com/nmaludy)) ### Fixed - [MODULES-11195] Add lint-ignore for pattern length [#1212](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1212) ([carabasdaniel](https://github.com/carabasdaniel)) - pdksync - (IAC-1598) - Remove Support for Debian 8 [#1210](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1210) ([david22swan](https://github.com/david22swan)) - os_version_gte: fix version comparison logic [#1207](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1207) ([kenyon](https://github.com/kenyon)) - max, lstrip: fix deprecated message [#1204](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1204) ([b4ldr](https://github.com/b4ldr)) - (MODULES-11126) Replacing URI.escape with URI::DEFAULT_PARSER [#1195](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1195) ([valleedelisle](https://github.com/valleedelisle)) ## [v8.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v8.0.0) - 2021-08-24 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.1.0...v8.0.0) ### Added - New function to_python() / to_ruby() [#1200](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1200) ([smortex](https://github.com/smortex)) - pdksync - (IAC-1709) - Add Support for Debian 11 [#1199](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1199) ([david22swan](https://github.com/david22swan)) - Stdlib::Http::Method: Add new type for http methods [#1192](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1192) ([b4ldr](https://github.com/b4ldr)) ### Changed - Flip installed and present in Function ensure_packages [#1196](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1196) ([cocker-cc](https://github.com/cocker-cc)) ### Fixed - (MODULES-11099) Make merge parameter data types actually backwards compatible [#1191](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1191) ([SimonPe](https://github.com/SimonPe)) ## [v7.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v7.1.0) - 2021-05-17 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v7.0.1...v7.1.0) ### 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) ### Added - Stdlib::Email type [#1160](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1160) ([b4ldr](https://github.com/b4ldr)) ### 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)) ### 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-21 [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-22 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.2.0...v6.0.0) ### Added - (MODULES-8760) Add iterative feature to merge() function [#1008](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1008) ([hlindberg](https://github.com/hlindberg)) - Add a stdlib::ip_in_range() function [#1003](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1003) ([iglov](https://github.com/iglov)) ### Changed - pdksync - (MODULES-8444) - Raise lower Puppet bound [#1011](https://github.com/puppetlabs/puppetlabs-stdlib/pull/1011) ([david22swan](https://github.com/david22swan)) ## [5.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.2.0) - 2019-01-18 [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-10-01 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/5.0.0...5.1.0) ### Added - pdksync - (MODULES-6805) metadata.json shows support for puppet 6 [#958](https://github.com/puppetlabs/puppetlabs-stdlib/pull/958) ([tphoney](https://github.com/tphoney)) - (maint) Convert from mocking with mocha to rspec-mocks [#948](https://github.com/puppetlabs/puppetlabs-stdlib/pull/948) ([rodjek](https://github.com/rodjek)) ### Fixed - (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)) - (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](https://github.com/puppetlabs/puppetlabs-stdlib/tree/5.0.0) - 2018-08-22 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.25.1...5.0.0) ### Added - (MODULES-7541) http type checks case insensitive [#934](https://github.com/puppetlabs/puppetlabs-stdlib/pull/934) ([tphoney](https://github.com/tphoney)) - (MODULES-7440) Update Stdlib to support Ubuntu 18.04 [#932](https://github.com/puppetlabs/puppetlabs-stdlib/pull/932) ([david22swan](https://github.com/david22swan)) - Allow loadyaml() and loadjason() to accept URLs with HTTP basic auth [#923](https://github.com/puppetlabs/puppetlabs-stdlib/pull/923) ([jonnytdevops](https://github.com/jonnytdevops)) - Load https file into loadjson() and loadyaml() [#918](https://github.com/puppetlabs/puppetlabs-stdlib/pull/918) ([jonnytdevops](https://github.com/jonnytdevops)) - Add support for symbolic file modes [#915](https://github.com/puppetlabs/puppetlabs-stdlib/pull/915) ([runejuhl](https://github.com/runejuhl)) - (MODULES-7181) Remove Stdlib::(Ipv4|IPv6|Ip_address) [#909](https://github.com/puppetlabs/puppetlabs-stdlib/pull/909) ([baurmatt](https://github.com/baurmatt)) - Allow pick() to work with strict variables [#890](https://github.com/puppetlabs/puppetlabs-stdlib/pull/890) ([binford2k](https://github.com/binford2k)) - seeded_rand_string() function [#877](https://github.com/puppetlabs/puppetlabs-stdlib/pull/877) ([pegasd](https://github.com/pegasd)) ### Fixed - Make any2array return empty array on empty string [#930](https://github.com/puppetlabs/puppetlabs-stdlib/pull/930) ([jbro](https://github.com/jbro)) - Revert "Allow pick() to work with strict variables" [#927](https://github.com/puppetlabs/puppetlabs-stdlib/pull/927) ([mwhahaha](https://github.com/mwhahaha)) - (docs) update documentation wrt functions moved to puppet [#922](https://github.com/puppetlabs/puppetlabs-stdlib/pull/922) ([hlindberg](https://github.com/hlindberg)) ## [4.25.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.25.1) - 2018-04-04 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.25.0...4.25.1) ## [4.25.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.25.0) - 2018-03-13 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.24.0...4.25.0) ### Added - (MODULES-6366) Add data types for IP validation [#872](https://github.com/puppetlabs/puppetlabs-stdlib/pull/872) ([ghoneycutt](https://github.com/ghoneycutt)) - add Stdlib::Fqdn and Stdlib::Host [#842](https://github.com/puppetlabs/puppetlabs-stdlib/pull/842) ([b4ldr](https://github.com/b4ldr)) - add Stdlib::Filesource [#841](https://github.com/puppetlabs/puppetlabs-stdlib/pull/841) ([b4ldr](https://github.com/b4ldr)) - add Stdlib::base64 and Stdlib::Base32 types [#840](https://github.com/puppetlabs/puppetlabs-stdlib/pull/840) ([b4ldr](https://github.com/b4ldr)) - add Stdlib::Port, Stdlib::Privilegedport & Stdlib::Unprivilegedport [#839](https://github.com/puppetlabs/puppetlabs-stdlib/pull/839) ([b4ldr](https://github.com/b4ldr)) ### Fixed - Handle join_keys_to_values() with undef values. [#874](https://github.com/puppetlabs/puppetlabs-stdlib/pull/874) ([BobVanB](https://github.com/BobVanB)) - FixToAccountForVersionChange [#867](https://github.com/puppetlabs/puppetlabs-stdlib/pull/867) ([david22swan](https://github.com/david22swan)) ## [4.24.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.24.0) - 2017-12-08 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.23.0...4.24.0) ### Fixed - (MODULES-6216) - Fix type3x function in stdlib [#861](https://github.com/puppetlabs/puppetlabs-stdlib/pull/861) ([pmcmaw](https://github.com/pmcmaw)) ## [4.23.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.23.0) - 2017-11-24 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.22.0...4.23.0) ## [4.22.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.22.0) - 2017-11-15 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.21.0...4.22.0) ### Fixed - Fixes a minor typo [#845](https://github.com/puppetlabs/puppetlabs-stdlib/pull/845) ([jbondpdx](https://github.com/jbondpdx)) ## [4.21.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.21.0) - 2017-11-03 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.20.0...4.21.0) ### Added - Add Stdlib::Mode type [#834](https://github.com/puppetlabs/puppetlabs-stdlib/pull/834) ([ghoneycutt](https://github.com/ghoneycutt)) - (MODULES-5680) Added new function sprintf_hash to allow using named references [#824](https://github.com/puppetlabs/puppetlabs-stdlib/pull/824) ([vStone](https://github.com/vStone)) - (MODULES-5679) Add a new function ifelse to match ruby's tenary operator [#823](https://github.com/puppetlabs/puppetlabs-stdlib/pull/823) ([vStone](https://github.com/vStone)) - Add a type for ensure on service resources [#750](https://github.com/puppetlabs/puppetlabs-stdlib/pull/750) ([npwalker](https://github.com/npwalker)) ### Fixed - Revert "(MODULES-5679) Add a new function ifelse to match ruby's tenary operator" [#832](https://github.com/puppetlabs/puppetlabs-stdlib/pull/832) ([david22swan](https://github.com/david22swan)) - (maint) Fix example syntax [#829](https://github.com/puppetlabs/puppetlabs-stdlib/pull/829) ([binford2k](https://github.com/binford2k)) - correct test cases to properly check result [#826](https://github.com/puppetlabs/puppetlabs-stdlib/pull/826) ([felixdoerre](https://github.com/felixdoerre)) - (MODULES-5651) Do not append infinitely [#825](https://github.com/puppetlabs/puppetlabs-stdlib/pull/825) ([hunner](https://github.com/hunner)) - use single quotes in validate_legacy example code [#816](https://github.com/puppetlabs/puppetlabs-stdlib/pull/816) ([mutante](https://github.com/mutante)) - Allow root as valid UNIX path [#811](https://github.com/puppetlabs/puppetlabs-stdlib/pull/811) ([kofrezo](https://github.com/kofrezo)) - Fix filenames of two function spec tests [#777](https://github.com/puppetlabs/puppetlabs-stdlib/pull/777) ([alexjfisher](https://github.com/alexjfisher)) ## [4.20.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.20.0) - 2017-09-11 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.19.0...4.20.0) ### Added - (MODULES-5546) add check for pw_hash [#810](https://github.com/puppetlabs/puppetlabs-stdlib/pull/810) ([eputnam](https://github.com/eputnam)) - Added to_json, to_json_pretty, and to_yaml functions [#809](https://github.com/puppetlabs/puppetlabs-stdlib/pull/809) ([WhatsARanjit](https://github.com/WhatsARanjit)) ## [4.19.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.19.0) - 2017-08-21 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.18.0...4.19.0) ## [4.18.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.18.0) - 2017-08-11 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.17.1...4.18.0) ### Added - MODULES-5382 Add documentation for email functions [#800](https://github.com/puppetlabs/puppetlabs-stdlib/pull/800) ([tphoney](https://github.com/tphoney)) - add type for MAC address [#796](https://github.com/puppetlabs/puppetlabs-stdlib/pull/796) ([bastelfreak](https://github.com/bastelfreak)) - (MODULES-4908) adds support for sensitive data type to pw_hash [#791](https://github.com/puppetlabs/puppetlabs-stdlib/pull/791) ([eputnam](https://github.com/eputnam)) - (FACT-932) Add new function, fact() [#787](https://github.com/puppetlabs/puppetlabs-stdlib/pull/787) ([reidmv](https://github.com/reidmv)) - Add validate_domain_name function [#753](https://github.com/puppetlabs/puppetlabs-stdlib/pull/753) ([frapex](https://github.com/frapex)) - Add a round function to complement ceiling and floor [#748](https://github.com/puppetlabs/puppetlabs-stdlib/pull/748) ([npwalker](https://github.com/npwalker)) - Add new file_line option append_on_no_match [#717](https://github.com/puppetlabs/puppetlabs-stdlib/pull/717) ([ripclawffb](https://github.com/ripclawffb)) ### Fixed - MODULES-5440 fix upper bound for puppet [#803](https://github.com/puppetlabs/puppetlabs-stdlib/pull/803) ([tphoney](https://github.com/tphoney)) - (MODULES-5003) file_line does not change multiple lines when one matches [#794](https://github.com/puppetlabs/puppetlabs-stdlib/pull/794) ([tkishel](https://github.com/tkishel)) - (MODULES-5003) file_line fix all broken lines [#788](https://github.com/puppetlabs/puppetlabs-stdlib/pull/788) ([tphoney](https://github.com/tphoney)) - (MODULES-5113) Make line support Sensitive [#786](https://github.com/puppetlabs/puppetlabs-stdlib/pull/786) ([reidmv](https://github.com/reidmv)) - Fix headers in CHANGELOG.md so that headers render correctly [#783](https://github.com/puppetlabs/puppetlabs-stdlib/pull/783) ([davewongillies](https://github.com/davewongillies)) - (Modules 4377) Causes ensure_packages to accept concurrent declarations with ensure => 'present' and 'installed' [#716](https://github.com/puppetlabs/puppetlabs-stdlib/pull/716) ([EmersonPrado](https://github.com/EmersonPrado)) ## [4.17.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.17.1) - 2017-06-16 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.17.0...4.17.1) ### Fixed - (MODULES-5095) Workaround for PUP-7650 [#780](https://github.com/puppetlabs/puppetlabs-stdlib/pull/780) ([thallgren](https://github.com/thallgren)) - (FM-6197) formatting fixes for file_line resource [#779](https://github.com/puppetlabs/puppetlabs-stdlib/pull/779) ([jbondpdx](https://github.com/jbondpdx)) ## [4.17.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.17.0) - 2017-05-10 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.16.0...4.17.0) ### Added - (FM-6116) - Adding POT file for metadata.json [#746](https://github.com/puppetlabs/puppetlabs-stdlib/pull/746) ([pmcmaw](https://github.com/pmcmaw)) - Add glob function [#718](https://github.com/puppetlabs/puppetlabs-stdlib/pull/718) ([sspreitzer](https://github.com/sspreitzer)) ### Fixed - (MODULES-4706) prerelease fixes [#771](https://github.com/puppetlabs/puppetlabs-stdlib/pull/771) ([eputnam](https://github.com/eputnam)) - (MODULES-4706) prerelease fixes [#770](https://github.com/puppetlabs/puppetlabs-stdlib/pull/770) ([jbondpdx](https://github.com/jbondpdx)) - (PE-20308) Fix defined_with_params() for defined type strings & references [#765](https://github.com/puppetlabs/puppetlabs-stdlib/pull/765) ([hunner](https://github.com/hunner)) - (PE-20308) Correct boundary for 4.5 vs 4.6 [#763](https://github.com/puppetlabs/puppetlabs-stdlib/pull/763) ([hunner](https://github.com/hunner)) - (PE-20308) Pass a literal type and not a string to findresource [#761](https://github.com/puppetlabs/puppetlabs-stdlib/pull/761) ([hunner](https://github.com/hunner)) - Ruby 1.8 doesn't support open_args [#758](https://github.com/puppetlabs/puppetlabs-stdlib/pull/758) ([sathieu](https://github.com/sathieu)) - [MODULES-4528] Replace Puppet.version.to_f version comparison from spec_helper.rb [#745](https://github.com/puppetlabs/puppetlabs-stdlib/pull/745) ([wilson208](https://github.com/wilson208)) ## [4.16.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.16.0) - 2017-03-21 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.15.0...4.16.0) ### Added - (FM-6051) Adds comments to warn for UTF8 incompatibility [#741](https://github.com/puppetlabs/puppetlabs-stdlib/pull/741) ([HelenCampbell](https://github.com/HelenCampbell)) - Addition of new length function [#736](https://github.com/puppetlabs/puppetlabs-stdlib/pull/736) ([HelenCampbell](https://github.com/HelenCampbell)) - (FM-6086) - Unit tests for Resource Types [#734](https://github.com/puppetlabs/puppetlabs-stdlib/pull/734) ([pmcmaw](https://github.com/pmcmaw)) - (FM-6063) - Unit tests for high effort functions [#732](https://github.com/puppetlabs/puppetlabs-stdlib/pull/732) ([pmcmaw](https://github.com/pmcmaw)) - (MODULES-4485) Improve ipv6 support for type [#731](https://github.com/puppetlabs/puppetlabs-stdlib/pull/731) ([petems](https://github.com/petems)) - (#FM-6068) allow file encoding to be specified [#726](https://github.com/puppetlabs/puppetlabs-stdlib/pull/726) ([GeoffWilliams](https://github.com/GeoffWilliams)) ### Fixed - Permit double slash in absolute/Unix path types [#740](https://github.com/puppetlabs/puppetlabs-stdlib/pull/740) ([domcleal](https://github.com/domcleal)) - (MODULES-4528) Use versioncmp to check Puppet version for 4.10.x compat [#737](https://github.com/puppetlabs/puppetlabs-stdlib/pull/737) ([domcleal](https://github.com/domcleal)) - Should only try to apply the resource if it not defined [#735](https://github.com/puppetlabs/puppetlabs-stdlib/pull/735) ([elmobp](https://github.com/elmobp)) - loosen the regex for tuple checking [#728](https://github.com/puppetlabs/puppetlabs-stdlib/pull/728) ([tphoney](https://github.com/tphoney)) - Fix acceptance test failure "Hiera is not a class" [#720](https://github.com/puppetlabs/puppetlabs-stdlib/pull/720) ([DavidS](https://github.com/DavidS)) - Fix unsupported data type error with rspec-puppet master [#715](https://github.com/puppetlabs/puppetlabs-stdlib/pull/715) ([domcleal](https://github.com/domcleal)) ## [4.15.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.15.0) - 2017-01-20 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.14.0...4.15.0) ### Added - Implement beaker-module_install_helper [#713](https://github.com/puppetlabs/puppetlabs-stdlib/pull/713) ([wilson208](https://github.com/wilson208)) - Addition of compat hash type for deprecation [#708](https://github.com/puppetlabs/puppetlabs-stdlib/pull/708) ([HelenCampbell](https://github.com/HelenCampbell)) - add ubuntu xenial to metadata [#705](https://github.com/puppetlabs/puppetlabs-stdlib/pull/705) ([eputnam](https://github.com/eputnam)) - (MODULES-4188) Add UUID generation function [#700](https://github.com/puppetlabs/puppetlabs-stdlib/pull/700) ([petems](https://github.com/petems)) - Add pry() function from hunner-pry [#640](https://github.com/puppetlabs/puppetlabs-stdlib/pull/640) ([hunner](https://github.com/hunner)) - Add puppet_server fact to return agent's server [#613](https://github.com/puppetlabs/puppetlabs-stdlib/pull/613) ([reidmv](https://github.com/reidmv)) ## [4.14.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.14.0) - 2016-12-12 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.13.1...4.14.0) ### Added - (MODULES-3829) Add tests for ensure_resources [#697](https://github.com/puppetlabs/puppetlabs-stdlib/pull/697) ([HAIL9000](https://github.com/HAIL9000)) - Addition of 4.6 and 4.7 travis cells [#686](https://github.com/puppetlabs/puppetlabs-stdlib/pull/686) ([HelenCampbell](https://github.com/HelenCampbell)) - Handle array values in join_keys_to_values function [#632](https://github.com/puppetlabs/puppetlabs-stdlib/pull/632) ([edestecd](https://github.com/edestecd)) ### Fixed - (MODULES-3393) Deprecation - Use puppet stacktrace if available [#693](https://github.com/puppetlabs/puppetlabs-stdlib/pull/693) ([HelenCampbell](https://github.com/HelenCampbell)) - Revert "Call site output for deprecation warnings" [#692](https://github.com/puppetlabs/puppetlabs-stdlib/pull/692) ([bmjen](https://github.com/bmjen)) - Fix spec failures on puppet 4.8 [#689](https://github.com/puppetlabs/puppetlabs-stdlib/pull/689) ([DavidS](https://github.com/DavidS)) - (MODULES-3829) Use .dup to duplicate classes for modification. [#687](https://github.com/puppetlabs/puppetlabs-stdlib/pull/687) ([MG2R](https://github.com/MG2R)) - (MODULES-3980) Fix ipv4 regex validator [#680](https://github.com/puppetlabs/puppetlabs-stdlib/pull/680) ([DavidS](https://github.com/DavidS)) ## [4.13.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.13.1) - 2016-10-13 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.13.0...4.13.1) ## [4.13.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.13.0) - 2016-10-11 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.12.0...4.13.0) ### Added - Add deprecation warnings to remaining validates [#656](https://github.com/puppetlabs/puppetlabs-stdlib/pull/656) ([HelenCampbell](https://github.com/HelenCampbell)) - Addition of logging with file and line numbers [#651](https://github.com/puppetlabs/puppetlabs-stdlib/pull/651) ([HelenCampbell](https://github.com/HelenCampbell)) - Add facter fact for puppet_environmentpath [#648](https://github.com/puppetlabs/puppetlabs-stdlib/pull/648) ([stbenjam](https://github.com/stbenjam)) - (MODULES-3540) Addition of validate legacy function [#630](https://github.com/puppetlabs/puppetlabs-stdlib/pull/630) ([HelenCampbell](https://github.com/HelenCampbell)) - Added documentation for regexpescape function. [#625](https://github.com/puppetlabs/puppetlabs-stdlib/pull/625) ([mooresm1](https://github.com/mooresm1)) - Added the regexpescape function. [#624](https://github.com/puppetlabs/puppetlabs-stdlib/pull/624) ([mooresm1](https://github.com/mooresm1)) - (MODULES-3529) add deprecation function [#617](https://github.com/puppetlabs/puppetlabs-stdlib/pull/617) ([tphoney](https://github.com/tphoney)) - Add delete_regex [#605](https://github.com/puppetlabs/puppetlabs-stdlib/pull/605) ([jyaworski](https://github.com/jyaworski)) - Add a missing s in the ensure_packages hash example [#604](https://github.com/puppetlabs/puppetlabs-stdlib/pull/604) ([rjw1](https://github.com/rjw1)) - (MODULES-1439) Adds any2bool function [#601](https://github.com/puppetlabs/puppetlabs-stdlib/pull/601) ([petems](https://github.com/petems)) - Add the default value to the "loadyaml" function [#600](https://github.com/puppetlabs/puppetlabs-stdlib/pull/600) ([dmitryilyin](https://github.com/dmitryilyin)) ### Fixed - (MODULES-3590) Fix match_for_absence parameter [#666](https://github.com/puppetlabs/puppetlabs-stdlib/pull/666) ([HAIL9000](https://github.com/HAIL9000)) - Ignore :undefined_variable "reason" in getvar [#665](https://github.com/puppetlabs/puppetlabs-stdlib/pull/665) ([mks-m](https://github.com/mks-m)) - (MODULES-3933) Fix getparam for 'false' values [#663](https://github.com/puppetlabs/puppetlabs-stdlib/pull/663) ([DavidS](https://github.com/DavidS)) - Permit undef passed as `nil` to validate_string [#662](https://github.com/puppetlabs/puppetlabs-stdlib/pull/662) ([domcleal](https://github.com/domcleal)) - Ensure validate functions use Puppet 4 deprecation [#659](https://github.com/puppetlabs/puppetlabs-stdlib/pull/659) ([HelenCampbell](https://github.com/HelenCampbell)) - Revert "Ensure validate functions use Puppet 4 deprecation" [#655](https://github.com/puppetlabs/puppetlabs-stdlib/pull/655) ([HelenCampbell](https://github.com/HelenCampbell)) - Ensure validate functions use Puppet 4 deprecation [#654](https://github.com/puppetlabs/puppetlabs-stdlib/pull/654) ([HelenCampbell](https://github.com/HelenCampbell)) - Fix whitespace [#653](https://github.com/puppetlabs/puppetlabs-stdlib/pull/653) ([hunner](https://github.com/hunner)) - MODULES-3699 Deprecation spec fix 2 [#646](https://github.com/puppetlabs/puppetlabs-stdlib/pull/646) ([eputnam](https://github.com/eputnam)) - Fix markdown indentation [#631](https://github.com/puppetlabs/puppetlabs-stdlib/pull/631) ([smortex](https://github.com/smortex)) - Fix str2bool error message [#626](https://github.com/puppetlabs/puppetlabs-stdlib/pull/626) ([LoicGombeaud](https://github.com/LoicGombeaud)) - (MODULES-3543) Fixup defined_with_params to work on all puppet versions [#615](https://github.com/puppetlabs/puppetlabs-stdlib/pull/615) ([DavidS](https://github.com/DavidS)) - (MODULES-3543) Fix define_with_params to handle undef properly [#614](https://github.com/puppetlabs/puppetlabs-stdlib/pull/614) ([DavidS](https://github.com/DavidS)) - (MODULES-3354) Use 1.8.7 hash in validate_email_address function [#606](https://github.com/puppetlabs/puppetlabs-stdlib/pull/606) ([stbenjam](https://github.com/stbenjam)) - Use reject instead of delete_if [#592](https://github.com/puppetlabs/puppetlabs-stdlib/pull/592) ([jyaworski](https://github.com/jyaworski)) ## [4.12.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.12.0) - 2016-05-03 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.11.0...4.12.0) ### Added - Add support for regular expressions to delete [#591](https://github.com/puppetlabs/puppetlabs-stdlib/pull/591) ([jyaworski](https://github.com/jyaworski)) - Add validate_email_address function [#583](https://github.com/puppetlabs/puppetlabs-stdlib/pull/583) ([jyaworski](https://github.com/jyaworski)) - Add check if Gem is defined [#579](https://github.com/puppetlabs/puppetlabs-stdlib/pull/579) ([sulaweyo](https://github.com/sulaweyo)) - Add enclose_ipv6 function [#577](https://github.com/puppetlabs/puppetlabs-stdlib/pull/577) ([EmilienM](https://github.com/EmilienM)) - ensure_packages.rb: Modifed to pass hiera parameters (as hash,array) as first argument [#576](https://github.com/puppetlabs/puppetlabs-stdlib/pull/576) ([yadavnikhil](https://github.com/yadavnikhil)) - Extend Base64() function support [#575](https://github.com/puppetlabs/puppetlabs-stdlib/pull/575) ([guessi](https://github.com/guessi)) - Add dig function [#573](https://github.com/puppetlabs/puppetlabs-stdlib/pull/573) ([mks-m](https://github.com/mks-m)) - Add is_ipv4_address and is_ipv6_address functions [#570](https://github.com/puppetlabs/puppetlabs-stdlib/pull/570) ([gfidente](https://github.com/gfidente)) - Add test for basename on path with scheme [#567](https://github.com/puppetlabs/puppetlabs-stdlib/pull/567) ([alechenninger](https://github.com/alechenninger)) ### Fixed - Undo changing delete() to delete regex matches [#599](https://github.com/puppetlabs/puppetlabs-stdlib/pull/599) ([hunner](https://github.com/hunner)) - (MODULES-3271) Ensure that is_email_address works on unsupported rubies [#598](https://github.com/puppetlabs/puppetlabs-stdlib/pull/598) ([DavidS](https://github.com/DavidS)) - (MODULES-3246) Fix concat with Hash arguments. [#590](https://github.com/puppetlabs/puppetlabs-stdlib/pull/590) ([alext](https://github.com/alext)) - (maint) Fixes fqdn_rand_string tests [#578](https://github.com/puppetlabs/puppetlabs-stdlib/pull/578) ([bmjen](https://github.com/bmjen)) - Fix reference to validate_bool in function [#568](https://github.com/puppetlabs/puppetlabs-stdlib/pull/568) ([mattbostock](https://github.com/mattbostock)) ## [4.11.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.11.0) - 2016-01-11 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.10.0...4.11.0) ### Added - minor tweak to 4.11.0 adding debian 8 to metadata [#565](https://github.com/puppetlabs/puppetlabs-stdlib/pull/565) ([tphoney](https://github.com/tphoney)) - Allow package_provider fact to resolve on PE 3.x [#561](https://github.com/puppetlabs/puppetlabs-stdlib/pull/561) ([DavidS](https://github.com/DavidS)) - adds new parser called is_absolute_path [#553](https://github.com/puppetlabs/puppetlabs-stdlib/pull/553) ([logicminds](https://github.com/logicminds)) - Add a function to validate an x509 RSA key pair [#552](https://github.com/puppetlabs/puppetlabs-stdlib/pull/552) ([mattbostock](https://github.com/mattbostock)) - Add clamp function [#545](https://github.com/puppetlabs/puppetlabs-stdlib/pull/545) ([mpolenchuk](https://github.com/mpolenchuk)) ## [4.10.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.10.0) - 2015-12-15 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.9.1...4.10.0) ### Added - (#2886) seeded_rand: new function [#554](https://github.com/puppetlabs/puppetlabs-stdlib/pull/554) ([kjetilho](https://github.com/kjetilho)) ## [4.9.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.9.1) - 2015-12-04 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.9.0...4.9.1) ### Added - Add validator for any IP address [#546](https://github.com/puppetlabs/puppetlabs-stdlib/pull/546) ([devvesa](https://github.com/devvesa)) - Add check to ensure regex does not throw for none type. [#539](https://github.com/puppetlabs/puppetlabs-stdlib/pull/539) ([mentat](https://github.com/mentat)) - add functionality to bool2str function [#538](https://github.com/puppetlabs/puppetlabs-stdlib/pull/538) ([mmckinst](https://github.com/mmckinst)) - Add package_provider fact [#534](https://github.com/puppetlabs/puppetlabs-stdlib/pull/534) ([asasfu](https://github.com/asasfu)) - (MODULES-2561) add is_a function [#523](https://github.com/puppetlabs/puppetlabs-stdlib/pull/523) ([DavidS](https://github.com/DavidS)) - accept any case of boolean strings [#518](https://github.com/puppetlabs/puppetlabs-stdlib/pull/518) ([logicminds](https://github.com/logicminds)) - [MODULES-2462] Improve parseyaml function [#511](https://github.com/puppetlabs/puppetlabs-stdlib/pull/511) ([dmitryilyin](https://github.com/dmitryilyin)) - Add a service_provider fact [#506](https://github.com/puppetlabs/puppetlabs-stdlib/pull/506) ([binford2k](https://github.com/binford2k)) ### Fixed - Fix reference to validate_bool in IP4 function [#551](https://github.com/puppetlabs/puppetlabs-stdlib/pull/551) ([mattbostock](https://github.com/mattbostock)) - Fix Gemfile to work with ruby 1.8.7 [#548](https://github.com/puppetlabs/puppetlabs-stdlib/pull/548) ([bmjen](https://github.com/bmjen)) - (FM-3773) Fix root_home fact on AIX 5.x [#547](https://github.com/puppetlabs/puppetlabs-stdlib/pull/547) ([reidmv](https://github.com/reidmv)) - Use absolute class name in example [#543](https://github.com/puppetlabs/puppetlabs-stdlib/pull/543) ([ghoneycutt](https://github.com/ghoneycutt)) - use properly encoded characters [#542](https://github.com/puppetlabs/puppetlabs-stdlib/pull/542) ([greg0ire](https://github.com/greg0ire)) - Fix load module metadata [#537](https://github.com/puppetlabs/puppetlabs-stdlib/pull/537) ([cmurphy](https://github.com/cmurphy)) - prevent deprecation warning about the allow_virtual parameter [#535](https://github.com/puppetlabs/puppetlabs-stdlib/pull/535) ([martinpfeifer](https://github.com/martinpfeifer)) - Fix backwards compatibility from #511 [#527](https://github.com/puppetlabs/puppetlabs-stdlib/pull/527) ([underscorgan](https://github.com/underscorgan)) ## [4.9.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.9.0) - 2015-09-08 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.8.0...4.9.0) ### Added - Adds a convert_base function, which can convert numbers between bases [#514](https://github.com/puppetlabs/puppetlabs-stdlib/pull/514) ([DavidS](https://github.com/DavidS)) - Add a new function "try_get_value" [#513](https://github.com/puppetlabs/puppetlabs-stdlib/pull/513) ([dmitryilyin](https://github.com/dmitryilyin)) - (MODULES-2456) Modify union to accept more than two arrays [#507](https://github.com/puppetlabs/puppetlabs-stdlib/pull/507) ([Jetroid](https://github.com/Jetroid)) - (MODULES-2410) Add new functions dos2unix and unix2dos [#505](https://github.com/puppetlabs/puppetlabs-stdlib/pull/505) ([gibbsoft](https://github.com/gibbsoft)) ### Fixed - (MAINT) fix up try_get_value acceptance test [#517](https://github.com/puppetlabs/puppetlabs-stdlib/pull/517) ([DavidS](https://github.com/DavidS)) - Ticket/MODULES-2478 Make root_home fact work on AIX using native lsuser command [#515](https://github.com/puppetlabs/puppetlabs-stdlib/pull/515) ([jfautley](https://github.com/jfautley)) ## [4.8.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.8.0) - 2015-08-12 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.7.0...4.8.0) ### Added - [#puppethack] Adding replace attribute to file_line [#494](https://github.com/puppetlabs/puppetlabs-stdlib/pull/494) ([rmaika](https://github.com/rmaika)) - Add load_metadata_json function [#483](https://github.com/puppetlabs/puppetlabs-stdlib/pull/483) ([nibalizer](https://github.com/nibalizer)) ### Fixed - Fix extraneous end [#501](https://github.com/puppetlabs/puppetlabs-stdlib/pull/501) ([hunner](https://github.com/hunner)) - (MODULES-2316) Change file_type boolean parameter to symbols [#497](https://github.com/puppetlabs/puppetlabs-stdlib/pull/497) ([domcleal](https://github.com/domcleal)) - Style fixes [#491](https://github.com/puppetlabs/puppetlabs-stdlib/pull/491) ([ekohl](https://github.com/ekohl)) ## [4.7.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.7.0) - 2015-07-23 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.6.0...4.7.0) ### Added - adding support for hash in the size function [#489](https://github.com/puppetlabs/puppetlabs-stdlib/pull/489) ([gcmalloc](https://github.com/gcmalloc)) - Add support for Solaris 12 [#478](https://github.com/puppetlabs/puppetlabs-stdlib/pull/478) ([drewfisher314](https://github.com/drewfisher314)) - (FM-2130) Document new location of facts.d cache [#454](https://github.com/puppetlabs/puppetlabs-stdlib/pull/454) ([elyscape](https://github.com/elyscape)) ### Fixed - (maint) Fix test to not assume is_pe fact on > 4.0.0 puppet [#488](https://github.com/puppetlabs/puppetlabs-stdlib/pull/488) ([cyberious](https://github.com/cyberious)) - Fix documentation error in upcase [#487](https://github.com/puppetlabs/puppetlabs-stdlib/pull/487) ([liv3d](https://github.com/liv3d)) - Clarify that third argument to ensure_resource() is a hash [#485](https://github.com/puppetlabs/puppetlabs-stdlib/pull/485) ([ghoneycutt](https://github.com/ghoneycutt)) - Use puppet_install_helper [#484](https://github.com/puppetlabs/puppetlabs-stdlib/pull/484) ([underscorgan](https://github.com/underscorgan)) - catch and rescue from looking up non-existent facts [#479](https://github.com/puppetlabs/puppetlabs-stdlib/pull/479) ([mklette](https://github.com/mklette)) - AIO uses puppet 4 so should return true for is_future_parser_enabled [#477](https://github.com/puppetlabs/puppetlabs-stdlib/pull/477) ([underscorgan](https://github.com/underscorgan)) - Also catch :undefined_variable as thrown by future parser [#470](https://github.com/puppetlabs/puppetlabs-stdlib/pull/470) ([bobtfish](https://github.com/bobtfish)) - Fix time() on 1.8.7 [#469](https://github.com/puppetlabs/puppetlabs-stdlib/pull/469) ([hunner](https://github.com/hunner)) - Fix spelling of camelcase [#468](https://github.com/puppetlabs/puppetlabs-stdlib/pull/468) ([kylog](https://github.com/kylog)) - (MODULES-1882) convert function tests to rspec-puppet [#464](https://github.com/puppetlabs/puppetlabs-stdlib/pull/464) ([DavidS](https://github.com/DavidS)) - (MODULES-2071) Patch file_line provider to use multiple with after [#463](https://github.com/puppetlabs/puppetlabs-stdlib/pull/463) ([rmaika](https://github.com/rmaika)) - fqdn_rotate: Don't use the value itself as part of the random seed [#462](https://github.com/puppetlabs/puppetlabs-stdlib/pull/462) ([elyscape](https://github.com/elyscape)) - validate_integer, validate_numeric: explicitely reject hashes in arrays [#461](https://github.com/puppetlabs/puppetlabs-stdlib/pull/461) ([DavidS](https://github.com/DavidS)) - fqdn_rotate: reset srand seed correctly on old ruby versions [#460](https://github.com/puppetlabs/puppetlabs-stdlib/pull/460) ([DavidS](https://github.com/DavidS)) - range(): fix TypeError(can't convert nil into Integer) when using range ... [#448](https://github.com/puppetlabs/puppetlabs-stdlib/pull/448) ([DavidS](https://github.com/DavidS)) - Fix pw_hash() on JRuby < 1.7.17 [#446](https://github.com/puppetlabs/puppetlabs-stdlib/pull/446) ([elyscape](https://github.com/elyscape)) - uses include type class declaration [#441](https://github.com/puppetlabs/puppetlabs-stdlib/pull/441) ([mrzarquon](https://github.com/mrzarquon)) - fqdn_rand_string: fix argument error message [#440](https://github.com/puppetlabs/puppetlabs-stdlib/pull/440) ([DavidS](https://github.com/DavidS)) - Check if file exists before loading with loadyaml. If not, return nil [#314](https://github.com/puppetlabs/puppetlabs-stdlib/pull/314) ([amateo](https://github.com/amateo)) ## [4.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.6.0) - 2015-04-15 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.5.1...4.6.0) ### Added - Modules-2474: Only runs enhanced salts functions test on systems that ... [#434](https://github.com/puppetlabs/puppetlabs-stdlib/pull/434) ([bmjen](https://github.com/bmjen)) - Clarifying behaviour of attributes and adding an extra example. [#430](https://github.com/puppetlabs/puppetlabs-stdlib/pull/430) ([underscorgan](https://github.com/underscorgan)) - (BKR-147) add Gemfile setting for BEAKER_VERSION for puppet... [#426](https://github.com/puppetlabs/puppetlabs-stdlib/pull/426) ([anodelman](https://github.com/anodelman)) - Add ability to pin beaker versions [#423](https://github.com/puppetlabs/puppetlabs-stdlib/pull/423) ([cyberious](https://github.com/cyberious)) - Add support for hashes in the prefix function [#420](https://github.com/puppetlabs/puppetlabs-stdlib/pull/420) ([underscorgan](https://github.com/underscorgan)) - Loosen the restrictions of upcase and allow for recursion of the objects... [#419](https://github.com/puppetlabs/puppetlabs-stdlib/pull/419) ([cyberious](https://github.com/cyberious)) - Add Hash to upcase [#417](https://github.com/puppetlabs/puppetlabs-stdlib/pull/417) ([cyberious](https://github.com/cyberious)) - (MODULES-1737) Add pw_hash() function [#408](https://github.com/puppetlabs/puppetlabs-stdlib/pull/408) ([elyscape](https://github.com/elyscape)) - Add a ceiling function to complement the floor function. [#407](https://github.com/puppetlabs/puppetlabs-stdlib/pull/407) ([adamcrews](https://github.com/adamcrews)) - (MODULES-1715) Add FQDN-based random string generator [#405](https://github.com/puppetlabs/puppetlabs-stdlib/pull/405) ([elyscape](https://github.com/elyscape)) - (MODULES-560) Add new functions validate_numeric() and validate_integer(). [#375](https://github.com/puppetlabs/puppetlabs-stdlib/pull/375) ([poikilotherm](https://github.com/poikilotherm)) ### Fixed - Fix the 4.6.0 release date [#438](https://github.com/puppetlabs/puppetlabs-stdlib/pull/438) ([hunner](https://github.com/hunner)) - Fix acceptance tests for #405 [#433](https://github.com/puppetlabs/puppetlabs-stdlib/pull/433) ([cmurphy](https://github.com/cmurphy)) - Fix unsupported platforms variable name in tests [#432](https://github.com/puppetlabs/puppetlabs-stdlib/pull/432) ([cmurphy](https://github.com/cmurphy)) - File_line checks provided after param if no match is found [#431](https://github.com/puppetlabs/puppetlabs-stdlib/pull/431) ([bmjen](https://github.com/bmjen)) - Fix off-by-one error in validate_augeas_spec.rb that was causing rspec failure [#425](https://github.com/puppetlabs/puppetlabs-stdlib/pull/425) ([jeffcoat](https://github.com/jeffcoat)) - Fix issue with 1.8.7 and upcase [#418](https://github.com/puppetlabs/puppetlabs-stdlib/pull/418) ([cyberious](https://github.com/cyberious)) - Check for string before copying [#413](https://github.com/puppetlabs/puppetlabs-stdlib/pull/413) ([underscorgan](https://github.com/underscorgan)) - (MODULES-1771) Don't modify input to is_domain_name() [#412](https://github.com/puppetlabs/puppetlabs-stdlib/pull/412) ([seanmil](https://github.com/seanmil)) - Fix Travis builds [#411](https://github.com/puppetlabs/puppetlabs-stdlib/pull/411) ([elyscape](https://github.com/elyscape)) - (MODULES-1738) Don't modify the global seed in fqdn_rotate() [#406](https://github.com/puppetlabs/puppetlabs-stdlib/pull/406) ([elyscape](https://github.com/elyscape)) - (MODULES-1670) Do not match dotted-quad IP address as domain name [#404](https://github.com/puppetlabs/puppetlabs-stdlib/pull/404) ([roderickm](https://github.com/roderickm)) - Dirname typecheck [#369](https://github.com/puppetlabs/puppetlabs-stdlib/pull/369) ([rfugina](https://github.com/rfugina)) ## [4.5.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.5.1) - 2015-01-14 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.5.0...4.5.1) ### Added - MODULES-1606 add ability to pass array to delete for items to delete [#392](https://github.com/puppetlabs/puppetlabs-stdlib/pull/392) ([cyberious](https://github.com/cyberious)) - MODULES-444-Add concat multiple [#374](https://github.com/puppetlabs/puppetlabs-stdlib/pull/374) ([petems](https://github.com/petems)) - Allow array of pathes in validate_absolute_path [#372](https://github.com/puppetlabs/puppetlabs-stdlib/pull/372) ([poikilotherm](https://github.com/poikilotherm)) - Basename implementation [#368](https://github.com/puppetlabs/puppetlabs-stdlib/pull/368) ([rfugina](https://github.com/rfugina)) ### Fixed - FM-2131 Move to non temp directory for factor_dot_d [#401](https://github.com/puppetlabs/puppetlabs-stdlib/pull/401) ([cyberious](https://github.com/cyberious)) - Pull in RSpec 3.0 fixes. [#398](https://github.com/puppetlabs/puppetlabs-stdlib/pull/398) ([cyberious](https://github.com/cyberious)) - Change all to each [#396](https://github.com/puppetlabs/puppetlabs-stdlib/pull/396) ([hunner](https://github.com/hunner)) - FM-2130 Move cache file to non temp directory [#395](https://github.com/puppetlabs/puppetlabs-stdlib/pull/395) ([cyberious](https://github.com/cyberious)) - Fix bad check in test [#389](https://github.com/puppetlabs/puppetlabs-stdlib/pull/389) ([underscorgan](https://github.com/underscorgan)) - (MODULES-1582) File location placeholder [#377](https://github.com/puppetlabs/puppetlabs-stdlib/pull/377) ([petems](https://github.com/petems)) - ensure_resource: be more verbose in debug mode [#336](https://github.com/puppetlabs/puppetlabs-stdlib/pull/336) ([mklette](https://github.com/mklette)) - Correct function name in changelog [#301](https://github.com/puppetlabs/puppetlabs-stdlib/pull/301) ([3flex](https://github.com/3flex)) ## [4.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.5.0) - 2014-12-16 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.4.0...4.5.0) ### Added - FM-2020 SLES Support verified [#371](https://github.com/puppetlabs/puppetlabs-stdlib/pull/371) ([cyberious](https://github.com/cyberious)) - FM-1523: Added module summary to metadata.json [#370](https://github.com/puppetlabs/puppetlabs-stdlib/pull/370) ([jbondpdx](https://github.com/jbondpdx)) - (MODULES-1329) Allow member to look for array [#319](https://github.com/puppetlabs/puppetlabs-stdlib/pull/319) ([Spredzy](https://github.com/Spredzy)) ### Fixed - Need to convert strings and fixnums to arrays [#367](https://github.com/puppetlabs/puppetlabs-stdlib/pull/367) ([underscorgan](https://github.com/underscorgan)) - Make the range function work with integers [#365](https://github.com/puppetlabs/puppetlabs-stdlib/pull/365) ([dalen](https://github.com/dalen)) - (maint) Fix indentation of range function [#364](https://github.com/puppetlabs/puppetlabs-stdlib/pull/364) ([dalen](https://github.com/dalen)) ## [4.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.4.0) - 2014-11-12 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.3.2...4.4.0) ### Added - (QENG-1404) Segregate system testing gems [#356](https://github.com/puppetlabs/puppetlabs-stdlib/pull/356) ([justinstoller](https://github.com/justinstoller)) - MODULES-1413 Add ability for member to take numeric objects [#350](https://github.com/puppetlabs/puppetlabs-stdlib/pull/350) ([cyberious](https://github.com/cyberious)) - Add proper exception catching of Windows errors when CreateProcess does not succeed [#348](https://github.com/puppetlabs/puppetlabs-stdlib/pull/348) ([cyberious](https://github.com/cyberious)) - Added correct converstions for PB and EB. [#343](https://github.com/puppetlabs/puppetlabs-stdlib/pull/343) ([big-samantha](https://github.com/big-samantha)) - add require 'tempfile' to resolve a previously autorequired resource [#340](https://github.com/puppetlabs/puppetlabs-stdlib/pull/340) ([cyberious](https://github.com/cyberious)) - (MODULES-1221) Add file_line autorequire documentation [#300](https://github.com/puppetlabs/puppetlabs-stdlib/pull/300) ([trlinkin](https://github.com/trlinkin)) ### Fixed - Fix exclude windows test on ensure_package [#363](https://github.com/puppetlabs/puppetlabs-stdlib/pull/363) ([hunner](https://github.com/hunner)) - Correct type() logic [#358](https://github.com/puppetlabs/puppetlabs-stdlib/pull/358) ([hunner](https://github.com/hunner)) - Fix the unless for test cases on ensure_package and ensure_resource [#353](https://github.com/puppetlabs/puppetlabs-stdlib/pull/353) ([cyberious](https://github.com/cyberious)) - Fix validate_cmd, previous addition of SystemCallError only works for Puppet 3.7, previous version throw different exception. Wrapping in generic Exception catch all [#349](https://github.com/puppetlabs/puppetlabs-stdlib/pull/349) ([cyberious](https://github.com/cyberious)) - Fix issue with ensure_request [#347](https://github.com/puppetlabs/puppetlabs-stdlib/pull/347) ([cyberious](https://github.com/cyberious)) - Spec_helper_acceptance fix provision section [#346](https://github.com/puppetlabs/puppetlabs-stdlib/pull/346) ([cyberious](https://github.com/cyberious)) - Fix logic issue with not including windows for testing ensure_packages as ruby and gem are not on the install path [#345](https://github.com/puppetlabs/puppetlabs-stdlib/pull/345) ([cyberious](https://github.com/cyberious)) - Fix testcases for Future Parser and resolve issue with values_at in assuming that it was dealing with a string [#344](https://github.com/puppetlabs/puppetlabs-stdlib/pull/344) ([cyberious](https://github.com/cyberious)) - ENTERPRISE-281 fixes issue with has_interfaces and case mismatch causing... [#334](https://github.com/puppetlabs/puppetlabs-stdlib/pull/334) ([cyberious](https://github.com/cyberious)) - MODULES-1248 Fix issue with not properly counting regex matches with leg... [#321](https://github.com/puppetlabs/puppetlabs-stdlib/pull/321) ([cyberious](https://github.com/cyberious)) - Fix strict_variables = true [#303](https://github.com/puppetlabs/puppetlabs-stdlib/pull/303) ([bobtfish](https://github.com/bobtfish)) ## [4.3.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.3.2) - 2014-07-16 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.3.1...4.3.2) ## [4.3.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.3.1) - 2014-07-16 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.3.0...4.3.1) ### Fixed - Correct metadata.json to match checksum [#297](https://github.com/puppetlabs/puppetlabs-stdlib/pull/297) ([hunner](https://github.com/hunner)) ## [4.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.3.0) - 2014-07-09 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.2.2...4.3.0) ### Added - AIX has no facter network support [#296](https://github.com/puppetlabs/puppetlabs-stdlib/pull/296) ([hunner](https://github.com/hunner)) - Start synchronizing module files [#290](https://github.com/puppetlabs/puppetlabs-stdlib/pull/290) ([cmurphy](https://github.com/cmurphy)) - stdlib 4 isn't compatible with PE 3.2 [#286](https://github.com/puppetlabs/puppetlabs-stdlib/pull/286) ([hunner](https://github.com/hunner)) - Increase resilience if lookup var comes back with nil object [#284](https://github.com/puppetlabs/puppetlabs-stdlib/pull/284) ([cyberious](https://github.com/cyberious)) - Add windows support and work around issue with SCP_TO on windows systems [#283](https://github.com/puppetlabs/puppetlabs-stdlib/pull/283) ([cyberious](https://github.com/cyberious)) - Add windows Nodesets and remove Beaker from Gemfile [#278](https://github.com/puppetlabs/puppetlabs-stdlib/pull/278) ([cyberious](https://github.com/cyberious)) - Add private() function [#270](https://github.com/puppetlabs/puppetlabs-stdlib/pull/270) ([raphink](https://github.com/raphink)) ### Fixed - Gotta single quote yer typewriter buttons [#293](https://github.com/puppetlabs/puppetlabs-stdlib/pull/293) ([hunner](https://github.com/hunner)) - Need quotes for spaces in path [#292](https://github.com/puppetlabs/puppetlabs-stdlib/pull/292) ([hunner](https://github.com/hunner)) - has_ip_network doesn't work on windows either [#291](https://github.com/puppetlabs/puppetlabs-stdlib/pull/291) ([hunner](https://github.com/hunner)) - Disable windows network stuff and quote path [#289](https://github.com/puppetlabs/puppetlabs-stdlib/pull/289) ([hunner](https://github.com/hunner)) - Not enough escape velocity [#288](https://github.com/puppetlabs/puppetlabs-stdlib/pull/288) ([hunner](https://github.com/hunner)) - Fix pe facts and slashes [#287](https://github.com/puppetlabs/puppetlabs-stdlib/pull/287) ([hunner](https://github.com/hunner)) - Windows needs a tmpdir path [#281](https://github.com/puppetlabs/puppetlabs-stdlib/pull/281) ([hunner](https://github.com/hunner)) - Augeas isn't present on windows [#280](https://github.com/puppetlabs/puppetlabs-stdlib/pull/280) ([hunner](https://github.com/hunner)) - (FM-1587) Fix test issues on solaris 10 [#276](https://github.com/puppetlabs/puppetlabs-stdlib/pull/276) ([hunner](https://github.com/hunner)) ## [4.2.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.2.2) - 2014-06-05 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.2.2...4.2.2) ## [3.2.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.2.2) - 2014-06-05 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.2.1...3.2.2) ### Added - (PUP-2571) add 'before' functionality to file_line [#256](https://github.com/puppetlabs/puppetlabs-stdlib/pull/256) ([stbenjam](https://github.com/stbenjam)) - (MODULES-905) Add bool2str() and camelcase() for string manipulation [#255](https://github.com/puppetlabs/puppetlabs-stdlib/pull/255) ([mckern](https://github.com/mckern)) ### Fixed - Further fixes to tests for 14.04. [#265](https://github.com/puppetlabs/puppetlabs-stdlib/pull/265) ([apenney](https://github.com/apenney)) - Fixes for PE3.3. [#264](https://github.com/puppetlabs/puppetlabs-stdlib/pull/264) ([apenney](https://github.com/apenney)) - (MODULES-905) Narrow the confinement in bool2str [#258](https://github.com/puppetlabs/puppetlabs-stdlib/pull/258) ([mckern](https://github.com/mckern)) - Revert "Merge pull request #256 from stbenjam/2571-before" [#257](https://github.com/puppetlabs/puppetlabs-stdlib/pull/257) ([apenney](https://github.com/apenney)) ## [4.2.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.2.1) - 2014-05-09 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.2.0...4.2.1) ## [4.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.2.0) - 2014-05-08 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.2.1...4.2.0) ### Added - Adding more spec coverage [#247](https://github.com/puppetlabs/puppetlabs-stdlib/pull/247) ([hunner](https://github.com/hunner)) - Add more specs [#244](https://github.com/puppetlabs/puppetlabs-stdlib/pull/244) ([hunner](https://github.com/hunner)) - Add beaker tests for functions. [#243](https://github.com/puppetlabs/puppetlabs-stdlib/pull/243) ([hunner](https://github.com/hunner)) - Add beaker framework. [#234](https://github.com/puppetlabs/puppetlabs-stdlib/pull/234) ([apenney](https://github.com/apenney)) - Allow concat to take non-array second parameters [#222](https://github.com/puppetlabs/puppetlabs-stdlib/pull/222) ([mfoo](https://github.com/mfoo)) ### Fixed - Fix the stdlib functions that fail tests [#251](https://github.com/puppetlabs/puppetlabs-stdlib/pull/251) ([hunner](https://github.com/hunner)) - Add the missing shebangs and fix the wrong ones [#248](https://github.com/puppetlabs/puppetlabs-stdlib/pull/248) ([averi](https://github.com/averi)) - Fix the validate_augeas beaker tests [#245](https://github.com/puppetlabs/puppetlabs-stdlib/pull/245) ([hunner](https://github.com/hunner)) - Adjust the regular expression for facts. [#242](https://github.com/puppetlabs/puppetlabs-stdlib/pull/242) ([apenney](https://github.com/apenney)) - Make sure location_for is used when installing Puppet. [#233](https://github.com/puppetlabs/puppetlabs-stdlib/pull/233) ([apenney](https://github.com/apenney)) - Readd location_for [#232](https://github.com/puppetlabs/puppetlabs-stdlib/pull/232) ([apenney](https://github.com/apenney)) - hash example has misplaced comas [#221](https://github.com/puppetlabs/puppetlabs-stdlib/pull/221) ([jtreminio](https://github.com/jtreminio)) ## [3.2.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.2.1) - 2014-03-03 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.1.0...3.2.1) ### Added - (PUP-1459) Add support for root_home on OS X 10.9 [#215](https://github.com/puppetlabs/puppetlabs-stdlib/pull/215) ([blkperl](https://github.com/blkperl)) - (#23381) add is_bool() function [#211](https://github.com/puppetlabs/puppetlabs-stdlib/pull/211) ([jhoblitt](https://github.com/jhoblitt)) - Add rake tasks to validate and lint files and check with Travis [#208](https://github.com/puppetlabs/puppetlabs-stdlib/pull/208) ([ghoneycutt](https://github.com/ghoneycutt)) - (#16498) Added unit test for loadyaml function. [#185](https://github.com/puppetlabs/puppetlabs-stdlib/pull/185) ([lmello](https://github.com/lmello)) - Add delete_values() and delete_undef_values() functions [#166](https://github.com/puppetlabs/puppetlabs-stdlib/pull/166) ([ptomulik](https://github.com/ptomulik)) - Adding base64 function [#159](https://github.com/puppetlabs/puppetlabs-stdlib/pull/159) ([fiddyspence](https://github.com/fiddyspence)) - [#20862] Add functions to validate ipv4 and ipv6 addresses [#158](https://github.com/puppetlabs/puppetlabs-stdlib/pull/158) ([wfarr](https://github.com/wfarr)) - (#20684) Add array comparison functions, difference, intersection and un... [#155](https://github.com/puppetlabs/puppetlabs-stdlib/pull/155) ([AlexCline](https://github.com/AlexCline)) - add a "step" argument to range() [#56](https://github.com/puppetlabs/puppetlabs-stdlib/pull/56) ([hakamadare](https://github.com/hakamadare)) ### Fixed - calling rspec directly makes is_function_available.rb not pass ruby -c [#203](https://github.com/puppetlabs/puppetlabs-stdlib/pull/203) ([dreamlibrarian](https://github.com/dreamlibrarian)) - Fix the tests on osx [#200](https://github.com/puppetlabs/puppetlabs-stdlib/pull/200) ([bobtfish](https://github.com/bobtfish)) - delete_undef_values function fix bug #20681 [#184](https://github.com/puppetlabs/puppetlabs-stdlib/pull/184) ([lmello](https://github.com/lmello)) - delete_values() fix bug #20681. [#182](https://github.com/puppetlabs/puppetlabs-stdlib/pull/182) ([lmello](https://github.com/lmello)) - Minor grammar fix [#181](https://github.com/puppetlabs/puppetlabs-stdlib/pull/181) ([nibalizer](https://github.com/nibalizer)) - bug # 20681 delete() function should not remove elements from original list [#178](https://github.com/puppetlabs/puppetlabs-stdlib/pull/178) ([lmello](https://github.com/lmello)) - (maint) fix RST formatting of has_interface_with code examples [#175](https://github.com/puppetlabs/puppetlabs-stdlib/pull/175) ([floatingatoll](https://github.com/floatingatoll)) - minor corrections to delete_values() [#170](https://github.com/puppetlabs/puppetlabs-stdlib/pull/170) ([ptomulik](https://github.com/ptomulik)) - Fix validate_slength, arg.length should be args[0].length [#169](https://github.com/puppetlabs/puppetlabs-stdlib/pull/169) ([hdeheer](https://github.com/hdeheer)) - ensure_resource: fix documentation typo [#165](https://github.com/puppetlabs/puppetlabs-stdlib/pull/165) ([bootc](https://github.com/bootc)) - Trivial documentation fix for upcase function. [#157](https://github.com/puppetlabs/puppetlabs-stdlib/pull/157) ([rohanrns](https://github.com/rohanrns)) ## [4.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.1.0) - 2013-05-10 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.0.2...4.1.0) ### Added - (#20548) Allow an array of resource titles to be passed into the ensure_... [#152](https://github.com/puppetlabs/puppetlabs-stdlib/pull/152) ([AlexCline](https://github.com/AlexCline)) - Add a dirname function [#150](https://github.com/puppetlabs/puppetlabs-stdlib/pull/150) ([raphink](https://github.com/raphink)) ## [4.0.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.0.2) - 2013-04-12 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.0.1...4.0.2) ### Added - adds compatibility matrix [#144](https://github.com/puppetlabs/puppetlabs-stdlib/pull/144) ([ghoneycutt](https://github.com/ghoneycutt)) ## [4.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.0.1) - 2013-04-11 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/4.0.0...4.0.1) ## [4.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/4.0.0) - 2013-04-11 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.2.0...4.0.0) ### Added - Add floor function implementation and unit tests [#135](https://github.com/puppetlabs/puppetlabs-stdlib/pull/135) ([willaerk](https://github.com/willaerk)) - (#19272) Add has_element() function [#130](https://github.com/puppetlabs/puppetlabs-stdlib/pull/130) ([jhoblitt](https://github.com/jhoblitt)) - Add validate_augeas command [#114](https://github.com/puppetlabs/puppetlabs-stdlib/pull/114) ([raphink](https://github.com/raphink)) ### Fixed - (19864) num2bool match fix [#139](https://github.com/puppetlabs/puppetlabs-stdlib/pull/139) ([hakamadare](https://github.com/hakamadare)) - (maint) Fix getparam() spec failure on MRI 1.8 [#125](https://github.com/puppetlabs/puppetlabs-stdlib/pull/125) ([jeffmccune](https://github.com/jeffmccune)) - Fix typo in travis configuration [#122](https://github.com/puppetlabs/puppetlabs-stdlib/pull/122) ([jeffmccune](https://github.com/jeffmccune)) - maint: style guideline fixes [#112](https://github.com/puppetlabs/puppetlabs-stdlib/pull/112) ([dalen](https://github.com/dalen)) ## [3.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.2.0) - 2012-11-28 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.6.0...3.2.0) ## [2.6.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.6.0) - 2012-11-28 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.1.1...2.6.0) ## [3.1.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.1.1) - 2012-10-25 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.5.1...3.1.1) ### Fixed - (maint) Fix spec failures resulting from Facter API changes between 1.x and 2.x [#100](https://github.com/puppetlabs/puppetlabs-stdlib/pull/100) ([jeffmccune](https://github.com/jeffmccune)) ## [2.5.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.5.1) - 2012-10-25 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.1.0...2.5.1) ## [3.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.1.0) - 2012-10-25 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.5.0...3.1.0) ## [2.5.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.5.0) - 2012-10-25 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.0.1...2.5.0) ### Added - Add pe facts to stdlib [#99](https://github.com/puppetlabs/puppetlabs-stdlib/pull/99) ([haus](https://github.com/haus)) ## [3.0.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.0.1) - 2012-10-11 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/3.0.0...3.0.1) ### Fixed - (Maint) Fix mis-use of rvalue functions as statements [#91](https://github.com/puppetlabs/puppetlabs-stdlib/pull/91) ([jeffmccune](https://github.com/jeffmccune)) - Revert "Merge branch 'hkenney-ticket/master/2157_remove_facts_dot_d'" [#89](https://github.com/puppetlabs/puppetlabs-stdlib/pull/89) ([jeffmccune](https://github.com/jeffmccune)) ## [3.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/3.0.0) - 2012-08-16 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.4.0...3.0.0) ### Added - Add function ensure_resource and defined_with_params [#86](https://github.com/puppetlabs/puppetlabs-stdlib/pull/86) ([bodepd](https://github.com/bodepd)) ### Fixed - Ensure resource attempt 2 [#87](https://github.com/puppetlabs/puppetlabs-stdlib/pull/87) ([bodepd](https://github.com/bodepd)) ## [2.4.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.4.0) - 2012-08-14 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.3...2.4.0) ### Added - Add support for a 'match' parameter to file_line [#75](https://github.com/puppetlabs/puppetlabs-stdlib/pull/75) ([cprice404](https://github.com/cprice404)) ### Fixed - Fix up 2.3.x for new scope [#80](https://github.com/puppetlabs/puppetlabs-stdlib/pull/80) ([jeffmccune](https://github.com/jeffmccune)) - (#2157) Make facts_dot_d compatible with external facts [#77](https://github.com/puppetlabs/puppetlabs-stdlib/pull/77) ([HAIL9000](https://github.com/HAIL9000)) ## [2.3.3](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.3) - 2012-05-23 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.2...2.3.3) ### Fixed - fix regression in #11017 properly [#70](https://github.com/puppetlabs/puppetlabs-stdlib/pull/70) ([duritong](https://github.com/duritong)) ## [2.3.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.2) - 2012-05-10 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.1.3...2.3.2) ### Fixed - Make file_line default to ensure => present [#69](https://github.com/puppetlabs/puppetlabs-stdlib/pull/69) ([jeffmccune](https://github.com/jeffmccune)) ## [2.1.3](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.1.3) - 2012-03-29 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.1...2.1.3) ## [2.3.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.1) - 2012-03-13 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/2.3.0...2.3.1) ### Fixed - (#13091) Fix LoadError exception with puppet apply [#50](https://github.com/puppetlabs/puppetlabs-stdlib/pull/50) ([jeffmccune](https://github.com/jeffmccune)) ## [2.3.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/2.3.0) - 2012-03-12 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.2.1...2.3.0) ### Added - (#12357) Add ability to display an error message from validate_re [#47](https://github.com/puppetlabs/puppetlabs-stdlib/pull/47) ([jeffmccune](https://github.com/jeffmccune)) - (#12357) Add validate_absolute_path() function [#46](https://github.com/puppetlabs/puppetlabs-stdlib/pull/46) ([jeffmccune](https://github.com/jeffmccune)) - (#12776) Added validate_slength function and rspec test [#37](https://github.com/puppetlabs/puppetlabs-stdlib/pull/37) ([fiddyspence](https://github.com/fiddyspence)) - implement #11017 - make file_line type ensurable [#36](https://github.com/puppetlabs/puppetlabs-stdlib/pull/36) ([duritong](https://github.com/duritong)) - New str2saltedsha512 function for OS X Passwords [#27](https://github.com/puppetlabs/puppetlabs-stdlib/pull/27) ([glarizza](https://github.com/glarizza)) - (#11607) Add Rakefile to enable spec testing [#26](https://github.com/puppetlabs/puppetlabs-stdlib/pull/26) ([jeffmccune](https://github.com/jeffmccune)) ### Fixed - (#12357) Fix broken compatibility with Puppet 2.6 [#49](https://github.com/puppetlabs/puppetlabs-stdlib/pull/49) ([jeffmccune](https://github.com/jeffmccune)) - (#12357) Fix root_home fact on Windows [#45](https://github.com/puppetlabs/puppetlabs-stdlib/pull/45) ([jeffmccune](https://github.com/jeffmccune)) - (#12357) Make facter_dot_d look in Puppet[:confdir]/facts.d [#44](https://github.com/puppetlabs/puppetlabs-stdlib/pull/44) ([jeffmccune](https://github.com/jeffmccune)) - (#11873) time function spec failure on Fixnum matcher [#28](https://github.com/puppetlabs/puppetlabs-stdlib/pull/28) ([kbarber](https://github.com/kbarber)) ## [v2.2.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.2.1) - 2011-12-30 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.1.2...v2.2.1) ## [v2.1.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.1.2) - 2011-12-30 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.2.0...v2.1.2) ### Added - (#10802) add new function get_module_path [#25](https://github.com/puppetlabs/puppetlabs-stdlib/pull/25) ([bodepd](https://github.com/bodepd)) ## [v2.2.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.2.0) - 2011-11-08 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.1.1...v2.2.0) ### Added - (#9859) Add root_home fact and tests [#17](https://github.com/puppetlabs/puppetlabs-stdlib/pull/17) ([jeffmccune](https://github.com/jeffmccune)) - (#8925) Added new function called 'get_certificate' for retrieving [#13](https://github.com/puppetlabs/puppetlabs-stdlib/pull/13) ([kbarber](https://github.com/kbarber)) ### Fixed - (#10285) Refactor json to use pson instead. [#19](https://github.com/puppetlabs/puppetlabs-stdlib/pull/19) ([nanliu](https://github.com/nanliu)) ## [v2.1.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.1.1) - 2011-08-18 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.1.0...v2.1.1) ## [v2.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.1.0) - 2011-08-17 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v2.0.0...v2.1.0) ### Added - (#9080) Add facts from /etc/puppetlabs/facts.d [#14](https://github.com/puppetlabs/puppetlabs-stdlib/pull/14) ([jeffmccune](https://github.com/jeffmccune)) ## [v2.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v2.0.0) - 2011-08-08 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v1.1.0...v2.0.0) ## [v1.1.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v1.1.0) - 2011-08-04 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v1.0.0...v1.1.0) ## [v1.0.0](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v1.0.0) - 2011-08-04 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/v0.1.7...v1.0.0) ## [v0.1.7](https://github.com/puppetlabs/puppetlabs-stdlib/tree/v0.1.7) - 2011-06-21 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.6...v0.1.7) ## [0.1.6](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.6) - 2011-06-15 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.5...0.1.6) ## [0.1.5](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.5) - 2011-06-03 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.4...0.1.5) ## [0.1.4](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.4) - 2011-05-26 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.3...0.1.4) ## [0.1.3](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.3) - 2011-05-25 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.2...0.1.3) ## [0.1.2](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.2) - 2011-05-24 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/0.1.1...0.1.2) ## [0.1.1](https://github.com/puppetlabs/puppetlabs-stdlib/tree/0.1.1) - 2011-05-24 [Full Changelog](https://github.com/puppetlabs/puppetlabs-stdlib/compare/b305bbeac7a0560a271f34026f936b88b88da477...0.1.1) puppetlabs-stdlib-9.4.1/CODEOWNERS0100644000175100001770000000022714523206606013547 0ustar00# Setting ownership to the modules team # include Trusted Contributors * @puppetlabs/modules @alexjfisher @b4ldr @bastelfreak @ekohl @smortex @seanmil puppetlabs-stdlib-9.4.1/CONTRIBUTING.md0100644000175100001770000000032314523206606014402 0ustar00# Contributing to Puppet modules Check out our [Contributing to Supported Modules Blog Post](https://puppetlabs.github.io/iac/docs/contributing_to_a_module.html) to find all the information that you will need. puppetlabs-stdlib-9.4.1/HISTORY.md0100644000175100001770000012753614523206606013654 0ustar00## 5.0.0 ### 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::*`. **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.** #### Fixed - Docs URLs corrected. - Docs clarified that `Stdlib::Unixpath` only matches absolute paths. - `dirname()` now fails when passed an empty string. - `basename()` documentation clarified. - Corrected documentation of `count()` wrt matches and empty string. - Corrected example in `getparam()` and added note about equivalent in puppet. - Fixed URL to use 'latest' instead of '5.5' for `Hash.new` function. #### Added - Support added for symbolic file nodes. - `loadjson()` and `loadyml()` now compatible with HTTPS files. - `loadjson()` and `loadyml()` now compatible with HTTP basic auth files. - `any2array` now returns and empty array when given an empty string. - Support has now been added for Ubuntu 18.04. - `seeded_rand_string()` function has been added. #### Changed - PDK update `1.5.0` has been applied. - `size()` function deprecated for Puppet 6 and above. - `wrt` functions moved to Puppet as of Puppet 6. - `sprintf_hash` has had notification put in place to show that as of Puppet 4.10.10 it's functionality is supported by the puppet core. - Added note that `abs()` is in puppet since 6.0.0. - Added information to `base64` function about Binary data type. - Added note to `camelcase()` that function is now in puppet. - Added note to `capitalize()` that function is now in puppet. - Added note to `ceiling()` that function is now in puppet. - Added note to `chomp()` that function is now in puppet. - Added note to `chop()` that function is now in puppet. - Added note how to do equivalence of `clamp()` function in puppet 6. - Added note that `concat()` can be done with + since puppet 4.0.0. - Added note to `convert_base()` how to do this with puppet core. - Added equivalent puppet core way of doing `count()`. - Added docs for equivalent puppet language for `delete_regexp()`. - Added docs for equivalent language constructs for `delete_at()`. - Added puppet 4 equivalent for `delete_undef()` function. - Added equivalent puppet language for `delete_values()`. - Updated `delete()` function with docs about equivalent language. - Added docs that - between arrays is the same as `difference()`. - Added note to `downcase()` that function is now in puppet. - Added note to `empty()` that function is now in puppet. - Added note to `flatten()` that function is now in puppet. - Added note to `floor()` that function is now in puppet. - Added note to `get_module_path()` that puppet has similar function. - Amended documentation for `getvar()`. - Add note to `grep()` that `filter()` in puppet does the same. - Updated `has_key()` with equivalent puppet lang expresion. - Updated the `hash()` function to show equivalent expression. - Added note about more formatting options with `String()` in puppet. - Added note to `join()` that it is in puppet since 5.4.0. - Added note to `keys()` that it is in puppet since 5.4.0. - Added note to `lstrip()`, `rstrip()`, `strip()` and `upcase()` that they are in puppet since 6.0.0. - Updated `member()` with equivalent language expression example. - Updated `merge()` with puppt language equivalent example. - Updated `min()` and `max()` with note that they are in puppet. - Updated `num2bool()` with information that Boolean can convert. - Updated `prefix()` function with equivalent operation in puppet. - Updated `range()` with information that Integer can be used. - Updated `reject()` with equivalent filter() call. - Added note to `reverse()` that the `reverse_each()` Puppet function does the same as it. - Added note to `round()` that it has moved to puppet in 6.0.0. - Added note to `size()` that `length()` is in puppet since 5.4.0. - Added note to `sort()` that is has moved to Puppet in 6.0.0. - Updated `str2bool()` with a note that Boolean can handle conversion. - Added note to `strftime()` that it moved to puppet in 4.8.0. - Added note to `suffix()` that the same can be done with `map()`. - Updated `time()` to mention Timespan and Timestamp data types. - Added note to `values_at()` for equivalent slice operation in language. - Added note to `values()` that it moved to puppet in 5.5.0. - Corrected docs for `keys()` - in puppet since 5.5.0. - Added note to `length()` that function moved to puppet. - Updated README.md with deprecations for functions moved to puppet. - Updated documentation of `values_at()`. - Updated README with note from `time()` about data types for time. - Updated README for `strintf_hash()` (supported by builtin sprintf). - Updated README with deprecation of `hash()` function (use data type). - Updated README `suffix` with equiv example for `map`. - Updated README with `reject` equivalent call to `filter`. - Updated README with `range` equiv use of type system + `each`. - Updated README with `prefix` equiv func using `map`. - Updated README for `num2bool` with info about Boolean type. - Updated README `str2bool` with information about `Boolean` equivalent. - Updated README `merge` with info about `+` operator equivalent. - Updated README `member` with equivalent alternative in language. - Updated README `join_keys_to_values` with link to String.new. - Updated README `has_key` shows deprecation in favor of `in`. - Updated README `grep` adds information about `filter`. - Updated README and `getvar.rb` as getvar has moved to puppet. - Updated README for `getparam` to be the same as in function. - Updated README `get_module_path` with info about built in variant. - Updated README `difference` to mention `-` operator equiv. - Updated README `delete` with built-in alternatives. - Updated README `delete_values` with builtin equiv. - Updated README `delete_undef` & `delete_regexp` with builtin equiv. - Updated README `delete_at` with equivalent built-in examples. - Updated README `coun`t to show built-in equiv. - Updated README `convert_base` with built-in equiv. - Updated README `concat` with built-in equiv using + and <<. - Updated README `base_64` with built-in equiv using Binary type. - Skipped tests for `abs` if puppet version < 6.0.0. - Skipped tests for `min` and `max` if puppet version < 6.0.0. - Skipped tests for `floor` if puppet version < 6.0.0. - Skipped tests for `ceiling` if puppet version < 6.0.0. - Skipped tests for `round` if puppet version < 6.0.0. - Skipped tests for `upcase` if puppet version < 6.0.0. - Skipped tests for `downcase` if puppet version < 6.0.0. - Skipped tests for `capitalize` if puppet version < 6.0.0. - Skipped tests for `camelcase` if puppet version < 6.0.0. - Skipped tests for strip functions if puppet version < 6.0.0. - Skipped tests for `chop` and `chomp` if puppet version < 6.0.0. - Skipped tests for `sort` if puppet version < 6.0.0. - Removed extra space in `describe` for `abs` test. - Updated README and `any2array` with built-in equiv Array.new. - Updated README and `any2bool` with built-in equiv Boolean.new. - Updated README and `bool2num` with built-in equiv Numeric.new. - Updated README and `bool2str` with built-in equiv String.new. - Corrected equivalent example for `count`. - Updated README and made mention of `filter` in `delete` a link. - Updated docs and tests for `strftime`. - Updated all acceptance test using Puppet.version. - Change 'puppet' to 'Puppet' in function doc strings. - HTTP type checks are now case insensitive. #### Removed - Support has been removed for `Scientific 5` and `Debian 7` operating systems. - `Stdlib::(Ipv4|IPv6|Ip_address)` have been removed. ## Supported Release 4.25.1 ### Summary This is a patch which includes a roll up of small fixes. In Puppet 5.5.0 `flatten()`, `length(),` `empty(),` `join(),` `keys(),` and `values()` are now built into Puppet. Please note that the Puppet implementation of the functions will take precedence over the functions in 'puppetlabs-stdlib'. #### Fixed - Remove unneeded execute permission from test files. - Puppet 5.5.0 function deprecation [MODULES-6894](https://tickets.puppetlabs.com/browse/MODULES-6894). ## Supported Release 4.25.0 ### Summary This is quite a feature heavy release, it makes this module PDK-compliant for easier maintenance and includes a roll up of maintenance changes. #### Added - PDK conversion [MODULES-6332](https://tickets.puppetlabs.com/browse/MODULES-6332). - Update `join_keys_to_values` with an undef statement. - Type alias `Stdlib::Fqdn` matches paths on a fully qualified domain name. - Type alias `Stdlib::Host` matches a valid host, this can be a valid 'ipv4', 'ipv6' or 'fqdn'. - Type alias `Stdlib::Port` matches a valid TCP/UDP Port number. - Type alias `Stdlib::Filesource` matches paths valid values for the source parameter of the puppet file type. - Type alias `Stdlib::IP::Address` matches any IP address, including both IPv4 and IPv6 addresses, - Type alias `Stdlib::IP::Address::V4` matches any string consisting of a valid IPv4 address, this is extended by 'CIDR' and 'nosubnet'. - Type alias `Stdlib::IP::Address::V6` matches any string consisting of a valid IPv6 address, this is extended by 'Full', 'Alternate' and 'Compressed'. - Type alias `Stdlib::IP::Address::V6::Nosubnet`matches any string consisting of a valid IPv6 address with no subnet, this is extended by 'Full', 'Alternate' and 'Compressed'. - Type alias `Stdlib::Port` matches a valid TCP/UDP Port number this is then extended to 'Privileged' which are ports less than 1024 and 'Unprivileged' which are ports greater than 1024. ## Supported Release 4.24.0 ### Summary This release includes a roll up of minor changes and a new feature which provides the ability to skip undef values `to_json_pretty()`. We have also reverted a change that was previously made and resulted in breaking compatibility with Ruby 1.8.7. #### Added - Ability to skip undef values in `to_json_pretty()`. - Fix type3x function in stdlib ([MODULES-6216](https://tickets.puppet.com/browse/MODULES-6216)) #### Changed - Indentation for `sync.yml` was fixed. - Updated type alias tests and dropped superfluous wrapper classes - Revert to old ruby 1.X style of hash ([MODULES-6139](https://tickets.puppet.com/browse/MODULES-6139)) - `rubocop.yml` not managed by msync ([MODULES-6201](https://tickets.puppet.com/browse/MODULES-6201)) ## Supported Release 4.23.0 ### Summary This release is in order to implement Rubocop changes throughout the module. #### Added - Standard and translated readme's have been updated. - Rubocop has been implemented in the module and a wide variety of changes have been made to the code. - Modulesync changes have been merged into the code. #### Fixed - Minor fix to the readme. ## Supported Release 4.22.0 ### Summary This is a clean release in preparation of putting the module through the rubocop process. #### Added - Support has been added for Debian 9 - 'Stdlib::Mode type' has been added to the module. - A type for 'ensure' has been added to the service resources. - A new function 'sprintf_hash' has been added to allow the use of named references. #### Removed - Support has been removed for: RedHat 4, CentOS 4, OracleLinux 4, Scientific 4, SLES 10 SP4, Windows Server 2003, Windows Server 2003 R2 and Windows 8. #### Fixed - The 'ruby_spec.rb' test file has been altered s that it properly checks results. - Example syntax in 'file_line.rb' has been fixed. ## Supported Release 4.21.0 ### Summary This is a small feature release that includes a revamped, albeit backwards-compatible file_line type. #### Added - `replace_all_matches_not_matching_line` parameter in file_line - additional tests and documentation for file_line #### Removed - duplicate spec test for absolute_path #### Fixed - Unixpath type to allow "/" as valid path - file_line behavior that caused infinite appending of `line` to a file ([MODULES-5651](https://tickets.puppet.com/browse/MODULES-5651)) ## Supported Release 4.20.0 ### Summary This release adds new functions and updated README translations. #### Added - `to_json`, `to_json_pretty`, and `to_yaml` functions - new Japanese README translations #### Fixed - compatibility issue with older versions of Puppet and the `pw_hash` function ([MODULES-5546](https://tickets.puppet.com/browse/MODULES-5546)) #### Removed - support for EOL platform Debian 6 (Squeeze) ## Supported Release 4.19.0 ### Summary This release adds new functions and better documentation/fixes for existing functions with a noteworthy fix for file_line. #### Added - Add validate_domain_name function - Add the round function - Add type for MAC address - Add support for sensitive data type to pw_hash ([MODULES-4908](https://tickets.puppet.com/browse/MODULES-4908)) - Add new function, fact() (FACT-932) #### Fixed - Fixes for the file_line provider ([MODULES-5003](https://tickets.puppet.com/browse/MODULES-5003)) - Add documentation for email functions ([MODULES-5382](https://tickets.puppet.com/browse/MODULES-5382)) - unique function is deprecated for puppet version > 5. (FM-6239) - Fix headers in CHANGELOG.md so that headers render correctly - ensure_packages, converge ensure values 'present' and 'installed' #### Changed - Removes listed support for EOL Ubuntu versions ## Supported Release 4.18.0 ### Summary Small release that reverts the Puppet version requirement lower bound to again include Puppet 2.7+ and bumps the upper bound to now include Puppet 5. #### Fixed - Reverts lower bound of Puppet requirement to 2.7.20 ## Supported Release 4.17.1 ### Summary Small release to address a bug (PUP-7650). Also pushes the Puppet version compatibility to 4.7.0. #### Bugfixes - (MODULES-5095) Workaround for PUP-7650 - (FM-6197) Formatting fixes for file_line resource ## Supported Release 4.17.0 ### Summary This release adds support for internationalization. It also contains Japanese translations for the README, summary and description of the metadata.json and major cleanups in the README. Additional folders have been introduced called locales and readmes where translation files can be found. A number of features and bug fixes are also included in this release. It also adds a new function `glob()` for expanding file lists. Also works around an issue that appeared in puppet 4.6.0 involving types being declared multiple times. #### Features - Addition of POT file / folder structure for i18n. - Addition of Internationalized READMEs. - `glob()` function ### Fixed - Occasional duplicate type definitions when using `defined_with_params()` - `file_line` encoding issue on ruby 1.8 (unsupported) - Huge readme refresh ## Supported Release 4.16.0 ### Summary This release sees a massive update to all unit tests to test UTF8 characters. There are also multiple cleanups in preparation for internationalization. Alongside this, improvements to ipv6 support, a new length function compatible with Puppet 4, and an update to path types. Also contains multiple bug fixes around functionality and tests. #### Features - Addition of coverage in all unit tests for functions, data and resource types for UTF8 for i18n. - All strings within the readme and functions that are split over two lines have been combined in preparation for i18n parser/decorator. - Improvement on the ipv6 support for type - Improves regex to catch some valid (but lesser known) ipv6 strings, mostly those which are a mix of ipv6 strings and embedded ipv6 numbers. - Adds a new parameter `encoding` to allow non UTF-8 files to specify a file encoding. This prevents receiving the error message "invalid byte sequence in UTF-8" when special characters that are not UTF-8 encoded appear in the input stream, such as the copyright symbol. - Addition of the new length function. Returns the length of a given string, array or hash. To eventually replace the deprecated size() function as can handle the new type functionality introduced in Puppet 4. - Permit double slash in absolute/Unix path types. #### Bugfixes - Fix unsupported data type error with rspec-puppet server. - Now allows test module metadata.json to be read by Puppet. - Fix acceptance test failure "Hiera is not a class". - Removal of unsupported platforms and future parser setting in acceptance tests. - Regex for tuple checking has been loosened. - Ensure_packages function - Now only tries to apply the resource if not defined. - (MODULES-4528) Use versioncmp to check Puppet version for 4.10.x compat. - Adds comments to warn for UTF8 incompatibility of the functions that may not be compatible with UTF8 with Ruby < 2.4.0. ## Supported Release 4.15.0 ### Summary This release introduces multiple new functions, a new fact and the addition of Ubuntu Xenial support. Also includes a bugfix and documentation update. #### Features - Addition of puppet_server fact to return agents server. - Addition of a pry function. - Addition of tests for ensure_resources. - Addition of FQDN UUID generation function. - Addition of Ubuntu Xenial to OS Support. #### Bugfixes - Ensure_packages now works with Ruby < 2.0. - Updated the documentation of str2bool function. ## Supported Release 4.14.0 ### Summary Adds several new features and updates, especially around refining the deprecation and validate_legacy functions. Also includes a Gemfile update around an issue with parallel_tests dependancy for different versions of Ruby. #### Features - Deprecation function now uses puppet stacktrace if available. - join_key_to_values function now handles array values. If values are arrays, multiple keys are added for each element. - Updated Gemfile to deal with parallel_tests Ruby dependancy (MODULES-3983). - Updated/Fixed ipv4 regex validator (MODULES-3980). - Deprecation clarification added to README. #### Bugfixes - README typo fixes. - Use .dup to duplicate classes for modification (MODULES-3829). - Fixes spec failures that were caused by a change in the tested error message in validate_legacy_spec. - Broken link to validate_legacy docs fixed. - Updates deprecation tests to include future parser. ## Supported Release 4.13.1 ### Summary This bugfix release addresses the `undefined method 'optional_repeated_param'` error messages seen by users of puppet 3.7. It also improves the user experience around function deprecations by emitting one warning per function(-name) instead of only one deprecation overall. This allows users to identify all deprecated functions used in one agent run, with less back-and-forth. #### Bugfixes * Emit deprecations warnings for each function, instead of once per process. (MODULES-3961) * Use a universally available API for the v4 deprecation stubs of `is_*` and `validate_*`. (MODULES-3962) * Make `getvar()` compatible to ruby 1.8.7. (MODULES-3969) * Add v4 deprecation stubs for the `is_` counterparts of the deprecated functions to emit the deprecations warnings in all cases. ## Supported Release 4.13.0 ### Summary This version of stdlib deprecates a whole host of functions, and provides stepping stones to move to Puppet 4 type validations. Be sure to check out the new `deprecation()` and `validate_legacy()` functions to migrate off the deprecated v3-style data validations. Many thanks to all community contributors: bob, Dmitry Ilyin, Dominic Cleal, Joris, Joseph Yaworski, Loic Antoine-Gombeaud, Maksym Melnychok, Michiel Brandenburg, Nate Potter, Romain Tartière, Stephen Benjamin, and Steve Moore, as well as anyone contributing in the code review process and by submitting issues. Special thanks to [Voxpupuli's](https://voxpupuli.org/) Igor Galić for donating the puppet-tea types to kickstart this part of stdlib. #### Deprecations * `validate_absolute_path`, `validate_array`, `validate_bool`, `validate_hash`, `validate_integer`, `validate_ip_address`, `validate_ipv4_address`, `validate_ipv6_address`, `validate_numeric`, `validate_re`, `validate_slength`, `validate_string`, and their `is_` counter parts are now deprecated on Puppet 4. See the `validate_legacy()` description in the README for help on migrating away from those functions. * The `dig` function is provided by core puppet since 4.5.0 with slightly different calling convention. The stdlib version can still be accessed as `dig44` for now. #### Features * Add Puppet 4 data types for Unix, and Windows paths, and URLs. * Add `deprecation` function to warn users of functionality that will be removed soon. * Add `validate_legacy` function to help with migrating to Puppet 4 data types. * Add `any2bool` function, a combination of of `string2bool` and `num2bool`. * Add `delete_regex` function to delete array elements matching a regular expression. * Add `puppet_environmentpath` fact to expose the `environmentpath` setting. * Add `regexpescape` function to safely insert arbitrary strings into regular expressions. * Add `shell_escape`, `shell_join`, and `shell_split` functions for safer working with shell scripts.. * The `delete` function now also accepts regular expressions as search term. * The `loadyaml` function now accepts a default value, which is returned when there is an error loading the file. #### Bugfixes * Fix `file_line.match_for_absence` implementation and description to actually work. (MODULES-3590) * Fix `getparam` so that it can now also return `false`. (MODULES-3933) * Fix the fixture setup for testing and adjust `load_module_metadata` and `loadjson` tests. * Fix `defined_with_params` to handle `undef` correctly on all puppet versions. (PUP-6422, MODULES-3543) * Fix `file_line.path` validation to use puppet's built in `absolute_path?` matcher. #### Minor Improvements * README changes: improved descriptions of `deep_merge`, `delete`, `ensure_packages`, `file_line.after`, `range`, and `validate_numeric`. * The `getvar` function now returns nil in all situations where the variable is not found. * Update the `dig44` function with better `undef`, `nil`, and `false` handling. * Better wording on `str2bool` argument validation error message. ### Known issues * The `validate_legacy` function relies on internal APIs from Puppet 4.4.0 (PE 2016.1) onwards, and doesn't work on earlier versions. * Puppet 4.5.0 (PE 2016.2) has a number of improvements around data types - especially error handling - that make working with them much nicer. ## Supported Release 4.12.0 ### Summary This release provides several new functions, bugfixes, modulesync changes, and some documentation updates. #### Features - Adds `clamp`. This function keeps values within a specified range. - Adds `validate_x509_rsa_key_pair`. This function validates an x509 RSA certificate and key pair. - Adds `dig`. This function performs a deep lookup in nested hashes or arrays. - Extends the `base64` support to fit `rfc2045` and `rfc4648`. - Adds `is_ipv6_address` and `is_ipv4_address`. These functions validate the specified ipv4 or ipv6 addresses. - Adds `enclose_ipv6`. This function encloses IPv6 addresses in square brackets. - Adds `ensure_resources`. This function takes a list of resources and creates them if they do not exist. - Extends `suffix` to support applying a suffix to keys in a hash. - Apply modulesync changes. - Add validate_email_address function. #### Bugfixes - Fixes `fqdn_rand_string` tests, since Puppet 4.4.0 and later have a higher `fqdn_rand` ceiling. - (MODULES-3152) Adds a check to `package_provider` to prevent failures if Gem is not installed. - Fixes to README.md. - Fixes catch StandardError rather than the gratuitous Exception - Fixes file_line attribute validation. - Fixes concat with Hash arguments. ## Supported Release 4.11.0 ### Summary Provides a validate_absolute_paths and Debian 8 support. There is a fix to the is_package_provider fact and a test improvement. #### Features - Adds new parser called is_absolute_path - Supports Debian 8 #### Bugfixes - Allow package_provider fact to resolve on PE 3.x #### Improvements - ensures that the test passes independently of changes to rubygems for ensure_resource ## 2015-12-15 - Supported Release 4.10.0 ### Summary Includes the addition of several new functions and considerable improvements to the existing functions, tests and documentation. Includes some bug fixes which includes compatibility, test and fact issues. #### Features - Adds service_provider fact - Adds is_a() function - Adds package_provider fact - Adds validate_ip_address function - Adds seeded_rand function #### Bugfixes - Fix backwards compatibility from an improvement to the parseyaml function - Renaming of load_module_metadata test to include \_spec.rb - Fix root_home fact on AIX 5.x, now '-c' rather than '-C' - Fixed Gemfile to work with ruby 1.8.7 #### Improvements - (MODULES-2462) Improvement of parseyaml function - Improvement of str2bool function - Improvement to readme - Improvement of intersection function - Improvement of validate_re function - Improved speed on Facter resolution of service_provider - empty function now handles numeric values - Package_provider now prevents deprecation warning about the allow_virtual parameter - load_module_metadata now succeeds on empty file - Check added to ensure puppetversion value is not nil - Improvement to bool2str to return a string of choice using boolean - Improvement to naming convention in validate_ipv4_address function ## Supported Release 4.9.1 ### Summary Small release for support of newer PE versions. This increments the version of PE in the metadata.json file. ## 2015-09-08 - Supported Release 4.9.0 ### Summary This release adds new features including the new functions dos2unix, unix2dos, try_get_value, convert_base as well as other features and improvements. #### Features - (MODULES-2370) allow `match` parameter to influence `ensure => absent` behavior - (MODULES-2410) Add new functions dos2unix and unix2dos - (MODULE-2456) Modify union to accept more than two arrays - Adds a convert_base function, which can convert numbers between bases - Add a new function "try_get_value" #### Bugfixes - n/a #### Improvements - (MODULES-2478) Support root_home fact on AIX through "lsuser" command - Acceptance test improvements - Unit test improvements - Readme improvements ## 2015-08-10 - Supported Release 4.8.0 ### Summary This release adds a function for reading metadata.json from any module, and expands file\_line's abilities. #### Features - New parameter `replace` on `file_line` - New function `load_module_metadata()` to load metadata.json and return the content as a hash. - Added hash support to `size()` #### Bugfixes - Fix various docs typos - Fix `file_line` resource on puppet < 3.3 ## 2015-06-22 - Supported Release 4.7.0 ### Summary Adds Solaris 12 support along with improved Puppet 4 support. There are significant test improvements, and some minor fixes. #### Features - Add support for Solaris 12 #### Bugfixes - Fix for AIO Puppet 4 - Fix time for ruby 1.8.7 - Specify rspec-puppet version - range() fix for typeerror and missing functionality - Fix pw_hash() on JRuby < 1.7.17 - fqdn_rand_string: fix argument error message - catch and rescue from looking up non-existent facts - Use puppet_install_helper, for Puppet 4 #### Improvements - Enforce support for Puppet 4 testing - fqdn_rotate/fqdn_rand_string acceptance tests and implementation - Simplify mac address regex - validate_integer, validate_numeric: explicitely reject hashes in arrays - Readme edits - Remove all the pops stuff for rspec-puppet - Sync via modulesync - Add validate_slength optional 3rd arg - Move tests directory to examples directory ## 2015-04-14 - Supported Release 4.6.0 ### Summary Adds functions and function argument abilities, and improves compatibility with the new puppet parser #### Features - MODULES-444: `concat()` can now take more than two arrays - `basename()` added to have Ruby File.basename functionality - `delete()` can now take an array of items to remove - `prefix()` can now take a hash - `upcase()` can now take a hash or array of upcaseable things - `validate_absolute_path()` can now take an array - `validate_cmd()` can now use % in the command to embed the validation file argument in the string - MODULES-1473: deprecate `type()` function in favor of `type3x()` - MODULES-1473: Add `type_of()` to give better type information on future parser - Deprecate `private()` for `assert_private()` due to future parser - Adds `ceiling()` to take the ceiling of a number - Adds `fqdn_rand_string()` to generate random string based on fqdn - Adds `pw_hash()` to generate password hashes - Adds `validate_integer()` - Adds `validate_numeric()` (like `validate_integer()` but also accepts floats) #### Bugfixes - Fix seeding of `fqdn_rotate()` - `ensure_resource()` is more verbose on debug mode - Stricter argument checking for `dirname()` - Fix `is_domain_name()` to better match RFC - Fix `uriescape()` when called with array - Fix `file_line` resource when using the `after` attribute with `match` ## 2015-01-14 - Supported Release 4.5.1 ### Summary This release changes the temporary facter_dot_d cache locations outside of the /tmp directory due to a possible security vunerability. CVE-2015-1029 #### Bugfixes - Facter_dot_d cache will now be stored in puppet libdir instead of tmp ## 2014-12-15 - Supported Release 4.5.0 ### Summary This release improves functionality of the member function and adds improved future parser support. #### Features - MODULES-1329: Update member() to allow the variable to be an array. - Sync .travis.yml, Gemfile, Rakefile, and CONTRIBUTING.md via modulesync #### Bugfixes - Fix range() to work with numeric ranges with the future parser - Accurately express SLES support in metadata.json (was missing 10SP4 and 12) - Don't require `line` to match the `match` parameter ## 2014-11-10 - Supported Release 4.4.0 ### Summary This release has an overhauled readme, new private manifest function, and fixes many future parser bugs. #### Features - All new shiny README - New `private()` function for making private manifests (yay!) #### Bugfixes - Code reuse in `bool2num()` and `zip()` - Fix many functions to handle `generate()` no longer returning a string on new puppets - `concat()` no longer modifies the first argument (whoops) - strict variable support for `getvar()`, `member()`, `values_at`, and `has_interface_with()` - `to_bytes()` handles PB and EB now - Fix `tempfile` ruby requirement for `validate_augeas()` and `validate_cmd()` - Fix `validate_cmd()` for windows - Correct `validate_string()` docs to reflect non-handling of `undef` - Fix `file_line` matching on older rubies ## 2014-07-15 - Supported Release 4.3.2 ### Summary This release merely updates metadata.json so the module can be uninstalled and upgraded via the puppet module command. ## 2014-07-14 - Supported Release 4.3.1 ### Summary This supported release updates the metadata.json to work around upgrade behavior of the PMT. #### Bugfixes - Synchronize metadata.json with PMT-generated metadata to pass checksums ## 2014-06-27 - Supported Release 4.3.0 ### Summary This release is the first supported release of the stdlib 4 series. It remains backwards-compatible with the stdlib 3 series. It adds two new functions, one bugfix, and many testing updates. #### Features - New `bool2str()` function - New `camelcase()` function #### Bugfixes - Fix `has_interface_with()` when interfaces fact is nil ## 2014-06-04 - Release 4.2.2 ### Summary This release adds PE3.3 support in the metadata and fixes a few tests. ## 2014-05-08 - Release - 4.2.1 ### Summary This release moves a stray symlink that can cause problems. ## 2014-05-08 - Release - 4.2.0 ### Summary This release adds many new functions and fixes, and continues to be backwards compatible with stdlib 3.x #### Features - New `base64()` function - New `deep_merge()` function - New `delete_undef_values()` function - New `delete_values()` function - New `difference()` function - New `intersection()` function - New `is_bool()` function - New `pick_default()` function - New `union()` function - New `validate_ipv4_address` function - New `validate_ipv6_address` function - Update `ensure_packages()` to take an option hash as a second parameter. - Update `range()` to take an optional third argument for range step - Update `validate_slength()` to take an optional third argument for minimum length - Update `file_line` resource to take `after` and `multiple` attributes #### Bugfixes - Correct `is_string`, `is_domain_name`, `is_array`, `is_float`, and `is_function_available` for parsing odd types such as bools and hashes. - Allow facts.d facts to contain `=` in the value - Fix `root_home` fact on darwin systems - Fix `concat()` to work with a second non-array argument - Fix `floor()` to work with integer strings - Fix `is_integer()` to return true if passed integer strings - Fix `is_numeric()` to return true if passed integer strings - Fix `merge()` to work with empty strings - Fix `pick()` to raise the correct error type - Fix `uriescape()` to use the default URI.escape list - Add/update unit & acceptance tests. ## 2014-03-04 - Supported Release - 3.2.1 ### Summary This is a supported release #### Bugfixes - Fixed `is_integer`/`is_float`/`is_numeric` for checking the value of arithmatic expressions. #### Known bugs * No known bugs --- ##### 2013-05-06 - Jeff McCune - 4.1.0 * (#20582) Restore facter\_dot\_d to stdlib for PE users (3b887c8) * (maint) Update Gemfile with GEM\_FACTER\_VERSION (f44d535) ##### 2013-05-06 - Alex Cline - 4.1.0 * Terser method of string to array conversion courtesy of ethooz. (d38bce0) ##### 2013-05-06 - Alex Cline 4.1.0 * Refactor ensure\_resource expectations (b33cc24) ##### 2013-05-06 - Alex Cline 4.1.0 * Changed str-to-array conversion and removed abbreviation. (de253db) ##### 2013-05-03 - Alex Cline 4.1.0 * (#20548) Allow an array of resource titles to be passed into the ensure\_resource function (e08734a) ##### 2013-05-02 - Raphaël Pinson - 4.1.0 * Add a dirname function (2ba9e47) ##### 2013-04-29 - Mark Smith-Guerrero - 4.1.0 * (maint) Fix a small typo in hash() description (928036a) ##### 2013-04-12 - Jeff McCune - 4.0.2 * Update user information in gemspec to make the intent of the Gem clear. ##### 2013-04-11 - Jeff McCune - 4.0.1 * Fix README function documentation (ab3e30c) ##### 2013-04-11 - Jeff McCune - 4.0.0 * stdlib 4.0 drops support with Puppet 2.7 * stdlib 4.0 preserves support with Puppet 3 ##### 2013-04-11 - Jeff McCune - 4.0.0 * Add ability to use puppet from git via bundler (9c5805f) ##### 2013-04-10 - Jeff McCune - 4.0.0 * (maint) Make stdlib usable as a Ruby GEM (e81a45e) ##### 2013-04-10 - Erik Dalén - 4.0.0 * Add a count function (f28550e) ##### 2013-03-31 - Amos Shapira - 4.0.0 * (#19998) Implement any2array (7a2fb80) ##### 2013-03-29 - Steve Huff - 4.0.0 * (19864) num2bool match fix (8d217f0) ##### 2013-03-20 - Erik Dalén - 4.0.0 * Allow comparisons of Numeric and number as String (ff5dd5d) ##### 2013-03-26 - Richard Soderberg - 4.0.0 * add suffix function to accompany the prefix function (88a93ac) ##### 2013-03-19 - Kristof Willaert - 4.0.0 * Add floor function implementation and unit tests (0527341) ##### 2012-04-03 - Eric Shamow - 4.0.0 * (#13610) Add is\_function\_available to stdlib (961dcab) ##### 2012-12-17 - Justin Lambert - 4.0.0 * str2bool should return a boolean if called with a boolean (5d5a4d4) ##### 2012-10-23 - Uwe Stuehler - 4.0.0 * Fix number of arguments check in flatten() (e80207b) ##### 2013-03-11 - Jeff McCune - 4.0.0 * Add contributing document (96e19d0) ##### 2013-03-04 - Raphaël Pinson - 4.0.0 * Add missing documentation for validate\_augeas and validate\_cmd to README.markdown (a1510a1) ##### 2013-02-14 - Joshua Hoblitt - 4.0.0 * (#19272) Add has\_element() function (95cf3fe) ##### 2013-02-07 - Raphaël Pinson - 4.0.0 * validate\_cmd(): Use Puppet::Util::Execution.execute when available (69248df) ##### 2012-12-06 - Raphaël Pinson - 4.0.0 * Add validate\_augeas function (3a97c23) ##### 2012-12-06 - Raphaël Pinson - 4.0.0 * Add validate\_cmd function (6902cc5) ##### 2013-01-14 - David Schmitt - 4.0.0 * Add geppetto project definition (b3fc0a3) ##### 2013-01-02 - Jaka Hudoklin - 4.0.0 * Add getparam function to get defined resource parameters (20e0e07) ##### 2013-01-05 - Jeff McCune - 4.0.0 * (maint) Add Travis CI Support (d082046) ##### 2012-12-04 - Jeff McCune - 4.0.0 * Clarify that stdlib 3 supports Puppet 3 (3a6085f) ##### 2012-11-30 - Erik Dalén - 4.0.0 * maint: style guideline fixes (7742e5f) ##### 2012-11-09 - James Fryman - 4.0.0 * puppet-lint cleanup (88acc52) ##### 2012-11-06 - Joe Julian - 4.0.0 * Add function, uriescape, to URI.escape strings. Redmine #17459 (fd52b8d) ##### 2012-09-18 - Chad Metcalf - 3.2.0 * Add an ensure\_packages function. (8a8c09e) ##### 2012-11-23 - Erik Dalén - 3.2.0 * (#17797) min() and max() functions (9954133) ##### 2012-05-23 - Peter Meier - 3.2.0 * (#14670) autorequire a file\_line resource's path (dfcee63) ##### 2012-11-19 - Joshua Harlan Lifton - 3.2.0 * Add join\_keys\_to\_values function (ee0f2b3) ##### 2012-11-17 - Joshua Harlan Lifton - 3.2.0 * Extend delete function for strings and hashes (7322e4d) ##### 2012-08-03 - Gary Larizza - 3.2.0 * Add the pick() function (ba6dd13) ##### 2012-03-20 - Wil Cooley - 3.2.0 * (#13974) Add predicate functions for interface facts (f819417) ##### 2012-11-06 - Joe Julian - 3.2.0 * Add function, uriescape, to URI.escape strings. Redmine #17459 (70f4a0e) ##### 2012-10-25 - Jeff McCune - 3.1.1 * (maint) Fix spec failures resulting from Facter API changes (97f836f) ##### 2012-10-23 - Matthaus Owens - 3.1.0 * Add PE facts to stdlib (cdf3b05) ##### 2012-08-16 - Jeff McCune - 3.0.1 * Fix accidental removal of facts\_dot\_d.rb in 3.0.0 release ##### 2012-08-16 - Jeff McCune - 3.0.0 * stdlib 3.0 drops support with Puppet 2.6 * stdlib 3.0 preserves support with Puppet 2.7 ##### 2012-08-07 - Dan Bode - 3.0.0 * Add function ensure\_resource and defined\_with\_params (ba789de) ##### 2012-07-10 - Hailee Kenney - 3.0.0 * (#2157) Remove facter\_dot\_d for compatibility with external facts (f92574f) ##### 2012-04-10 - Chris Price - 3.0.0 * (#13693) moving logic from local spec\_helper to puppetlabs\_spec\_helper (85f96df) ##### 2012-10-25 - Jeff McCune - 2.5.1 * (maint) Fix spec failures resulting from Facter API changes (97f836f) ##### 2012-10-23 - Matthaus Owens - 2.5.0 * Add PE facts to stdlib (cdf3b05) ##### 2012-08-15 - Dan Bode - 2.5.0 * Explicitly load functions used by ensure\_resource (9fc3063) ##### 2012-08-13 - Dan Bode - 2.5.0 * Add better docs about duplicate resource failures (97d327a) ##### 2012-08-13 - Dan Bode - 2.5.0 * Handle undef for parameter argument (4f8b133) ##### 2012-08-07 - Dan Bode - 2.5.0 * Add function ensure\_resource and defined\_with\_params (a0cb8cd) ##### 2012-08-20 - Jeff McCune - 2.5.0 * Disable tests that fail on 2.6.x due to #15912 (c81496e) ##### 2012-08-20 - Jeff McCune - 2.5.0 * (Maint) Fix mis-use of rvalue functions as statements (4492913) ##### 2012-08-20 - Jeff McCune - 2.5.0 * Add .rspec file to repo root (88789e8) ##### 2012-06-07 - Chris Price - 2.4.0 * Add support for a 'match' parameter to file\_line (a06c0d8) ##### 2012-08-07 - Erik Dalén - 2.4.0 * (#15872) Add to\_bytes function (247b69c) ##### 2012-07-19 - Jeff McCune - 2.4.0 * (Maint) use PuppetlabsSpec::PuppetInternals.scope (main) (deafe88) ##### 2012-07-10 - Hailee Kenney - 2.4.0 * (#2157) Make facts\_dot\_d compatible with external facts (5fb0ddc) ##### 2012-03-16 - Steve Traylen - 2.4.0 * (#13205) Rotate array/string randomley based on fqdn, fqdn\_rotate() (fef247b) ##### 2012-05-22 - Peter Meier - 2.3.3 * fix regression in #11017 properly (f0a62c7) ##### 2012-05-10 - Jeff McCune - 2.3.3 * Fix spec tests using the new spec\_helper (7d34333) ##### 2012-05-10 - Puppet Labs - 2.3.2 * Make file\_line default to ensure => present (1373e70) * Memoize file\_line spec instance variables (20aacc5) * Fix spec tests using the new spec\_helper (1ebfa5d) * (#13595) initialize\_everything\_for\_tests couples modules Puppet ver (3222f35) * (#13439) Fix MRI 1.9 issue with spec\_helper (15c5fd1) * (#13439) Fix test failures with Puppet 2.6.x (665610b) * (#13439) refactor spec helper for compatibility with both puppet 2.7 and server (82194ca) * (#13494) Specify the behavior of zero padded strings (61891bb) ##### 2012-03-29 Puppet Labs - 2.1.3 * (#11607) Add Rakefile to enable spec testing * (#12377) Avoid infinite loop when retrying require json ##### 2012-03-13 Puppet Labs - 2.3.1 * (#13091) Fix LoadError bug with puppet apply and puppet\_vardir fact ##### 2012-03-12 Puppet Labs - 2.3.0 * Add a large number of new Puppet functions * Backwards compatibility preserved with 2.2.x ##### 2011-12-30 Puppet Labs - 2.2.1 * Documentation only release for the Forge ##### 2011-12-30 Puppet Labs - 2.1.2 * Documentation only release for PE 2.0.x ##### 2011-11-08 Puppet Labs - 2.2.0 * #10285 - Refactor json to use pson instead. * Maint - Add watchr autotest script * Maint - Make rspec tests work with Puppet 2.6.4 * #9859 - Add root\_home fact and tests ##### 2011-08-18 Puppet Labs - 2.1.1 * Change facts.d paths to match Facter 2.0 paths. * /etc/facter/facts.d * /etc/puppetlabs/facter/facts.d ##### 2011-08-17 Puppet Labs - 2.1.0 * Add R.I. Pienaar's facts.d custom facter fact * facts defined in /etc/facts.d and /etc/puppetlabs/facts.d are automatically loaded now. ##### 2011-08-04 Puppet Labs - 2.0.0 * Rename whole\_line to file\_line * This is an API change and as such motivating a 2.0.0 release according to semver.org. ##### 2011-08-04 Puppet Labs - 1.1.0 * Rename append\_line to whole\_line * This is an API change and as such motivating a 1.1.0 release. ##### 2011-08-04 Puppet Labs - 1.0.0 * Initial stable release * Add validate\_array and validate\_string functions * Make merge() function work with Ruby 1.8.5 * Add hash merging function * Add has\_key function * Add loadyaml() function * Add append\_line native ##### 2011-06-21 Jeff McCune - 0.1.7 * Add validate\_hash() and getvar() functions ##### 2011-06-15 Jeff McCune - 0.1.6 * Add anchor resource type to provide containment for composite classes ##### 2011-06-03 Jeff McCune - 0.1.5 * Add validate\_bool() function to stdlib ##### 0.1.4 2011-05-26 Jeff McCune * Move most stages after main ##### 0.1.3 2011-05-25 Jeff McCune * Add validate\_re() function ##### 0.1.2 2011-05-24 Jeff McCune * Update to add annotated tag ##### 0.1.1 2011-05-24 Jeff McCune * Add stdlib::stages class with a standard set of stages puppetlabs-stdlib-9.4.1/LICENSE0100644000175100001770000002613614523206606013170 0ustar00 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. puppetlabs-stdlib-9.4.1/NOTICE0100644000175100001770000000127714523206606013066 0ustar00stdlib puppet module Copyright (C) 2011-2016 Puppet Labs, Inc. and some parts: Copyright (C) 2011 Krzysztof Wilczynski Puppet Labs can be contacted at: info@puppetlabs.com Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. puppetlabs-stdlib-9.4.1/README.md0100644000175100001770000003641414523206606013442 0ustar00# stdlib #### Table of Contents 1. [Overview](#overview) 1. [Module Description](#module-description) 1. [Setup](#setup) 1. [Usage](#usage) 1. [Reference](#reference) 1. [Data Types](#data-types) 1. [Facts](#facts) 1. [Limitations](#limitations) 1. [Development](#development) 1. [Contributors](#contributors) ## Overview This module provides a standard library of resources for Puppet modules. ## Module Description Puppet modules make heavy use of this standard library. The stdlib module adds the following resources to Puppet: * Stages * Facts * Functions * Defined types * Data types * Providers > *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. ## 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. 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. ## 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`. When declared, stdlib declares all other classes in the module. This currently consists of `stdlib::manage` and `stdlib::stages`. The `stdlib::stages` class 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 Sample usage: ```puppet node default { include stdlib class { java: stage => 'runtime' } } ``` The `stdlib::manage` class provides an interface for generating trivial resource declarations via the `create_resources` parameter. Depending on your usage, you may want to set `hiera`'s `lookup_options` for the `stdlib::manage::create_resources:` element. ```yaml --- stdlib::manage::create_resources: file: /etc/somefile: ensure: file owner: root group: root package: badpackage: ensure: absent ``` ## Reference For information on the classes and types, see the [REFERENCE.md](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/REFERENCE.md). ### Data types #### `Stdlib::Absolutepath` A strict absolute path type. Uses a variant of Unixpath and Windowspath types. Acceptable input examples: ```shell /var/log ``` ```shell /usr2/username/bin:/usr/local/bin:/usr/bin:. ``` ```shell C:\\WINDOWS\\System32 ``` Unacceptable input example: ```shell ../relative_path ``` #### `Stdlib::Ensure::Service` Matches acceptable ensure values for service resources. Acceptable input examples: ```shell stopped running ``` Unacceptable input example: ```shell true false ``` #### `Stdlib::HTTPSUrl` Matches HTTPS URLs. It is a case insensitive match. Acceptable input example: ```shell https://hello.com HTTPS://HELLO.COM ``` Unacceptable input example: ```shell httds://notquiteright.org` ``` #### `Stdlib::HTTPUrl` Matches both HTTPS and HTTP URLs. It is a case insensitive match. Acceptable input example: ```shell https://hello.com http://hello.com HTTP://HELLO.COM ``` Unacceptable input example: ```shell httds://notquiteright.org ``` #### `Stdlib::MAC` Matches MAC addresses defined in [RFC5342](https://tools.ietf.org/html/rfc5342). #### `Stdlib::Unixpath` Matches absolute paths on Unix operating systems. Acceptable input example: ```shell /usr2/username/bin:/usr/local/bin:/usr/bin: /var/tmp ``` Unacceptable input example: ```shell C:/whatever some/path ../some/other/path ``` #### `Stdlib::Filemode` Matches octal file modes consisting of one to four numbers and symbolic file modes. Acceptable input examples: ```shell 0644 ``` ```shell 1777 ``` ```shell a=Xr,g=w ``` Unacceptable input examples: ```shell x=r,a=wx ``` ```shell 0999 ``` #### `Stdlib::Windowspath` Matches paths on Windows operating systems. Acceptable input example: ```shell C:\\WINDOWS\\System32 C:\\ \\\\host\\windows ``` Valid values: A windows filepath. #### `Stdlib::Filesource` Matches paths valid values for the source parameter of the Puppet file type. Acceptable input example: ```shell http://example.com https://example.com file:///hello/bla ``` Valid values: A filepath. #### `Stdlib::Fqdn` Matches paths on fully qualified domain name. Acceptable input example: ```shell localhost example.com www.example.com ``` Valid values: Domain name of a server. #### `Stdlib::Host` Matches a valid host which could be a valid ipv4, ipv6 or fqdn. Acceptable input example: ```shell localhost www.example.com 192.0.2.1 ``` Valid values: An IP address or domain name. #### `Stdlib::Port` Matches a valid TCP/UDP Port number. Acceptable input examples: ```shell 80 443 65000 ``` Valid values: An Integer. #### `Stdlib::Port::Privileged` Matches a valid TCP/UDP Privileged port i.e. < 1024. Acceptable input examples: ```shell 80 443 1023 ``` Valid values: A number less than 1024. #### `Stdlib::Port::Unprivileged` Matches a valid TCP/UDP Privileged port i.e. >= 1024. Acceptable input examples: ```shell 1024 1337 65000 ``` Valid values: A number more than or equal to 1024. #### `Stdlib::Base32` Matches paths a valid base32 string. Acceptable input example: ```shell ASDASDDASD3453453 asdasddasd3453453= ASDASDDASD3453453== ``` Valid values: A base32 string. #### `Stdlib::Base64` Matches paths a valid base64 string. Acceptable input example: ```shell asdasdASDSADA342386832/746+= asdasdASDSADA34238683274/6+ asdasdASDSADA3423868327/46+== ``` Valid values: A base64 string. #### `Stdlib::Ipv4` This type is no longer available. To make use of this functionality, use [Stdlib::IP::Address::V4](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv4). #### `Stdlib::Ipv6` This type is no longer available. To make use of this functionality, use [Stdlib::IP::Address::V6](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddressv6). #### `Stdlib::Ip_address` This type is no longer available. To make use of this functionality, use [Stdlib::IP::Address](https://github.com/puppetlabs/puppetlabs-stdlib#stdlibipaddress) #### `Stdlib::IP::Address` Matches any IP address, including both IPv4 and IPv6 addresses. It will match them either with or without an address prefix as used in CIDR format IPv4 addresses. Examples: ``` '127.0.0.1' =~ Stdlib::IP::Address # true '10.1.240.4/24' =~ Stdlib::IP::Address # true '52.10.10.141' =~ Stdlib::IP::Address # true '192.168.1' =~ Stdlib::IP::Address # false 'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address # true 'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address # true ``` #### `Stdlib::IP::Address::V4` Match any string consisting of an IPv4 address in the quad-dotted decimal format, with or without a CIDR prefix. It will not match any abbreviated form (for example, 192.168.1) because these are poorly documented and inconsistently supported. Examples: ``` '127.0.0.1' =~ Stdlib::IP::Address::V4 # true '10.1.240.4/24' =~ Stdlib::IP::Address::V4 # true '192.168.1' =~ Stdlib::IP::Address::V4 # false 'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V4 # false '12AB::CD30:192.168.0.1' =~ Stdlib::IP::Address::V4 # false ``` Valid values: An IPv4 address. #### `Stdlib::IP::Address::V6` Match any string consisting of an IPv6 address in any of the documented formats in RFC 2373, with or without an address prefix. Examples: ``` '127.0.0.1' =~ Stdlib::IP::Address::V6 # false '10.1.240.4/24' =~ Stdlib::IP::Address::V6 # false 'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V6 # true 'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address::V6 # true 'FF01::101' =~ Stdlib::IP::Address::V6 # true ``` Valid values: An IPv6 address. #### `Stdlib::IP::Address::Nosubnet` Match the same things as the `Stdlib::IP::Address` alias, except it will not match an address that includes an address prefix (for example, it will match '192.168.0.6' but not '192.168.0.6/24'). Valid values: An IP address with no subnet. #### `Stdlib::IP::Address::V4::CIDR` Match an IPv4 address in the CIDR format. It will only match if the address contains an address prefix (for example, it will match '192.168.0.6/24' but not '192.168.0.6'). Valid values: An IPv4 address with a CIDR provided eg: '192.186.8.101/105'. This will match anything inclusive of '192.186.8.101' to '192.168.8.105'. #### `Stdlib::IP::Address::V4::Nosubnet` Match an IPv4 address only if the address does not contain an address prefix (for example, it will match '192.168.0.6' but not '192.168.0.6/24'). Valid values: An IPv4 address with no subnet. #### `Stdlib::IP::Address::V6::Full` Match an IPv6 address formatted in the "preferred form" as documented in section 2.2 of [RFC 2373](https://www.ietf.org/rfc/rfc2373.txt), with or without an address prefix as documented in section 2.3 of [RFC 2373](https://www.ietf.org/rfc/rfc2373.txt). #### `Stdlib::IP::Address::V6::Alternate` Match an IPv6 address formatted in the "alternative form" allowing for representing the last two 16-bit pieces of the address with a quad-dotted decimal, as documented in section 2.2.1 of [RFC 2373](https://www.ietf.org/rfc/rfc2373.txt). It will match addresses with or without an address prefix as documented in section 2.3 of [RFC 2373](https://www.ietf.org/rfc/rfc2373.txt). #### `Stdlib::IP::Address::V6::Compressed` Match an IPv6 address which may contain `::` used to compress zeros as documented in section 2.2.2 of [RFC 2373](https://www.ietf.org/rfc/rfc2373.txt). It will match addresses with or without an address prefix as documented in section 2.3 of [RFC 2373](https://www.ietf.org/rfc/rfc2373.txt). #### `Stdlib::IP::Address::V6::Nosubnet` Alias to allow `Stdlib::IP::Address::V6::Nosubnet::Full`, `Stdlib::IP::Address::V6::Nosubnet::Alternate` and `Stdlib::IP::Address::V6::Nosubnet::Compressed`. #### `Stdlib::IP::Address::V6::Nosubnet::Full` Match an IPv6 address formatted in the "preferred form" as documented in section 2.2 of [RFC 2373](https://www.ietf.org/rfc/rfc2373.txt). It will not match addresses with address prefix as documented in section 2.3 of [RFC 2373](https://www.ietf.org/rfc/rfc2373.txt). #### `Stdlib::IP::Address::V6::Nosubnet::Alternate` Match an IPv6 address formatted in the "alternative form" allowing for representing the last two 16-bit pieces of the address with a quad-dotted decimal, as documented in section 2.2.1 of [RFC 2373](https://www.ietf.org/rfc/rfc2373.txt). It will only match addresses without an address prefix as documented in section 2.3 of [RFC 2373](https://www.ietf.org/rfc/rfc2373.txt). #### `Stdlib::IP::Address::V6::Nosubnet::Compressed` Match an IPv6 address which may contain `::` used to compress zeros as documented in section 2.2.2 of [RFC 2373](https://www.ietf.org/rfc/rfc2373.txt). It will only match addresses without an address prefix as documented in section 2.3 of [RFC 2373](https://www.ietf.org/rfc/rfc2373.txt). #### `Stdlib::IP::Address::V6::CIDR` 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', '::'). #### `Stdlib::ObjectStore` Matches cloud object store uris. Acceptable input example: ```shell s3://mybucket/path/to/file gs://bucket/file ``` Valid values: cloud object store uris. #### `Stdlib::ObjectStore::GSUri` Matches Google Cloud object store uris. Acceptable input example: ```shell gs://bucket/file gs://bucket/path/to/file ``` Valid values: Google Cloud object store uris. #### `Stdlib::ObjectStore::S3Uri` Matches Amazon Web Services S3 object store uris. Acceptable input example: ```shell s3://bucket/file s3://bucket/path/to/file ``` Valid values: Amazon Web Services S3 object store uris. #### `Stdlib::Syslogfacility` 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. ### Facts #### `package_provider` Returns the default provider Puppet uses to manage packages on this system. #### `is_pe` Returns whether Puppet Enterprise is installed. Does not report anything on platforms newer than PE 3.x. #### `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` 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 server 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 ## 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. For an extensive list of supported operating systems, see [metadata.json](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/metadata.json) ## 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). To report or research a bug with any part of this module, please go to [https://github.com/puppetlabs/puppetlabs-stdlib/issues](https://github.com/puppetlabs/puppetlabs-stdlib/issues). ## 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). puppetlabs-stdlib-9.4.1/README_DEVELOPER.markdown0100644000175100001770000000254114523206606016263 0ustar00Puppet Specific Facts ===================== Facter is meant to stand alone and apart from Puppet. However, Facter often runs inside Puppet and all custom facts included in the stdlib module will almost always be evaluated in the context of Puppet and Facter working together. Still, we don't want to write custom facts that blow up in the users face if Puppet is not loaded in memory. This is often the case if the user runs `facter` without also supplying the `--puppet` flag. Ah! But Jeff, the custom fact won't be in the `$LOAD_PATH` unless the user supplies `--facter`! You might say... Not (always) true I say! If the user happens to have a CWD of `/stdlib/lib` then the facts will automatically be evaluated and blow up. In any event, it's pretty easy to write a fact that has no value if Puppet is not loaded. Simply do it like this: Facter.add(:node_vardir) do setcode do # This will be nil if Puppet is not available. Facter::Util::PuppetSettings.with_puppet do Puppet[:vardir] end end end The `Facter::Util::PuppetSettings.with_puppet` method accepts a block and yields to it only if the Puppet library is loaded. If the Puppet library is not loaded, then the method silently returns `nil` which Facter interprets as an undefined fact value. The net effect is that the fact won't be set. puppetlabs-stdlib-9.4.1/README_SPECS.markdown0100644000175100001770000000043014523206606015606 0ustar00NOTE ==== This project's specs depend on puppet core, and thus they require the `puppetlabs_spec_helper` project. For more information please see the README in that project, which can be found here: [puppetlabs spec helper](https://github.com/puppetlabs/puppetlabs_spec_helper) puppetlabs-stdlib-9.4.1/REFERENCE.md0100644000175100001770000047275614523206606014020 0ustar00# Reference ## Table of Contents ### Classes * [`stdlib`](#stdlib): This module manages stdlib. * [`stdlib::manage`](#stdlib--manage): A simple place to define trivial resources * [`stdlib::stages`](#stdlib--stages): 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 * [`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 * [`batch_escape`](#batch_escape): DEPRECATED. Use the namespaced function [`stdlib::batch_escape`](#stdlibbatch_escape) instead. * [`bool2num`](#bool2num): Converts a boolean to a number. * [`bool2str`](#bool2str): Converts a boolean to a string using optionally supplied arguments. * [`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): Takes a resource reference and an optional hash of attributes. * [`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. * [`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. * [`dirname`](#dirname): Returns the dirname of a path. * [`dos2unix`](#dos2unix): Returns the Unix version of the given string. * [`enclose_ipv6`](#enclose_ipv6): Takes an array of ip addresses and encloses the ipv6 addresses with square brackets. * [`ensure_packages`](#ensure_packages): DEPRECATED. Use the namespaced function [`stdlib::ensure_packages`](#stdlibensure_packages) instead. * [`ensure_resource`](#ensure_resource): Takes a resource type, title, and a list of attributes that describe a resource. * [`ensure_resources`](#ensure_resources): Takes a resource type, title (only hash), and a list of attributes that describe a resource. * [`fact`](#fact): Digs into the facts hash using dot-notation * [`fqdn_rand_string`](#fqdn_rand_string): DEPRECATED. Use the namespaced function [`stdlib::fqdn_rand_string`](#stdlibfqdn_rand_string) instead. * [`fqdn_rotate`](#fqdn_rotate): DEPRECATED. Use the namespaced function [`stdlib::fqdn_rotate`](#stdlibfqdn_rotate) instead. * [`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): Returns the value of a resource's parameter. * [`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): DEPRECATED. Use the namespaced function [`stdlib::has_interface_with`](#stdlibhas_interface_with) instead. * [`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. * [`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. * [`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. * [`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. * [`member`](#member): This function determines if a variable is a member of an array. * [`merge`](#merge): DEPRECATED. Use the namespaced function [`stdlib::merge`](#stdlibmerge) instead. * [`merge`](#merge): Merges two or more hashes together and returns the resulting hash. * [`num2bool`](#num2bool): This function converts a number or a string representation of a number into a true boolean. * [`os_version_gte`](#os_version_gte): DEPRECATED. Use the namespaced function [`stdlib::os_version_gte`](#stdlibos_version_gte) instead. * [`parsehocon`](#parsehocon): DEPRECATED. Use the namespaced function [`stdlib::parsehocon`](#stdlibparsehocon) instead. * [`parsejson`](#parsejson): This function accepts JSON as a string and converts it into the correct Puppet structure. * [`parsepson`](#parsepson): **Deprecated:** Starting Puppet 8, we no longer natively support PSON usage. This function should be removed once we stop supporting Puppet 7. This function accepts PSON, a Puppet variant of 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 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. * [`powershell_escape`](#powershell_escape): DEPRECATED. Use the namespaced function [`stdlib::powershell_escape`](#stdlibpowershell_escape) instead. * [`prefix`](#prefix): This function applies a prefix to all elements in an array or a hash. * [`pry`](#pry): This function invokes a pry debugging session in the current scope object. * [`pw_hash`](#pw_hash): Hashes a password using the crypt function. Provides a hash usable on most POSIX systems. * [`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. * [`seeded_rand`](#seeded_rand): DEPRECATED. Use the namespaced function [`stdlib::seeded_rand`](#stdlibseeded_rand) instead. * [`seeded_rand_string`](#seeded_rand_string): DEPRECATED. Use the namespaced function [`stdlib::seeded_rand_string`](#stdlibseeded_rand_string) instead. * [`shell_escape`](#shell_escape): DEPRECATED. Use the namespaced function [`stdlib::shell_escape`](#stdlibshell_escape) instead. * [`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. * [`squeeze`](#squeeze): Returns a new string where runs of the same character that occur in this set are replaced by a single character. * [`stdlib::batch_escape`](#stdlib--batch_escape): Escapes a string so that it can be safely used in a batch shell command line. * [`stdlib::crc32`](#stdlib--crc32): Run a CRC32 calculation against a given value. * [`stdlib::deferrable_epp`](#stdlib--deferrable_epp): This function returns either a rendered template or a deferred function to render at runtime. If any of the values in the variables hash are * [`stdlib::end_with`](#stdlib--end_with): Returns true if str ends with one of the prefixes given. Each of the prefixes should be a String. * [`stdlib::ensure`](#stdlib--ensure): function to cast ensure parameter to resource specific value * [`stdlib::ensure_packages`](#stdlib--ensure_packages): Takes a list of packages and only installs them if they don't already exist. * [`stdlib::extname`](#stdlib--extname): Returns the Extension (the Portion of Filename in Path starting from the last Period). * [`stdlib::fqdn_rand_string`](#stdlib--fqdn_rand_string): Generates a random alphanumeric string. Combining the `$fqdn` fact and an optional seed for repeatable randomness. * [`stdlib::fqdn_rotate`](#stdlib--fqdn_rotate): Rotates an array or string a random number of times, combining the `fqdn` fact and an optional seed for repeatable randomness. * [`stdlib::has_function`](#stdlib--has_function): Returns whether the Puppet runtime has access to a given function. * [`stdlib::has_interface_with`](#stdlib--has_interface_with): Returns boolean based on network interfaces present and their attribute values. * [`stdlib::ip_in_range`](#stdlib--ip_in_range): Returns true if the ipaddress is within the given CIDRs * [`stdlib::merge`](#stdlib--merge): Merges two or more hashes together or hashes resulting from iteration, and returns the resulting hash. * [`stdlib::nested_values`](#stdlib--nested_values): Get list of nested values from given hash This function will return list of nested Hash values and returns list of values in form of Array * [`stdlib::os_version_gte`](#stdlib--os_version_gte): Checks if the OS version is at least a certain version. * [`stdlib::parsehocon`](#stdlib--parsehocon): This function accepts HOCON as a string and converts it into the correct Puppet structure * [`stdlib::powershell_escape`](#stdlib--powershell_escape): Escapes a string so that it can be safely used in a PowerShell command line. * [`stdlib::seeded_rand`](#stdlib--seeded_rand): Generates a random whole number greater than or equal to 0 and less than max, using the value of seed for repeatable randomness. * [`stdlib::seeded_rand_string`](#stdlib--seeded_rand_string): Generates a consistent random string of specific length based on provided seed. * [`stdlib::sha256`](#stdlib--sha256): Run a SHA256 calculation against a given value. * [`stdlib::shell_escape`](#stdlib--shell_escape): Escapes a string so that it can be safely used in a Bourne shell command line. * [`stdlib::start_with`](#stdlib--start_with): Returns true if str starts with one of the prefixes given. Each of the prefixes should be a String. * [`stdlib::str2resource`](#stdlib--str2resource): This converts a string to a puppet resource. * [`stdlib::to_json`](#stdlib--to_json): Convert a data structure and output to JSON * [`stdlib::to_json_pretty`](#stdlib--to_json_pretty): Convert data structure and output to pretty JSON * [`stdlib::to_python`](#stdlib--to_python): Convert an object into a String containing its Python representation * [`stdlib::to_ruby`](#stdlib--to_ruby): Convert an object into a String containing its Ruby representation * [`stdlib::to_toml`](#stdlib--to_toml): Convert a data structure and output to TOML. * [`stdlib::to_yaml`](#stdlib--to_yaml): Convert a data structure and output it as YAML * [`stdlib::type_of`](#stdlib--type_of): Returns the type of the passed value. * [`stdlib::validate_domain_name`](#stdlib--validate_domain_name): Validate that all values passed are syntactically correct domain names. Fail compilation if any value fails this check. * [`stdlib::validate_email_address`](#stdlib--validate_email_address): Validate that all values passed are valid email addresses. Fail compilation if any value fails this check. * [`stdlib::xml_encode`](#stdlib--xml_encode): Encode strings for XML files * [`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). * [`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): DEPRECATED. Use the namespaced function [`stdlib::to_json`](#stdlibto_json) instead. * [`to_json_pretty`](#to_json_pretty): DEPRECATED. Use the namespaced function [`stdlib::to_json_pretty`](#stdlibto_json_pretty) instead. * [`to_python`](#to_python): DEPRECATED. Use the namespaced function [`stdlib::to_python`](#stdlibto_python) instead. * [`to_ruby`](#to_ruby): DEPRECATED. Use the namespaced function [`stdlib::to_ruby`](#stdlibto_ruby) instead. * [`to_toml`](#to_toml): DEPRECATED. Use the namespaced function [`stdlib::to_toml`](#stdlibto_toml) instead. * [`to_yaml`](#to_yaml): DEPRECATED. Use the namespaced function [`stdlib::to_yaml`](#stdlibto_yaml) instead. * [`type_of`](#type_of): DEPRECATED. Use the namespaced function [`stdlib::type_of`](#stdlibtype_of) instead. * [`union`](#union): This function returns a union of two or more arrays. * [`unix2dos`](#unix2dos): Returns the DOS version of the given string. * [`uriescape`](#uriescape): Urlencodes a string or array of strings. Requires either a single string or an array as an input. * [`validate_augeas`](#validate_augeas): Perform validation of a string using an Augeas lens * [`validate_cmd`](#validate_cmd): Perform validation of a string with an external command. * [`validate_domain_name`](#validate_domain_name): DEPRECATED. Use the namespaced function [`stdlib::validate_domain_name`](#stdlibvalidate_domain_name) instead. * [`validate_email_address`](#validate_email_address): DEPRECATED. Use the namespaced function [`stdlib::validate_email_address`](#stdlibvalidate_email_address) instead. * [`validate_legacy`](#validate_legacy): **Deprecated:** Validate a value against both the target_type (new). * [`validate_x509_rsa_key_pair`](#validate_x509_rsa_key_pair): Validates a PEM-formatted X.509 certificate and RSA private key using OpenSSL. * [`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`](#Stdlib--Absolutepath): A strict absolutepath type * [`Stdlib::Base32`](#Stdlib--Base32): Type to match base32 String * [`Stdlib::Base64`](#Stdlib--Base64): Type to match base64 String * [`Stdlib::CreateResources`](#Stdlib--CreateResources): A type description used for the create_resources function * [`Stdlib::Datasize`](#Stdlib--Datasize): Validate the size of data * [`Stdlib::Dns::Zone`](#Stdlib--Dns--Zone): Validate a DNS zone name * [`Stdlib::Email`](#Stdlib--Email): Validate an e-mail address * [`Stdlib::Ensure::File`](#Stdlib--Ensure--File): Validate the value of the ensure parameter for a file * [`Stdlib::Ensure::File::Directory`](#Stdlib--Ensure--File--Directory): Validate the ensure parameter of a "directory" file resource * [`Stdlib::Ensure::File::File`](#Stdlib--Ensure--File--File): Validate the ensure parameter of a "file" file resource * [`Stdlib::Ensure::File::Link`](#Stdlib--Ensure--File--Link): Validate the ensure parameter of a "link" file resource * [`Stdlib::Ensure::Package`](#Stdlib--Ensure--Package): Validate the value of the ensure parameter for a package * [`Stdlib::Ensure::Service`](#Stdlib--Ensure--Service): Validate the value of the ensure parameter of a service resource * [`Stdlib::Filemode`](#Stdlib--Filemode): Validate a file mode * [`Stdlib::Filesource`](#Stdlib--Filesource): Validate the source parameter on file types * [`Stdlib::Fqdn`](#Stdlib--Fqdn): Validate a Fully Qualified Domain Name * [`Stdlib::HTTPSUrl`](#Stdlib--HTTPSUrl): Validate a HTTPS URL * [`Stdlib::HTTPUrl`](#Stdlib--HTTPUrl): Validate a HTTP(S) URL * [`Stdlib::Host`](#Stdlib--Host): Validate a host (FQDN or IP address) * [`Stdlib::Http::Method`](#Stdlib--Http--Method): Valid HTTP method verbs * [`Stdlib::Http::Status`](#Stdlib--Http--Status): A valid HTTP status code per RFC9110 * [`Stdlib::HttpStatus`](#Stdlib--HttpStatus): Validate a HTTP status code * [`Stdlib::IP::Address`](#Stdlib--IP--Address): Validate an IP address * [`Stdlib::IP::Address::CIDR`](#Stdlib--IP--Address--CIDR): Validate an IP address with subnet * [`Stdlib::IP::Address::Nosubnet`](#Stdlib--IP--Address--Nosubnet): Validate an IP address without subnet * [`Stdlib::IP::Address::V4`](#Stdlib--IP--Address--V4): Validate an IPv4 address * [`Stdlib::IP::Address::V4::CIDR`](#Stdlib--IP--Address--V4--CIDR): lint:ignore:140chars * [`Stdlib::IP::Address::V4::Nosubnet`](#Stdlib--IP--Address--V4--Nosubnet): lint:ignore:140chars * [`Stdlib::IP::Address::V6`](#Stdlib--IP--Address--V6): Validate an IPv6 address * [`Stdlib::IP::Address::V6::Alternative`](#Stdlib--IP--Address--V6--Alternative): lint:ignore:140chars * [`Stdlib::IP::Address::V6::CIDR`](#Stdlib--IP--Address--V6--CIDR): lint:ignore:140chars * [`Stdlib::IP::Address::V6::Compressed`](#Stdlib--IP--Address--V6--Compressed): Validate a compressed IPv6 address * [`Stdlib::IP::Address::V6::Full`](#Stdlib--IP--Address--V6--Full): Validate a full IPv6 address * [`Stdlib::IP::Address::V6::Nosubnet`](#Stdlib--IP--Address--V6--Nosubnet): Validate an IPv6 address without subnet * [`Stdlib::IP::Address::V6::Nosubnet::Alternative`](#Stdlib--IP--Address--V6--Nosubnet--Alternative): lint:ignore:140chars * [`Stdlib::IP::Address::V6::Nosubnet::Compressed`](#Stdlib--IP--Address--V6--Nosubnet--Compressed): Validate compressed IPv6 address without subnet * [`Stdlib::IP::Address::V6::Nosubnet::Full`](#Stdlib--IP--Address--V6--Nosubnet--Full): Validate full IPv6 address without subnet * [`Stdlib::MAC`](#Stdlib--MAC): A type for a MAC address * [`Stdlib::ObjectStore`](#Stdlib--ObjectStore): Validate an ObjectStore * [`Stdlib::ObjectStore::GSUri`](#Stdlib--ObjectStore--GSUri): Validate a Google Cloud object store URI * [`Stdlib::ObjectStore::S3Uri`](#Stdlib--ObjectStore--S3Uri): Validate an Amazon Web Services S3 object store URI * [`Stdlib::Port`](#Stdlib--Port): Validate a port number * [`Stdlib::Port::Dynamic`](#Stdlib--Port--Dynamic): Validate a dynamic port number * [`Stdlib::Port::Ephemeral`](#Stdlib--Port--Ephemeral): Validate an ephemeral port number * [`Stdlib::Port::Privileged`](#Stdlib--Port--Privileged): Validate a priviliged port number * [`Stdlib::Port::Registered`](#Stdlib--Port--Registered): Validate a registered port number * [`Stdlib::Port::Unprivileged`](#Stdlib--Port--Unprivileged): Validate an unprivileged port number * [`Stdlib::Port::User`](#Stdlib--Port--User): Validate a port number usable by a user * [`Stdlib::Syslogfacility`](#Stdlib--Syslogfacility): Validate a syslog facility * [`Stdlib::Unixpath`](#Stdlib--Unixpath): Validate a UNIX path * [`Stdlib::Windowspath`](#Stdlib--Windowspath): Validate a Windows path * [`Stdlib::Yes_no`](#Stdlib--Yes_no): Validate a yes / no value ## Classes ### `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 and stdlib::manage. ### `stdlib::manage` Sometimes your systems require a single simple resource. It can feel unnecessary to create a module for a single resource. There are a number of possible patterns to generate trivial resource definitions. This is an attempt to create a single clear method for uncomplicated resources. There is __limited__ support for `before`, `require`, `notify`, and `subscribe`. #### Examples ##### ```puppet class { 'stdlib::manage': 'create_resources' => { 'file' => { '/etc/motd.d/hello' => { 'content' => 'I say Hi', 'notify' => 'Service[sshd]', } }, 'package' => { 'example' => { 'ensure' => 'installed', 'subscribe' => ['Service[sshd]', 'Exec[something]'], } } } ``` ##### ```puppet stdlib::manage::create_resources: file: '/etc/motd.d/hello': content: I say Hi notify: 'Service[sshd]' package: example: ensure: installed subscribe: - 'Service[sshd]' - 'Exec[something]' ``` #### Parameters The following parameters are available in the `stdlib::manage` class: * [`create_resources`](#-stdlib--manage--create_resources) ##### `create_resources` Data type: `Hash[String, Hash]` A hash of resources to create NOTE: functions, such as `template` or `epp`, are not evaluated. Default value: `{}` ### `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 ### `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`](#-anchor--name) ##### `name` namevar The name of the anchor resource. ### `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`](#-file_line--after) * [`append_on_no_match`](#-file_line--append_on_no_match) * [`encoding`](#-file_line--encoding) * [`match`](#-file_line--match) * [`match_for_absence`](#-file_line--match_for_absence) * [`multiple`](#-file_line--multiple) * [`name`](#-file_line--name) * [`path`](#-file_line--path) * [`provider`](#-file_line--provider) * [`replace`](#-file_line--replace) * [`replace_all_matches_not_matching_line`](#-file_line--replace_all_matches_not_matching_line) ##### `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. ##### `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` ##### `encoding` For files that are not UTF-8 encoded, specify encoding such as iso-8859-1 Default value: `UTF-8` ##### `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. ##### `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` ##### `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 ##### `name` namevar An arbitrary name used as the identity of the resource. ##### `path` The file Puppet will ensure contains the line specified by the line parameter. ##### `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. ##### `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` ##### `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 ### `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 ### `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 ### `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. ### `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 ##### 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") ``` ### `basename` Type: Ruby 3.x API Strips directory (and optional suffix) from a filename #### `basename()` The basename function. Returns: `String` The stripped filename ### `batch_escape` Type: Ruby 4.x API DEPRECATED. Use the namespaced function [`stdlib::batch_escape`](#stdlibbatch_escape) instead. #### `batch_escape(Any *$args)` The batch_escape function. Returns: `Any` ##### `*args` Data type: `Any` ### `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 ### `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 ### `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. ``` ### `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'] ``` ### `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 S #### 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 S Returns: `Any` converted value as a string ##### Examples ###### Example usage ```puppet ``` ### `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 ### `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 ##### 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." ``` ### `defined_with_params` Type: Ruby 3.x API Returns `true` if a resource with the specified attributes has already been added to the catalog, and `false` otherwise. ``` user { 'dan': ensure => present, } if ! defined_with_params(User[dan], {'ensure' => 'present' }) { user { 'dan': ensure => present, } } ``` #### `defined_with_params()` Returns `true` if a resource with the specified attributes has already been added to the catalog, and `false` otherwise. ``` user { 'dan': ensure => present, } if ! defined_with_params(User[dan], {'ensure' => 'present' }) { user { 'dan': ensure => present, } } ``` Returns: `Boolean` returns `true` or `false` ### `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' ``` ### `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 ### `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} ``` ### `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] ``` ### `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'} ``` ### `deprecation` Type: Ruby 4.x API Function to print deprecation warnings, Logs a warning once for a given key. #### `deprecation(String $key, String $message, Optional[Boolean] $use_strict_setting)` The deprecation function. Returns: `Any` ##### `key` Data type: `String` The uniqueness key. This function logs once for any given key. ##### `message` Data type: `String` Is the message text including any positional information that is formatted by the user/caller of the function. ##### `use_strict_setting` Data type: `Optional[Boolean]` When `true`, (the default), the function 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). ### `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 ### `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"]` ``` ### `dirname` Type: Ruby 3.x API Returns the dirname of a path. #### `dirname()` The dirname function. Returns: `String` the given path's dirname ### `dos2unix` Type: Ruby 3.x API Takes a single string argument. #### `dos2unix()` Takes a single string argument. Returns: `Any` The retrieved version ### `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. ### `ensure_packages` Type: Ruby 4.x API DEPRECATED. Use the namespaced function [`stdlib::ensure_packages`](#stdlibensure_packages) instead. #### `ensure_packages(Any *$args)` The ensure_packages function. Returns: `Any` ##### `*args` Data type: `Any` ### `ensure_resource` Type: Ruby 3.x API user { 'dan': ensure => present, } #### Examples ##### Example usage ```puppet 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 will attempt 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'}) ``` #### `ensure_resource()` user { 'dan': ensure => present, } Returns: `Any` created or recreated the passed resource with the passed type and attributes ##### Examples ###### Example usage ```puppet 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 will attempt 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'}) ``` ### `ensure_resources` Type: Ruby 3.x API An hash of resources should be passed in and each will be created with the type and parameters specified if it doesn't already exist. ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'}) From Hiera Backend: userlist: dan: gid: 'mygroup' uid: '600' alex: gid: 'mygroup' Call: ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'}) #### Examples ##### Example usage ```puppet user { 'dan': gid => 'mygroup', ensure => present, } ``` #### `ensure_resources()` An hash of resources should be passed in and each will be created with the type and parameters specified if it doesn't already exist. ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'}) From Hiera Backend: userlist: dan: gid: 'mygroup' uid: '600' alex: gid: 'mygroup' Call: ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'}) Returns: `Any` created resources with the passed type and attributes ##### Examples ###### Example usage ```puppet user { 'dan': gid => 'mygroup', ensure => present, } ``` ### `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 ### `fqdn_rand_string` Type: Ruby 4.x API DEPRECATED. Use the namespaced function [`stdlib::fqdn_rand_string`](#stdlibfqdn_rand_string) instead. #### `fqdn_rand_string(Any *$args)` The fqdn_rand_string function. Returns: `Any` ##### `*args` Data type: `Any` ### `fqdn_rotate` Type: Ruby 4.x API DEPRECATED. Use the namespaced function [`stdlib::fqdn_rotate`](#stdlibfqdn_rotate) instead. #### `fqdn_rotate(Any *$args)` The fqdn_rotate function. Returns: `Any` ##### `*args` Data type: `Any` ### `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-dea6c79a ``` #### `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-dea6c79a ``` ### `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') ``` ### `getparam` Type: Ruby 3.x API Takes a resource reference and name of the parameter and returns value of resource's parameter. Note that user defined resource types are evaluated lazily. Would notice: 'the value we are getting in this example' > **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type and the [ ] operator. The example below is equivalent to a call to getparam(): ```Example_resource['example_resource_instance']['param']`` #### Examples ##### Example Usage: ```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': } ``` #### `getparam()` Takes a resource reference and name of the parameter and returns value of resource's parameter. Note that user defined resource types are evaluated lazily. Would notice: 'the value we are getting in this example' > **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type and the [ ] operator. The example below is equivalent to a call to getparam(): ```Example_resource['example_resource_instance']['param']`` Returns: `Any` value of a resource's parameter. ##### Examples ###### Example Usage: ```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': } ``` ### `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']) ``` ### `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'] ``` ### `has_interface_with` Type: Ruby 4.x API DEPRECATED. Use the namespaced function [`stdlib::has_interface_with`](#stdlibhas_interface_with) instead. #### `has_interface_with(Any *$args)` The has_interface_with function. Returns: `Any` ##### `*args` Data type: `Any` ### `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` ``` ### `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` ### `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. ### `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) ``` ### `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 ### `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"] ``` ### `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']: } ``` ### `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 ``` ### `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 ``` ### `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 ``` ### `merge` Type: Ruby 4.x API DEPRECATED. Use the namespaced function [`stdlib::merge`](#stdlibmerge) instead. #### `merge(Any *$args, Optional[Variant[Callable[2,2], Callable[3,3]]] &$block)` The merge function. Returns: `Any` ##### `*args` Data type: `Any` ##### `&block` Data type: `Optional[Variant[Callable[2,2], Callable[3,3]]]` ### `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 + $h #### 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 + $h 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'} ``` ### `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 ### `os_version_gte` Type: Ruby 4.x API DEPRECATED. Use the namespaced function [`stdlib::os_version_gte`](#stdlibos_version_gte) instead. #### `os_version_gte(Any *$args)` The os_version_gte function. Returns: `Any` ##### `*args` Data type: `Any` ### `parsehocon` Type: Ruby 4.x API DEPRECATED. Use the namespaced function [`stdlib::parsehocon`](#stdlibparsehocon) instead. #### `parsehocon(Any *$args)` The parsehocon function. Returns: `Any` ##### `*args` Data type: `Any` ### `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 the JSON string failed or if the JSON parse evaluated to nil. #### `parsejson()` > *Note:* The optional second argument can be used to pass a default value that will be returned if the parsing of the JSON string failed or if the JSON parse evaluated to nil. Returns: `Any` convert JSON into Puppet structure ### `parsepson` Type: Ruby 4.x API For more information on PSON please see the following link: https://puppet.com/docs/puppet/7/http_api/pson.html #### Examples ##### How to parse pson ```puppet $data = parsepson('{"a":"1","b":"2"}') ``` #### `parsepson(String[1] $pson_string, Optional[Any] $default)` For more information on PSON please see the following link: https://puppet.com/docs/puppet/7/http_api/pson.html Returns: `Data` ##### Examples ###### How to parse pson ```puppet $data = parsepson('{"a":"1","b":"2"}') ``` ##### `pson_string` Data type: `String[1]` A valid PSON string ##### `default` Data type: `Optional[Any]` An optional default to return if parsing the pson_string fails ### `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 ### `pick` Type: Ruby 3.x API This function is similar to a coalesce function in SQL. 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()` This function is similar to a coalesce function in SQL. 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. ### `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. ### `powershell_escape` Type: Ruby 4.x API DEPRECATED. Use the namespaced function [`stdlib::powershell_escape`](#stdlibpowershell_escape) instead. #### `powershell_escape(Any *$args)` The powershell_escape function. Returns: `Any` ##### `*args` Data type: `Any` ### `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'] ``` ### `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()` ``` ### `pw_hash` Type: Ruby 3.x API 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 hash algorithm to use. It will be converted into the appropriate crypt(3) hash specifier. Valid hash types are: |Hash type|Prefix|Note | |---------|------|---------------------| |MD5 |1 | | |SHA-256 |5 | | |SHA-512 |6 |Recommended | |bcrypt |2b | | |bcrypt-a |2a |bug compatible | |bcrypt-x |2x |bug compatible | |bcrypt-y |2y |historic alias for 2b| The third argument to this function is the salt to use. For bcrypt-type hashes, the first two characters of the salt represent a strength parameter, with a value between 4 and 31 inclusive. > *Note:*: this uses the Puppet Server's implementation of crypt(3). If your environment contains several different operating systems, ensure that they are compatible before using this function. #### `pw_hash()` 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 hash algorithm to use. It will be converted into the appropriate crypt(3) hash specifier. Valid hash types are: |Hash type|Prefix|Note | |---------|------|---------------------| |MD5 |1 | | |SHA-256 |5 | | |SHA-512 |6 |Recommended | |bcrypt |2b | | |bcrypt-a |2a |bug compatible | |bcrypt-x |2x |bug compatible | |bcrypt-y |2y |historic alias for 2b| The third argument to this function is the salt to use. For bcrypt-type hashes, the first two characters of the salt represent a strength parameter, with a value between 4 and 31 inclusive. > *Note:*: this uses the Puppet Server's implementation of crypt(3). If your environment contains several different operating systems, ensure that they are compatible before using this function. Returns: `String` Provides a crypt hash usable on most POSIX systems. ### `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] ``` ### `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. ### `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 !~ /a #### 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 !~ /a 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'] ``` ### `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 ### `seeded_rand` Type: Ruby 4.x API DEPRECATED. Use the namespaced function [`stdlib::seeded_rand`](#stdlibseeded_rand) instead. #### `seeded_rand(Any *$args)` The seeded_rand function. Returns: `Any` ##### `*args` Data type: `Any` ### `seeded_rand_string` Type: Ruby 4.x API DEPRECATED. Use the namespaced function [`stdlib::seeded_rand_string`](#stdlibseeded_rand_string) instead. #### `seeded_rand_string(Any *$args)` The seeded_rand_string function. Returns: `Any` ##### `*args` Data type: `Any` ### `shell_escape` Type: Ruby 4.x API DEPRECATED. Use the namespaced function [`stdlib::shell_escape`](#stdlibshell_escape) instead. #### `shell_escape(Any *$args)` The shell_escape function. Returns: `Any` ##### `*args` Data type: `Any` ### `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 ### `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 ### `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 ### `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. ### `stdlib::batch_escape` Type: Ruby 4.x API >* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single quotes. #### `stdlib::batch_escape(Any $string)` >* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single quotes. Returns: `Any` An escaped string that can be safely used in a batch command line. ##### `string` Data type: `Any` The string to escape ### `stdlib::crc32` Type: Ruby 4.x API Run a CRC32 calculation against a given value. #### Examples ##### Check a simple string value ```puppet stdlib::crc32('my string') == '18fbd270' ``` ##### Check a Sensitive datatype ```puppet stdlib::crc32(sensitive('my string')) == '18fbd270' ``` ##### Check a number ```puppet stdlib::crc32(100.0) == 'a3fd429a' stdlib::crc32(100.00000) == 'a3fd429a' ``` #### `stdlib::crc32(Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]] $my_data)` Run a CRC32 calculation against a given value. Returns: `String` String ##### Examples ###### Check a simple string value ```puppet stdlib::crc32('my string') == '18fbd270' ``` ###### Check a Sensitive datatype ```puppet stdlib::crc32(sensitive('my string')) == '18fbd270' ``` ###### Check a number ```puppet stdlib::crc32(100.0) == 'a3fd429a' stdlib::crc32(100.00000) == 'a3fd429a' ``` ##### `my_data` Data type: `Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]]` The ScalarData to evaluate ### `stdlib::deferrable_epp` Type: Puppet Language This function returns either a rendered template or a deferred function to render at runtime. If any of the values in the variables hash are deferred, then the template will be deferred. Note: this function requires all parameters to be explicitly passed in. It cannot expect to use facts, class variables, and other variables in scope. This is because when deferred, we have to explicitly pass the entire scope to the client. #### `stdlib::deferrable_epp(String $template, Hash $variables)` This function returns either a rendered template or a deferred function to render at runtime. If any of the values in the variables hash are deferred, then the template will be deferred. Note: this function requires all parameters to be explicitly passed in. It cannot expect to use facts, class variables, and other variables in scope. This is because when deferred, we have to explicitly pass the entire scope to the client. Returns: `Variant[String, Sensitive[String], Deferred]` ##### `template` Data type: `String` ##### `variables` Data type: `Hash` ### `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 ### `stdlib::ensure` Type: Puppet Language function to cast ensure parameter to resource specific value #### `stdlib::ensure(Variant[Boolean, Enum['present', 'absent']] $ensure, Optional[Enum['directory', 'link', 'mounted', 'service', 'file', 'package']] $resource = undef)` The stdlib::ensure function. Returns: `String` ##### `ensure` Data type: `Variant[Boolean, Enum['present', 'absent']]` ##### `resource` Data type: `Optional[Enum['directory', 'link', 'mounted', 'service', 'file', 'package']]` ### `stdlib::ensure_packages` Type: Ruby 4.x API It optionally takes a hash as a second parameter that will be passed as the third argument to the ensure_resource() function. #### `stdlib::ensure_packages(Variant[String[1], Array[String[1]]] $packages, Optional[Hash] $default_attributes)` The stdlib::ensure_packages function. Returns: `Undef` Returns nothing. ##### `packages` Data type: `Variant[String[1], Array[String[1]]]` The packages to ensure are installed. ##### `default_attributes` Data type: `Optional[Hash]` Default attributes to be passed to the `ensure_resource()` function #### `stdlib::ensure_packages(Hash[String[1], Any] $packages, Optional[Hash] $default_attributes)` The stdlib::ensure_packages function. Returns: `Undef` Returns nothing. ##### `packages` Data type: `Hash[String[1], Any]` The packages to ensure are installed. The keys are packages and values are the attributes specific to that package. ##### `default_attributes` Data type: `Optional[Hash]` Default attributes. Package specific attributes from the `packages` parameter will take precedence. ### `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 ### `stdlib::fqdn_rand_string` Type: Ruby 4.x API Optionally, you can specify a character set for the function (defaults to alphanumeric). #### Examples ##### Example Usage: ```puppet stdlib::fqdn_rand_string(10) stdlib::fqdn_rand_string(10, 'ABCDEF!@$%^') stdlib::fqdn_rand_string(10, undef, 'custom seed') ``` #### `stdlib::fqdn_rand_string(Integer[1] $length, Optional[Optional[String]] $charset, Optional[Any] *$seed)` Optionally, you can specify a character set for the function (defaults to alphanumeric). Returns: `String` ##### Examples ###### Example Usage: ```puppet stdlib::fqdn_rand_string(10) stdlib::fqdn_rand_string(10, 'ABCDEF!@$%^') stdlib::fqdn_rand_string(10, undef, 'custom seed') ``` ##### `length` Data type: `Integer[1]` The length of the resulting string. ##### `charset` Data type: `Optional[Optional[String]]` The character set to use. ##### `*seed` Data type: `Optional[Any]` The seed for repeatable randomness. ### `stdlib::fqdn_rotate` Type: Ruby 4.x API Rotates an array or string a random number of times, combining the `fqdn` fact and an optional seed for repeatable randomness. #### `stdlib::fqdn_rotate(String $input, Optional[Variant[Integer,String]] *$seeds)` The stdlib::fqdn_rotate function. Returns: `String` Returns the rotated String ##### Examples ###### Rotating a String ```puppet stdlib::fqdn_rotate('abcd') ``` ###### Using a custom seed ```puppet stdlib::fqdn_rotate('abcd', 'custom seed') ``` ##### `input` Data type: `String` The String you want rotated a random number of times ##### `*seeds` Data type: `Optional[Variant[Integer,String]]` One of more values to use as a custom seed. These will be combined with the host's FQDN #### `stdlib::fqdn_rotate(Array $input, Optional[Variant[Integer,String]] *$seeds)` The stdlib::fqdn_rotate function. Returns: `Array` Returns the rotated Array ##### Examples ###### Rotating an Array ```puppet stdlib::fqdn_rotate(['a', 'b', 'c', 'd']) ``` ###### Using custom seeds ```puppet stdlib::fqdn_rotate([1, 2, 3], 'custom', 'seed', 1) ``` ##### `input` Data type: `Array` The Array you want rotated a random number of times ##### `*seeds` Data type: `Optional[Variant[Integer,String]]` One of more values to use as a custom seed. These will be combined with the host's FQDN ### `stdlib::has_function` Type: Ruby 4.x API Determines whether the Puppet runtime has access to a function by the name provided. #### Examples ##### Using stdlib::has_function() ```puppet stdlib::has_function('stdlib::has_function') # true stdlib::has_function('not_a_function') # false ``` #### `stdlib::has_function(String[1] $function_name)` Determines whether the Puppet runtime has access to a function by the name provided. Returns: `Boolean` ##### Examples ###### Using stdlib::has_function() ```puppet stdlib::has_function('stdlib::has_function') # true stdlib::has_function('not_a_function') # false ``` ##### `function_name` Data type: `String[1]` ### `stdlib::has_interface_with` Type: Ruby 4.x API Can be called with one, or two arguments. #### `stdlib::has_interface_with(String[1] $interface)` The stdlib::has_interface_with function. Returns: `Boolean` Returns `true` if `interface` exists and `false` otherwise ##### Examples ###### When called with a single argument, the presence of the interface is checked ```puppet stdlib::has_interface_with('lo') # Returns `true` ``` ##### `interface` Data type: `String[1]` The name of an interface #### `stdlib::has_interface_with(Enum['macaddress','netmask','ipaddress','network','ip','mac'] $kind, String[1] $value)` The stdlib::has_interface_with function. Returns: `Boolean` Returns `true` if any of the interfaces in the `networking` fact has a `kind` attribute with the value `value`. Otherwise returns `false` ##### Examples ###### Checking if an interface exists with a given mac address ```puppet stdlib::has_interface_with('macaddress', 'x:x:x:x:x:x') # Returns `false` ``` ###### Checking if an interface exists with a given IP address ```puppet stdlib::has_interface_with('ipaddress', '127.0.0.1') # Returns `true` ``` ##### `kind` Data type: `Enum['macaddress','netmask','ipaddress','network','ip','mac']` A supported interface attribute ##### `value` Data type: `String[1]` The value of the attribute ### `stdlib::ip_in_range` Type: Ruby 4.x API Returns true if the ipaddress is within the given CIDRs #### Examples ##### ip_in_range(, ) ```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(, ) ```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 ### `stdlib::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 stdlib::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 `stdlib::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 stdlib::merge() ```puppet $hash1 = {'one' => 1, 'two', => 2} $hash2 = {'two' => 'dos', 'three', => 'tres'} $merged_hash = stdlib::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'].stdlib::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'].stdlib::merge | $hsh, $v | { if $v =~ String[1,1] { { $v => $hsh[$v].lest || { 0 } + 1 } } } # results in { a => 1, b => 2, c => 2, d => 1 } ``` #### `stdlib::merge(Variant[Hash[Scalar,Any], Undef, String[0,0]] *$args)` The stdlib::merge function. Returns: `Hash[Scalar,Any]` The merged hash ##### `*args` Data type: `Variant[Hash[Scalar,Any], Undef, String[0,0]]` Repeated Param - The hashes that are to be merged #### `stdlib::merge(Iterable *$args, Callable[3,3] &$block)` The stdlib::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` #### `stdlib::merge(Iterable *$args, Callable[2,2] &$block)` The stdlib::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` ### `stdlib::nested_values` Type: Ruby 4.x API Get list of nested values from given hash This function will return list of nested Hash values and returns list of values in form of Array #### Examples ##### Example Usage: ```puppet $hash = { "key1" => "value1", "key2" => { "key2.1" => "value2.1"}, "key3" => "value3" } $data = $hash.stdlib::nested_values #Output : ["value1", "value2.1", "value3"] ``` #### `stdlib::nested_values(Hash $hash)` The stdlib::nested_values function. Returns: `Array` All the values found in the input hash included those deeply nested. ##### Examples ###### Example Usage: ```puppet $hash = { "key1" => "value1", "key2" => { "key2.1" => "value2.1"}, "key3" => "value3" } $data = $hash.stdlib::nested_values #Output : ["value1", "value2.1", "value3"] ``` ##### `hash` Data type: `Hash` A (nested) hash ### `stdlib::os_version_gte` Type: Ruby 4.x API > *Note:* Only the major version is taken into account. #### Examples ##### Example usage:# ```puppet if stdlib::os_version_gte('Debian', '9') { } if stdlib::os_version_gte('Ubuntu', '18.04') { } ``` #### `stdlib::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 stdlib::os_version_gte('Debian', '9') { } if stdlib::os_version_gte('Ubuntu', '18.04') { } ``` ##### `os` Data type: `String[1]` operating system ##### `version` Data type: `String[1]` ### `stdlib::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 = stdlib::parsehocon("{any valid hocon: string}") ``` #### `stdlib::parsehocon(String $hocon_string, Optional[Any] $default)` The stdlib::parsehocon function. Returns: `Data` ##### Examples ###### How to parse hocon ```puppet $data = stdlib::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 ### `stdlib::powershell_escape` Type: Ruby 4.x API >* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single quotes. #### `stdlib::powershell_escape(Any $string)` >* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single quotes. Returns: `Any` An escaped string that can be safely used in a PowerShell command line. ##### `string` Data type: `Any` The string to escape ### `stdlib::seeded_rand` Type: Ruby 4.x API Generates a random whole number greater than or equal to 0 and less than max, using the value of seed for repeatable randomness. #### `stdlib::seeded_rand(Integer[1] $max, String $seed)` The stdlib::seeded_rand function. Returns: `Integer` A random number greater than or equal to 0 and less than max ##### `max` Data type: `Integer[1]` The maximum value. ##### `seed` Data type: `String` The seed used for repeatable randomness. ### `stdlib::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 stdlib::seeded_rand_string(8, "${module_name}::redis_password") ``` ##### Generate a random string from a specific set of characters: ```puppet stdlib::seeded_rand_string(5, '', 'abcdef') ``` #### `stdlib::seeded_rand_string(Integer[1] $length, String $seed, Optional[String[2]] $charset)` The stdlib::seeded_rand_string function. Returns: `String` Random string. ##### Examples ###### Generate a consistently random string of length 8 with a seed: ```puppet stdlib::seeded_rand_string(8, "${module_name}::redis_password") ``` ###### Generate a random string from a specific set of characters: ```puppet stdlib::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. ### `stdlib::sha256` Type: Ruby 4.x API Run a SHA256 calculation against a given value. #### Examples ##### Check a simple string value ```puppet stdlib::sha256('my string') == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5' ``` ##### Check a Sensitive datatype ```puppet stdlib::sha256(sensitive('my string')) == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5' ``` ##### Check a number ```puppet stdlib::sha256(100.0) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0' stdlib::sha256(100.00000) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0' ``` #### `stdlib::sha256(Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]] $my_data)` Run a SHA256 calculation against a given value. Returns: `String` String ##### Examples ###### Check a simple string value ```puppet stdlib::sha256('my string') == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5' ``` ###### Check a Sensitive datatype ```puppet stdlib::sha256(sensitive('my string')) == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5' ``` ###### Check a number ```puppet stdlib::sha256(100.0) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0' stdlib::sha256(100.00000) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0' ``` ##### `my_data` Data type: `Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]]` The ScalarData to evaluate ### `stdlib::shell_escape` Type: Ruby 4.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. #### `stdlib::shell_escape(Any $string)` >* 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` An escaped string that can be safely used in a Bourne shell command line. ##### `string` Data type: `Any` The string to escape ### `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. ### `stdlib::str2resource` Type: Ruby 4.x API This attempts to convert a string like 'File[/foo]' into the puppet resource `File['/foo']` as detected by the catalog. Things like 'File[/foo, /bar]' are not supported as a title might contain things like ',' or ' '. There is no clear value seperator to use. This function can depend on the parse order of your manifests/modules as it inspects the catalog thus far. #### Examples ##### ```puppet stdlib::str2resource('File[/foo]') => File[/foo] ``` #### `stdlib::str2resource(String $res_string)` This attempts to convert a string like 'File[/foo]' into the puppet resource `File['/foo']` as detected by the catalog. Things like 'File[/foo, /bar]' are not supported as a title might contain things like ',' or ' '. There is no clear value seperator to use. This function can depend on the parse order of your manifests/modules as it inspects the catalog thus far. Returns: `Any` Puppet::Resource ##### Examples ###### ```puppet stdlib::str2resource('File[/foo]') => File[/foo] ``` ##### `res_string` Data type: `String` The string to lookup as a resource ### `stdlib::to_json` Type: Ruby 4.x API Convert a data structure and output to JSON #### Examples ##### Output JSON to a file ```puppet file { '/tmp/my.json': ensure => file, content => stdlib::to_json($myhash), } ``` #### `stdlib::to_json(Any $data)` Convert a data structure and output to JSON Returns: `String` Converted data to JSON ##### Examples ###### Output JSON to a file ```puppet file { '/tmp/my.json': ensure => file, content => stdlib::to_json($myhash), } ``` ##### `data` Data type: `Any` Data structure which needs to be converted into JSON ### `stdlib::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 => stdlib::to_json_pretty($myhash), } * how to output pretty JSON skipping over keys with undef values file { '/tmp/my.json': ensure => file, content => stdlib::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 => stdlib::to_json_pretty({ param_one => 'value', param_two => { param_more => 42, }, }, nil, {indent => ' '}), } ``` #### `stdlib::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 stdlib::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 => stdlib::to_json_pretty($myhash), } * how to output pretty JSON skipping over keys with undef values file { '/tmp/my.json': ensure => file, content => stdlib::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 => stdlib::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: ```puppet 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. ### `stdlib::to_python` Type: Ruby 4.x API Convert an object into a String containing its Python representation #### Examples ##### how to output Python ```puppet # output Python to a file $listen = '0.0.0.0' $port = 8000 file { '/opt/acme/etc/settings.py': content => inline_epp(@("SETTINGS")), LISTEN = <%= stdlib::to_python($listen) %> PORT = <%= stdlib::to_python($mailserver) %> | SETTINGS } ``` #### `stdlib::to_python(Any $object)` The stdlib::to_python function. Returns: `String` The String representation of the object ##### Examples ###### how to output Python ```puppet # output Python to a file $listen = '0.0.0.0' $port = 8000 file { '/opt/acme/etc/settings.py': content => inline_epp(@("SETTINGS")), LISTEN = <%= stdlib::to_python($listen) %> PORT = <%= stdlib::to_python($mailserver) %> | SETTINGS } ``` ##### `object` Data type: `Any` The object to be converted ### `stdlib::to_ruby` Type: Ruby 4.x API Convert an object into a String containing its Ruby representation #### Examples ##### how to output Ruby ```puppet # output Ruby to a file $listen = '0.0.0.0' $port = 8000 file { '/opt/acme/etc/settings.rb': content => inline_epp(@("SETTINGS")), LISTEN = <%= stdlib::to_ruby($listen) %> PORT = <%= stdlib::to_ruby($mailserver) %> | SETTINGS } ``` #### `stdlib::to_ruby(Any $object)` The stdlib::to_ruby function. Returns: `String` The String representation of the object ##### Examples ###### how to output Ruby ```puppet # output Ruby to a file $listen = '0.0.0.0' $port = 8000 file { '/opt/acme/etc/settings.rb': content => inline_epp(@("SETTINGS")), LISTEN = <%= stdlib::to_ruby($listen) %> PORT = <%= stdlib::to_ruby($mailserver) %> | SETTINGS } ``` ##### `object` Data type: `Any` The object to be converted ### `stdlib::to_toml` Type: Ruby 4.x API Convert a data structure and output to TOML. #### Examples ##### How to output TOML to a file ```puppet file { '/tmp/config.toml': ensure => file, content => stdlib::to_toml($myhash), } ``` #### `stdlib::to_toml(Hash $data)` The stdlib::to_toml function. Returns: `String` Converted data as TOML string ##### Examples ###### How to output TOML to a file ```puppet file { '/tmp/config.toml': ensure => file, content => stdlib::to_toml($myhash), } ``` ##### `data` Data type: `Hash` Data structure which needs to be converted into TOML ### `stdlib::to_yaml` Type: Ruby 4.x API Convert a data structure and output it as YAML #### Examples ##### Output YAML to a file ```puppet file { '/tmp/my.yaml': ensure => file, content => stdlib::to_yaml($myhash), } ``` ##### Use options to control the output format ```puppet file { '/tmp/my.yaml': ensure => file, content => stdlib::to_yaml($myhash, {indentation => 4}) } ``` #### `stdlib::to_yaml(Any $data, Optional[Hash] $options)` Convert a data structure and output it as YAML Returns: `String` The YAML document ##### Examples ###### Output YAML to a file ```puppet file { '/tmp/my.yaml': ensure => file, content => stdlib::to_yaml($myhash), } ``` ###### Use options to control the output format ```puppet file { '/tmp/my.yaml': ensure => file, content => stdlib::to_yaml($myhash, {indentation => 4}) } ``` ##### `data` Data type: `Any` The data you want to convert to YAML ##### `options` Data type: `Optional[Hash]` A hash of options that will be passed to Ruby's Psych library. Note, this could change between Puppet versions, but at time of writing these are `line_width`, `indentation`, and `canonical`. ### `stdlib::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 stdlib::type_of($first_value) != stdlib::type_of($second_value) { fail("first_value and second_value are different types") } ``` ##### how to compare against an abstract type ```puppet unless stdlib::type_of($first_value) <= Numeric { fail("first_value must be Numeric") } unless stdlib::type_of{$first_value) <= Collection[1] { fail("first_value must be an Array or Hash, and contain at least one element") } ``` #### `stdlib::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 stdlib::type_of($first_value) != stdlib::type_of($second_value) { fail("first_value and second_value are different types") } ``` ###### how to compare against an abstract type ```puppet unless stdlib::type_of($first_value) <= Numeric { fail("first_value must be Numeric") } unless stdlib::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` ### `stdlib::validate_domain_name` Type: Ruby 4.x API Validate that all values passed are syntactically correct domain names. Fail compilation if any value fails this check. #### Examples ##### Passing examples ```puppet $my_domain_name = 'server.domain.tld' stdlib::validate_domain_name($my_domain_name) stdlib::validate_domain_name('domain.tld', 'puppet.com', $my_domain_name) stdlib::validate_domain_name('www.example.2com') ``` ##### Failing examples (causing compilation to abort) ```puppet stdlib::validate_domain_name(1) stdlib::validate_domain_name(true) stdlib::validate_domain_name('invalid domain') stdlib::validate_domain_name('-foo.example.com') ``` #### `stdlib::validate_domain_name(Variant[Stdlib::Fqdn, Stdlib::Dns::Zone] *$values)` The stdlib::validate_domain_name function. Returns: `Undef` passes when the given values are syntactically correct domain names or raise an error when they are not and fails compilation ##### Examples ###### Passing examples ```puppet $my_domain_name = 'server.domain.tld' stdlib::validate_domain_name($my_domain_name) stdlib::validate_domain_name('domain.tld', 'puppet.com', $my_domain_name) stdlib::validate_domain_name('www.example.2com') ``` ###### Failing examples (causing compilation to abort) ```puppet stdlib::validate_domain_name(1) stdlib::validate_domain_name(true) stdlib::validate_domain_name('invalid domain') stdlib::validate_domain_name('-foo.example.com') ``` ##### `*values` Data type: `Variant[Stdlib::Fqdn, Stdlib::Dns::Zone]` A domain name or an array of domain names to check ### `stdlib::validate_email_address` Type: Ruby 4.x API Validate that all values passed are valid email addresses. Fail compilation if any value fails this check. #### Examples ##### Passing examples ```puppet $my_email = "waldo@gmail.com" stdlib::validate_email_address($my_email) stdlib::validate_email_address("bob@gmail.com", "alice@gmail.com", $my_email) ``` ##### Failing examples (causing compilation to abort) ```puppet $some_array = [ 'bad_email@/d/efdf.com' ] stdlib::validate_email_address($some_array) ``` #### `stdlib::validate_email_address(Stdlib::Email *$values)` The stdlib::validate_email_address function. Returns: `Undef` Fail compilation if any value fails this check. ##### Examples ###### Passing examples ```puppet $my_email = "waldo@gmail.com" stdlib::validate_email_address($my_email) stdlib::validate_email_address("bob@gmail.com", "alice@gmail.com", $my_email) ``` ###### Failing examples (causing compilation to abort) ```puppet $some_array = [ 'bad_email@/d/efdf.com' ] stdlib::validate_email_address($some_array) ``` ##### `*values` Data type: `Stdlib::Email` An e-mail address or an array of e-mail addresses to check ### `stdlib::xml_encode` Type: Ruby 4.x API This function can encode strings such that they can be used directly in XML files. It supports encoding for both XML text (CharData) or attribute values (AttValue). #### Examples ##### Creating an XML file from a template ```puppet file { '/path/to/config.xml': ensure => file, content => epp( 'mymodule/config.xml.epp', { password => $password.stdlib::xml_encode, }, ), } ``` #### `stdlib::xml_encode(String $str, Optional[Enum['text','attr']] $type)` This function can encode strings such that they can be used directly in XML files. It supports encoding for both XML text (CharData) or attribute values (AttValue). Returns: `String` Returns the encoded CharData or AttValue string suitable for use in XML ##### Examples ###### Creating an XML file from a template ```puppet file { '/path/to/config.xml': ensure => file, content => epp( 'mymodule/config.xml.epp', { password => $password.stdlib::xml_encode, }, ), } ``` ##### `str` Data type: `String` The string to encode ##### `type` Data type: `Optional[Enum['text','attr']]` Whether to encode for text or an attribute ### `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'. ### `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', 'Use a s@lt h3r3 th@t is 32 byt3s', 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('Use a s@lt h3r3 th@t is 32 byt3s') $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', 'Use a s@lt h3r3 th@t is 32 byt3s', 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('Use a s@lt h3r3 th@t is 32 byt3s') $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'], } ``` ### `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 ### `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'] ``` ### `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" ``` ### `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 ``` ### `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 ### `to_json` Type: Ruby 4.x API DEPRECATED. Use the namespaced function [`stdlib::to_json`](#stdlibto_json) instead. #### `to_json(Any *$args)` The to_json function. Returns: `Any` ##### `*args` Data type: `Any` ### `to_json_pretty` Type: Ruby 4.x API DEPRECATED. Use the namespaced function [`stdlib::to_json_pretty`](#stdlibto_json_pretty) instead. #### `to_json_pretty(Any *$args)` The to_json_pretty function. Returns: `Any` ##### `*args` Data type: `Any` ### `to_python` Type: Ruby 4.x API DEPRECATED. Use the namespaced function [`stdlib::to_python`](#stdlibto_python) instead. #### `to_python(Any *$args)` The to_python function. Returns: `Any` ##### `*args` Data type: `Any` ### `to_ruby` Type: Ruby 4.x API DEPRECATED. Use the namespaced function [`stdlib::to_ruby`](#stdlibto_ruby) instead. #### `to_ruby(Any *$args)` The to_ruby function. Returns: `Any` ##### `*args` Data type: `Any` ### `to_toml` Type: Ruby 4.x API DEPRECATED. Use the namespaced function [`stdlib::to_toml`](#stdlibto_toml) instead. #### `to_toml(Any *$args)` The to_toml function. Returns: `Any` ##### `*args` Data type: `Any` ### `to_yaml` Type: Ruby 4.x API DEPRECATED. Use the namespaced function [`stdlib::to_yaml`](#stdlibto_yaml) instead. #### `to_yaml(Any *$args)` The to_yaml function. Returns: `Any` ##### `*args` Data type: `Any` ### `type_of` Type: Ruby 4.x API DEPRECATED. Use the namespaced function [`stdlib::type_of`](#stdlibtype_of) instead. #### `type_of(Any *$args)` The type_of function. Returns: `Any` ##### `*args` Data type: `Any` ### `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"] ``` ### `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. ### `uriescape` Type: Ruby 3.x API > **Note:** **Deprecated:** Starting Puppet 8, our Ruby version has upgraded to 3.2. Therefore, its no longer possible to call URI.escape as it was deprecated by 2.7 and removed completely by 3+. This function should be removed once Puppet 7 is no longer supported. #### `uriescape()` > **Note:** **Deprecated:** Starting Puppet 8, our Ruby version has upgraded to 3.2. Therefore, its no longer possible to call URI.escape as it was deprecated by 2.7 and removed completely by 3+. This function should be removed once Puppet 7 is no longer supported. Returns: `String` a string that contains the converted value ### `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') ``` ### `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') ``` ### `validate_domain_name` Type: Ruby 4.x API DEPRECATED. Use the namespaced function [`stdlib::validate_domain_name`](#stdlibvalidate_domain_name) instead. #### `validate_domain_name(Any *$args)` The validate_domain_name function. Returns: `Any` ##### `*args` Data type: `Any` ### `validate_email_address` Type: Ruby 4.x API DEPRECATED. Use the namespaced function [`stdlib::validate_email_address`](#stdlibvalidate_email_address) instead. #### `validate_email_address(Any *$args)` The validate_email_address function. Returns: `Any` ##### `*args` Data type: `Any` ### `validate_legacy` Type: Ruby 4.x API **Deprecated:** Validate a value against both the target_type (new). #### `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). 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` Unused ##### `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` Unused ##### `value` Data type: `Any` ##### `*args` Data type: `Any` Any additional values that are to be passed to the method ### `validate_x509_rsa_key_pair` Type: Ruby 3.x API Verifies that the certficate's signature was created from the supplied key. ```validate_x509_rsa_key_pair($cert, $key)``` #### `validate_x509_rsa_key_pair()` Verifies that the certficate's signature was created from the supplied key. ```validate_x509_rsa_key_pair($cert, $key)``` Returns: `Any` Fail compilation if any value fails this check. ### `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'] ``` ### `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 ### `Stdlib::Absolutepath` A strict absolutepath type Alias of `Variant[Stdlib::Windowspath, Stdlib::Unixpath]` ### `Stdlib::Base32` Type to match base32 String Alias of `Pattern[/\A[a-z2-7]+={,6}\z/, /\A[A-Z2-7]+={,6}\z/]` ### `Stdlib::Base64` Type to match base64 String Alias of `Pattern[/\A[a-zA-Z0-9\/\+]+={,2}\z/]` ### `Stdlib::CreateResources` A type description used for the create_resources function #### Examples ##### As a class parameter ```puppet class myclass ( Stdlib::CreateResources $myresources = {}, ) { # Using create_resources create_resources('myresource', $myresources) # Using iteration $myresources.each |$myresource_name, $myresource_attrs| { myresource { $myresource_name: * => $myresource_attrs, } } } ``` Alias of `Hash[String[1], Hash[String[1], Any]]` ### `Stdlib::Datasize` Validate the size of data Alias of `Pattern[/^\d+(?i:[kmgt]b?|b)$/]` ### `Stdlib::Dns::Zone` Validate a DNS zone name Alias of `Pattern[/\A((([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])\.)+|\.)\z/]` ### `Stdlib::Email` https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address lint:ignore:140chars Alias of `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/]` ### `Stdlib::Ensure::File` Validate the value of the ensure parameter for a file Alias of `Enum['present', 'file', 'directory', 'link', 'absent']` ### `Stdlib::Ensure::File::Directory` Validate the ensure parameter of a "directory" file resource Alias of `Enum['directory', 'absent']` ### `Stdlib::Ensure::File::File` Validate the ensure parameter of a "file" file resource Alias of `Enum['file', 'absent']` ### `Stdlib::Ensure::File::Link` Validate the ensure parameter of a "link" file resource Alias of `Enum['link', 'absent']` ### `Stdlib::Ensure::Package` Validate the value of the ensure parameter for a package Alias of `Variant[Enum['present', 'absent', 'purged', 'disabled', 'installed', 'latest'], String[1]]` ### `Stdlib::Ensure::Service` Validate the value of the ensure parameter of a service resource Alias of `Enum['stopped', 'running']` ### `Stdlib::Filemode` See `man chmod.1` for the regular expression for symbolic mode lint:ignore:140chars Alias of `Pattern[/\A(([0-7]{1,4})|(([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+)(,([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+))*))\z/]` ### `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/, ]] ``` ### `Stdlib::Fqdn` Validate a Fully Qualified Domain Name Alias of `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/]` ### `Stdlib::HTTPSUrl` Validate a HTTPS URL Alias of `Pattern[/(?i:\Ahttps:\/\/.*\z)/]` ### `Stdlib::HTTPUrl` Validate a HTTP(S) URL Alias of `Pattern[/(?i:\Ahttps?:\/\/.*\z)/]` ### `Stdlib::Host` Validate a host (FQDN or IP address) Alias of `Variant[Stdlib::Fqdn, Stdlib::IP::Address]` ### `Stdlib::Http::Method` Valid HTTP method verbs * **See also** * https://www.iana.org/assignments/http-methods/http-methods.xhtml Alias of `Enum['ACL', 'BASELINE-CONTROL', 'BIND', 'CHECKIN', 'CHECKOUT', 'CONNECT', 'COPY', 'DELETE', 'GET', 'HEAD', 'LABEL', 'LINK', 'LOCK', 'MERGE', 'MKACTIVITY', 'MKCALENDAR', 'MKCOL', 'MKREDIRECTREF', 'MKWORKSPACE', 'MOVE', 'OPTIONS', 'ORDERPATCH', 'PATCH', 'POST', 'PRI', 'PROPFIND', 'PROPPATCH', 'PUT', 'REBIND', 'REPORT', 'SEARCH', 'TRACE', 'UNBIND', 'UNCHECKOUT', 'UNLINK', 'UNLOCK', 'UPDATE', 'UPDATEREDIRECTREF', 'VERSION-CONTROL']` ### `Stdlib::Http::Status` A valid HTTP status code per RFC9110 * **See also** * https://httpwg.org/specs/rfc9110.html#overview.of.status.codes Alias of `Integer[100, 599]` ### `Stdlib::HttpStatus` Validate a HTTP status code * **DEPRECATED** Use Stdlib::Http::Status * **See also** * Stdlib::Http::Status Alias of `Stdlib::Http::Status` ### `Stdlib::IP::Address` Validate an IP address Alias of `Variant[Stdlib::IP::Address::V4, Stdlib::IP::Address::V6]` ### `Stdlib::IP::Address::CIDR` Validate an IP address with subnet Alias of `Variant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V6::CIDR]` ### `Stdlib::IP::Address::Nosubnet` Validate an IP address without subnet Alias of `Variant[Stdlib::IP::Address::V4::Nosubnet, Stdlib::IP::Address::V6::Nosubnet]` ### `Stdlib::IP::Address::V4` Validate an IPv4 address Alias of `Variant[Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V4::Nosubnet]` ### `Stdlib::IP::Address::V4::CIDR` lint:ignore:140chars Alias of `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/]` ### `Stdlib::IP::Address::V4::Nosubnet` lint:ignore:140chars Alias of `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/]` ### `Stdlib::IP::Address::V6` Validate an IPv6 address Alias of `Variant[Stdlib::IP::Address::V6::Full, Stdlib::IP::Address::V6::Compressed, Stdlib::IP::Address::V6::Alternative, Stdlib::IP::Address::V6::Nosubnet]` ### `Stdlib::IP::Address::V6::Alternative` lint:ignore:140chars Alias of `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/]` ### `Stdlib::IP::Address::V6::CIDR` lint:ignore:140chars Alias of `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/]` ### `Stdlib::IP::Address::V6::Compressed` Validate a compressed IPv6 address Alias of `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/]` ### `Stdlib::IP::Address::V6::Full` Validate a full IPv6 address Alias of `Pattern[/\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/]` ### `Stdlib::IP::Address::V6::Nosubnet` Validate an IPv6 address without subnet Alias of `Variant[Stdlib::IP::Address::V6::Nosubnet::Full, Stdlib::IP::Address::V6::Nosubnet::Compressed, Stdlib::IP::Address::V6::Nosubnet::Alternative]` ### `Stdlib::IP::Address::V6::Nosubnet::Alternative` lint:ignore:140chars Alias of `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/]` ### `Stdlib::IP::Address::V6::Nosubnet::Compressed` Validate compressed IPv6 address without subnet Alias of `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/]` ### `Stdlib::IP::Address::V6::Nosubnet::Full` Validate full IPv6 address without subnet Alias of `Pattern[/\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}\z/]` ### `Stdlib::MAC` A type for a MAC address Alias of `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/]` ### `Stdlib::ObjectStore` Validate an ObjectStore Alias of `Variant[Stdlib::ObjectStore::GSUri, Stdlib::ObjectStore::S3Uri]` ### `Stdlib::ObjectStore::GSUri` Validate a Google Cloud object store URI Alias of `Pattern[/\Ags:\/\/.*\z/]` ### `Stdlib::ObjectStore::S3Uri` Validate an Amazon Web Services S3 object store URI Alias of `Pattern[/\As3:\/\/.*\z/]` ### `Stdlib::Port` Validate a port number Alias of `Integer[0, 65535]` ### `Stdlib::Port::Dynamic` Validate a dynamic port number Alias of `Integer[49152, 65535]` ### `Stdlib::Port::Ephemeral` Validate an ephemeral port number Alias of `Stdlib::Port::Dynamic` ### `Stdlib::Port::Privileged` Validate a priviliged port number Alias of `Integer[1, 1023]` ### `Stdlib::Port::Registered` Validate a registered port number Alias of `Stdlib::Port::User` ### `Stdlib::Port::Unprivileged` Validate an unprivileged port number Alias of `Integer[1024, 65535]` ### `Stdlib::Port::User` Validate a port number usable by a user Alias of `Integer[1024, 49151]` ### `Stdlib::Syslogfacility` Validate a syslog facility Alias of `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']` ### `Stdlib::Unixpath` this regex rejects any path component that does not start with "/" or is NUL Alias of `Pattern[/\A\/([^\n\/\0]+\/*)*\z/]` ### `Stdlib::Windowspath` Validate a Windows path Alias of `Pattern[/\A(([a-zA-Z]:[\\\/])|([\\\/][\\\/][^\\\/]+[\\\/][^\\\/]+)|([\\\/][\\\/]\?[\\\/][^\\\/]+)).*\z/]` ### `Stdlib::Yes_no` Validate a yes / no value Alias of `Pattern[/\A(?i:(yes|no))\z/]` puppetlabs-stdlib-9.4.1/RELEASE_PROCESS.markdown0100644000175100001770000000173314523206606016201 0ustar00# Contributing to this module # * Work in a topic branch * Submit a github pull request * Address any comments / feeback * Merge into main using --no-ff # Releasing this module # * This module adheres to http://semver.org/ * Look for API breaking changes using git diff vX.Y.Z.. * 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 only small minor changes, the patch version may be bumped. * Update the CHANGELOG * Update the Modulefile * Commit these changes with a message along the lines of "Update CHANGELOG and Modulefile for release" * Create an annotated tag with git tag -a vX.Y.Z -m 'version X.Y.Z' (NOTE the leading v as per semver.org) * Push the tag with git push origin --tags * Build a new package with puppet-module or the rake build task if it exists * Publish the new package to the forge * Bonus points for an announcement to puppet-users. puppetlabs-stdlib-9.4.1/data0040755000000000000000000000000014523206607012754 5ustar00puppetlabs-stdlib-9.4.1/data/common.yaml0100644000175100001770000000000714523206606015235 0ustar00--- {} puppetlabs-stdlib-9.4.1/examples0040755000000000000000000000000014523206607013661 5ustar00puppetlabs-stdlib-9.4.1/examples/file_line.pp0100644000175100001770000000030114523206606016252 0ustar00# This is a simple smoke test # of the file_line resource type. file { '/tmp/dansfile': ensure => file, } -> file_line { 'dans_line': line => 'dan is awesome', path => '/tmp/dansfile', } puppetlabs-stdlib-9.4.1/examples/has_interface_with.pp0100644000175100001770000000136114523206606020161 0ustar00include stdlib info('has_interface_with(\'lo\'):', has_interface_with('lo')) 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.100\'):', has_interface_with('ipaddress', '127.0.0.100')) info('has_interface_with(\'network\', \'127.0.0.0\'):', has_interface_with('network', '127.0.0.0')) info('has_interface_with(\'network\', \'128.0.0.0\'):', has_interface_with('network', '128.0.0.0')) info('has_interface_with(\'netmask\', \'255.0.0.0\'):', has_interface_with('netmask', '255.0.0.0')) info('has_interface_with(\'netmask\', \'256.0.0.0\'):', has_interface_with('netmask', '256.0.0.0')) puppetlabs-stdlib-9.4.1/examples/has_ip_address.pp0100644000175100001770000000023714523206606017304 0ustar00include stdlib 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')) puppetlabs-stdlib-9.4.1/examples/has_ip_network.pp0100644000175100001770000000022714523206606017347 0ustar00include stdlib 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')) puppetlabs-stdlib-9.4.1/examples/init.pp0100644000175100001770000000001714523206606015273 0ustar00include stdlib puppetlabs-stdlib-9.4.1/functions0040755000000000000000000000000014523206607014053 5ustar00puppetlabs-stdlib-9.4.1/functions/deferrable_epp.pp0100644000175100001770000000141214523206606017461 0ustar00# This function returns either a rendered template or a deferred function to render at runtime. # If any of the values in the variables hash are deferred, then the template will be deferred. # # Note: this function requires all parameters to be explicitly passed in. It cannot expect to # use facts, class variables, and other variables in scope. This is because when deferred, we # have to explicitly pass the entire scope to the client. # function stdlib::deferrable_epp(String $template, Hash $variables) >> Variant[String, Sensitive[String], Deferred] { if $variables.stdlib::nested_values.any |$value| { $value.is_a(Deferred) } { Deferred( 'inline_epp', [find_template($template).file, $variables], ) } else { epp($template, $variables) } } puppetlabs-stdlib-9.4.1/functions/ensure.pp0100644000175100001770000000141514523206606016026 0ustar00# @summary function to cast ensure parameter to resource specific value # # @return [String] function stdlib::ensure( Variant[Boolean, Enum['present', 'absent']] $ensure, Optional[Enum['directory', 'link', 'mounted', 'service', 'file', 'package']] $resource = undef, ) >> String { $_ensure = $ensure ? { Boolean => $ensure.bool2str('present', 'absent'), default => $ensure, } case $resource { 'package': { $_ensure ? { 'present' => 'installed', default => 'absent', } } 'service': { $_ensure ? { 'present' => 'running', default => 'stopped', } } undef: { $_ensure } default: { $_ensure ? { 'present' => $resource, default => $_ensure, } } } } puppetlabs-stdlib-9.4.1/hiera.yaml0100644000175100001770000000125514523206606014132 0ustar00--- 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' puppetlabs-stdlib-9.4.1/lib0040755000000000000000000000000014523206607012611 5ustar00puppetlabs-stdlib-9.4.1/lib/facter0040755000000000000000000000000014523206607014055 5ustar00puppetlabs-stdlib-9.4.1/lib/facter/package_provider.rb0100644000175100001770000000107014523206606020015 0ustar00# frozen_string_literal: true # Fact: package_provider # # Purpose: Returns the default provider Puppet will choose to manage packages # on this system # # Resolution: Instantiates a dummy package resource and return the provider # # Caveats: # require 'puppet/type' require 'puppet/type/package' # These will be nil if Puppet is not available. Facter.add(:package_provider) do # Instantiates a dummy package resource and return the provider setcode do Puppet::Type.type(:package).newpackage(name: 'dummy', allow_virtual: 'true')[:provider].to_s end end puppetlabs-stdlib-9.4.1/lib/facter/pe_version.rb0100644000175100001770000000265314523206606016671 0ustar00# frozen_string_literal: true # Fact: is_pe, pe_version, pe_major_version, pe_minor_version, pe_patch_version # # Purpose: Return various facts about the PE state of the system # # Resolution: Uses a regex match against puppetversion to determine whether the # machine has Puppet Enterprise installed, and what version (overall, major, # minor, patch) is installed. # # Caveats: # # Fact: pe_version Facter.add('pe_version') do setcode do found_version = Facter.value('pe_build') unless found_version puppet_ver = Facter.value('puppetversion') unless puppet_ver.nil? pe_ver = puppet_ver.match(%r{Puppet Enterprise (\d+\.\d+\.\d+)}) found_version = pe_ver[1] if pe_ver end end found_version end end # Fact: is_pe Facter.add('is_pe') do setcode do !Facter.value(:pe_version).to_s.empty? end end # Fact: pe_major_version Facter.add('pe_major_version') do confine is_pe: true setcode do pe_version = Facter.value(:pe_version) pe_version.to_s.split('.')[0] if pe_version end end # Fact: pe_minor_version Facter.add('pe_minor_version') do confine is_pe: true setcode do pe_version = Facter.value(:pe_version) pe_version.to_s.split('.')[1] if pe_version end end # Fact: pe_patch_version Facter.add('pe_patch_version') do confine is_pe: true setcode do pe_version = Facter.value(:pe_version) pe_version.to_s.split('.')[2] if pe_version end end puppetlabs-stdlib-9.4.1/lib/facter/puppet_settings.rb0100644000175100001770000000264214523206606017753 0ustar00# frozen_string_literal: true # These facter facts return the value of the Puppet vardir and environment path # settings for the node running puppet or puppet agent. The intent is to # enable Puppet modules to automatically have insight into a place where they # can place variable data, or for modules running on the puppet server to know # where environments are stored. # # The values should be directly usable in a File resource path attribute. # begin require 'facter/util/puppet_settings' rescue LoadError => e # puppet apply does not add module lib directories to the $LOAD_PATH (See # #4248). It should (in the future) but for the time being we need to be # defensive which is what this rescue block is doing. rb_file = File.join(File.dirname(__FILE__), 'util', 'puppet_settings.rb') load rb_file if File.exist?(rb_file) || raise(e) end # Facter fact returns the value of the Puppet vardir Facter.add(:puppet_vardir) do setcode do Facter::Util::PuppetSettings.with_puppet do Puppet[:vardir] end end end # Facter fact returns the value of the Puppet environment path Facter.add(:puppet_environmentpath) do setcode do Facter::Util::PuppetSettings.with_puppet do Puppet[:environmentpath] end end end # Facter fact returns the value of the Puppet server Facter.add(:puppet_server) do setcode do Facter::Util::PuppetSettings.with_puppet do Puppet[:server] end end end puppetlabs-stdlib-9.4.1/lib/facter/root_home.rb0100644000175100001770000000030414523206606016502 0ustar00# frozen_string_literal: true Facter.add(:root_home) do setcode do require 'etc' rescue LoadError # Unavailable on platforms like Windows else Etc.getpwnam('root')&.dir end end puppetlabs-stdlib-9.4.1/lib/facter/service_provider.rb0100644000175100001770000000065714523206606020074 0ustar00# frozen_string_literal: true # Fact: service_provider # # Purpose: Returns the default provider Puppet will choose to manage services # on this system # # Resolution: Instantiates a dummy service resource and return the provider # # Caveats: # require 'puppet/type' require 'puppet/type/service' Facter.add(:service_provider) do setcode do Puppet::Type.type(:service).newservice(name: 'dummy')[:provider].to_s end end puppetlabs-stdlib-9.4.1/lib/facter/util0040755000000000000000000000000014523206607015032 5ustar00puppetlabs-stdlib-9.4.1/lib/facter/util/puppet_settings.rb0100644000175100001770000000117214523206606020725 0ustar00# frozen_string_literal: true # A method to evaluate a Facter code block if puppet is loaded. module Facter::Util::PuppetSettings # This method is intended to provide a convenient way to evaluate a # Facter code block only if Puppet is loaded. This is to account for the # situation where the fact happens to be in the load path, but Puppet is # not loaded for whatever reason. Perhaps the user is simply running # facter without the --puppet flag and they happen to be working in a lib # directory of a module. def self.with_puppet Module.const_get(:Puppet) rescue NameError nil else yield end end puppetlabs-stdlib-9.4.1/lib/puppet0040755000000000000000000000000014523206607014126 5ustar00puppetlabs-stdlib-9.4.1/lib/puppet/functions0040755000000000000000000000000014523206607016136 5ustar00puppetlabs-stdlib-9.4.1/lib/puppet/functions/batch_escape.rb0100644000175100001770000000103614523206606021174 0ustar00# frozen_string_literal: true # THIS FILE WAS GENERATED BY `rake regenerate_unamespaced_shims` # @summary DEPRECATED. Use the namespaced function [`stdlib::batch_escape`](#stdlibbatch_escape) instead. Puppet::Functions.create_function(:batch_escape) do dispatch :deprecation_gen do repeated_param 'Any', :args end def deprecation_gen(*args) call_function('deprecation', 'batch_escape', 'This function is deprecated, please use stdlib::batch_escape instead.', false) call_function('stdlib::batch_escape', *args) end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/deprecation.rb0100644000175100001770000000330614523206606021072 0ustar00# frozen_string_literal: true # @summary Function to print deprecation warnings, Logs a warning once for a given key. Puppet::Functions.create_function(:deprecation) do # @param key # The uniqueness key. This function logs once for any given key. # @param message # Is the message text including any positional information that is formatted by the user/caller of the function. # @param use_strict_setting # When `true`, (the default), the function 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). dispatch :deprecation do param 'String', :key param 'String', :message optional_param 'Boolean', :use_strict_setting end def deprecation(key, message, use_strict_setting = true) # rubocop:disable Style/OptionalBooleanParameter if defined? Puppet::Pops::PuppetStack.stacktrace stacktrace = Puppet::Pops::PuppetStack.stacktrace file = stacktrace[0] line = stacktrace[1] message = "#{message} at #{file}:#{line}" end # Do nothing if using strict setting and strict is set to `off` return if use_strict_setting && Puppet.settings[:strict] == :off # Fail hard if using strict setting and strict is set to `error` raise("deprecation. #{key}. #{message}") if use_strict_setting && Puppet.settings[:strict] == :error # Otherwise raise a soft warning # (unless the STDLIB_LOG_DEPRECATIONS has been set to `false`. This is mainly for use in rspec-puppet testing to suppress noise in logs) Puppet.deprecation_warning(message, key) unless ENV['STDLIB_LOG_DEPRECATIONS'] == 'false' nil end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/ensure_packages.rb0100644000175100001770000000105714523206606021735 0ustar00# frozen_string_literal: true # @summary DEPRECATED. Use the namespaced function [`stdlib::ensure_packages`](#stdlibensure_packages) instead. Puppet::Functions.create_function(:ensure_packages, Puppet::Functions::InternalFunction) do dispatch :deprecation_gen do scope_param repeated_param 'Any', :args end def deprecation_gen(scope, *args) call_function('deprecation', 'ensure_packages', 'This function is deprecated, please use stdlib::ensure_packages instead.', false) scope.call_function('stdlib::ensure_packages', args) end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/fact.rb0100644000175100001770000000355014523206606017513 0ustar00# frozen_string_literal: true # @summary # Digs into the facts hash using dot-notation # # Supports the use of dot-notation for referring to structured facts. If a fact requested # does not exist, returns Undef. # # @example Example usage: # fact('osfamily') # fact('os.architecture') # # @example Array indexing: # fact('mountpoints."/dev".options.1') # # @example Fact containing a "." in the name: # fact('vmware."VRA.version"') # Puppet::Functions.create_function(:fact) do # @param fact_name # The name of the fact to check # # @return # All information retrieved on the given fact_name dispatch :fact do param 'String', :fact_name end def to_dot_syntax(array_path) array_path.map { |string| string.include?('.') ? %("#{string}") : string }.join('.') end def fact(fact_name) facts = closure_scope['facts'] # Transform the dot-notation string into an array of paths to walk. Make # sure to correctly extract double-quoted values containing dots as single # elements in the path. path = fact_name.scan(%r{([^."]+)|(?:")([^"]+)(?:")}).map { |x| x.compact.first } walked_path = [] path.reduce(facts) do |d, k| return nil if d.nil? || k.nil? if d.is_a?(Array) begin result = d[Integer(k)] rescue ArgumentError => e # rubocop:disable Lint/UselessAssignment : Causes errors if assigment is removed. Puppet.warning("fact request for #{fact_name} returning nil: '#{to_dot_syntax(walked_path)}' is an array; cannot index to '#{k}'") result = nil end elsif d.is_a?(Hash) result = d[k] else Puppet.warning("fact request for #{fact_name} returning nil: '#{to_dot_syntax(walked_path)}' is not a collection; cannot walk to '#{k}'") result = nil end walked_path << k result end end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/fqdn_rand_string.rb0100644000175100001770000000106614523206606022120 0ustar00# frozen_string_literal: true # THIS FILE WAS GENERATED BY `rake regenerate_unamespaced_shims` # @summary DEPRECATED. Use the namespaced function [`stdlib::fqdn_rand_string`](#stdlibfqdn_rand_string) instead. Puppet::Functions.create_function(:fqdn_rand_string) do dispatch :deprecation_gen do repeated_param 'Any', :args end def deprecation_gen(*args) call_function('deprecation', 'fqdn_rand_string', 'This function is deprecated, please use stdlib::fqdn_rand_string instead.', false) call_function('stdlib::fqdn_rand_string', *args) end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/fqdn_rotate.rb0100644000175100001770000000103014523206606021073 0ustar00# frozen_string_literal: true # THIS FILE WAS GENERATED BY `rake regenerate_unamespaced_shims` # @summary DEPRECATED. Use the namespaced function [`stdlib::fqdn_rotate`](#stdlibfqdn_rotate) instead. Puppet::Functions.create_function(:fqdn_rotate) do dispatch :deprecation_gen do repeated_param 'Any', :args end def deprecation_gen(*args) call_function('deprecation', 'fqdn_rotate', 'This function is deprecated, please use stdlib::fqdn_rotate instead.', false) call_function('stdlib::fqdn_rotate', *args) end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/has_interface_with.rb0100644000175100001770000000110214523206606022413 0ustar00# frozen_string_literal: true # THIS FILE WAS GENERATED BY `rake regenerate_unamespaced_shims` # @summary DEPRECATED. Use the namespaced function [`stdlib::has_interface_with`](#stdlibhas_interface_with) instead. Puppet::Functions.create_function(:has_interface_with) do dispatch :deprecation_gen do repeated_param 'Any', :args end def deprecation_gen(*args) call_function('deprecation', 'has_interface_with', 'This function is deprecated, please use stdlib::has_interface_with instead.', false) call_function('stdlib::has_interface_with', *args) end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/is_a.rb0100644000175100001770000000233014523206606017504 0ustar00# frozen_string_literal: true # @summary # Boolean check to determine whether a variable is of a given data type. # This is equivalent to the `=~` type checks. # # @example Example Usage: # # 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!': } # } # # 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. # Puppet::Functions.create_function(:is_a) do # @param value # The value to be checked # # @param type # The expected type # # @return [Boolean] # Return's `true` or `false`. dispatch :is_a do param 'Any', :value param 'Type', :type end def is_a(value, type) # rubocop:disable Naming/PredicateName : Used in to many other places to rename at this time, attempting to refactor caused Rubocop to crash. # See puppet's lib/puppet/pops/evaluator/evaluator_impl.rb eval_MatchExpression Puppet::Pops::Types::TypeCalculator.instance?(type, value) end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/merge.rb0100644000175100001770000000111514523206606017670 0ustar00# frozen_string_literal: true # THIS FILE WAS GENERATED BY `rake regenerate_unamespaced_shims` # @summary DEPRECATED. Use the namespaced function [`stdlib::merge`](#stdlibmerge) instead. Puppet::Functions.create_function(:merge) do dispatch :deprecation_gen do repeated_param 'Any', :args optional_block_param 'Variant[Callable[2,2], Callable[3,3]]', :block end def deprecation_gen(*args, &block) call_function('deprecation', 'merge', 'This function is deprecated, please use stdlib::merge instead.', false) call_function('stdlib::merge', *args, &block) end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/os_version_gte.rb0100644000175100001770000000105214523206606021616 0ustar00# frozen_string_literal: true # THIS FILE WAS GENERATED BY `rake regenerate_unamespaced_shims` # @summary DEPRECATED. Use the namespaced function [`stdlib::os_version_gte`](#stdlibos_version_gte) instead. Puppet::Functions.create_function(:os_version_gte) do dispatch :deprecation_gen do repeated_param 'Any', :args end def deprecation_gen(*args) call_function('deprecation', 'os_version_gte', 'This function is deprecated, please use stdlib::os_version_gte instead.', false) call_function('stdlib::os_version_gte', *args) end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/parsehocon.rb0100644000175100001770000000102214523206606020727 0ustar00# frozen_string_literal: true # THIS FILE WAS GENERATED BY `rake regenerate_unamespaced_shims` # @summary DEPRECATED. Use the namespaced function [`stdlib::parsehocon`](#stdlibparsehocon) instead. Puppet::Functions.create_function(:parsehocon) do dispatch :deprecation_gen do repeated_param 'Any', :args end def deprecation_gen(*args) call_function('deprecation', 'parsehocon', 'This function is deprecated, please use stdlib::parsehocon instead.', false) call_function('stdlib::parsehocon', *args) end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/parsepson.rb0100644000175100001770000000241514523206606020607 0ustar00# frozen_string_literal: true # @summary # **Deprecated:** Starting Puppet 8, we no longer natively support PSON usage. This function should be removed once we stop supporting Puppet 7. # # This function accepts PSON, a Puppet variant of JSON, as a string and converts # it into the correct Puppet structure # # @example How to parse pson # $data = parsepson('{"a":"1","b":"2"}') # # For more information on PSON please see the following link: # https://puppet.com/docs/puppet/7/http_api/pson.html # Puppet::Functions.create_function(:parsepson) do # @param pson_string A valid PSON string # @param default An optional default to return if parsing the pson_string fails # @return [Data] dispatch :parsepson do param 'String[1]', :pson_string optional_param 'Any', :default end def parsepson(pson_string, default = :no_default_provided) call_function('deprecation', 'parsepson', 'This method is deprecated. From Puppet 8, PSON is no longer natively supported. Please use JSON.parse().') PSON.load(pson_string) if Puppet::Util::Package.versioncmp(Puppet.version, '8').negative? rescue StandardError => e Puppet.debug("Parsing PSON failed with error: #{e.message}") raise e if default == :no_default_provided default end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/powershell_escape.rb0100644000175100001770000000107414523206606022301 0ustar00# frozen_string_literal: true # THIS FILE WAS GENERATED BY `rake regenerate_unamespaced_shims` # @summary DEPRECATED. Use the namespaced function [`stdlib::powershell_escape`](#stdlibpowershell_escape) instead. Puppet::Functions.create_function(:powershell_escape) do dispatch :deprecation_gen do repeated_param 'Any', :args end def deprecation_gen(*args) call_function('deprecation', 'powershell_escape', 'This function is deprecated, please use stdlib::powershell_escape instead.', false) call_function('stdlib::powershell_escape', *args) end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/seeded_rand.rb0100644000175100001770000000103014523206606021022 0ustar00# frozen_string_literal: true # THIS FILE WAS GENERATED BY `rake regenerate_unamespaced_shims` # @summary DEPRECATED. Use the namespaced function [`stdlib::seeded_rand`](#stdlibseeded_rand) instead. Puppet::Functions.create_function(:seeded_rand) do dispatch :deprecation_gen do repeated_param 'Any', :args end def deprecation_gen(*args) call_function('deprecation', 'seeded_rand', 'This function is deprecated, please use stdlib::seeded_rand instead.', false) call_function('stdlib::seeded_rand', *args) end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/seeded_rand_string.rb0100644000175100001770000000110214523206606022410 0ustar00# frozen_string_literal: true # THIS FILE WAS GENERATED BY `rake regenerate_unamespaced_shims` # @summary DEPRECATED. Use the namespaced function [`stdlib::seeded_rand_string`](#stdlibseeded_rand_string) instead. Puppet::Functions.create_function(:seeded_rand_string) do dispatch :deprecation_gen do repeated_param 'Any', :args end def deprecation_gen(*args) call_function('deprecation', 'seeded_rand_string', 'This function is deprecated, please use stdlib::seeded_rand_string instead.', false) call_function('stdlib::seeded_rand_string', *args) end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/shell_escape.rb0100644000175100001770000000103614523206606021222 0ustar00# frozen_string_literal: true # THIS FILE WAS GENERATED BY `rake regenerate_unamespaced_shims` # @summary DEPRECATED. Use the namespaced function [`stdlib::shell_escape`](#stdlibshell_escape) instead. Puppet::Functions.create_function(:shell_escape) do dispatch :deprecation_gen do repeated_param 'Any', :args end def deprecation_gen(*args) call_function('deprecation', 'shell_escape', 'This function is deprecated, please use stdlib::shell_escape instead.', false) call_function('stdlib::shell_escape', *args) end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/stdlib0040755000000000000000000000000014523206607017417 5ustar00puppetlabs-stdlib-9.4.1/lib/puppet/functions/stdlib/batch_escape.rb0100644000175100001770000000142314523206606022455 0ustar00# frozen_string_literal: true # @summary # Escapes a string so that it can be safely used in a batch shell command line. # # >* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single # quotes. Puppet::Functions.create_function(:'stdlib::batch_escape') do # @param string # The string to escape # # @return # An escaped string that can be safely used in a batch command line. dispatch :batch_escape do param 'Any', :string end def batch_escape(string) result = '' string.to_s.chars.each do |char| result += case char when '"' then '""' when '$', '\\' then "\\#{char}" else char end end %("#{result}") end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/stdlib/crc32.rb0100644000175100001770000000173614523206606020777 0ustar00# frozen_string_literal: true require 'zlib' # @note # The CRC32 algorithm can easily generate collisions, # but may be useful for generating sharding, describing # secrets, or seeding nonce values. # # @summary # Run a CRC32 calculation against a given value. Puppet::Functions.create_function(:'stdlib::crc32') do # @param my_data The ScalarData to evaluate # @example Check a simple string value # stdlib::crc32('my string') == '18fbd270' # @example Check a Sensitive datatype # stdlib::crc32(sensitive('my string')) == '18fbd270' # @example Check a number # stdlib::crc32(100.0) == 'a3fd429a' # stdlib::crc32(100.00000) == 'a3fd429a' # @return String dispatch :crc32 do param 'Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]]', :my_data return_type 'String' end def crc32(my_data) Zlib.crc32(my_data.unwrap.to_s).to_s(16).downcase rescue StandardError Zlib.crc32(my_data.to_s).to_s(16).downcase end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/stdlib/end_with.rb0100644000175100001770000000133214523206606021654 0ustar00# frozen_string_literal: true # @summary # Returns true if str ends with one of the prefixes given. Each of the prefixes should be a String. # Puppet::Functions.create_function(:'stdlib::end_with') do # @param test_string The string to check # @param suffixes The suffixes to check # @example # 'foobar'.stdlib::end_with('bar') => true # 'foobar'.stdlib::end_with('foo') => false # 'foobar'.stdlib::end_with(['foo', 'baz']) => false # @return [Boolean] True or False dispatch :end_with do param 'String', :test_string param 'Variant[String[1],Array[String[1], 1]]', :suffixes return_type 'Boolean' end def end_with(test_string, suffixes) test_string.end_with?(*suffixes) end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/stdlib/ensure_packages.rb0100644000175100001770000000436314523206606023221 0ustar00# frozen_string_literal: true # @summary Takes a list of packages and only installs them if they don't already exist. # # It optionally takes a hash as a second parameter that will be passed as the # third argument to the ensure_resource() function. Puppet::Functions.create_function(:'stdlib::ensure_packages', Puppet::Functions::InternalFunction) do # @param packages # The packages to ensure are installed. # @param default_attributes # Default attributes to be passed to the `ensure_resource()` function # @return [Undef] Returns nothing. dispatch :ensure_packages do scope_param param 'Variant[String[1], Array[String[1]]]', :packages optional_param 'Hash', :default_attributes return_type 'Undef' end # @param packages # The packages to ensure are installed. The keys are packages and values are the attributes specific to that package. # @param default_attributes # Default attributes. Package specific attributes from the `packages` parameter will take precedence. # @return [Undef] Returns nothing. dispatch :ensure_packages_hash do scope_param param 'Hash[String[1], Any]', :packages optional_param 'Hash', :default_attributes return_type 'Undef' end def ensure_packages(scope, packages, default_attributes = {}) Array(packages).each do |package_name| defaults = { 'ensure' => 'installed' }.merge(default_attributes) # `present` and `installed` are aliases for the `ensure` attribute. If `ensure` is set to either of these values replace # with `installed` by default but `present` if this package is already in the catalog with `ensure => present` defaults['ensure'] = default_ensure(package_name) if ['present', 'installed'].include?(defaults['ensure']) scope.call_function('ensure_resource', ['package', package_name, defaults]) end nil end def ensure_packages_hash(scope, packages, default_attributes = {}) packages.each do |package, attributes| ensure_packages(scope, package, default_attributes.merge(attributes)) end nil end private def default_ensure(package_name) if call_function('defined_with_params', "Package[#{package_name}]", { 'ensure' => 'present' }) 'present' else 'installed' end end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/stdlib/extname.rb0100644000175100001770000000157214523206606021522 0ustar00# frozen_string_literal: true # @summary # Returns the Extension (the Portion of Filename in Path starting from the # last Period). # # 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. Puppet::Functions.create_function(:'stdlib::extname') do # @param filename The Filename # @return [String] The Extension starting from the last Period # @example Determining the Extension of a Filename # stdlib::extname('test.rb') => '.rb' # stdlib::extname('a/b/d/test.rb') => '.rb' # stdlib::extname('test') => '' # stdlib::extname('.profile') => '' dispatch :extname do param 'String', :filename return_type 'String' end def extname(filename) File.extname(filename) end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/stdlib/fqdn_rand_string.rb0100644000175100001770000000236214523206606023401 0ustar00# frozen_string_literal: true # @summary # 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). Puppet::Functions.create_function(:'stdlib::fqdn_rand_string') do # @param length The length of the resulting string. # @param charset The character set to use. # @param seed The seed for repeatable randomness. # # @return [String] # # @example Example Usage: # stdlib::fqdn_rand_string(10) # stdlib::fqdn_rand_string(10, 'ABCDEF!@$%^') # stdlib::fqdn_rand_string(10, undef, 'custom seed') dispatch :fqdn_rand_string do param 'Integer[1]', :length optional_param 'Optional[String]', :charset optional_repeated_param 'Any', :seed end def fqdn_rand_string(length, charset = nil, *seed) charset = if charset && !charset.empty? charset.chars.to_a else (0..9).map(&:to_s) + ('A'..'Z').to_a + ('a'..'z').to_a end rand_string = '' length.times do |current| rand_string += charset[call_function('fqdn_rand', charset.size, (seed + [current + 1]).join(':'))] end rand_string end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/stdlib/fqdn_rotate.rb0100644000175100001770000000356514523206606022373 0ustar00# frozen_string_literal: true # @summary Rotates an array or string a random number of times, combining the `fqdn` fact and an optional seed for repeatable randomness. Puppet::Functions.create_function(:'stdlib::fqdn_rotate') do # @param input # The String you want rotated a random number of times # @param seeds # One of more values to use as a custom seed. These will be combined with the host's FQDN # # @return [String] Returns the rotated String # # @example Rotating a String # stdlib::fqdn_rotate('abcd') # @example Using a custom seed # stdlib::fqdn_rotate('abcd', 'custom seed') dispatch :fqdn_rotate_string do param 'String', :input optional_repeated_param 'Variant[Integer,String]', :seeds return_type 'String' end # @param input # The Array you want rotated a random number of times # @param seeds # One of more values to use as a custom seed. These will be combined with the host's FQDN # # @return [String] Returns the rotated Array # # @example Rotating an Array # stdlib::fqdn_rotate(['a', 'b', 'c', 'd']) # @example Using custom seeds # stdlib::fqdn_rotate([1, 2, 3], 'custom', 'seed', 1) dispatch :fqdn_rotate_array do param 'Array', :input optional_repeated_param 'Variant[Integer,String]', :seeds return_type 'Array' end def fqdn_rotate_array(input, *seeds) # Check whether it makes sense to rotate ... return input if input.size <= 1 result = input.clone require 'digest/md5' seed = Digest::MD5.hexdigest([fqdn_fact, seeds].join(':')).hex offset = Puppet::Util.deterministic_rand(seed, result.size).to_i offset.times do result.push result.shift end result end def fqdn_rotate_string(input, *seeds) fqdn_rotate_array(input.chars, seeds).join end private def fqdn_fact closure_scope['facts']['networking']['fqdn'] end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/stdlib/has_function.rb0100644000175100001770000000216014523206606022533 0ustar00# frozen_string_literal: true # @summary # Returns whether the Puppet runtime has access to a given function. # # @example Using stdlib::has_function() # stdlib::has_function('stdlib::has_function') # true # stdlib::has_function('not_a_function') # false # # Determines whether the Puppet runtime has access to a function by the # name provided. # # @return # Returns true if the provided function name is available, false otherwise. # Puppet::Functions.create_function(:'stdlib::has_function', Puppet::Functions::InternalFunction) do dispatch :has_function do scope_param param 'String[1]', :function_name return_type 'Boolean' end def has_function(scope, function_name) # rubocop:disable Naming/PredicateName loaders = scope.compiler.loaders loader = loaders.private_environment_loader return true unless loader&.load(:function, function_name).nil? # If the loader cannot find the function it might be # a 3x-style function stubbed in on-the-fly for testing. func_3x = Puppet::Parser::Functions.function(function_name.to_sym) func_3x.is_a?(String) && !func_3x.empty? end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/stdlib/has_interface_with.rb0100644000175100001770000000356414523206606023712 0ustar00# frozen_string_literal: true # @summary Returns boolean based on network interfaces present and their attribute values. # # Can be called with one, or two arguments. Puppet::Functions.create_function(:'stdlib::has_interface_with') do # @param interface # The name of an interface # @return [Boolean] Returns `true` if `interface` exists and `false` otherwise # @example When called with a single argument, the presence of the interface is checked # stdlib::has_interface_with('lo') # Returns `true` dispatch :has_interface do param 'String[1]', :interface return_type 'Boolean' end # @param kind # A supported interface attribute # @param value # The value of the attribute # @return [Boolean] Returns `true` if any of the interfaces in the `networking` fact has a `kind` attribute with the value `value`. Otherwise returns `false` # @example Checking if an interface exists with a given mac address # stdlib::has_interface_with('macaddress', 'x:x:x:x:x:x') # Returns `false` # @example Checking if an interface exists with a given IP address # stdlib::has_interface_with('ipaddress', '127.0.0.1') # Returns `true` dispatch :has_interface_with do param "Enum['macaddress','netmask','ipaddress','network','ip','mac']", :kind param 'String[1]', :value return_type 'Boolean' end def has_interface(interface) # rubocop:disable Naming/PredicateName interfaces.key? interface end def has_interface_with(kind, value) # rubocop:disable Naming/PredicateName # For compatibility with older version of function that used the legacy facts, alias `ip` with `ipaddress` and `mac` with `macaddress` kind = 'ip' if kind == 'ipaddress' kind = 'mac' if kind == 'macaddress' interfaces.any? { |_interface, params| params[kind] == value } end def interfaces closure_scope['facts']['networking']['interfaces'] end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/stdlib/ip_in_range.rb0100644000175100001770000000160614523206606022331 0ustar00# frozen_string_literal: true # @summary # Returns true if the ipaddress is within the given CIDRs # # @example ip_in_range(, ) # stdlib::ip_in_range('10.10.10.53', '10.10.10.0/24') => true Puppet::Functions.create_function(:'stdlib::ip_in_range') do # @param ipaddress The IP address to check # @param range One CIDR or an array of CIDRs # defining the range(s) to check against # # @return [Boolean] True or False dispatch :ip_in_range do param 'String', :ipaddress param 'Variant[String, Array]', :range return_type 'Boolean' end require 'ipaddr' def ip_in_range(ipaddress, range) ip = IPAddr.new(ipaddress) if range.is_a? Array ranges = range.map { |r| IPAddr.new(r) } ranges.any? { |rng| rng.include?(ip) } elsif range.is_a? String ranges = IPAddr.new(range) ranges.include?(ip) end end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/stdlib/merge.rb0100644000175100001770000000763114523206606021162 0ustar00# frozen_string_literal: true # @summary # Merges two or more hashes together or hashes resulting from iteration, and returns # the resulting hash. # # @example Using stdlib::merge() # $hash1 = {'one' => 1, 'two', => 2} # $hash2 = {'two' => 'dos', 'three', => 'tres'} # $merged_hash = stdlib::merge($hash1, $hash2) # $merged_hash = {'one' => 1, 'two' => 'dos', 'three' => 'tres'} # # 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 stdlib::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. # # @example counting occurrences of strings in an array # ['a', 'b', 'c', 'c', 'd', 'b'].stdlib::merge | $hsh, $v | { { $v => $hsh[$v].lest || { 0 } + 1 } } # results in { a => 1, b => 2, c => 2, d => 1 } # # @example skipping values for entries that are longer than 1 char # ['a', 'b', 'c', 'c', 'd', 'b', 'blah', 'blah'].stdlib::merge | $hsh, $v | { if $v =~ String[1,1] { { $v => $hsh[$v].lest || { 0 } + 1 } } } # results in { a => 1, b => 2, c => 2, d => 1 } # # The iterative `stdlib::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. Puppet::Functions.create_function(:'stdlib::merge') do # @param args # Repeated Param - The hashes that are to be merged # # @return # The merged hash dispatch :merge2hashes do repeated_param 'Variant[Hash[Scalar,Any], Undef, String[0,0]]', :args # this strange type is backwards compatible return_type 'Hash[Scalar,Any]' end # @param args # Repeated Param - The hashes that are to be merged # # @param block # A block placed on the repeatable param `args` # # @return # The merged hash dispatch :merge_iterable3 do repeated_param 'Iterable', :args block_param 'Callable[3,3]', :block return_type 'Hash' end # @param args # Repeated Param - The hashes that are to be merged # # @param block # A block placed on the repeatable param `args` # # @return # The merged hash dispatch :merge_iterable2 do repeated_param 'Iterable', :args block_param 'Callable[2,2]', :block return_type 'Hash' end def merge2hashes(*hashes) accumulator = {} hashes.each { |h| accumulator.merge!(h) if h.is_a?(Hash) } accumulator end def merge_iterable2(iterable) accumulator = {} enum = Puppet::Pops::Types::Iterable.asserted_iterable(self, iterable) enum.each do |v| r = yield(accumulator, v) accumulator.merge!(r) if r.is_a?(Hash) end accumulator end def merge_iterable3(iterable) accumulator = {} enum = Puppet::Pops::Types::Iterable.asserted_iterable(self, iterable) if enum.hash_style? enum.each do |entry| r = yield(accumulator, *entry) accumulator.merge!(r) if r.is_a?(Hash) end else begin index = 0 loop do r = yield(accumulator, index, enum.next) accumulator.merge!(r) if r.is_a?(Hash) index += 1 end rescue StopIteration end end accumulator end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/stdlib/nested_values.rb0100644000175100001770000000150714523206606022720 0ustar00# frozen_string_literal: true # @summary Get list of nested values from given hash # This function will return list of nested Hash values and returns list of values in form of Array # # @example Example Usage: # $hash = { # "key1" => "value1", # "key2" => { "key2.1" => "value2.1"}, # "key3" => "value3" # } # $data = $hash.stdlib::nested_values # #Output : ["value1", "value2.1", "value3"] Puppet::Functions.create_function(:'stdlib::nested_values') do # @param hash A (nested) hash # @return All the values found in the input hash included those deeply nested. dispatch :nested_values do param 'Hash', :hash return_type 'Array' end def nested_values(hash) hash.each_with_object([]) do |(_k, v), values| v.is_a?(Hash) ? values.concat(nested_values(v)) : (values << v) end end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/stdlib/os_version_gte.rb0100644000175100001770000000140714523206606023103 0ustar00# frozen_string_literal: true # @summary # Checks if the OS version is at least a certain version. # > *Note:* # Only the major version is taken into account. # # @example Example usage:# # if stdlib::os_version_gte('Debian', '9') { } # if stdlib::os_version_gte('Ubuntu', '18.04') { } Puppet::Functions.create_function(:'stdlib::os_version_gte') do # @param os operating system # @param version # # @return [Boolean] `true` or `false dispatch :os_version_gte do param 'String[1]', :os param 'String[1]', :version return_type 'Boolean' end def os_version_gte(os, version) facts = closure_scope['facts'] (facts['os']['name'] == os && Puppet::Util::Package.versioncmp(facts['os']['release']['major'], version) >= 0) end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/stdlib/parsehocon.rb0100644000175100001770000000167614523206606022227 0ustar00# frozen_string_literal: true # @summary # This function accepts HOCON as a string and converts it into the correct # Puppet structure # # @example How to parse hocon # $data = stdlib::parsehocon("{any valid hocon: string}") # Puppet::Functions.create_function(:'stdlib::parsehocon') do # @param hocon_string A valid HOCON string # @param default An optional default to return if parsing hocon_string fails # @return [Data] dispatch :parsehocon do param 'String', :hocon_string optional_param 'Any', :default end def parsehocon(hocon_string, default = :no_default_provided) require 'hocon/config_factory' begin data = Hocon::ConfigFactory.parse_string(hocon_string) data.resolve.root.unwrapped rescue Hocon::ConfigError::ConfigParseError => e Puppet.debug("Parsing hocon failed with error: #{e.message}") raise e if default == :no_default_provided default end end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/stdlib/powershell_escape.rb0100644000175100001770000000146214523206606023563 0ustar00# frozen_string_literal: true # @summary # Escapes a string so that it can be safely used in a PowerShell command line. # # >* Note:* that the resulting string should be used unquoted and is not intended for use in double quotes nor in single # quotes. Puppet::Functions.create_function(:'stdlib::powershell_escape') do # @param string # The string to escape # # @return # An escaped string that can be safely used in a PowerShell command line. dispatch :powershell_escape do param 'Any', :string end def powershell_escape(string) result = '' string.to_s.chars.each do |char| result += case char when ' ', "'", '`', '|', "\n", '$' then "`#{char}" when '"' then '\`"' else char end end result end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/stdlib/seeded_rand.rb0100644000175100001770000000123414523206606022311 0ustar00# frozen_string_literal: true # @summary # Generates a random whole number greater than or equal to 0 and less than max, using the value of seed for repeatable randomness. Puppet::Functions.create_function(:'stdlib::seeded_rand') do # @param max The maximum value. # @param seed The seed used for repeatable randomness. # # @return [Integer] # A random number greater than or equal to 0 and less than max dispatch :seeded_rand do param 'Integer[1]', :max param 'String', :seed end def seeded_rand(max, seed) require 'digest/md5' seed = Digest::MD5.hexdigest(seed).hex Puppet::Util.deterministic_rand_int(seed, max) end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/stdlib/seeded_rand_string.rb0100644000175100001770000000213014523206606023673 0ustar00# frozen_string_literal: true # @summary # Generates a consistent random string of specific length based on provided seed. # # @example Generate a consistently random string of length 8 with a seed: # stdlib::seeded_rand_string(8, "${module_name}::redis_password") # # @example Generate a random string from a specific set of characters: # stdlib::seeded_rand_string(5, '', 'abcdef') Puppet::Functions.create_function(:'stdlib::seeded_rand_string') do # @param length Length of string to be generated. # @param seed Seed string. # @param charset String that contains characters to use for the random string. # # @return [String] Random string. dispatch :rand_string do param 'Integer[1]', :length param 'String', :seed optional_param 'String[2]', :charset end def rand_string(length, seed, charset = nil) require 'digest/sha2' charset ||= '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' random_generator = Random.new(Digest::SHA256.hexdigest(seed).to_i(16)) Array.new(length) { charset[random_generator.rand(charset.size)] }.join end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/stdlib/sha256.rb0100644000175100001770000000203614523206606021065 0ustar00# frozen_string_literal: true require 'digest' # @summary # Run a SHA256 calculation against a given value. Puppet::Functions.create_function(:'stdlib::sha256') do # @param my_data The ScalarData to evaluate # @example Check a simple string value # stdlib::sha256('my string') == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5' # @example Check a Sensitive datatype # stdlib::sha256(sensitive('my string')) == '2f7e2089add0288a309abd71ffcc3b3567e2d4215e20e6ed3b74d6042f7ef8e5' # @example Check a number # stdlib::sha256(100.0) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0' # stdlib::sha256(100.00000) == '43b87f618caab482ebe4976c92bcd6ad308b48055f1c27b4c574f3e31d7683e0' # @return String dispatch :sha256 do param 'Variant[ScalarData, Sensitive[ScalarData], Binary, Sensitive[Binary]]', :my_data return_type 'String' end def sha256(my_data) Digest::SHA256.hexdigest(my_data.unwrap.to_s) rescue StandardError Digest::SHA256.hexdigest(my_data.to_s) end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/stdlib/shell_escape.rb0100644000175100001770000000130014523206606022475 0ustar00# frozen_string_literal: true # @summary # 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 double quotes nor in single # quotes. # # This function behaves the same as ruby's Shellwords.shellescape() function. Puppet::Functions.create_function(:'stdlib::shell_escape') do # @param string # The string to escape # # @return # An escaped string that can be safely used in a Bourne shell command line. dispatch :shell_escape do param 'Any', :string end def shell_escape(string) require 'shellwords' Shellwords.shellescape(string.to_s) end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/stdlib/start_with.rb0100644000175100001770000000135014523206606022243 0ustar00# frozen_string_literal: true # @summary # Returns true if str starts with one of the prefixes given. Each of the prefixes should be a String. # Puppet::Functions.create_function(:'stdlib::start_with') do # @param test_string The string to check # @param prefixes The prefixes to check. # @example # 'foobar'.stdlib::start_with('foo') => true # 'foobar'.stdlib::start_with('bar') => false # 'foObar'.stdlib::start_with(['bar', 'baz']) => false # @return [Boolean] True or False dispatch :start_with do param 'String', :test_string param 'Variant[String[1],Array[String[1], 1]]', :prefixes return_type 'Boolean' end def start_with(test_string, prefixes) test_string.start_with?(*prefixes) end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/stdlib/str2resource.rb0100644000175100001770000000224114523206606022515 0ustar00# frozen_string_literal: true # @summary # This converts a string to a puppet resource. # # This attempts to convert a string like 'File[/foo]' into the # puppet resource `File['/foo']` as detected by the catalog. # # Things like 'File[/foo, /bar]' are not supported as a # title might contain things like ',' or ' '. There is # no clear value seperator to use. # # This function can depend on the parse order of your # manifests/modules as it inspects the catalog thus far. Puppet::Functions.create_function(:'stdlib::str2resource') do # @param res_string The string to lookup as a resource # @example # stdlib::str2resource('File[/foo]') => File[/foo] # @return Puppet::Resource dispatch :str2resource do param 'String', :res_string # return_type 'Puppet::Resource' return_type 'Any' end def str2resource(res_string) type_name, title = Puppet::Resource.type_and_title(res_string, nil) resource = closure_scope.findresource(type_name, title) raise(Puppet::ParseError, "stdlib::str2resource(): could not find #{type_name}[#{title}], this is parse order dependent and values should not be quoted") if resource.nil? resource end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/stdlib/to_json.rb0100644000175100001770000000102314523206606021523 0ustar00# frozen_string_literal: true require 'json' # @summary # Convert a data structure and output to JSON Puppet::Functions.create_function(:'stdlib::to_json') do # @param data # Data structure which needs to be converted into JSON # # @example Output JSON to a file # file { '/tmp/my.json': # ensure => file, # content => stdlib::to_json($myhash), # } # # @return [String] Converted data to JSON dispatch :to_json do param 'Any', :data end def to_json(data) data.to_json end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/stdlib/to_json_pretty.rb0100644000175100001770000000451114523206606023137 0ustar00# frozen_string_literal: true require 'json' # @summary # Convert data structure and output to pretty JSON # # @example **Usage** # * how to output pretty JSON to file # file { '/tmp/my.json': # ensure => file, # content => stdlib::to_json_pretty($myhash), # } # # * how to output pretty JSON skipping over keys with undef values # file { '/tmp/my.json': # ensure => file, # content => stdlib::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 => stdlib::to_json_pretty({ # param_one => 'value', # param_two => { # param_more => 42, # }, # }, nil, {indent => ' '}), # } Puppet::Functions.create_function(:'stdlib::to_json_pretty') do # @param data # data structure which needs to be converted to pretty json # @param skip_undef # value `true` or `false` # @param opts # 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. # @return # converted data to pretty json dispatch :to_json_pretty do param 'Variant[Hash, Array]', :data optional_param 'Optional[Boolean]', :skip_undef optional_param '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 end def to_json_pretty(data, skip_undef = false, opts = nil) # It's not possible to make an abstract type that can be either a boolean # false or an integer, so we use -1 as the falsey value if opts opts = opts.transform_keys(&:to_sym) opts[:max_nesting] = false if opts[:max_nesting] == -1 end data = data.compact if skip_undef && (data.is_a?(Array) || Hash) # Call ::JSON to ensure it references the JSON library from Ruby's standard library # instead of a random JSON namespace that might be in scope due to user code. JSON.pretty_generate(data, opts) << "\n" end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/stdlib/to_python.rb0100644000175100001770000000231014523206606022073 0ustar00# frozen_string_literal: true # @summary # Convert an object into a String containing its Python representation # # @example how to output Python # # output Python to a file # $listen = '0.0.0.0' # $port = 8000 # file { '/opt/acme/etc/settings.py': # content => inline_epp(@("SETTINGS")), # LISTEN = <%= stdlib::to_python($listen) %> # PORT = <%= stdlib::to_python($mailserver) %> # | SETTINGS # } Puppet::Functions.create_function(:'stdlib::to_python') do # @param object # The object to be converted # # @return [String] # The String representation of the object dispatch :to_python do param 'Any', :object end def to_python(object) serialized = Puppet::Pops::Serialization::ToDataConverter.convert(object, rich_data: true) serialized_to_python(serialized) end def serialized_to_python(serialized) case serialized when true then 'True' when false then 'False' when nil then 'None' when Array then "[#{serialized.map { |x| serialized_to_python(x) }.join(', ')}]" when Hash then "{#{serialized.map { |k, v| "#{serialized_to_python(k)}: #{serialized_to_python(v)}" }.join(', ')}}" else serialized.inspect end end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/stdlib/to_ruby.rb0100644000175100001770000000214114523206606021535 0ustar00# frozen_string_literal: true # @summary # Convert an object into a String containing its Ruby representation # # @example how to output Ruby # # output Ruby to a file # $listen = '0.0.0.0' # $port = 8000 # file { '/opt/acme/etc/settings.rb': # content => inline_epp(@("SETTINGS")), # LISTEN = <%= stdlib::to_ruby($listen) %> # PORT = <%= stdlib::to_ruby($mailserver) %> # | SETTINGS # } Puppet::Functions.create_function(:'stdlib::to_ruby') do # @param object # The object to be converted # # @return [String] # The String representation of the object dispatch :to_ruby do param 'Any', :object end def to_ruby(object) serialized = Puppet::Pops::Serialization::ToDataConverter.convert(object, rich_data: true) serialized_to_ruby(serialized) end def serialized_to_ruby(serialized) case serialized when Array then "[#{serialized.map { |x| serialized_to_ruby(x) }.join(', ')}]" when Hash then "{#{serialized.map { |k, v| "#{serialized_to_ruby(k)} => #{serialized_to_ruby(v)}" }.join(', ')}}" else serialized.inspect end end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/stdlib/to_toml.rb0100644000175100001770000000121314523206606021526 0ustar00# frozen_string_literal: true require_relative '../../../puppet_x/stdlib/toml_dumper' # @summary Convert a data structure and output to TOML. Puppet::Functions.create_function(:'stdlib::to_toml') do # @param data Data structure which needs to be converted into TOML # @return [String] Converted data as TOML string # @example How to output TOML to a file # file { '/tmp/config.toml': # ensure => file, # content => stdlib::to_toml($myhash), # } dispatch :to_toml do required_param 'Hash', :data return_type 'String' end def to_toml(data) PuppetX::Stdlib::TomlDumper.new(data).toml_str end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/stdlib/to_yaml.rb0100644000175100001770000000174114523206606021523 0ustar00# frozen_string_literal: true require 'yaml' # @summary # Convert a data structure and output it as YAML Puppet::Functions.create_function(:'stdlib::to_yaml') do # @param data # The data you want to convert to YAML # @param options # A hash of options that will be passed to Ruby's Psych library. Note, this could change between Puppet versions, but at time of writing these are `line_width`, `indentation`, and `canonical`. # # @example Output YAML to a file # file { '/tmp/my.yaml': # ensure => file, # content => stdlib::to_yaml($myhash), # } # @example Use options to control the output format # file { '/tmp/my.yaml': # ensure => file, # content => stdlib::to_yaml($myhash, {indentation => 4}) # } # # @return [String] The YAML document dispatch :to_yaml do param 'Any', :data optional_param 'Hash', :options end def to_yaml(data, options = {}) data.to_yaml(options.transform_keys(&:to_sym)) end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/stdlib/type_of.rb0100644000175100001770000000213514523206606021522 0ustar00# frozen_string_literal: true # @summary # Returns the type of the passed value. # # @example how to compare values' types # # compare the types of two values # if stdlib::type_of($first_value) != stdlib::type_of($second_value) { fail("first_value and second_value are different types") } # @example how to compare against an abstract type # unless stdlib::type_of($first_value) <= Numeric { fail("first_value must be Numeric") } # unless stdlib::type_of{$first_value) <= Collection[1] { fail("first_value must be an Array or Hash, and contain at least one element") } # # 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. Puppet::Functions.create_function(:'stdlib::type_of') do # @return [String] # the type of the passed value # # @param value def type_of(value) Puppet::Pops::Types::TypeCalculator.infer_set(value) end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/stdlib/validate_domain_name.rb0100644000175100001770000000245214523206606024177 0ustar00# frozen_string_literal: true # @summary # Validate that all values passed are syntactically correct domain names. # Fail compilation if any value fails this check. Puppet::Functions.create_function(:'stdlib::validate_domain_name') do # @param values A domain name or an array of domain names to check # # @return [Undef] # passes when the given values are syntactically correct domain names or raise an error when they are not and fails compilation # # @example Passing examples # $my_domain_name = 'server.domain.tld' # stdlib::validate_domain_name($my_domain_name) # stdlib::validate_domain_name('domain.tld', 'puppet.com', $my_domain_name) # stdlib::validate_domain_name('www.example.2com') # # @example Failing examples (causing compilation to abort) # stdlib::validate_domain_name(1) # stdlib::validate_domain_name(true) # stdlib::validate_domain_name('invalid domain') # stdlib::validate_domain_name('-foo.example.com') dispatch :validate_domain_name do repeated_param 'Variant[Stdlib::Fqdn, Stdlib::Dns::Zone]', :values end def validate_domain_name(*args) assert_arg_count(args) end def assert_arg_count(args) raise(ArgumentError, 'stdlib::validate_domain_name(): Wrong number of arguments need at least one') if args.empty? end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/stdlib/validate_email_address.rb0100644000175100001770000000205414523206606024522 0ustar00# frozen_string_literal: true # @summary # Validate that all values passed are valid email addresses. # Fail compilation if any value fails this check. Puppet::Functions.create_function(:'stdlib::validate_email_address') do # @param values An e-mail address or an array of e-mail addresses to check # # @return [Undef] # Fail compilation if any value fails this check. # # @example Passing examples # $my_email = "waldo@gmail.com" # stdlib::validate_email_address($my_email) # stdlib::validate_email_address("bob@gmail.com", "alice@gmail.com", $my_email) # # @example Failing examples (causing compilation to abort) # $some_array = [ 'bad_email@/d/efdf.com' ] # stdlib::validate_email_address($some_array) dispatch :validate_email_address do repeated_param 'Stdlib::Email', :values end def validate_email_address(*args) assert_arg_count(args) end def assert_arg_count(args) raise(ArgumentError, 'stdlib::validate_email_address(): Wrong number of arguments need at least one') if args.empty? end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/stdlib/xml_encode.rb0100644000175100001770000000170214523206606022171 0ustar00# frozen_string_literal: true # @summary Encode strings for XML files # # This function can encode strings such that they can be used directly in XML files. # It supports encoding for both XML text (CharData) or attribute values (AttValue). Puppet::Functions.create_function(:'stdlib::xml_encode') do # @param str The string to encode # @param type Whether to encode for text or an attribute # @return Returns the encoded CharData or AttValue string suitable for use in XML # @example Creating an XML file from a template # file { '/path/to/config.xml': # ensure => file, # content => epp( # 'mymodule/config.xml.epp', # { # password => $password.stdlib::xml_encode, # }, # ), # } dispatch :xml_encode do param 'String', :str optional_param "Enum['text','attr']", :type return_type 'String' end def xml_encode(str, type = 'text') str.encode(xml: type.to_sym) end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/to_json.rb0100644000175100001770000000100014523206606020235 0ustar00# frozen_string_literal: true # THIS FILE WAS GENERATED BY `rake regenerate_unamespaced_shims` # @summary DEPRECATED. Use the namespaced function [`stdlib::to_json`](#stdlibto_json) instead. Puppet::Functions.create_function(:to_json) do dispatch :deprecation_gen do repeated_param 'Any', :args end def deprecation_gen(*args) call_function('deprecation', 'to_json', 'This function is deprecated, please use stdlib::to_json instead.', false) call_function('stdlib::to_json', *args) end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/to_json_pretty.rb0100644000175100001770000000105214523206606021653 0ustar00# frozen_string_literal: true # THIS FILE WAS GENERATED BY `rake regenerate_unamespaced_shims` # @summary DEPRECATED. Use the namespaced function [`stdlib::to_json_pretty`](#stdlibto_json_pretty) instead. Puppet::Functions.create_function(:to_json_pretty) do dispatch :deprecation_gen do repeated_param 'Any', :args end def deprecation_gen(*args) call_function('deprecation', 'to_json_pretty', 'This function is deprecated, please use stdlib::to_json_pretty instead.', false) call_function('stdlib::to_json_pretty', *args) end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/to_python.rb0100644000175100001770000000101414523206606020612 0ustar00# frozen_string_literal: true # THIS FILE WAS GENERATED BY `rake regenerate_unamespaced_shims` # @summary DEPRECATED. Use the namespaced function [`stdlib::to_python`](#stdlibto_python) instead. Puppet::Functions.create_function(:to_python) do dispatch :deprecation_gen do repeated_param 'Any', :args end def deprecation_gen(*args) call_function('deprecation', 'to_python', 'This function is deprecated, please use stdlib::to_python instead.', false) call_function('stdlib::to_python', *args) end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/to_ruby.rb0100644000175100001770000000100014523206606020245 0ustar00# frozen_string_literal: true # THIS FILE WAS GENERATED BY `rake regenerate_unamespaced_shims` # @summary DEPRECATED. Use the namespaced function [`stdlib::to_ruby`](#stdlibto_ruby) instead. Puppet::Functions.create_function(:to_ruby) do dispatch :deprecation_gen do repeated_param 'Any', :args end def deprecation_gen(*args) call_function('deprecation', 'to_ruby', 'This function is deprecated, please use stdlib::to_ruby instead.', false) call_function('stdlib::to_ruby', *args) end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/to_toml.rb0100644000175100001770000000100014523206606020237 0ustar00# frozen_string_literal: true # THIS FILE WAS GENERATED BY `rake regenerate_unamespaced_shims` # @summary DEPRECATED. Use the namespaced function [`stdlib::to_toml`](#stdlibto_toml) instead. Puppet::Functions.create_function(:to_toml) do dispatch :deprecation_gen do repeated_param 'Any', :args end def deprecation_gen(*args) call_function('deprecation', 'to_toml', 'This function is deprecated, please use stdlib::to_toml instead.', false) call_function('stdlib::to_toml', *args) end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/to_yaml.rb0100644000175100001770000000100014523206606020226 0ustar00# frozen_string_literal: true # THIS FILE WAS GENERATED BY `rake regenerate_unamespaced_shims` # @summary DEPRECATED. Use the namespaced function [`stdlib::to_yaml`](#stdlibto_yaml) instead. Puppet::Functions.create_function(:to_yaml) do dispatch :deprecation_gen do repeated_param 'Any', :args end def deprecation_gen(*args) call_function('deprecation', 'to_yaml', 'This function is deprecated, please use stdlib::to_yaml instead.', false) call_function('stdlib::to_yaml', *args) end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/type_of.rb0100644000175100001770000000100014523206606020227 0ustar00# frozen_string_literal: true # THIS FILE WAS GENERATED BY `rake regenerate_unamespaced_shims` # @summary DEPRECATED. Use the namespaced function [`stdlib::type_of`](#stdlibtype_of) instead. Puppet::Functions.create_function(:type_of) do dispatch :deprecation_gen do repeated_param 'Any', :args end def deprecation_gen(*args) call_function('deprecation', 'type_of', 'This function is deprecated, please use stdlib::type_of instead.', false) call_function('stdlib::type_of', *args) end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/validate_domain_name.rb0100644000175100001770000000111614523206606022712 0ustar00# frozen_string_literal: true # THIS FILE WAS GENERATED BY `rake regenerate_unamespaced_shims` # @summary DEPRECATED. Use the namespaced function [`stdlib::validate_domain_name`](#stdlibvalidate_domain_name) instead. Puppet::Functions.create_function(:validate_domain_name) do dispatch :deprecation_gen do repeated_param 'Any', :args end def deprecation_gen(*args) call_function('deprecation', 'validate_domain_name', 'This function is deprecated, please use stdlib::validate_domain_name instead.', false) call_function('stdlib::validate_domain_name', *args) end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/validate_email_address.rb0100644000175100001770000000113214523206606023235 0ustar00# frozen_string_literal: true # THIS FILE WAS GENERATED BY `rake regenerate_unamespaced_shims` # @summary DEPRECATED. Use the namespaced function [`stdlib::validate_email_address`](#stdlibvalidate_email_address) instead. Puppet::Functions.create_function(:validate_email_address) do dispatch :deprecation_gen do repeated_param 'Any', :args end def deprecation_gen(*args) call_function('deprecation', 'validate_email_address', 'This function is deprecated, please use stdlib::validate_email_address instead.', false) call_function('stdlib::validate_email_address', *args) end end puppetlabs-stdlib-9.4.1/lib/puppet/functions/validate_legacy.rb0100644000175100001770000000451314523206606021713 0ustar00# frozen_string_literal: true # @summary # **Deprecated:** Validate a value against both the target_type (new). Puppet::Functions.create_function(:validate_legacy) do # The function checks a value against both the target_type (new). # @param scope # The main value that will be passed to the method # @param target_type # @param function_name # Unused # @param value # @param args # Any additional values that are to be passed to the method # @return # A boolean value (`true` or `false`) returned from the called function. dispatch :validate_legacy do param 'Any', :scope param 'Type', :target_type param 'String', :function_name param 'Any', :value repeated_param 'Any', :args end # @param scope # The main value that will be passed to the method # @param type_string # @param function_name # Unused # @param value # @param args Any additional values that are to be passed to the method # @return Legacy validation method # dispatch :validate_legacy_s do param 'Any', :scope param 'String', :type_string param 'String', :function_name param 'Any', :value repeated_param 'Any', :args end # Workaround PUP-4438 (fixed: https://github.com/puppetlabs/puppet/commit/e01c4dc924cd963ff6630008a5200fc6a2023b08#diff- # c937cc584953271bb3d3b3c2cb141790R221) to support puppet < 4.1.0 and puppet < 3.8.1. def call(scope, *args) manipulated_args = [scope] + args self.class.dispatcher.dispatch(self, scope, manipulated_args) end def validate_legacy_s(scope, type_string, *args) t = Puppet::Pops::Types::TypeParser.new.parse(type_string, scope) validate_legacy(scope, t, *args) end def validate_legacy(_scope, target_type, _function_name, value, *_prev_args) call_function('deprecation', 'validate_legacy', 'This method is deprecated, please use Puppet data types to validate parameters') if assert_type(target_type, value) # "Silently" passes else inferred_type = Puppet::Pops::Types::TypeCalculator.infer_set(value) error_msg = Puppet::Pops::Types::TypeMismatchDescriber.new.describe_mismatch("validate_legacy(#{target_type}, ...)", target_type, inferred_type) call_function('fail', error_msg) end end def assert_type(type, value) Puppet::Pops::Types::TypeCalculator.instance?(type, value) end end puppetlabs-stdlib-9.4.1/lib/puppet/parser0040755000000000000000000000000014523206607015422 5ustar00puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions0040755000000000000000000000000014523206607017432 5ustar00puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/any2array.rb0100644000175100001770000000311714523206606022001 0ustar00# frozen_string_literal: true # # any2array.rb # module Puppet::Parser::Functions newfunction(:any2array, type: :rvalue, doc: <<-DOC @summary This converts any object to an array containing that object. 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. @return [Array] The new array containing the given object DOC ) do |arguments| return [] if arguments.empty? return arguments unless arguments.length == 1 return arguments[0] if arguments[0].is_a?(Array) return [] if arguments == [''] if arguments[0].is_a?(Hash) result = [] arguments[0].each do |key, value| result << key << value end return result end return arguments end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/any2bool.rb0100644000175100001770000000316614523206606021622 0ustar00# frozen_string_literal: true # # any2bool.rb # module Puppet::Parser::Functions newfunction(:any2bool, type: :rvalue, doc: <<-DOC @summary Converts 'anything' to a boolean. 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. @return [Boolean] The boolean value of the object that was given DOC ) do |arguments| raise(Puppet::ParseError, "any2bool(): Wrong number of arguments given (#{arguments.size} for 1)") if arguments.empty? # If argument is already Boolean, return it return arguments[0] if !!arguments[0] == arguments[0] # rubocop:disable Style/DoubleNegation : Could not find a better way to check if a boolean arg = arguments[0] return false if arg.nil? return false if arg == :undef valid_float = begin !!Float(arg) # rubocop:disable Style/DoubleNegation : Could not find a better way to check if a boolean rescue StandardError false end return function_num2bool([arguments[0]]) if arg.is_a?(Numeric) if arg.is_a?(String) return function_num2bool([arguments[0]]) if valid_float return function_str2bool([arguments[0]]) end return true end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/assert_private.rb0100644000175100001770000000170114523206606023121 0ustar00# frozen_string_literal: true # # assert_private.rb # module Puppet::Parser::Functions newfunction(:assert_private, doc: <<-DOC @summary Sets the current class or definition as private. @return set the current class or definition as private. Calling the class or definition from outside the current module will fail. DOC ) do |args| raise(Puppet::ParseError, "assert_private(): Wrong number of arguments given (#{args.size}}) for 0 or 1)") if args.size > 1 scope = self if scope.lookupvar('module_name') != scope.lookupvar('caller_module_name') message = nil if args[0].is_a?(String) message = args[0] else manifest_name = scope.source.name manifest_type = scope.source.type message = (manifest_type.to_s == 'hostclass') ? 'Class' : 'Definition' message += " #{manifest_name} is private" end raise(Puppet::ParseError, message) end end end puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/base64.rb0100644000175100001770000000532214523206606021155 0ustar00# frozen_string_literal: true # 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. module Puppet::Parser::Functions newfunction(:base64, type: :rvalue, doc: <<-DOC) do |args| @summary Base64 encode or decode a string based on the command and the string submitted @example Example usage 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") > **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. @return [String] The encoded/decoded value DOC require 'base64' raise Puppet::ParseError, "base64(): Wrong number of arguments (#{args.length}; must be >= 2)" unless args.length >= 2 actions = ['encode', 'decode'] raise Puppet::ParseError, "base64(): the first argument must be one of 'encode' or 'decode'" unless actions.include?(args[0]) raise Puppet::ParseError, 'base64(): the second argument must be a string to base64' unless args[1].is_a?(String) method = ['default', 'strict', 'urlsafe'] chosen_method = if args.length <= 2 'default' else args[2] end raise Puppet::ParseError, "base64(): the third argument must be one of 'default', 'strict', or 'urlsafe'" unless method.include?(chosen_method) case args[0] when 'encode' case chosen_method when 'default' result = Base64.encode64(args[1]) when 'strict' result = Base64.strict_encode64(args[1]) when 'urlsafe' result = Base64.urlsafe_encode64(args[1]) end when 'decode' case chosen_method when 'default' result = Base64.decode64(args[1]) when 'strict' result = Base64.strict_decode64(args[1]) when 'urlsafe' result = Base64.urlsafe_decode64(args[1]) end end return result end end puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/basename.rb0100644000175100001770000000161014523206606021640 0ustar00# frozen_string_literal: true # # basename.rb # module Puppet::Parser::Functions newfunction(:basename, type: :rvalue, doc: <<-DOC @summary Strips directory (and optional suffix) from a filename @return [String] The stripped filename DOC ) do |arguments| raise(Puppet::ParseError, 'basename(): No arguments given') if arguments.empty? raise(Puppet::ParseError, "basename(): Too many arguments given (#{arguments.size})") if arguments.size > 2 raise(Puppet::ParseError, 'basename(): Requires string as first argument') unless arguments[0].is_a?(String) rv = File.basename(arguments[0]) if arguments.size == 1 if arguments.size == 2 raise(Puppet::ParseError, 'basename(): Requires string as second argument') unless arguments[1].is_a?(String) rv = File.basename(arguments[0], arguments[1]) end return rv end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/bool2num.rb0100644000175100001770000000246414523206606021632 0ustar00# frozen_string_literal: true # # bool2num.rb # module Puppet::Parser::Functions newfunction(:bool2num, type: :rvalue, doc: <<-DOC @summary Converts a boolean to a number. 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 ``` @return [Integer] The converted value as a number DOC ) do |arguments| raise(Puppet::ParseError, "bool2num(): Wrong number of arguments given (#{arguments.size} for 1)") if arguments.empty? value = function_str2bool([arguments[0]]) # We have real boolean values as well ... result = value ? 1 : 0 return result end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/bool2str.rb0100644000175100001770000000375114523206606021643 0ustar00# frozen_string_literal: true # # bool2str.rb # module Puppet::Parser::Functions newfunction(:bool2str, type: :rvalue, doc: <<-DOC @summary Converts a boolean to a string using optionally supplied arguments. 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'. @return The converted value to string of the given Boolean **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' ``` DOC ) do |arguments| raise(Puppet::ParseError, "bool2str(): Wrong number of arguments given (#{arguments.size} for 3)") unless arguments.size == 1 || arguments.size == 3 value = arguments[0] true_string = arguments[1] || 'true' false_string = arguments[2] || 'false' klass = value.class # We can have either true or false, and nothing else raise(Puppet::ParseError, 'bool2str(): Requires a boolean to work with') unless [FalseClass, TrueClass].include?(klass) raise(Puppet::ParseError, 'bool2str(): Requires strings to convert to') unless [true_string, false_string].all?(String) return value ? true_string : false_string end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/clamp.rb0100644000175100001770000000247014523206606021166 0ustar00# frozen_string_literal: true # # clamp.rb # module Puppet::Parser::Functions newfunction(:clamp, type: :rvalue, arity: -2, doc: <<-DOC @summary 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. @example Example usage clamp('24', [575, 187])` returns 187. clamp(16, 88, 661)` returns 88. clamp([4, 3, '99'])` returns 4. > *Note:* From Puppet 6.0.0 this can be done with only core Puppet like this: `[$minval, $maxval, $value_to_clamp].sort[1]` @return [Array[Integer]] The sorted Array DOC ) do |args| args.flatten! raise(Puppet::ParseError, 'clamp(): Wrong number of arguments, need three to clamp') if args.size != 3 # check values out args.each do |value| case [value.class] when [String] raise(Puppet::ParseError, "clamp(): Required explicit numeric (#{value}:String)") unless %r{^\d+$}.match?(value) when [Hash] raise(Puppet::ParseError, "clamp(): The Hash type is not allowed (#{value})") end end # convert to numeric each element # then sort them and get a middle value args.map(&:to_i).sort[1] end end puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/concat.rb0100644000175100001770000000246214523206606021342 0ustar00# frozen_string_literal: true # # concat.rb # module Puppet::Parser::Functions newfunction(:concat, type: :rvalue, doc: <<-DOC @summary Appends the contents of multiple arrays into array 1. @example Example usage 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'] > *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]]` @return [Array] The single concatenated array DOC ) do |arguments| # Check that more than 2 arguments have been given ... raise(Puppet::ParseError, "concat(): Wrong number of arguments given (#{arguments.size} for < 2)") if arguments.size < 2 a = arguments[0] # Check that the first parameter is an array raise(Puppet::ParseError, 'concat(): Requires array to work with') unless a.is_a?(Array) result = a arguments.shift arguments.each do |x| result += (x.is_a?(Array) ? x : [x]) end return result end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/convert_base.rb0100644000175100001770000000361114523206606022542 0ustar00# frozen_string_literal: true # # convert_base.rb # module Puppet::Parser::Functions newfunction(:convert_base, type: :rvalue, arity: 2, doc: <<-DOC) do |args| @summary Converts a given integer or base 10 string representing an integer to a specified base, as a string. @return converted value as a string @example Example usage 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 String DOC raise Puppet::ParseError, 'convert_base(): First argument must be either a string or an integer' unless args[0].is_a?(Integer) || args[0].is_a?(String) raise Puppet::ParseError, 'convert_base(): Second argument must be either a string or an integer' unless args[1].is_a?(Integer) || args[1].is_a?(String) raise Puppet::ParseError, 'convert_base(): First argument must be an integer or a string corresponding to an integer in base 10' if args[0].is_a?(String) && !%r{^[0-9]+$}.match?(args[0]) raise Puppet::ParseError, 'convert_base(): First argument must be an integer or a string corresponding to an integer in base 10' if args[1].is_a?(String) && !%r{^[0-9]+$}.match?(args[1]) number_to_convert = args[0] new_base = args[1] number_to_convert = number_to_convert.to_i new_base = new_base.to_i raise Puppet::ParseError, 'convert_base(): base must be at least 2 and must not be greater than 36' unless new_base >= 2 && new_base <= 36 return number_to_convert.to_s(new_base) end end puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/count.rb0100644000175100001770000000253114523206606021220 0ustar00# frozen_string_literal: true # # count.rb # module Puppet::Parser::Functions newfunction(:count, type: :rvalue, arity: -2, doc: <<-DOC @summary Counts the number of elements in array. 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. @return [Integer] The amount of elements counted within the array DOC ) do |args| raise(ArgumentError, "count(): Wrong number of arguments given #{args.size} for 1 or 2.") if args.size > 2 collection, item = args if item collection.count item else collection.count { |obj| !obj.nil? && obj != :undef && obj != '' } end end end puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/deep_merge.rb0100644000175100001770000000311014523206606022156 0ustar00# frozen_string_literal: true # # deep_merge.rb # module Puppet::Parser::Functions newfunction(:deep_merge, type: :rvalue, doc: <<-DOC) do |args| @summary Recursively merges two or more hashes together and returns the resulting hash. @example Example usage $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." @return [Hash] The merged hash DOC raise Puppet::ParseError, "deep_merge(): wrong number of arguments (#{args.length}; must be at least 2)" if args.length < 2 deep_merge = proc do |hash1, hash2| hash1.merge(hash2) do |_key, old_value, new_value| if old_value.is_a?(Hash) && new_value.is_a?(Hash) deep_merge.call(old_value, new_value) else new_value end end end result = {} args.each do |arg| next if arg.is_a?(String) && arg.empty? # empty string is synonym for puppet's undef # If the argument was not a hash, skip it. raise Puppet::ParseError, "deep_merge: unexpected argument type #{arg.class}, only expects hash arguments" unless arg.is_a?(Hash) result = deep_merge.call(result, arg) end return(result) end end puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/defined_with_params.rb0100644000175100001770000000442514523206606024070 0ustar00# frozen_string_literal: true # Test whether a given class or definition is defined require 'puppet/parser/functions' Puppet::Parser::Functions.newfunction(:defined_with_params, type: :rvalue, doc: <<-DOC @summary 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, and `false` otherwise. ``` user { 'dan': ensure => present, } if ! defined_with_params(User[dan], {'ensure' => 'present' }) { user { 'dan': ensure => present, } } ``` @return [Boolean] returns `true` or `false` DOC ) do |vals| reference, params = vals raise(ArgumentError, 'Must specify a reference') unless reference params = {} if !params || params == '' ret = false if Puppet::Util::Package.versioncmp(Puppet.version, '4.6.0') >= 0 # Workaround for PE-20308 if reference.is_a?(String) type_name, title = Puppet::Resource.type_and_title(reference, nil) type = Puppet::Pops::Evaluator::Runtime3ResourceSupport.find_resource_type_or_class(find_global_scope, type_name.downcase) elsif reference.is_a?(Puppet::Resource) type = reference.type title = reference.title else raise(ArgumentError, "Reference is not understood: '#{reference.class}'") end # end workaround else type = reference.to_s title = nil end resources = if title.empty? catalog.resources.select { |r| r.type == type } else [findresource(type, title)] end resources.compact.each do |res| # If you call this from within a defined type, it will find itself next if res.to_s == resource.to_s matches = params.map do |key, value| # eql? avoids bugs caused by monkeypatching in puppet res_is_undef = res[key].eql?(:undef) || res[key].nil? value_is_undef = value.eql?(:undef) || value.nil? found_match = (res_is_undef && value_is_undef) || (res[key] == value) Puppet.debug("Matching resource is #{res}") if found_match found_match end ret = params.empty? || !matches.include?(false) break if ret end Puppet.debug("Resource #{reference} was not determined to be defined") unless ret ret end puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/delete.rb0100644000175100001770000000403014523206606021326 0ustar00# frozen_string_literal: true # # delete.rb # module Puppet::Parser::Functions newfunction(:delete, type: :rvalue, doc: <<-DOC @summary Deletes all instances of a given element from an array, substring from a string, or key from a hash. @example Example usage 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' > *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. @return [String] The filtered String, if one was given. @return [Hash] The filtered Hash, if one was given. @return [Array] The filtered Array, if one was given. DOC ) do |arguments| raise(Puppet::ParseError, "delete(): Wrong number of arguments given #{arguments.size} for 2") unless arguments.size == 2 collection = arguments[0].dup Array(arguments[1]).each do |item| case collection when Array, Hash collection.delete item when String collection.gsub! item, '' else raise(TypeError, "delete(): First argument must be an Array, String, or Hash. Given an argument of class #{collection.class}.") end end collection end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/delete_at.rb0100644000175100001770000000336214523206606022021 0ustar00# frozen_string_literal: true # # delete_at.rb # module Puppet::Parser::Functions newfunction(:delete_at, type: :rvalue, doc: <<-DOC) do |arguments| @summary Deletes a determined indexed value from an array. 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 ``` @return [Array] The given array, now missing the target value DOC raise(Puppet::ParseError, "delete_at(): Wrong number of arguments given (#{arguments.size} for 2)") if arguments.size < 2 array = arguments[0] raise(Puppet::ParseError, 'delete_at(): Requires array to work with') unless array.is_a?(Array) index = arguments[1] raise(Puppet::ParseError, 'delete_at(): You must provide non-negative numeric index') if index.is_a?(String) && !index.match(%r{^\d+$}) result = array.clone # Numbers in Puppet are often string-encoded which is troublesome ... index = index.to_i raise(Puppet::ParseError, 'delete_at(): Given index exceeds size of array given') if index > result.size - 1 # First element is at index 0 is it not? result.delete_at(index) # We ignore the element that got deleted ... return result end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/delete_regex.rb0100644000175100001770000000345414523206606022531 0ustar00# frozen_string_literal: true # # delete_regex.rb # 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. # module Puppet::Parser::Functions newfunction(:delete_regex, type: :rvalue, doc: <<-DOC @summary Deletes all instances of a given element that match a regular expression from an array or key from a hash. Multiple regular expressions are assumed to be matched as an OR. @example Example usage 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} > *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'] @return [Array] The given array now missing all targeted values. DOC ) do |arguments| raise(Puppet::ParseError, "delete_regex(): Wrong number of arguments given #{arguments.size} for 2") unless arguments.size == 2 collection = arguments[0].dup Array(arguments[1]).each do |item| case collection when Array, Hash, String collection.reject! { |coll_item| (coll_item =~ %r{\b#{item}\b}) } else raise(TypeError, "delete_regex(): First argument must be an Array, Hash, or String. Given an argument of class #{collection.class}.") end end collection end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/delete_undef_values.rb0100644000175100001770000000254214523206606024074 0ustar00# frozen_string_literal: true # # delete_undef_values.rb # module Puppet::Parser::Functions newfunction(:delete_undef_values, type: :rvalue, doc: <<-DOC @summary Returns a copy of input hash or array with all undefs deleted. @example Example usage $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] > *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 } @return [Array] The given array now issing of undefined values. DOC ) do |args| raise(Puppet::ParseError, "delete_undef_values(): Wrong number of arguments given (#{args.size})") if args.empty? raise(Puppet::ParseError, "delete_undef_values(): expected an array or hash, got #{args[0]} type #{args[0].class} ") unless args[0].is_a?(Array) || args[0].is_a?(Hash) result = args[0].dup if result.is_a?(Hash) result.delete_if { |_, val| val.equal?(:undef) || val.nil? } elsif result.is_a?(Array) result.delete :undef result.delete nil end result end end puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/delete_values.rb0100644000175100001770000000207414523206606022713 0ustar00# frozen_string_literal: true # # delete_values.rb # module Puppet::Parser::Functions newfunction(:delete_values, type: :rvalue, doc: <<-DOC @summary Deletes all instances of a given value from a hash. @example Example usage delete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B') Would return: {'a'=>'A','c'=>'C','B'=>'D'} > *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' } @return [Hash] The given hash now missing all instances of the targeted value DOC ) do |arguments| raise(Puppet::ParseError, "delete_values(): Wrong number of arguments given (#{arguments.size} of 2)") if arguments.size != 2 hash, item = arguments raise(TypeError, "delete_values(): First argument must be a Hash. Given an argument of class #{hash.class}.") unless hash.is_a?(Hash) hash.dup.delete_if { |_key, val| item == val } end end puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/difference.rb0100644000175100001770000000212614523206606022162 0ustar00# frozen_string_literal: true # # difference.rb # module Puppet::Parser::Functions newfunction(:difference, type: :rvalue, doc: <<-DOC @summary This function 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. @example Example usage difference(["a","b","c"],["b","c","d"]) Would return: `["a"]` > *Note:* Since Puppet 4 the minus (-) operator in the Puppet language does the same thing: ['a', 'b', 'c'] - ['b', 'c', 'd'] Would return: `['a']` @return [Array] The difference between the two given arrays DOC ) do |arguments| # Two arguments are required raise(Puppet::ParseError, "difference(): Wrong number of arguments given (#{arguments.size} for 2)") if arguments.size != 2 first = arguments[0] second = arguments[1] raise(Puppet::ParseError, 'difference(): Requires 2 arrays') unless first.is_a?(Array) && second.is_a?(Array) result = first - second return result end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/dirname.rb0100644000175100001770000000142014523206606021503 0ustar00# frozen_string_literal: true # # dirname.rb # module Puppet::Parser::Functions newfunction(:dirname, type: :rvalue, doc: <<-DOC @summary Returns the dirname of a path. @return [String] the given path's dirname DOC ) do |arguments| raise(Puppet::ParseError, 'dirname(): No arguments given') if arguments.empty? raise(Puppet::ParseError, "dirname(): Too many arguments given (#{arguments.size})") if arguments.size > 1 raise(Puppet::ParseError, 'dirname(): Requires string as argument') unless arguments[0].is_a?(String) # undef is converted to an empty string '' raise(Puppet::ParseError, 'dirname(): Requires a non-empty string as argument') if arguments[0].empty? return File.dirname(arguments[0]) end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/dos2unix.rb0100644000175100001770000000076314523206606021650 0ustar00# frozen_string_literal: true # Custom Puppet function to convert dos to unix format module Puppet::Parser::Functions newfunction(:dos2unix, type: :rvalue, arity: 1, doc: <<-DOC @summary Returns the Unix version of the given string. Takes a single string argument. @return The retrieved version DOC ) do |arguments| raise(Puppet::ParseError, 'dos2unix(): Requires string as argument') unless arguments[0].is_a?(String) arguments[0].gsub(%r{\r\n}, "\n") end end puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/enclose_ipv6.rb0100644000175100001770000000232114523206606022461 0ustar00# frozen_string_literal: true # # enclose_ipv6.rb # module Puppet::Parser::Functions newfunction(:enclose_ipv6, type: :rvalue, doc: <<-DOC @summary Takes an array of ip addresses and encloses the ipv6 addresses with square brackets. @return encloses the ipv6 addresses with square brackets. DOC ) do |arguments| require 'ipaddr' rescuable_exceptions = [ArgumentError] rescuable_exceptions << IPAddr::InvalidAddressError if defined?(IPAddr::InvalidAddressError) raise(Puppet::ParseError, "enclose_ipv6(): Wrong number of arguments given #{arguments.size} for 1") if arguments.size != 1 raise(Puppet::ParseError, "enclose_ipv6(): Wrong argument type given #{arguments[0].class} expected String or Array") unless arguments[0].is_a?(String) || arguments[0].is_a?(Array) input = [arguments[0]].flatten.compact result = [] input.each do |val| unless val == '*' begin ip = IPAddr.new(val) rescue *rescuable_exceptions raise(Puppet::ParseError, "enclose_ipv6(): Wrong argument given #{val} is not an ip address.") end val = "[#{ip}]" if ip.ipv6? end result << val end return result.uniq end end puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/ensure_resource.rb0100644000175100001770000000324714523206606023305 0ustar00# frozen_string_literal: true # Test whether a given class or definition is defined require 'puppet/parser/functions' Puppet::Parser::Functions.newfunction(:ensure_resource, type: :statement, doc: <<-DOC @summary Takes a resource type, title, and a list of attributes that describe a resource. user { 'dan': ensure => present, } @return created or recreated the passed resource with the passed type and attributes @example Example usage 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 will attempt 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'}) DOC ) do |vals| type, title, params = vals raise(ArgumentError, 'Must specify a type') unless type raise(ArgumentError, 'Must specify a title') unless title params ||= {} items = [title].flatten items.each do |item| Puppet::Parser::Functions.function(:defined_with_params) if function_defined_with_params(["#{type}[#{item}]", params]) Puppet.debug("Resource #{type}[#{item}] with params #{params} not created because it already exists") else Puppet.debug("Create new resource #{type}[#{item}] with params #{params}") Puppet::Parser::Functions.function(:create_resources) function_create_resources([type.capitalize, { item => params }]) end end end puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/ensure_resources.rb0100644000175100001770000000317314523206606023466 0ustar00# frozen_string_literal: true require 'puppet/parser/functions' Puppet::Parser::Functions.newfunction(:ensure_resources, type: :statement, doc: <<-DOC @summary Takes a resource type, title (only hash), and a list of attributes that describe a resource. @return created resources with the passed type and attributes @example Example usage user { 'dan': gid => 'mygroup', ensure => present, } An hash of resources should be passed in and each will be created with the type and parameters specified if it doesn't already exist. ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' }, 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'}) From Hiera Backend: userlist: dan: gid: 'mygroup' uid: '600' alex: gid: 'mygroup' Call: ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'}) DOC ) do |vals| type, title, params = vals raise(ArgumentError, 'Must specify a type') unless type raise(ArgumentError, 'Must specify a title') unless title params ||= {} raise(Puppet::ParseError, 'ensure_resources(): Requires second argument to be a Hash') unless title.is_a?(Hash) resource_hash = title.dup resources = resource_hash.keys Puppet::Parser::Functions.function(:ensure_resource) resources.each do |resource_name| params_merged = if resource_hash[resource_name] params.merge(resource_hash[resource_name]) else params end function_ensure_resource([type, resource_name, params_merged]) end end puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/fqdn_uuid.rb0100644000175100001770000000376414523206606022057 0ustar00# frozen_string_literal: true require 'digest/sha1' # # fqdn_uuid.rb # module Puppet::Parser::Functions newfunction(:fqdn_uuid, type: :rvalue, doc: <<-DOC) do |args| @summary Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID based on an FQDN string under the DNS namespace @return Returns a [RFC 4122](https://tools.ietf.org/html/rfc4122) valid version 5 UUID @example Example Usage: fqdn_uuid('puppetlabs.com') # Returns '9c70320f-6815-5fc5-ab0f-debe68bf764c' fqdn_uuid('google.com') # Returns '64ee70a4-8cc1-5d25-abf2-dea6c79a09c8' DOC raise(ArgumentError, 'fqdn_uuid: No arguments given') if args.empty? raise(ArgumentError, "fqdn_uuid: Too many arguments given (#{args.length})") unless args.length == 1 fqdn = args[0] # Code lovingly taken from # https://github.com/puppetlabs/marionette-collective/blob/master/lib/mcollective/ssl.rb # This is the UUID version 5 type DNS name space which is as follows: # # 6ba7b810-9dad-11d1-80b4-00c04fd430c8 # uuid_name_space_dns = [0x6b, 0xa7, 0xb8, 0x10, 0x9d, 0xad, 0x11, 0xd1, 0x80, 0xb4, 0x00, 0xc0, 0x4f, 0xd4, 0x30, 0xc8].map(&:chr).join sha1 = Digest::SHA1.new sha1.update(uuid_name_space_dns) sha1.update(fqdn) # first 16 bytes.. bytes = sha1.digest[0, 16].bytes.to_a # version 5 adjustments bytes[6] &= 0x0f bytes[6] |= 0x50 # variant is DCE 1.1 bytes[8] &= 0x3f bytes[8] |= 0x80 bytes = [4, 2, 2, 2, 6].map do |i| bytes.slice!(0, i).pack('C*').unpack('H*') end bytes.join('-') end end puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/get_module_path.rb0100644000175100001770000000210414523206606023224 0ustar00# frozen_string_literal: true # # get_module_path.rb # module Puppet::Parser::Functions newfunction(:get_module_path, type: :rvalue, doc: <<-DOC @summary Returns the absolute path of the specified module for the current environment. @return Returns the absolute path of the specified module for the current environment. @example Example Usage: $module_path = get_module_path('stdlib') > *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. DOC ) do |args| raise(Puppet::ParseError, 'get_module_path(): Wrong number of arguments, expects one') unless args.size == 1 module_path = Puppet::Module.find(args[0], compiler.environment.to_s) raise(Puppet::ParseError, "Could not find module #{args[0]} in environment #{compiler.environment}") unless module_path module_path.path end end puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/getparam.rb0100644000175100001770000000355214523206606021674 0ustar00# frozen_string_literal: true # Test whether a given class or definition is defined require 'puppet/parser/functions' Puppet::Parser::Functions.newfunction(:getparam, type: :rvalue, doc: <<-DOC @summary Returns the value of a resource's parameter. @return value of a resource's parameter. Takes a resource reference and name of the parameter and returns value of resource's parameter. Note that user defined resource types are evaluated lazily. @example Example Usage: # 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' > **Note** that since Puppet 4.0.0 it is possible to get a parameter value by using its data type and the [ ] operator. The example below is equivalent to a call to getparam(): ```Example_resource['example_resource_instance']['param']`` DOC ) do |vals| reference, param = vals raise(ArgumentError, 'Must specify a reference') unless reference raise(ArgumentError, 'Must specify name of a parameter') unless param.instance_of?(String) return '' if param.empty? resource = findresource(reference.to_s) return resource[param] if resource && !resource[param].nil? return '' end puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/glob.rb0100644000175100001770000000145114523206606021013 0ustar00# frozen_string_literal: true # # glob.rb # module Puppet::Parser::Functions newfunction(:glob, type: :rvalue, doc: <<-DOC @summary Uses same patterns as Dir#glob. @return Returns an Array of file entries of a directory or an Array of directories. @example Example Usage: $confs = glob(['/etc/**/*.conf', '/opt/**/*.conf']) DOC ) do |arguments| unless arguments.size == 1 raise(Puppet::ParseError, 'glob(): Wrong number of arguments given ' \ "(#{arguments.size} for 1)") end pattern = arguments[0] unless pattern.is_a?(String) || pattern.is_a?(Array) raise(Puppet::ParseError, 'glob(): Requires either array or string ' \ 'to work') end Dir.glob(pattern) end end puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/grep.rb0100644000175100001770000000177014523206606021031 0ustar00# frozen_string_literal: true # # grep.rb # module Puppet::Parser::Functions newfunction(:grep, type: :rvalue, doc: <<-DOC @summary This function searches through an array and returns any elements that match the provided regular expression. @return array of elements that match the provided regular expression. @example Example Usage: grep(['aaa','bbb','ccc','aaaddd'], 'aaa') # Returns ['aaa','aaaddd'] > **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' }``` DOC ) do |arguments| raise(Puppet::ParseError, "grep(): Wrong number of arguments given #{arguments.size} for 2") if arguments.size != 2 a = arguments[0] pattern = Regexp.new(arguments[1]) a.grep(pattern) end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/has_interface_with.rb0100644000175100001770000000357014523206606023722 0ustar00# frozen_string_literal: true # # has_interface_with # module Puppet::Parser::Functions newfunction(:has_interface_with, type: :rvalue, doc: <<-DOC @summary Returns boolean based on kind and value. @return boolean values `true` or `false` Valid kinds are `macaddress`, `netmask`, `ipaddress` and `network`. @example **Usage** has_interface_with("macaddress", "x:x:x:x:x:x") # Returns `false` has_interface_with("ipaddress", "127.0.0.1") # Returns `true` @example If no "kind" is given, then the presence of the interface is checked: has_interface_with("lo") # Returns `true` DOC ) do |args| raise(Puppet::ParseError, "has_interface_with(): Wrong number of arguments given (#{args.size} for 1 or 2)") if args.empty? || args.size > 2 interfaces = lookupvar('interfaces') # If we do not have any interfaces, then there are no requested attributes return false if interfaces == :undefined || interfaces.nil? interfaces = interfaces.split(',') return interfaces.member?(args[0]) if args.size == 1 kind, value = args # Bug with 3.7.1 - 3.7.3 when using future parser throws :undefined_variable # https://tickets.puppetlabs.com/browse/PUP-3597 factval = nil begin catch :undefined_variable do factval = lookupvar(kind) end rescue Puppet::ParseError end return true if factval == value result = false interfaces.each do |iface| iface.downcase! factval = nil begin # Bug with 3.7.1 - 3.7.3 when using future parser throws :undefined_variable # https://tickets.puppetlabs.com/browse/PUP-3597 catch :undefined_variable do factval = lookupvar("#{kind}_#{iface}") end rescue Puppet::ParseError end if value == factval result = true break end end result end end puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/has_ip_address.rb0100644000175100001770000000144114523206606023037 0ustar00# frozen_string_literal: true # # has_ip_address # module Puppet::Parser::Functions newfunction(:has_ip_address, type: :rvalue, doc: <<-DOC @summary Returns true if the client has the requested IP address on some interface. @return [Boolean] `true` or `false` This function iterates through the 'interfaces' fact and checks the 'ipaddress_IFACE' facts, performing a simple string comparison. DOC ) do |args| raise(Puppet::ParseError, "has_ip_address(): Wrong number of arguments given (#{args.size} for 1)") if args.size != 1 Puppet::Parser::Functions.autoloader.load(:has_interface_with) \ unless Puppet::Parser::Functions.autoloader.loaded?(:has_interface_with) function_has_interface_with(['ipaddress', args[0]]) end end # vim:sts=2 sw=2 puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/has_ip_network.rb0100644000175100001770000000152614523206606023107 0ustar00# frozen_string_literal: true # # has_ip_network # module Puppet::Parser::Functions newfunction(:has_ip_network, type: :rvalue, doc: <<-DOC @summary Returns true if the client has an IP address within the requested network. @return Boolean value, `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. DOC ) do |args| raise(Puppet::ParseError, "has_ip_network(): Wrong number of arguments given (#{args.size} for 1)") if args.size != 1 Puppet::Parser::Functions.autoloader.load(:has_interface_with) \ unless Puppet::Parser::Functions.autoloader.loaded?(:has_interface_with) function_has_interface_with(['network', args[0]]) end end # vim:sts=2 sw=2 puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/intersection.rb0100644000175100001770000000167214523206606022603 0ustar00# frozen_string_literal: true # # intersection.rb # module Puppet::Parser::Functions newfunction(:intersection, type: :rvalue, doc: <<-DOC @summary This function returns an array of the intersection of two. @return an array of the intersection of two. @example Example Usage: 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) DOC ) do |arguments| # Two arguments are required raise(Puppet::ParseError, "intersection(): Wrong number of arguments given (#{arguments.size} for 2)") if arguments.size != 2 first = arguments[0] second = arguments[1] raise(Puppet::ParseError, "intersection(): Requires 2 arrays, got #{first.class} and #{second.class}") unless first.is_a?(Array) && second.is_a?(Array) result = first & second return result end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/join_keys_to_values.rb0100644000175100001770000000370514523206606024147 0ustar00# frozen_string_literal: true # # join_keys_to_values.rb # module Puppet::Parser::Functions newfunction(:join_keys_to_values, type: :rvalue, doc: <<-DOC @summary This function joins each key of a hash to that key's corresponding value with a separator. 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. @example Example Usage: 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"] @return [Hash] The joined hash > **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`. DOC ) do |arguments| # Validate the number of arguments. raise(Puppet::ParseError, "join_keys_to_values(): Takes exactly two arguments, but #{arguments.size} given.") if arguments.size != 2 # Validate the first argument. hash = arguments[0] raise(TypeError, "join_keys_to_values(): The first argument must be a hash, but a #{hash.class} was given.") unless hash.is_a?(Hash) # Validate the second argument. separator = arguments[1] raise(TypeError, "join_keys_to_values(): The second argument must be a string, but a #{separator.class} was given.") unless separator.is_a?(String) # Join the keys to their values. hash.map { |k, v| if v.is_a?(Array) v.map { |va| String(k) + separator + String(va) } elsif String(v) == 'undef' String(k) else String(k) + separator + String(v) end }.flatten end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/load_module_metadata.rb0100644000175100001770000000230114523206606024207 0ustar00# frozen_string_literal: true # # load_module_metadata.rb # module Puppet::Parser::Functions newfunction(:load_module_metadata, type: :rvalue, doc: <<-DOC @summary This function loads the metadata of a given module. @example Example Usage: $metadata = load_module_metadata('archive') notify { $metadata['author']: } @return The modules metadata DOC ) do |args| raise(Puppet::ParseError, 'load_module_metadata(): Wrong number of arguments, expects one or two') unless [1, 2].include?(args.size) mod = args[0] allow_empty_metadata = args[1] module_path = function_get_module_path([mod]) metadata_json = File.join(module_path, 'metadata.json') metadata_exists = File.exist?(metadata_json) if metadata_exists metadata = if Puppet::Util::Package.versioncmp(Puppet.version, '8.0.0').negative? PSON.load(File.read(metadata_json)) else JSON.parse(File.read(metadata_json)) end else metadata = {} raise(Puppet::ParseError, "load_module_metadata(): No metadata.json file for module #{mod}") unless allow_empty_metadata end return metadata end end puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/loadjson.rb0100644000175100001770000000521414523206606021702 0ustar00# frozen_string_literal: true # # loadjson.rb # module Puppet::Parser::Functions newfunction(:loadjson, type: :rvalue, arity: -2, doc: <<-DOC) do |args| @summary Load a JSON file containing an array, string, or hash, and return the data in the corresponding native data type. 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. @return [Array|String|Hash] The data stored in the JSON file, the type depending on the type of data that was stored. @example Example Usage: $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' => 'value'}) DOC raise ArgumentError, 'Wrong number of arguments. 1 or 2 arguments should be provided.' unless args.length >= 1 require 'open-uri' begin if args[0].start_with?('http://', 'https://') http_options = {} if (match = args[0].match(%r{(http://|https://)(.*):(.*)@(.*)})) # If URL is in the format of https://username:password@example.local/my_hash.yaml protocol, username, password, path = match.captures url = "#{protocol}#{path}" http_options[:http_basic_authentication] = [username, password] elsif (match = args[0].match(%r{(http://|https://)(.*)@(.*)})) # If URL is in the format of https://username@example.local/my_hash.yaml protocol, username, path = match.captures url = "#{protocol}#{path}" http_options[:http_basic_authentication] = [username, ''] else url = args[0] end begin contents = OpenURI.open_uri(url, http_options) rescue OpenURI::HTTPError => e res = e.io warning("Can't load '#{url}' HTTP Error Code: '#{res.status[0]}'") args[1] end if Puppet::Util::Package.versioncmp(Puppet.version, '8.0.0').negative? PSON.load(contents) || args[1] else JSON.parse(contents) || args[1] end elsif File.exist?(args[0]) content = File.read(args[0]) if Puppet::Util::Package.versioncmp(Puppet.version, '8.0.0').negative? PSON.load(content) || args[1] else JSON.parse(content) || args[1] end else warning("Can't load '#{args[0]}' File does not exist!") args[1] end rescue StandardError => e raise e unless args[1] args[1] end end end puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/loadyaml.rb0100644000175100001770000000473314523206606021700 0ustar00# frozen_string_literal: true # # loadyaml.rb # module Puppet::Parser::Functions newfunction(:loadyaml, type: :rvalue, arity: -2, doc: <<-DOC) do |args| @summary Load a YAML file containing an array, string, or hash, and return the data in the corresponding native data type. 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. @return [Array|String|Hash] The data stored in the YAML file, the type depending on the type of data that was stored. @example Example Usage: $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' => 'value'}) DOC raise ArgumentError, 'Wrong number of arguments. 1 or 2 arguments should be provided.' unless args.length >= 1 require 'yaml' require 'open-uri' begin if args[0].start_with?('http://', 'https://') username = '' password = '' if (match = args[0].match(%r{(http://|https://)(.*):(.*)@(.*)})) # If URL is in the format of https://username:password@example.local/my_hash.yaml protocol, username, password, path = match.captures url = "#{protocol}#{path}" elsif (match = args[0].match(%r{(http://|https://)(.*)@(.*)})) # If URL is in the format of https://username@example.local/my_hash.yaml protocol, username, path = match.captures url = "#{protocol}#{path}" else url = args[0] end begin contents = OpenURI.open_uri(url, http_basic_authentication: [username, password]) rescue OpenURI::HTTPError => e res = e.io warning("Can't load '#{url}' HTTP Error Code: '#{res.status[0]}'") args[1] end YAML.safe_load(contents, aliases: true) || args[1] elsif File.exist?(args[0]) # Read the file first rather than calling YAML.load_file as ruby2.7 # doesn't support the aliases option on YAML.load_file contents = File.read(args[0]) YAML.safe_load(contents, aliases: true) || args[1] else warning("Can't load '#{args[0]}' File does not exist!") args[1] end rescue StandardError => e raise e unless args[1] args[1] end end end puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/member.rb0100644000175100001770000000454014523206606021341 0ustar00# frozen_string_literal: true # TODO(Krzysztof Wilczynski): We need to add support for regular expression ... # TODO(Krzysztof Wilczynski): Support for strings and hashes too ... # # member.rb # module Puppet::Parser::Functions newfunction(:member, type: :rvalue, doc: <<-DOC @summary This function determines if a variable is a member of an array. 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. @example **Usage** 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 > *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` @return Returns whether the given value was a member of the array > **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. DOC ) do |arguments| raise(Puppet::ParseError, "member(): Wrong number of arguments given (#{arguments.size} for 2)") if arguments.size < 2 array = arguments[0] raise(Puppet::ParseError, 'member(): Requires array to work with') unless array.is_a?(Array) raise(Puppet::ParseError, 'member(): Item to search for must be a string, fixnum, or array') unless arguments[1].is_a?(String) || arguments[1].is_a?(Integer) || arguments[1].is_a?(Array) item = if arguments[1].is_a?(String) || arguments[1].is_a?(Integer) [arguments[1]] else arguments[1] end raise(Puppet::ParseError, 'member(): You must provide item to search for within array given') if item.respond_to?(:empty?) && item.empty? result = (item - array).empty? return result end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/merge.rb0100644000175100001770000000236114523206606021170 0ustar00# frozen_string_literal: true # # merge.rb # module Puppet::Parser::Functions newfunction(:merge, type: :rvalue, doc: <<-DOC) do |args| @summary Merges two or more hashes together and returns the resulting hash. @example **Usage** $hash1 = {'one' => 1, 'two', => 2} $hash2 = {'two' => 'dos', 'three', => 'tres'} $merged_hash = merge($hash1, $hash2) # $merged_hash = {'one' => 1, 'two' => 'dos', 'three' => 'tres'} When there is a duplicate key, the key in the rightmost hash will "win." @return [Hash] The merged hash Note that since Puppet 4.0.0 the same merge can be achieved with the + operator. `$merged_hash = $hash1 + $hash2` DOC raise Puppet::ParseError, "merge(): wrong number of arguments (#{args.length}; must be at least 2)" if args.length < 2 # The hash we accumulate into accumulator = {} # Merge into the accumulator hash args.each do |arg| next if arg.is_a?(String) && arg.empty? # empty string is synonym for puppet's undef raise Puppet::ParseError, "merge: unexpected argument type #{arg.class}, only expects hash arguments" unless arg.is_a?(Hash) accumulator.merge!(arg) end # Return the fully merged hash accumulator end end puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/num2bool.rb0100644000175100001770000000252114523206606021624 0ustar00# frozen_string_literal: true # # num2bool.rb # module Puppet::Parser::Functions newfunction(:num2bool, type: :rvalue, doc: <<-DOC @summary This function converts a number or a string representation of a number into a true boolean. > *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. @return [Boolean] Boolean(0) # false for any zero or negative number Boolean(1) # true for any positive number DOC ) do |arguments| raise(Puppet::ParseError, "num2bool(): Wrong number of arguments given (#{arguments.size} for 1)") if arguments.size != 1 number = arguments[0] case number when Numeric # Yay, it's a number when String begin number = Float(number) rescue ArgumentError => e raise(Puppet::ParseError, "num2bool(): '#{number}' does not look like a number: #{e.message}") end else begin number = number.to_s rescue NoMethodError => e raise(Puppet::ParseError, "num2bool(): Unable to parse argument: #{e.message}") end end # Truncate Floats number = number.to_i # Return true for any positive number and false otherwise return number.positive? end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/parsejson.rb0100644000175100001770000000155514523206606022101 0ustar00# frozen_string_literal: true require 'puppet/util/json' # # parsejson.rb # module Puppet::Parser::Functions newfunction(:parsejson, type: :rvalue, doc: <<-DOC @summary This function accepts JSON as a string and converts it into the correct Puppet structure. @return convert JSON into Puppet structure > *Note:* The optional second argument can be used to pass a default value that will be returned if the parsing of the JSON string failed or if the JSON parse evaluated to nil. DOC ) do |arguments| raise ArgumentError, 'Wrong number of arguments. 1 or 2 arguments should be provided.' unless arguments.length >= 1 begin Puppet::Util::Json.load(arguments[0]) || arguments[1] rescue StandardError => e raise e unless arguments[1] arguments[1] end end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/parseyaml.rb0100644000175100001770000000216414523206606022067 0ustar00# frozen_string_literal: true # # parseyaml.rb # module Puppet::Parser::Functions newfunction(:parseyaml, type: :rvalue, doc: <<-DOC @summary This function accepts YAML as a string and converts it into the correct Puppet structure. @return converted YAML into Puppet structure > *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. DOC ) do |arguments| raise ArgumentError, 'Wrong number of arguments. 1 or 2 arguments should be provided.' unless arguments.length >= 1 require 'yaml' begin YAML.load(arguments[0]) || arguments[1] # rubocop:disable Security/YAMLLoad : using YAML.safe_load causes the code to break # in ruby 1.9.3 Psych::SyntaxError is a RuntimeException # this still needs to catch that and work also on rubies that # do not have Psych available. rescue StandardError, Psych::SyntaxError => e # rubocop:disable Lint/ShadowedException : See above raise e unless arguments[1] arguments[1] end end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/pick.rb0100644000175100001770000000226514523206606021022 0ustar00# frozen_string_literal: true # # pick.rb # module Puppet::Parser::Functions newfunction(:pick, type: :rvalue, doc: <<-EOS @summary This function will return the first value in a list of values that is not undefined or an empty string. This function is similar to a coalesce function in SQL. @return the first value in a list of values that is not undefined or an empty string. 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. EOS ) do |args| args = args.compact args.delete(:undef) args.delete(:undefined) args.delete('') raise Puppet::ParseError, 'pick(): must receive at least one non empty value' if args[0].to_s.empty? return args[0] end end puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/pick_default.rb0100644000175100001770000000271614523206606022527 0ustar00# frozen_string_literal: true # # pick_default.rb # module Puppet::Parser::Functions newfunction(:pick_default, type: :rvalue, doc: <<-DOC @summary This function will return the first value in a list of values that is not undefined or an empty string. @return 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. 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. DOC ) do |args| raise 'Must receive at least one argument.' if args.empty? default = args.last args = args[0..-2].compact args.delete(:undef) args.delete(:undefined) args.delete('') args << default return args[0] end end puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/prefix.rb0100644000175100001770000000322014523206606021361 0ustar00# frozen_string_literal: true # # prefix.rb # module Puppet::Parser::Functions newfunction(:prefix, type: :rvalue, doc: <<-DOC @summary This function applies a prefix to all elements in an array or a hash. @example **Usage** prefix(['a','b','c'], 'p') Will return: ['pa','pb','pc'] > *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}" } @return [Hash] or [Array] The passed values now contains the passed prefix DOC ) do |arguments| # Technically we support two arguments but only first is mandatory ... raise(Puppet::ParseError, "prefix(): Wrong number of arguments given (#{arguments.size} for 1)") if arguments.empty? enumerable = arguments[0] raise Puppet::ParseError, "prefix(): expected first argument to be an Array or a Hash, got #{enumerable.inspect}" unless enumerable.is_a?(Array) || enumerable.is_a?(Hash) prefix = arguments[1] if arguments[1] raise Puppet::ParseError, "prefix(): expected second argument to be a String, got #{prefix.inspect}" if prefix && !prefix.is_a?(String) result = if enumerable.is_a?(Array) # Turn everything into string same as join would do ... enumerable.map do |i| i = i.to_s prefix ? prefix + i : i end else enumerable.to_h do |k, v| k = k.to_s [prefix ? prefix + k : k, v] end end return result end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/pry.rb0100644000175100001770000000173614523206606020710 0ustar00# frozen_string_literal: true # # pry.rb # module Puppet::Parser::Functions newfunction(:pry, type: :statement, doc: <<-DOC @summary This function invokes a pry debugging session in the current scope object. This is useful for debugging manifest code at specific points during a compilation. @return debugging information @example **Usage** `pry()` DOC ) do |arguments| begin require 'pry' rescue LoadError raise(Puppet::Error, "pry(): Requires the 'pry' rubygem to use, but it was not found") end # ## 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 # if $stdout.isatty binding.pry # rubocop:disable Lint/Debugger else Puppet.warning 'pry(): cowardly refusing to start the debugger on a daemonized server' end end end puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/pw_hash.rb0100644000175100001770000000743214523206606021526 0ustar00# frozen_string_literal: true # 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. # Puppet::Parser::Functions.newfunction(:pw_hash, type: :rvalue, arity: 3, doc: <<-DOC @summary 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 hash algorithm to use. It will be converted into the appropriate crypt(3) hash specifier. Valid hash types are: |Hash type|Prefix|Note | |---------|------|---------------------| |MD5 |1 | | |SHA-256 |5 | | |SHA-512 |6 |Recommended | |bcrypt |2b | | |bcrypt-a |2a |bug compatible | |bcrypt-x |2x |bug compatible | |bcrypt-y |2y |historic alias for 2b| The third argument to this function is the salt to use. For bcrypt-type hashes, the first two characters of the salt represent a strength parameter, with a value between 4 and 31 inclusive. @return [String] Provides a crypt hash usable on most POSIX systems. > *Note:*: this uses the Puppet Server's implementation of crypt(3). If your environment contains several different operating systems, ensure that they are compatible before using this function. DOC ) do |args| raise ArgumentError, "pw_hash(): wrong number of arguments (#{args.size} for 3)" if args.size != 3 args.map! do |arg| if (defined? Puppet::Pops::Types::PSensitiveType::Sensitive) && (arg.is_a? Puppet::Pops::Types::PSensitiveType::Sensitive) arg.unwrap else arg end end hashes = { 'md5' => { prefix: '1' }, 'sha-256' => { prefix: '5' }, 'sha-512' => { prefix: '6' }, 'bcrypt' => { prefix: '2b', salt: %r{^(0[4-9]|[12][0-9]|3[01])\$[./A-Za-z0-9]{22}} }, 'bcrypt-a' => { prefix: '2a', salt: %r{^(0[4-9]|[12][0-9]|3[01])\$[./A-Za-z0-9]{22}} }, 'bcrypt-x' => { prefix: '2x', salt: %r{^(0[4-9]|[12][0-9]|3[01])\$[./A-Za-z0-9]{22}} }, 'bcrypt-y' => { prefix: '2y', salt: %r{^(0[4-9]|[12][0-9]|3[01])\$[./A-Za-z0-9]{22}} } } raise ArgumentError, 'pw_hash(): first argument must be a string' unless args[0].is_a?(String) || args[0].nil? raise ArgumentError, 'pw_hash(): second argument must be a string' unless args[1].is_a? String hash_type = hashes[args[1].downcase] raise ArgumentError, "pw_hash(): #{args[1]} is not a valid hash type" if hash_type.nil? raise ArgumentError, 'pw_hash(): third argument must be a string' unless args[2].is_a? String raise ArgumentError, 'pw_hash(): third argument must not be empty' if args[2].empty? salt_doc = hash_type.include?(:salt) ? "match #{hash_type[:salt]}" : 'be in the set [a-zA-Z0-9./]' salt_regex = hash_type.fetch(:salt, %r{\A[a-zA-Z0-9./]+\z}) raise ArgumentError, "pw_hash(): characters in salt must #{salt_doc}" unless salt_regex.match?(args[2]) password = args[0] return nil if password.nil? || password.empty? salt = "$#{hash_type[:prefix]}$#{args[2]}" # handle weak implementations of String#crypt # dup the string to get rid of frozen status for testing if RUBY_PLATFORM == 'java' # puppetserver bundles Apache Commons Codec org.apache.commons.codec.digest.Crypt.crypt(password.to_java_bytes, salt) elsif (+'test').crypt('$1$1') == '$1$1$Bp8CU9Oujr9SSEw53WV6G.' password.crypt(salt) else # JRuby < 1.7.17 # MS Windows and other systems that don't support enhanced salts raise Puppet::ParseError, 'system does not support enhanced salts' end end puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/range.rb0100644000175100001770000000520214523206606021162 0ustar00# frozen_string_literal: true # # range.rb # # TODO(Krzysztof Wilczynski): We probably need to approach numeric values differently ... module Puppet::Parser::Functions newfunction(:range, type: :rvalue, doc: <<-DOC @summary When given range in the form of (start, stop) it will extrapolate a range as an array. @return the range is extrapolated as an array @example **Usage** 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] 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. @see the step() function in Puppet for skipping values. Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9 DOC ) do |arguments| raise(Puppet::ParseError, 'range(): Wrong number of arguments given (0 for 1)') if arguments.empty? if arguments.size > 1 start = arguments[0] stop = arguments[1] step = arguments[2].nil? ? 1 : arguments[2].to_i.abs raise(ArgumentError, 'range(): 3rd arg (step size) must be a non zero integer (e.g. 1 or -1)') if step.zero? type = '..' # Use the simplest type of Range available in Ruby else # arguments.size == 1 value = arguments[0] m = value.match(%r{^(\w+)(\.\.\.?|-)(\w+)$}) if m start = m[1] stop = m[3] type = m[2] step = 1 elsif %r{^.+$}.match?(value) raise(Puppet::ParseError, "range(): Unable to compute range from the value: #{value}") else raise(Puppet::ParseError, "range(): Unknown range format: #{value}") end end # If we were given an integer, ensure we work with one if %r{^\d+$}.match?(start.to_s) start = start.to_i stop = stop.to_i else start = start.to_s stop = stop.to_s end range = case type when %r{^(..|-)$} then (start..stop) when '...' then (start...stop) # Exclusive of last element end result = range.step(step).first(1_000_000).to_a return result end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/regexpescape.rb0100644000175100001770000000176614523206606022554 0ustar00# frozen_string_literal: true # # regexpescape.rb # module Puppet::Parser::Functions newfunction(:regexpescape, type: :rvalue, doc: <<-DOC @summary Regexp escape a string or array of strings. Requires either a single string or an array as an input. @return [String] A string of characters with metacharacters converted to their escaped form. DOC ) do |arguments| raise(Puppet::ParseError, "regexpescape(): Wrong number of arguments given (#{arguments.size} for 1)") if arguments.empty? value = arguments[0] raise(Puppet::ParseError, 'regexpescape(): Requires either array or string to work with') unless value.is_a?(Array) || value.is_a?(String) result = if value.is_a?(Array) # Numbers in Puppet are often string-encoded which is troublesome ... value.map { |i| i.is_a?(String) ? Regexp.escape(i) : i } else Regexp.escape(value) end return result end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/reject.rb0100644000175100001770000000167314523206606021352 0ustar00# frozen_string_literal: true # # reject.rb # module Puppet::Parser::Functions newfunction(:reject, type: :rvalue, doc: <<-DOC) do |args| @summary This function searches through an array and rejects all elements that match the provided regular expression. @return an array containing all the elements which doesn'' match the provided regular expression @example **Usage** reject(['aaa','bbb','ccc','aaaddd'], 'aaa') Would return: ['bbb','ccc'] > *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 !~ /aaa/ } DOC if args.size != 2 raise Puppet::ParseError, "reject(): Wrong number of arguments given #{args.size} for 2" end ary = args[0] pattern = Regexp.new(args[1]) ary.grep_v(pattern) end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/reverse.rb0100644000175100001770000000131514523206606021542 0ustar00# frozen_string_literal: true # # reverse.rb # module Puppet::Parser::Functions newfunction(:reverse, type: :rvalue, doc: <<-DOC @summary Reverses the order of a string or array. @return reversed string or array > *Note:* that the same can be done with the reverse_each() function in Puppet. DOC ) do |arguments| raise(Puppet::ParseError, "reverse(): Wrong number of arguments given (#{arguments.size} for 1)") if arguments.empty? value = arguments[0] raise(Puppet::ParseError, 'reverse(): Requires either array or string to work with') unless value.is_a?(Array) || value.is_a?(String) result = value.reverse return result end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/shell_join.rb0100644000175100001770000000166514523206606022225 0ustar00# frozen_string_literal: true require 'shellwords' # # shell_join.rb # module Puppet::Parser::Functions newfunction(:shell_join, type: :rvalue, doc: <<-DOC @summary 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 @return a command line string DOC ) do |arguments| raise(Puppet::ParseError, "shell_join(): Wrong number of arguments given (#{arguments.size} for 1)") if arguments.size != 1 array = arguments[0] raise Puppet::ParseError, "First argument is not an Array: #{array.inspect}" unless array.is_a?(Array) # explicit conversion to string is required for ruby 1.9 array = array.map(&:to_s) result = Shellwords.shelljoin(array) return result end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/shell_split.rb0100644000175100001770000000122314523206606022407 0ustar00# frozen_string_literal: true require 'shellwords' # # shell_split.rb # module Puppet::Parser::Functions newfunction(:shell_split, type: :rvalue, doc: <<-DOC @summary Splits a string into an array of tokens in the same way the Bourne shell does. @return array of tokens This function behaves the same as ruby's Shellwords.shellsplit() function DOC ) do |arguments| raise(Puppet::ParseError, "shell_split(): Wrong number of arguments given (#{arguments.size} for 1)") if arguments.size != 1 string = arguments[0].to_s result = Shellwords.shellsplit(string) return result end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/shuffle.rb0100644000175100001770000000215514523206606021526 0ustar00# frozen_string_literal: true # # shuffle.rb # module Puppet::Parser::Functions newfunction(:shuffle, type: :rvalue, doc: <<-DOC @summary Randomizes the order of a string or array elements. @return randomized string or array DOC ) do |arguments| raise(Puppet::ParseError, "shuffle(): Wrong number of arguments given (#{arguments.size} for 1)") if arguments.empty? value = arguments[0] raise(Puppet::ParseError, 'shuffle(): Requires either array or string to work with') unless value.is_a?(Array) || value.is_a?(String) result = value.clone string = value.is_a?(String) # Check whether it makes sense to shuffle ... return result if result.size <= 1 # We turn any string value into an array to be able to shuffle ... result = string ? result.chars : result elements = result.size # Simple implementation of Fisher–Yates in-place shuffle ... elements.times do |i| j = rand(elements - i) + i result[j], result[i] = result[i], result[j] end result = string ? result.join : result return result end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/squeeze.rb0100644000175100001770000000157214523206606021555 0ustar00# frozen_string_literal: true # # squeeze.rb # module Puppet::Parser::Functions newfunction(:squeeze, type: :rvalue, doc: <<-DOC @summary Returns a new string where runs of the same character that occur in this set are replaced by a single character. @return a new string where runs of the same character that occur in this set are replaced by a single character. DOC ) do |arguments| raise(Puppet::ParseError, "squeeze(): Wrong number of arguments given #{arguments.size} for 2 or 1") if (arguments.size != 2) && (arguments.size != 1) item = arguments[0] squeezeval = arguments[1] if item.is_a?(Array) if squeezeval item.map { |i| i.squeeze(squeezeval) } else item.map(&:squeeze) end elsif squeezeval item.squeeze(squeezeval) else item.squeeze end end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/str2bool.rb0100644000175100001770000000321114523206606021632 0ustar00# frozen_string_literal: true # # str2bool.rb # module Puppet::Parser::Functions newfunction(:str2bool, type: :rvalue, doc: <<-DOC @summary This converts a string to a boolean. @return 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'. > *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. DOC ) do |arguments| raise(Puppet::ParseError, "str2bool(): Wrong number of arguments given (#{arguments.size} for 1)") if arguments.empty? string = arguments[0] # If string is already Boolean, return it return string if !!string == string # rubocop:disable Style/DoubleNegation : No viable alternative raise(Puppet::ParseError, 'str2bool(): Requires string to work with') unless string.is_a?(String) # We consider all the yes, no, y, n and so on too ... result = case string # # This is how undef looks like in Puppet ... # We yield false in this case. # when %r{^$}, '' then false # Empty string will be false ... when %r{^(1|t|y|true|yes)$}i then true when %r{^(0|f|n|false|no)$}i then false when %r{^(undef|undefined)$} then false # This is not likely to happen ... else raise(Puppet::ParseError, 'str2bool(): Unknown type of boolean given') end return result end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/str2saltedpbkdf2.rb0100644000175100001770000000603514523206606023253 0ustar00# frozen_string_literal: true # str2saltedpbkdf2.rb # 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. # module Puppet::Parser::Functions newfunction(:str2saltedpbkdf2, type: :rvalue, doc: <<-DOC @summary Convert a string into a salted SHA512 PBKDF2 password hash like requred for OS X / macOS 10.8+ 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. @example Plain text password and salt $pw_info = str2saltedpbkdf2('Pa55w0rd', 'Use a s@lt h3r3 th@t is 32 byt3s', 50000) user { 'jdoe': ensure => present, iterations => $pw_info['interations'], password => $pw_info['password_hex'], salt => $pw_info['salt_hex'], } @example Sensitive password and salt $pw = Sensitive.new('Pa55w0rd') $salt = Sensitive.new('Use a s@lt h3r3 th@t is 32 byt3s') $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'], } @return [Hash] Provides a hash containing the hex version of the password, the hex version of the salt, and iterations. DOC ) do |args| require 'openssl' raise ArgumentError, "str2saltedpbkdf2(): wrong number of arguments (#{args.size} for 3)" if args.size != 3 args.map! do |arg| if (defined? Puppet::Pops::Types::PSensitiveType::Sensitive) && (arg.is_a? Puppet::Pops::Types::PSensitiveType::Sensitive) arg.unwrap else arg end end raise ArgumentError, 'str2saltedpbkdf2(): first argument must be a string' unless args[0].is_a?(String) raise ArgumentError, 'str2saltedpbkdf2(): second argument must be a string' unless args[1].is_a?(String) raise ArgumentError, 'str2saltedpbkdf2(): second argument must be at least 8 bytes long' unless args[1].bytesize >= 8 raise ArgumentError, 'str2saltedpbkdf2(): third argument must be an integer' unless args[2].is_a?(Integer) raise ArgumentError, 'str2saltedpbkdf2(): third argument must be between 40,000 and 70,000' unless args[2] > 40_000 && args[2] < 70_000 password = args[0] salt = args[1] iterations = args[2] keylen = 128 digest = OpenSSL::Digest.new('SHA512') hash = OpenSSL::PKCS5.pbkdf2_hmac(password, salt, iterations, keylen, digest) { 'password_hex' => hash.unpack1('H*'), 'salt_hex' => salt.unpack1('H*'), 'iterations' => iterations } end end puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/str2saltedsha512.rb0100644000175100001770000000252314523206606023104 0ustar00# frozen_string_literal: true # # str2saltedsha512.rb # 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. # module Puppet::Parser::Functions newfunction(:str2saltedsha512, type: :rvalue, doc: <<-DOC @summary This converts a string to a salted-SHA512 password hash (which is used for OS X versions >= 10.7). @return converted string as a hex version of a salted-SHA512 password hash 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. DOC ) do |arguments| require 'digest/sha2' raise(Puppet::ParseError, "str2saltedsha512(): Wrong number of arguments passed (#{arguments.size} but we require 1)") if arguments.size != 1 password = arguments[0] raise(Puppet::ParseError, "str2saltedsha512(): Requires a String argument, you passed: #{password.class}") unless password.is_a?(String) seedint = rand((2**31) - 1) seedstring = Array(seedint).pack('L') saltedpass = Digest::SHA512.digest(seedstring + password) (seedstring + saltedpass).unpack1('H*') end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/suffix.rb0100644000175100001770000000327014523206606021375 0ustar00# frozen_string_literal: true # # suffix.rb # module Puppet::Parser::Functions newfunction(:suffix, type: :rvalue, doc: <<-DOC @summary This function applies a suffix to all elements in an array, or to the keys in a hash. @return Array or Hash with updated elements containing the passed suffix @example **Usage** suffix(['a','b','c'], 'p') Will return: ['ap','bp','cp'] > *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" }``` DOC ) do |arguments| # Technically we support two arguments but only first is mandatory ... raise(Puppet::ParseError, "suffix(): Wrong number of arguments given (#{arguments.size} for 1)") if arguments.empty? enumerable = arguments[0] raise Puppet::ParseError, "suffix(): expected first argument to be an Array or a Hash, got #{enumerable.inspect}" unless enumerable.is_a?(Array) || enumerable.is_a?(Hash) suffix = arguments[1] if arguments[1] raise Puppet::ParseError, "suffix(): expected second argument to be a String, got #{suffix.inspect}" if suffix && !(suffix.is_a? String) result = if enumerable.is_a?(Array) # Turn everything into string same as join would do ... enumerable.map do |i| i = i.to_s suffix ? i + suffix : i end else enumerable.to_h do |k, v| k = k.to_s [suffix ? k + suffix : k, v] end end return result end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/swapcase.rb0100644000175100001770000000237614523206606021705 0ustar00# frozen_string_literal: true # # swapcase.rb # 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. # module Puppet::Parser::Functions newfunction(:swapcase, type: :rvalue, doc: <<-DOC @summary This function will swap the existing case of a string. @return string with uppercase alphabetic characters converted to lowercase and lowercase characters converted to uppercase @example **Usage** swapcase("aBcD") Would result in: "AbCd" DOC ) do |arguments| raise(Puppet::ParseError, "swapcase(): Wrong number of arguments given (#{arguments.size} for 1)") if arguments.empty? value = arguments[0] raise(Puppet::ParseError, 'swapcase(): Requires either array or string to work with') unless value.is_a?(Array) || value.is_a?(String) result = if value.is_a?(Array) # Numbers in Puppet are often string-encoded which is troublesome ... value.map { |i| i.is_a?(String) ? i.swapcase : i } else value.swapcase end return result end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/time.rb0100644000175100001770000000262714523206606021034 0ustar00# frozen_string_literal: true # # time.rb # module Puppet::Parser::Functions newfunction(:time, type: :rvalue, doc: <<-DOC @summary This function will return the current time since epoch as an integer. @return the current time since epoch as an integer. @example **Usage** time() Will return something like: 1311972653 > *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()``` DOC ) do |arguments| # The Time Zone argument is optional ... time_zone = arguments[0] if arguments[0] raise(Puppet::ParseError, "time(): Wrong number of arguments given #{arguments.size} for 0 or 1") if !arguments.empty? && (arguments.size != 1) time = Time.new # There is probably a better way to handle Time Zone ... if time_zone && !time_zone.empty? original_zone = ENV.fetch('TZ', nil) local_time = time.clone local_time = local_time.utc ENV['TZ'] = time_zone result = local_time.localtime.strftime('%s') ENV['TZ'] = original_zone else result = time.localtime.strftime('%s') end # Calling Time#to_i on a receiver changes it. Trust me I am the Doctor. result = result.to_i return result end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/to_bytes.rb0100644000175100001770000000225114523206606021717 0ustar00# frozen_string_literal: true # # to_bytes.rb # module Puppet::Parser::Functions newfunction(:to_bytes, type: :rvalue, doc: <<-DOC @summary Converts the argument into bytes, for example 4 kB becomes 4096. @return converted value into 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. DOC ) do |arguments| raise(Puppet::ParseError, "to_bytes(): Wrong number of arguments given (#{arguments.size} for 1)") if arguments.size != 1 arg = arguments[0] return arg if arg.is_a? Numeric value, prefix = *%r{([0-9.e+-]*)\s*([^bB]?)}.match(arg)[1, 2] value = value.to_f case prefix when '' then return value.to_i when 'k' then return (value * (1 << 10)).to_i when 'M' then return (value * (1 << 20)).to_i when 'G' then return (value * (1 << 30)).to_i when 'T' then return (value * (1 << 40)).to_i when 'P' then return (value * (1 << 50)).to_i when 'E' then return (value * (1 << 60)).to_i else raise Puppet::ParseError, "to_bytes(): Unknown prefix #{prefix}" end end end puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/union.rb0100644000175100001770000000141314523206606021216 0ustar00# frozen_string_literal: true # # union.rb # module Puppet::Parser::Functions newfunction(:union, type: :rvalue, doc: <<-DOC @summary This function returns a union of two or more arrays. @return a unionized array of two or more arrays @example **Usage** union(["a","b","c"],["b","c","d"]) Would return: ["a","b","c","d"] DOC ) do |arguments| # Check that 2 or more arguments have been given ... raise(Puppet::ParseError, "union(): Wrong number of arguments given (#{arguments.size} for < 2)") if arguments.size < 2 arguments.each do |argument| raise(Puppet::ParseError, 'union(): Every parameter must be an array') unless argument.is_a?(Array) end arguments.reduce(:|) end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/unix2dos.rb0100644000175100001770000000101214523206606021634 0ustar00# frozen_string_literal: true # Custom Puppet function to convert unix to dos format module Puppet::Parser::Functions newfunction(:unix2dos, type: :rvalue, arity: 1, doc: <<-DOC @summary Returns the DOS version of the given string. @return the DOS version of the given string. Takes a single string argument. DOC ) do |arguments| raise(Puppet::ParseError, 'unix2dos(): Requires string as argument') unless arguments[0].is_a?(String) arguments[0].gsub(%r{\r*\n}, "\r\n") end end puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/uriescape.rb0100644000175100001770000000351614523206606022054 0ustar00# frozen_string_literal: true require 'uri' # # uriescape.rb # 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. # URI.escape has been fully removed as of Ruby 3. Therefore, it will not work as it stand on Puppet 8. Consider deprecating or updating this function. # module Puppet::Parser::Functions newfunction(:uriescape, type: :rvalue, doc: <<-DOC @summary Urlencodes a string or array of strings. Requires either a single string or an array as an input. @return [String] a string that contains the converted value > **Note:** **Deprecated:** Starting Puppet 8, our Ruby version has upgraded to 3.2. Therefore, its no longer possible to call URI.escape as it was deprecated by 2.7 and removed completely by 3+. This function should be removed once Puppet 7 is no longer supported. DOC ) do |arguments| raise(Puppet::ParseError, 'Puppet: This function is not available in Puppet 8. URI.escape no longer exists as of Ruby 3+.') if Puppet::Util::Package.versioncmp(Puppet.version, '8').positive? raise(Puppet::ParseError, "uriescape(): Wrong number of arguments given (#{arguments.size} for 1)") if arguments.empty? value = arguments[0] raise(Puppet::ParseError, 'uriescape(): Requires either array or string to work with') unless value.is_a?(Array) || value.is_a?(String) result = if value.is_a?(Array) # Numbers in Puppet are often string-encoded which is troublesome ... value.map { |i| i.is_a?(String) ? URI::DEFAULT_PARSER.escape(i) : i } else URI::DEFAULT_PARSER.escape(value) end return result end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/validate_augeas.rb0100644000175100001770000000551014523206606023206 0ustar00# frozen_string_literal: true require 'tempfile' # # validate_augaes.rb # module Puppet::Parser::Functions newfunction(:validate_augeas, doc: <<-DOC @summary Perform validation of a string using an Augeas lens 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. @return validate string using an Augeas lens @example **Usage** 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') DOC ) do |args| unless Puppet.features.augeas? raise Puppet::ParseError, 'validate_augeas(): this function requires the augeas feature. See http://docs.puppetlabs.com/guides/augeas.html#pre-requisites for how to activate it.' end raise Puppet::ParseError, "validate_augeas(): wrong number of arguments (#{args.length}; must be 2, 3, or 4)" if (args.length < 2) || (args.length > 4) msg = args[3] || "validate_augeas(): Failed to validate content against #{args[1].inspect}" require 'augeas' aug = Augeas.open(nil, nil, Augeas::NO_MODL_AUTOLOAD) begin content = args[0] # Test content in a temporary file tmpfile = Tempfile.new('validate_augeas') begin tmpfile.write(content) ensure tmpfile.close end # Check for syntax lens = args[1] aug.transform( lens: lens, name: 'Validate_augeas', incl: tmpfile.path, ) aug.load! unless aug.match("/augeas/files#{tmpfile.path}//error").empty? error = aug.get("/augeas/files#{tmpfile.path}//error/message") msg += " with error: #{error}" raise Puppet::ParseError, msg end # Launch unit tests tests = args[2] || [] aug.defvar('file', "/files#{tmpfile.path}") tests.each do |t| msg += " testing path #{t}" raise Puppet::ParseError, msg unless aug.match(t).empty? end ensure aug.close tmpfile.unlink end end end puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/validate_cmd.rb0100644000175100001770000000446714523206606022516 0ustar00# frozen_string_literal: true require 'puppet/util/execution' require 'tempfile' # # validate_cmd.rb # module Puppet::Parser::Functions newfunction(:validate_cmd, doc: <<-DOC @summary Perform validation of a string with an external command. 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. @return validate of a string with an external command A helpful error message can be returned like this: @example **Usage** 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') DOC ) do |args| raise Puppet::ParseError, "validate_cmd(): wrong number of arguments (#{args.length}; must be 2 or 3)" if (args.length < 2) || (args.length > 3) msg = args[2] || "validate_cmd(): failed to validate content with command #{args[1].inspect}" content = args[0] checkscript = args[1] # Test content in a temporary file tmpfile = Tempfile.new('validate_cmd') begin tmpfile.write(content) tmpfile.close check_with_correct_location = if %r{\s%(\s|$)}.match?(checkscript) checkscript.gsub(%r{%}, tmpfile.path) else "#{checkscript} #{tmpfile.path}" end if Puppet::Util::Execution.respond_to?(:execute) Puppet::Util::Execution.execute(check_with_correct_location) else Puppet::Util.execute(check_with_correct_location) end rescue Puppet::ExecutionFailure => e msg += "\n#{e}" raise Puppet::ParseError, msg rescue StandardError => e msg += "\n#{e.class.name} #{e}" raise Puppet::ParseError, msg ensure tmpfile.unlink end end end puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/validate_x509_rsa_key_pair.rb0100644000175100001770000000245414523206606025202 0ustar00# frozen_string_literal: true # # validate_x509_rsa_key_pair.rb # module Puppet::Parser::Functions newfunction(:validate_x509_rsa_key_pair, doc: <<-DOC @summary 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. @return Fail compilation if any value fails this check. ```validate_x509_rsa_key_pair($cert, $key)``` DOC ) do |args| require 'openssl' NUM_ARGS = 2 unless defined? NUM_ARGS unless args.length == NUM_ARGS raise Puppet::ParseError, "validate_x509_rsa_key_pair(): wrong number of arguments (#{args.length}; must be #{NUM_ARGS})" end args.each do |arg| raise Puppet::ParseError, "#{arg.inspect} is not a string." unless arg.is_a?(String) end begin cert = OpenSSL::X509::Certificate.new(args[0]) rescue OpenSSL::X509::CertificateError => e raise Puppet::ParseError, "Not a valid x509 certificate: #{e}" end begin key = OpenSSL::PKey::RSA.new(args[1]) rescue OpenSSL::PKey::RSAError => e raise Puppet::ParseError, "Not a valid RSA key: #{e}" end raise Puppet::ParseError, 'Certificate signature does not match supplied key' unless cert.verify(key) end end puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/values_at.rb0100644000175100001770000000572214523206606022060 0ustar00# frozen_string_literal: true # # values_at.rb # module Puppet::Parser::Functions newfunction(:values_at, type: :rvalue, doc: <<-DOC @summary Finds value inside an array based on location. 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 @return an array of values identified by location @example **Usage** 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'] > *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']` DOC ) do |arguments| raise(Puppet::ParseError, "values_at(): Wrong number of arguments given (#{arguments.size} for 2)") if arguments.size < 2 array = arguments.shift raise(Puppet::ParseError, 'values_at(): Requires array to work with') unless array.is_a?(Array) indices = [arguments.shift].flatten # Get them all ... Pokemon ... raise(Puppet::ParseError, 'values_at(): You must provide at least one positive index to collect') if !indices || indices.empty? indices_list = [] indices.each do |i| i = i.to_s m = i.match(%r{^(\d+)(\.\.\.?|-)(\d+)$}) if m start = m[1].to_i stop = m[3].to_i type = m[2] raise(Puppet::ParseError, 'values_at(): Stop index in given indices range is smaller than the start index') if start > stop raise(Puppet::ParseError, 'values_at(): Stop index in given indices range exceeds array size') if stop > array.size - 1 # First element is at index 0 is it not? range = case type when %r{^(\.\.|-)$} then (start..stop) when %r{^(\.\.\.)$} then (start...stop) # Exclusive of last element ... end range.each { |i| indices_list << i.to_i } # rubocop:disable Lint/ShadowingOuterLocalVariable : Value is meant to be shadowed else # Only positive numbers allowed in this case ... raise(Puppet::ParseError, 'values_at(): Unknown format of given index') unless %r{^\d+$}.match?(i) # In Puppet numbers are often string-encoded ... i = i.to_i raise(Puppet::ParseError, 'values_at(): Given index exceeds array size') if i > array.size - 1 # Same story. First element is at index 0 ... indices_list << i end end # We remove nil values as they make no sense in Puppet DSL ... result = indices_list.map { |i| array[i] }.compact return result end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/parser/functions/zip.rb0100644000175100001770000000177614523206606020704 0ustar00# frozen_string_literal: true # # zip.rb # module Puppet::Parser::Functions newfunction(:zip, type: :rvalue, doc: <<-DOC @summary Takes one element from first array and merges corresponding elements from second array. @return This generates a sequence of n-element arrays, where n is one more than the count of arguments. @example zip(['1','2','3'],['4','5','6']) Would result in: ["1", "4"], ["2", "5"], ["3", "6"] DOC ) do |arguments| # Technically we support three arguments but only first is mandatory ... raise(Puppet::ParseError, "zip(): Wrong number of arguments given (#{arguments.size} for 2)") if arguments.size < 2 a = arguments[0] b = arguments[1] raise(Puppet::ParseError, 'zip(): Requires array to work with') unless a.is_a?(Array) && b.is_a?(Array) flatten = function_str2bool([arguments[2]]) if arguments[2] result = a.zip(b) result = flatten ? result.flatten : result return result end end # vim: set ts=2 sw=2 et : puppetlabs-stdlib-9.4.1/lib/puppet/provider0040755000000000000000000000000014523206607015760 5ustar00puppetlabs-stdlib-9.4.1/lib/puppet/provider/file_line0040755000000000000000000000000014523206607017706 5ustar00puppetlabs-stdlib-9.4.1/lib/puppet/provider/file_line/ruby.rb0100644000175100001770000001217214523206606021327 0ustar00# frozen_string_literal: true Puppet::Type.type(:file_line).provide(:ruby) do desc <<-DOC @summary This type allows puppet to manage small config files. 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. DOC def exists? found = false lines_count = 0 lines.each do |line| found = line.chomp == resource[:line] lines_count += 1 if found end return found = lines_count.positive? if resource[:match].nil? match_count = count_matches(new_match_regex) found = if resource[:ensure] == :present if match_count.zero? if lines_count.zero? && resource[:append_on_no_match].to_s == 'false' true # lies, but gets the job done else !(lines_count.zero? && resource[:append_on_no_match].to_s != 'false') end elsif resource[:replace_all_matches_not_matching_line].to_s == 'true' false # maybe lies, but knows there's still work to do elsif lines_count.zero? resource[:replace].to_s == 'false' else true end elsif match_count.zero? if lines_count.zero? false else true end elsif lines_count.zero? resource[:match_for_absence].to_s == 'true' else true end end def create return if resource[:replace].to_s != 'true' && count_matches(new_match_regex).positive? if resource[:match] handle_create_with_match elsif resource[:after] handle_create_with_after else handle_append_line end end def destroy if resource[:match_for_absence].to_s == 'true' && resource[:match] handle_destroy_with_match else handle_destroy_line end end private def lines # If this type is ever used with very large files, we should # write this in a different way, using a temp # file; for now assuming that this type is only used on # small-ish config files that can fit into memory without # too much trouble. @lines ||= File.readlines(resource[:path], encoding: resource[:encoding]) rescue TypeError => _e # Ruby 1.8 doesn't support open_args @lines ||= File.readlines(resource[:path]) rescue Errno::ENOENT raise unless resource.noop? @lines ||= [] end def new_after_regex resource[:after] ? Regexp.new(resource[:after]) : nil end def new_match_regex resource[:match] ? Regexp.new(resource[:match]) : nil end def count_matches(regex) lines.count do |line| if resource[:replace_all_matches_not_matching_line].to_s == 'true' line.match(regex) unless line.chomp == resource[:line] else line.match(regex) end end end def handle_create_with_match after_regex = new_after_regex match_regex = new_match_regex match_count = count_matches(new_match_regex) raise Puppet::Error, "More than one line in file '#{resource[:path]}' matches pattern '#{resource[:match]}'" if match_count > 1 && resource[:multiple].to_s != 'true' File.open(resource[:path], 'w') do |fh| lines.each do |line| fh.puts(match_regex.match(line) ? resource[:line] : line) next unless match_count.zero? && after_regex if after_regex.match(line) fh.puts(resource[:line]) match_count += 1 # Increment match_count to indicate that the new line has been inserted. end end fh.puts(resource[:line]) if match_count.zero? end end def handle_create_with_after after_regex = new_after_regex after_count = count_matches(after_regex) if after_count > 1 && resource[:multiple].to_s != 'true' raise Puppet::Error, "#{after_count} lines match pattern '#{resource[:after]}' in file '#{resource[:path]}'. One or no line must match the pattern." end File.open(resource[:path], 'w') do |fh| lines.each do |line| fh.puts(line) fh.puts(resource[:line]) if after_regex.match(line) end fh.puts(resource[:line]) if after_count.zero? end end def handle_destroy_with_match match_regex = new_match_regex match_count = count_matches(match_regex) raise Puppet::Error, "More than one line in file '#{resource[:path]}' matches pattern '#{resource[:match]}'" if match_count > 1 && resource[:multiple].to_s != 'true' local_lines = lines File.write(resource[:path], local_lines.reject { |line| match_regex.match(line) }.join) end def handle_destroy_line local_lines = lines File.write(resource[:path], local_lines.reject { |line| line.chomp == resource[:line] }.join) end def handle_append_line local_lines = lines File.open(resource[:path], 'w') do |fh| local_lines.each do |line| fh.puts(line) end fh.puts(resource[:line]) end end end puppetlabs-stdlib-9.4.1/lib/puppet/type0040755000000000000000000000000014523206607015107 5ustar00puppetlabs-stdlib-9.4.1/lib/puppet/type/anchor.rb0100644000175100001770000000350514523206606017021 0ustar00# frozen_string_literal: true Puppet::Type.newtype(:anchor) do desc <<-DOC @summary A simple resource type intended to be used as an anchor in a composite class. > 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': } ``` DOC newparam :name do desc 'The name of the anchor resource.' end def refresh # We don't do anything with them, but we need this to # show that we are "refresh aware" and not break the # chain of propagation. end end puppetlabs-stdlib-9.4.1/lib/puppet/type/file_line.rb0100644000175100001770000001527014523206606017477 0ustar00# frozen_string_literal: true Puppet::Type.newtype(:file_line) do desc <<-DOC @summary 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 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. DOC ensurable do desc 'Manage the state of this type.' defaultvalues defaultto :present end newparam(:name, namevar: true) do desc 'An arbitrary name used as the identity of the resource.' end newparam(:match) do desc '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.' end newparam(:match_for_absence) do desc '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.' newvalues(true, false) defaultto false end newparam(:multiple) do desc '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' newvalues(true, false) end newparam(:after) do desc '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.' end # The line property never changes; the type only ever performs a create() or # destroy(). line is a property in order to allow it to correctly handle # Sensitive type values. Because it is a property which will never change, # it should never be considered out of sync. newproperty(:line) do desc 'The line to be appended to the file or used to replace matches found by the match attribute.' def retrieve @resource[:line] end end newparam(:path) do desc 'The file Puppet will ensure contains the line specified by the line parameter.' validate do |value| raise Puppet::Error, "File paths must be fully qualified, not '#{value}'" unless Puppet::Util.absolute_path?(value) end end newparam(:replace) do desc 'If true, replace line that matches. If false, do not write line if a match is found' newvalues(true, false) defaultto true end newparam(:replace_all_matches_not_matching_line) do desc '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.' newvalues(true, false) defaultto false end newparam(:encoding) do desc 'For files that are not UTF-8 encoded, specify encoding such as iso-8859-1' defaultto 'UTF-8' end newparam(:append_on_no_match) do desc 'If true, append line if match is not found. If false, do not append line if a match is not found' newvalues(true, false) defaultto true end # Autorequire the file resource if it's being managed autorequire(:file) do self[:path] end validate do raise(Puppet::Error, 'multiple must be true when replace_all_matches_not_matching_line is true') if self[:replace_all_matches_not_matching_line].to_s == 'true' && self[:multiple].to_s == 'false' raise(Puppet::Error, 'replace must be true when replace_all_matches_not_matching_line is true') if self[:replace_all_matches_not_matching_line].to_s == 'true' && self[:replace].to_s == 'false' raise(Puppet::Error, 'line is a required attribute') if !self[:line] && !((self[:ensure].to_s == 'absent') && (self[:match_for_absence].to_s == 'true') && self[:match]) raise(Puppet::Error, 'path is a required attribute') unless self[:path] end end puppetlabs-stdlib-9.4.1/lib/puppet_x0040755000000000000000000000000014523206607014455 5ustar00puppetlabs-stdlib-9.4.1/lib/puppet_x/stdlib0040755000000000000000000000000014523206607015736 5ustar00puppetlabs-stdlib-9.4.1/lib/puppet_x/stdlib/toml_dumper.rb0100644000175100001770000000776014523206606020734 0ustar00# The MIT License (MIT) # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. require_relative '../../puppet_x/stdlib' require 'date' # The Dumper class was blindly copied from https://github.com/emancu/toml-rb/blob/v2.0.1/lib/toml-rb/dumper.rb # This allows us to use the `to_toml` function as a `Deferred` function because the `toml-rb` gem is usually # installed on the agent and the `Deferred` function gets evaluated before the catalog gets applied. This # makes it in most scenarios impossible to install the gem before it is used. class PuppetX::Stdlib::TomlDumper attr_reader :toml_str def initialize(hash) @toml_str = '' visit(hash, []) end private def visit(hash, prefix, extra_brackets = false) simple_pairs, nested_pairs, table_array_pairs = sort_pairs hash print_prefix prefix, extra_brackets if prefix.any? && (simple_pairs.any? || hash.empty?) dump_pairs simple_pairs, nested_pairs, table_array_pairs, prefix end def sort_pairs(hash) nested_pairs = [] simple_pairs = [] table_array_pairs = [] hash.keys.sort.each do |key| val = hash[key] element = [key, val] if val.is_a? Hash nested_pairs << element elsif val.is_a?(Array) && val.first.is_a?(Hash) table_array_pairs << element else simple_pairs << element end end [simple_pairs, nested_pairs, table_array_pairs] end def dump_pairs(simple, nested, table_array, prefix = []) # First add simple pairs, under the prefix dump_simple_pairs simple dump_nested_pairs nested, prefix dump_table_array_pairs table_array, prefix end def dump_simple_pairs(simple_pairs) simple_pairs.each do |key, val| key = quote_key(key) unless bare_key? key @toml_str << "#{key} = #{to_toml(val)}\n" end end def dump_nested_pairs(nested_pairs, prefix) nested_pairs.each do |key, val| key = quote_key(key) unless bare_key? key visit val, prefix + [key], false end end def dump_table_array_pairs(table_array_pairs, prefix) table_array_pairs.each do |key, val| key = quote_key(key) unless bare_key? key aux_prefix = prefix + [key] val.each do |child| print_prefix aux_prefix, true args = sort_pairs(child) << aux_prefix dump_pairs(*args) end end end def print_prefix(prefix, extra_brackets = false) new_prefix = prefix.join('.') new_prefix = "[#{new_prefix}]" if extra_brackets @toml_str += "[#{new_prefix}]\n" end def to_toml(obj) case obj when Time, DateTime obj.strftime('%Y-%m-%dT%H:%M:%SZ') when Date obj.strftime('%Y-%m-%d') when Regexp obj.inspect.inspect when String obj.inspect.gsub(/\\(#[$@{])/, '\1') # rubocop:disable Style/RegexpLiteral else obj.inspect end end def bare_key?(key) # rubocop:disable Style/RegexpLiteral !!key.to_s.match(/^[a-zA-Z0-9_-]*$/) # rubocop:enable Style/RegexpLiteral end def quote_key(key) "\"#{key.gsub('"', '\\"')}\"" end end puppetlabs-stdlib-9.4.1/lib/puppet_x/stdlib.rb0100644000175100001770000000017214523206606016373 0ustar00# frozen_string_literal: true require 'puppet_x' # common PuppetX::Stdlib module definition module PuppetX::Stdlib; end puppetlabs-stdlib-9.4.1/manifests0040755000000000000000000000000014523206607014034 5ustar00puppetlabs-stdlib-9.4.1/manifests/init.pp0100644000175100001770000000057414523206606015456 0ustar00# @summary # This module manages 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 and stdlib::manage. # class stdlib { include stdlib::manage include stdlib::stages } puppetlabs-stdlib-9.4.1/manifests/manage.pp0100644000175100001770000000277614523206606015751 0ustar00# @summary A simple place to define trivial resources # # Sometimes your systems require a single simple resource. # It can feel unnecessary to create a module for a single # resource. There are a number of possible patterns to # generate trivial resource definitions. This is an attempt # to create a single clear method for uncomplicated resources. # There is __limited__ support for `before`, `require`, `notify`, # and `subscribe`. # # @param create_resources # A hash of resources to create # NOTE: functions, such as `template` or `epp`, are not evaluated. # # @example # class { 'stdlib::manage': # 'create_resources' => { # 'file' => { # '/etc/motd.d/hello' => { # 'content' => 'I say Hi', # 'notify' => 'Service[sshd]', # } # }, # 'package' => { # 'example' => { # 'ensure' => 'installed', # 'subscribe' => ['Service[sshd]', 'Exec[something]'], # } # } # } # # @example # stdlib::manage::create_resources: # file: # '/etc/motd.d/hello': # content: I say Hi # notify: 'Service[sshd]' # package: # example: # ensure: installed # subscribe: # - 'Service[sshd]' # - 'Exec[something]' class stdlib::manage ( Hash[String, Hash] $create_resources = {} ) { $create_resources.each |$type, $resources| { $resources.each |$title, $attributes| { create_resources($type, { $title => $attributes }) } } } puppetlabs-stdlib-9.4.1/manifests/stages.pp0100644000175100001770000000142014523206606015770 0ustar00# @summary # This class manages a standard set of run stages for Puppet. It is managed by # the stdlib class, and should not be declared independently. # # 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 # # @example # node default { # include ::stdlib # class { java: stage => 'runtime' } # } # class stdlib::stages { stage { 'setup': before => Stage['main'] } stage { 'runtime': require => Stage['main'] } -> stage { 'setup_infra': } -> stage { 'deploy_infra': } -> stage { 'setup_app': } -> stage { 'deploy_app': } -> stage { 'deploy': } } puppetlabs-stdlib-9.4.1/metadata.json0100644000175100001770000000421314523206606014626 0ustar00{ "name": "puppetlabs-stdlib", "version": "9.4.1", "author": "puppetlabs", "summary": "Standard library of resources for Puppet modules.", "license": "Apache-2.0", "source": "https://github.com/puppetlabs/puppetlabs-stdlib", "project_page": "https://github.com/puppetlabs/puppetlabs-stdlib", "issues_url": "https://github.com/puppetlabs/puppetlabs-stdlib/issues", "dependencies": [ ], "operatingsystem_support": [ { "operatingsystem": "RedHat", "operatingsystemrelease": [ "7", "8", "9" ] }, { "operatingsystem": "CentOS", "operatingsystemrelease": [ "7", "8" ] }, { "operatingsystem": "OracleLinux", "operatingsystemrelease": [ "7" ] }, { "operatingsystem": "Scientific", "operatingsystemrelease": [ "7" ] }, { "operatingsystem": "SLES", "operatingsystemrelease": [ "12", "15" ] }, { "operatingsystem": "Debian", "operatingsystemrelease": [ "10", "11" ] }, { "operatingsystem": "Ubuntu", "operatingsystemrelease": [ "18.04", "20.04", "22.04" ] }, { "operatingsystem": "Solaris", "operatingsystemrelease": [ "11" ] }, { "operatingsystem": "Windows", "operatingsystemrelease": [ "10", "2012", "2012 R2", "2016", "2019", "2022" ] }, { "operatingsystem": "AIX", "operatingsystemrelease": [ "7.1", "7.2" ] }, { "operatingsystem": "Rocky", "operatingsystemrelease": [ "8" ] }, { "operatingsystem": "AlmaLinux", "operatingsystemrelease": [ "8" ] } ], "requirements": [ { "name": "puppet", "version_requirement": ">= 7.0.0 < 9.0.0" } ], "description": "Standard Library for Puppet Modules", "pdk-version": "2.7.1", "template-url": "https://github.com/puppetlabs/pdk-templates#main", "template-ref": "heads/main-0-ge5b0114" } puppetlabs-stdlib-9.4.1/pdk.yaml0100644000175100001770000000001714523206606013613 0ustar00--- ignore: [] puppetlabs-stdlib-9.4.1/provision.yaml0100644000175100001770000000321114523206606015064 0ustar00--- default: provisioner: docker images: - litmusimage/centos:7 vagrant: provisioner: vagrant images: - centos/7 - generic/ubuntu1804 - gusztavvargadr/windows-server docker_deb: provisioner: docker images: - litmusimage/debian:8 - litmusimage/debian:9 - litmusimage/debian:10 docker_ub_6: provisioner: docker images: - litmusimage/ubuntu:14.04 - litmusimage/ubuntu:16.04 - litmusimage/ubuntu:18.04 - litmusimage/ubuntu:20.04 docker_el7: provisioner: docker images: - litmusimage/centos:7 - litmusimage/oraclelinux:7 - litmusimage/scientificlinux:7 docker_el8: provisioner: docker images: - litmusimage/centos:8 release_checks_6: provisioner: abs images: - redhat-6-x86_64 - redhat-7-x86_64 - redhat-8-x86_64 - centos-6-x86_64 - centos-7-x86_64 - centos-8-x86_64 - oracle-5-x86_64 - oracle-6-x86_64 - oracle-7-x86_64 - scientific-6-x86_64 - scientific-7-x86_64 - debian-8-x86_64 - debian-9-x86_64 - debian-10-x86_64 - sles-12-x86_64 - ubuntu-1404-x86_64 - ubuntu-1604-x86_64 - ubuntu-1804-x86_64 - ubuntu-2004-x86_64 - win-2008-x86_64 - win-2008r2-x86_64 - win-2012-x86_64 - win-2012r2-x86_64 - win-2016-x86_64 - win-2019-x86_64 - win-7-x86_64 - win-81-x86_64 - win-10-pro-x86_64 release_checks_7: provisioner: abs images: - redhat-7-x86_64 - redhat-8-x86_64 - centos-7-x86_64 - centos-8-x86_64 - oracle-7-x86_64 - scientific-7-x86_64 - sles-12-x86_64 - sles-15-x86_64 - debian-9-x86_64 - debian-10-x86_64 - ubuntu-1804-x86_64 - ubuntu-2004-x86_64 - win-2012r2-x86_64 - win-2016-x86_64 - win-2019-x86_64 - win-10-pro-x86_64 puppetlabs-stdlib-9.4.1/readmes0040755000000000000000000000000014523206607013463 5ustar00puppetlabs-stdlib-9.4.1/readmes/README_ja_JP.md0100644000175100001770000035311714523206606016127 0ustar00# stdlib #### 目次 1. [説明 - モジュールの機能とその有益性](#module-description) 1. [セットアップ - stdlib導入の基本](#setup) 1. [使用方法 - 設定オプションと追加機能](#usage) 1. [参考 - モジュールの機能と動作について](#reference) 1. [クラス](#classes) 1. [定義できるタイプ](#defined-types) 1. [データタイプ](#data-types) 1. [Facts](#facts) 1. [関数](#functions) 1. [制約事項 - OSの互換性など](#limitations) 1. [開発 - モジュール貢献についてのガイド](#development) 1. [コントリビュータ](#contributors) ## モジュールの概要 このモジュールでは、Puppetモジュールリソースの標準ライブラリを提供しています。Puppetモジュールでは、この標準ライブラリを広く使用しています。stdlibモジュールは、以下のリソースをPuppetに追加します。 * ステージ * Facts * 関数 * 定義された型 * データタイプ * プロバイダ > *注:* バージョン3.7のPuppet Enterpriseには、stdlibモジュールが含まれていません。Puppet Enterpriseを使用している場合は、Puppetと互換性のあるstdlibの最新リリースをインストールする必要があります。 ## セットアップ stdlibモジュールを[インストール](https://puppet.com/docs/puppet/latest/modules_installing.html)し、この標準ライブラリの関数、Facts、リソースをPuppetに追加します。 stdlibに依存するモジュールを記述する場合は、必ずmetadata.jsonで[依存関係を特定](https://puppet.com/docs/puppet/latest/modules_metadata.html#specifying-dependencies-in-modules)してください。 ## 使用方法 stdlibのほとんどの機能は、Puppetに自動的にロードされます。Puppetで標準化されたランステージを使用するには、`include stdlib`を用いてマニフェスト内でこのクラスを宣言してください。 宣言すると、stdlibがモジュール内の他のすべてのクラスを宣言します。現在モジュールに含まれている他のクラスは、`stdlib::stages`のみです。 `stdlib::stages`クラスは、インフラストラクチャ、言語ランタイム、アプリケーションレイヤの配備に関する各種のランステージを宣言します。ハイレベルステージは、以下のとおりです(順番どおり)。 * セットアップ * main * runtime * setup_infra * deploy_infra * setup_app * deploy_app * deploy 使用例: ```puppet node default { include stdlib class { java: stage => 'runtime' } } ``` ## リファレンス * [パブリッククラス](#public-classes) * [プライベートクラス](#private-classes) * [定義された型](#defined-types) * [データタイプ](#data-types) * [Facts](#facts) * [関数](#functions) ### クラス #### パブリッククラス `stdlib`クラスにはパラメータはありません。 #### プライベートクラス * `stdlib::stages`: Puppetのランステージの標準セットを管理します。 ### 定義された型 #### `file_line` 任意の行がファイル内に確実に含まれるようにします。最初と最後の空白を含め、行全体をマッチさせます。その行が与えられたファイルに含まれない場合は、Puppetがファイルの最後にその行を追加し、望ましい状態を確保します。1つのファイル内で複数のリソースを宣言し、複数の行を管理することが可能です。 例: ```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', } ``` 上の例では、指定された両方の行が、ファイル `/etc/sudoers`に確実に含まれます。 マッチ例: ```puppet file_line { 'bashrc_proxy': ensure => present, path => '/etc/bashrc', line => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128', match => '^export\ HTTP_PROXY\=', } ``` 上の例では、`match`により、'export'で始まり'HTTP_PROXY'と続く行が探され、その行が行内の値に置き換えられます。 マッチ例: ```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, } ``` このコードの例では、`match`によってexportで始まり'HTTP_PROXY'が続く行が検索され、その行が行内の値に置き換えられます。マッチするものが見つからない場合、ファイルは変更されません。 `ensure => absent`の例: `ensure => absent`を設定する場合に、このタイプの動作には2通りがあります。 1つは`match => ...`と`match_for_absence => true`の設定です。`match`により、'export'で始まり'HTTP_PROXY'と続く行が探され、その行が削除されます。複数の行がマッチし、`multiple => true`パラメータが設定されていない場合は、エラーが生じます。 この例で`line => ...`パラメータは承認されますが無視されます。 例:  ```puppet file_line { 'bashrc_proxy': ensure => absent, path => '/etc/bashrc', match => '^export\ HTTP_PROXY\=', match_for_absence => true, } ``` `ensure => absent`を設定する場合のもう1つの動作は、`line => ...`の指定と一致なしです。行が存在しないことを確認した場合のデフォルトの動作では、マッチするすべての行を削除します。この動作を無効にすることはできません。 例:  ```puppet file_line { 'bashrc_proxy': ensure => absent, path => '/etc/bashrc', line => 'export HTTP_PROXY=http://squid.puppetlabs.vm:3128', } ``` エンコード例: ```puppet file_line { "XScreenSaver": ensure => present, path => '/root/XScreenSaver' line => "*lock: 10:00:00", match => '^*lock:', encoding => "iso-8859-1", } ``` ファイルにUTF-8に対応しない特殊文字が用いられていると、「Invalid byte sequence in UTF-8」(UTF-8で無効なバイト列)というエラーメッセージが表示されます。この場合は、ファイルエンコーディングを決定し、`encoding`属性で指定してください。 **Autorequire:** Puppetが管理しているファイルに、管理対象となる行が含まれている場合は、`file_line`リソースと当該ファイルの暗黙的な依存関係が設定されます。 **パラメータ**  パラメータは、別途説明がない限り、すべてオプションです。 ##### `after` このパラメータで指定された行の後に、Puppetが正規表現を用いて新規の行を追加します(既存の行が規定の位置に追加されます)。 値: 正規表現を含む文字列 デフォルト値: `undef`。 ##### `encoding` 適正なファイルエンコードを指定します。 値: 有効なRuby文字エンコードを指定する文字列 デフォルト: 'UTF-8' ##### `ensure`: リソースが存在するかどうかを指定します。 値: 'present'、'absent' デフォルト値: 'present'。 ##### `line` **必須** `path`パラメータにより位置を示されたファイルに追加する行を設定します。 値: 文字列 ##### `match` ファイル内の既存の行と比較する正規表現を指定します。マッチが見つかった場合、新規の行を追加する代わりに、置き換えられます。 値: 正規表現を含む文字列 デフォルト値: `undef`。 ##### `match_for_absence` `ensure => absent`の場合にマッチを適用するかどうかを指定します。`true`に設定してマッチを設定すると、マッチする行が削除されます。`false`に設定すると(デフォルト)、`ensure => absent`の場合にマッチが無視され、代わりに`line`の値が使用されます。`ensure => present`になっている場合は、このパラメータは無視されます。 ブーリアン。 デフォルト値: `false`。 ##### `multiple` `match`および`after`により複数の行を変更できるかどうかを指定します。`false`に設定すると、file_lineは1つの行のみ置き換えることができますが、複数の行を置き換えようとするとエラーが発生します。`true`に設定すると、file_lineは1つまたは複数の行を置き換えることができます。 値: `true`、`false`。 デフォルト値: `false`。 ##### `name` リソースの名称として使用する名前を指定します。リソースのnamevarをリソースの規定の`title`と異なるものにしたい場合は、`name`で名前を指定します。 値: 文字列 デフォルト値: タイトルの値 ##### `path` **必須** `line`で指定された行を確保するファイルを指定します。 値: 当該ファイルの絶対パスを指定する文字列 ##### `replace` `match`パラメータとマッチする既存の行をリソースで上書きするかどうかを指定します。`false`に設定すると、`match`パラメータにマッチする行が見つかった場合、その行はファイルに配置されません。 `false`に設定すると、`match`パラメータにマッチする行が見つかった場合、その行はファイルに配置されません。 ブーリアン。 デフォルト値: `true`。 ##### `replace_all_matches_not_matching_line` `line`がファイルにすでに存在する場合でも、`match`パラメータに一致するすべての行が置き換えられます。 デフォルト値: `false`。 ### データタイプ #### `Stdlib::Absolutepath` 厳密な絶対パスタイプ。UnixpathタイプおよびWindowspathタイプの異形を使用します。 使用可能なインプット例: ```shell /var/log ``` ```shell /usr2/username/bin:/usr/local/bin:/usr/bin:. ``` ```shell C:\\WINDOWS\\System32 ``` 使用不可能なインプット例: ```shell ../relative_path ``` #### `Stdlib::Ensure::Service` サービスリソースの使用可能なensure値と一致します。 使用可能なインプット例: ```shell stopped running ``` 使用不可能なインプット例: ```shell true false ``` #### `Stdlib::Httpsurl` HTTPS URLに一致します。この一致では、大文字と小文字は区別されません。 使用可能なインプット例: ```shell https://hello.com HTTPS://HELLO.COM ``` 使用不可能なインプット例: ```shell httds://notquiteright.org` ``` #### `Stdlib::Httpurl` HTTPSとHTTPの両方のURLに一致します。この一致では、大文字と小文字は区別されません。 使用可能なインプット例: ```shell https://hello.com http://hello.com HTTP://HELLO.COM ``` 使用不可能なインプット例: ```shell httds://notquiteright.org ``` #### `Stdlib::MAC` [RFC5342](https://tools.ietf.org/html/rfc5342)で定義されるMACアドレスに一致します。 #### `Stdlib::Unixpath` Unixオペレーティングシステムの絶対パスに一致します。 使用可能なインプット例: ```shell /usr2/username/bin:/usr/local/bin:/usr/bin: /var/tmp ``` 使用不可能なインプット例: ```shell C:/whatever some/path ../some/other/path ``` #### `Stdlib::Filemode` 1から4までの数字とシンボリックファイルモードからなる8進ファイルモードに一致します。 使用可能なインプット例: ```shell 0644 ``` ```shell 1777 ``` ```shell a=Xr,g=w ``` 使用不可能なインプット例: ```shell x=r,a=wx ``` ```shell 0999 ``` #### `Stdlib::Windowspath` Windowsオペレーティングシステムのパスに一致します。 使用可能なインプット例: ```shell C:\\WINDOWS\\System32 C:\\ \\\\host\\windows ``` 有効な値: Windowsのファイルパスに一致します。 #### `Stdlib::Filesource` Puppetファイルタイプのソースパラメータの有効な値のパスに一致します。 使用可能なインプット例: ```shell http://example.com https://example.com file:///hello/bla ``` 有効な値: ファイルパス。 #### `Stdlib::Fqdn` 完全修飾ドメイン名(FQDN)のパスに一致します。 使用可能なインプット例: ```shell localhost example.com www.example.com ``` 有効な値: サーバーのドメイン名。 #### `Stdlib::Host` 有効なホストに一致します。これには、有効なipv4、ipv6、またはfqdnを含みます。 使用可能なインプット例: ```shell localhost www.example.com 192.0.2.1 ``` 有効な値: IPアドレスまたはドメイン名。 #### `Stdlib::Port` 有効なTCP/UDPポート番号に一致します。 使用可能なインプット例: ```shell 80 443 65000 ``` 有効な値: 整数。 #### `Stdlib::Port::Privileged` 有効なTCP/UDP特権ポート(1024未満)に一致します。 使用可能なインプット例: ```shell 80 443 1023 ``` 有効な値: 1024未満の数。 #### `Stdlib::Port::Unprivileged` 有効なTCP/UDP特権ポート(1024以上)に一致します。 使用可能なインプット例: ```shell 1024 1337 65000 ``` 有効な値: 1024以上の数。 #### `Stdlib::Base32` 有効なbase32文字列のパスに一致します。 使用可能なインプット例: ```shell ASDASDDASD3453453 asdasddasd3453453= ASDASDDASD3453453== ``` 有効な値: base32文字列。 #### `Stdlib::Base64` 有効なbase64文字列のパスに一致します。 使用可能なインプット例: ```shell asdasdASDSADA342386832/746+= asdasdASDSADA34238683274/6+ asdasdASDSADA3423868327/46+== ``` 有効な値: base64文字列。 #### `Stdlib::Ipv4` 有効なIPv4アドレスに一致します。 使用可能なインプット例: ```shell 0.0.0.0 192.0.2.1 127.0.0.1 ``` 有効な値: IPv4アドレス。 #### `Stdlib::Ipv6` 有効なIPv6アドレスに一致します。 使用可能なインプット例: ```shell 2001:0db8:85a3:0000:0000:8a2e:0370:7334 2001:db8:: 2001:db8::80 ``` 有効な値: IPv6アドレス。 #### `Stdlib::Ip_address` 有効なIPv4またはIPv6アドレスに一致します。 使用可能なインプット例: ```shell 0.0.0.0 127.0.0.1 fe80:0000:0000:0000:0204:61ff:fe9d:f156 ``` 有効な値: IPアドレス。 #### `Stdlib::IP::Address` IPv4とIPv6両方のアドレスを含む、任意のIPアドレスに一致します。CIDRフォーマットのIPv4アドレスで使用されるアドレスプレフィックスの有無に関わらず一致します。 例: ``` '127.0.0.1' =~ Stdlib::IP::Address # true '10.1.240.4/24' =~ Stdlib::IP::Address # true '52.10.10.141' =~ Stdlib::IP::Address # true '192.168.1' =~ Stdlib::IP::Address # false 'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address # true 'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address # true ``` #### `Stdlib::IP::Address::V4` CIDRプレフィックスの有無に関わらず、ドット区切りの4つの10進数で表現されたIPv4アドレスで構成される任意の文字列に一致します。省略形(192.168.1など)には一致しません。省略形はドキュメンテーションが不十分で、サポートにばらつきがあるためです。 例: ``` '127.0.0.1' =~ Stdlib::IP::Address::V4 # true '10.1.240.4/24' =~ Stdlib::IP::Address::V4 # true '192.168.1' =~ Stdlib::IP::Address::V4 # false 'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V4 # false '12AB::CD30:192.168.0.1' =~ Stdlib::IP::Address::V4 # false ``` 有効な値: IPv4アドレス。 #### `Stdlib::IP::Address::V6` アドレスプレフィックスの有無に関わらず、RFC 2373に規定された任意のフォーマットで記述されたIPv6アドレスを構成する任意の文字列に一致します。 例: ``` '127.0.0.1' =~ Stdlib::IP::Address::V6 # false '10.1.240.4/24' =~ Stdlib::IP::Address::V6 # false 'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' =~ Stdlib::IP::Address::V6 # true 'FF01:0:0:0:0:0:0:101' =~ Stdlib::IP::Address::V6 # true 'FF01::101' =~ Stdlib::IP::Address::V6 # true ``` 有効な値: IPv6アドレス。 #### `Stdlib::IP::Address::Nosubnet` `Stdlib::IP::Address`エイリアスと同じものに一致しますが、アドレスプレフィックスを含むアドレスには一致しません(たとえば、'192.168.0.6'には一致しますが、'192.168.0.6/24'には一致しません)。 有効な値: サブネットを持たないIPアドレス。 #### `Stdlib::IP::Address::V4::CIDR` CIDR形式のIPv4アドレスに一致します。アドレスにアドレスプレフィックスが含まれている場合にのみ一致します(例えば、'192.168.0.6/24'には一致しますが、'192.168.0.6'には一致しません)。 有効な値: CIDRが提供されたIPv4アドレス、たとえば'192.186.8.101/105'など。これは、'192.186.8.101'~'192.168.8.105'を含むすべてに一致します。 #### `Stdlib::IP::Address::V4::Nosubnet` アドレスプレフィックスを含まないIPv4アドレスに一致します(たとえば、'192.168.0.6'には一致しますが、'192.168.0.6/24'には一致しません)。 有効な値: サブネットを持たないIPv4アドレス。 #### `Stdlib::IP::Address::V6::Full` [RFC 2373](https://www.ietf.org/rfc/rfc2373.txt)の2.2に規定された「好ましい形式」のIPv6アドレスに一致します。[RFC 2373](https://www.ietf.org/rfc/rfc2373.txt)の2.3に規定されたアドレスプレフィックスの有無に関わらず一致します。 #### `Stdlib::IP::Address::V6::Alternate` [RFC 2373](https://www.ietf.org/rfc/rfc2373.txt)の2.2に規定された「代替形式」(最後の2つの16ビット断片をドット区切りの4つの10進数で表現できる)のIPv6アドレスに一致します。[RFC 2373](https://www.ietf.org/rfc/rfc2373.txt)の2.3に規定されたアドレスプレフィックスの有無に関わらず一致します。 #### `Stdlib::IP::Address::V6::Compressed` [RFC 2373](https://www.ietf.org/rfc/rfc2373.txt)の2.2に規定された0を圧縮する記法である`::`を含む可能性のあるIPv6アドレスに一致します。[RFC 2373](https://www.ietf.org/rfc/rfc2373.txt)の2.3に規定されたアドレスプレフィックスの有無に関わらず一致します。 #### `Stdlib::IP::Address::V6::Nosubnet` `Stdlib::IP::Address::V6::Nosubnet::Full`、`Stdlib::IP::Address::V6::Nosubnet::Alternate`、および`Stdlib::IP::Address::V6::Nosubnet::Compressed`を許可するエイリアス。 #### `Stdlib::IP::Address::V6::Nosubnet::Full` [RFC 2373](https://www.ietf.org/rfc/rfc2373.txt)の2.2.1に規定された「好ましい形式」のIPv6アドレスに一致します。[RFC 2373](https://www.ietf.org/rfc/rfc2373.txt)の2.3に規定されたアドレスプレフィックスを持つアドレスには一致しません。 #### `Stdlib::IP::Address::V6::Nosubnet::Alternate` [RFC 2373](https://www.ietf.org/rfc/rfc2373.txt)の2.2.1に規定された「代替形式」(最後の2つの16ビット断片をドット区切りの4つの10進数で表現できる)のIPv6アドレスに一致します。[RFC 2373](https://www.ietf.org/rfc/rfc2373.txt)の2.3に規定されたアドレスプレフィックスを持たないアドレスにのみ一致します。 #### `Stdlib::IP::Address::V6::Nosubnet::Compressed` [RFC 2373](https://www.ietf.org/rfc/rfc2373.txt)の2.2.2に規定された0を圧縮する記法である`::`を含む可能性のあるIPv6アドレスに一致します。[RFC 2373](https://www.ietf.org/rfc/rfc2373.txt)の2.3に規定されたアドレスプレフィックスを持たないアドレスにのみ一致します。 ### Facts #### `package_provider` Puppetがこのシステムのパッケージ管理に使用するデフォルトのプロバイダを返します。 #### `is_pe` Puppet Enterpriseがインストールされているかどうかを返します。PE 3.x以降のプラットフォームでは何も報告されません。 #### `pe_version` インストールされているPuppet Enterpriseのバージョンを返します。PE 3.x以降のプラットフォームでは何も報告されません。 #### `pe_major_version` インストールされているPuppet Enterpriseのメジャーバージョンを返します。PE 3.x以降のプラットフォームでは何も報告されません。 #### `pe_minor_version` インストールされているPuppet Enterpriseのマイナーバージョンを返します。PE 3.x以降のプラットフォームでは何も報告されません。 #### `pe_patch_version` インストールされているPuppet Enterpriseのパッチバージョンを返します。 #### `puppet_vardir` PuppetまたはPuppet agentが稼働しているノードについて設定されたPuppet vardirの値を返します。 #### `puppet_environmentpath` PuppetまたはPuppet agentが稼働しているノードについて設定されたPuppet環境の値を返します。 #### `puppet_server` Puppet agentの`server`値を返します。この値は、agentが通信するPuppet serverのホストネームです。 #### `root_home` ルートのホームディレクトリを決定します。 ルートのホームディレクトリを決定します。これは、オペレーティングシステムによって異なります。通常は'/root'です。 #### `service_provider` Puppetがこのシステムのサービス管理に使用するデフォルトのプロバイダを返します。 ### 関数 #### `abs` **非推奨:** この関数は、Puppet 6.0.0で、内蔵の[`abs`](https://puppet.com/docs/puppet/latest/function.html#abs)関数に置き換えられました。 数字の絶対値を返します。たとえば、'-34.56'は'34.56'になります。 引数: 整数値または浮動小数点値のいずれかの単一の引数。 *タイプ*: 右辺値 #### `any2array` 任意のオブジェクトを、そのオブジェクトを含む配列に変換します。空の引数リストは空の配列に変換されます。ハッシュは、キーと値が交互になった配列に変換されます。配列は変換されません。 Puppet 5.0.0以降では、タイプシステムを使用してほとんどすべてのデータタイプの新しい値を作成できます。内蔵の[`Array.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-array-and-tuple)関数を使用して新しい配列を作成できます。 $hsh = {'key' => 42, 'another-key' => 100} notice(Array($hsh)) `[['key', 42], ['another-key', 100]]`を通知します 配列のデータタイプには、"まだ配列でない場合は配列を作成する"という特別なモードもあります。 notice(Array({'key' => 42, 'another-key' => 100}, true)) `true`フラグはハッシュが配列に変換されないようにするため、`[{'key' => 42, 'another-key' => 100}]`を通知します。 *タイプ*: 右辺値 #### `any2bool` 任意のオブジェクトをブーリアンに変換します。 * 'Y'、'y'、'1'、'T'、't'、'TRUE'、'yes'、'true'といった文字列は`true`を返します。 * '0'、'F'、'f'、'N'、'n'、'FALSE'、'no'、'false'といった文字列は`false`を返します。 * ブーリアンは元の値を返します。 * 0よりも大きい数字(または数字の文字列表現)は`true`を返します。それ以外は`false`を返します。 * undef値は`false`を返します。 * それ以外はすべて`true`を返します。 詳細については、内蔵の[`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean)を参照してください。 *タイプ*: 右辺値 #### `assert_private` 現在のクラスまたは定義をプライベートとして設定します。現在のモジュール外のクラスまたは定義タイプを呼び出すことはできません。 たとえば、クラス`foo::bar`で`assert_private()`がコールされると、クラスがモジュール`foo`の外から呼び出された場合、次のメッセージがアウトプットされます:`Class foo::bar is private`。 使用したいエラーメッセージを指定する方法: ```puppet assert_private("You're not supposed to do that!") ``` *タイプ*: ステートメント #### `base64` 文字列とbase64エンコードを相互に変換します。`action` ('encode'、'decode')とプレーンまたは base64でエンコードした`string`、およびオプションで`method` ('default'、'strict'、'urlsafe')が必要です。 下位互換性を得るには、`method`を`default`に設定します(指定されていない場合)。 > **注:** この関数はRubyクラスの実装にあたり、UTF8との互換性がない可能性があります。互換性を確保するには、Ruby 2.4.0以降でこの関数を使用してください。 Puppet 4.8.0以降では、ベース64 でエンコードされた文字列の生成に、`バイナリ`データタイプを使用できます。 詳細については、内蔵の[`String.new`](https://puppet.com/docs/puppet/latest/function.html#binary-value-to-string)関数と[`Binary.new`](https://puppet.com/docs/puppet/latest/function.html#creating-a-binary)関数を参照してください。 バイナリ(非UTF-8)コンテンツを含むファイルの読み取りについては、内蔵の[`binary_file`](https://puppet.com/docs/puppet/latest/function.html#binary_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") **例:** ```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" ``` *タイプ*: 右辺値 #### `basename` パスの`basename`を返します。オプションの引数で拡張子が外れます。例: ```puppet basename('/path/to/a/file.ext') => 'file.ext' basename('relative/path/file.ext') => 'file.ext' basename('/path/to/a/file.ext', '.ext') => 'file' ``` *タイプ*: 右辺値 #### `bool2num` ブーリアンを数字に変換します。以下の値を変換します。 * `false`、'f'、'0'、'n'、'no'を0に変換します。 * `true`、't'、'1'、'y'、'yes'を1に変換します。 引数: インプットとして、単一のブーリアンまたは文字列。 Puppet 5.0.0以降では、 タイプシステムを使用しているほとんどすべてのデータタイプに関して値を作成できます。内蔵の[`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)、および[`Float.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-float) の各関数を使用して数値に変換できます。 notice(Integer(false)) # Notices 0 notice(Float(true)) # Notices 1.0 *タイプ*: 右辺値 #### `bool2str` オプションで提供される引数を用いて、ブーリアンを文字列に変換します。オプションの第2および第3の引数は、trueおよびfalseがそれぞれ何に変換されるかを表しています。与えられた引数が1つだけの場合は、ブーリアンから`true`または`false`を含む文字列に変換されます。 *例:* ```puppet bool2str(true) => `true` bool2str(true, 'yes', 'no') => 'yes' bool2str(false, 't', 'f') => 'f' ``` 引数: ブーリアン。 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: notice(String(false)) # Notices 'false' notice(String(true)) # Notices 'true' notice(String(false, '%y')) # Notices 'yes' notice(String(true, '%y')) # Notices 'no' *タイプ*: 右辺値 #### `camelcase` **非推奨:**この関数は、Puppet 6.0.0で、内蔵の[`camelcase`](https://puppet.com/docs/puppet/latest/function.html#camelcase)関数に置き換えられました。 配列内の1つの文字列またはすべての文字列の大文字と小文字の別をCamelCase(大小文字混在)に変換します。 引数: 配列または文字列のいずれか。受け取ったものと同じタイプの引数を返しますが、CamelCaseの形式で返します。 *注:* この関数はRubyクラスの実装にあたり、UTF8との互換性がない可能性があります。互換性を確保するには、Ruby 2.4.0以降でこの関数を使用してください。 *タイプ*: 右辺値 #### `capitalize` **非推奨:**この関数は、Puppet 6.0.0で、内蔵の[`capitalize`](https://puppet.com/docs/puppet/latest/function.html#capitalize)関数に置き換えられました。 文字列または複数文字列の配列の最初の文字を大文字にし、各文字列の残りの文字を小文字にします。 引数: インプットとして、単一文字列または配列。*タイプ*: 右辺値 *注:* この関数はRubyクラスの実装にあたり、UTF8との互換性がない可能性があります。互換性を確保するには、Ruby 2.4.0以降でこの関数を使用してください。 #### `ceiling` **非推奨:**この関数は、Puppet 6.0.0で、内蔵の[`ceiling`](https://puppet.com/docs/puppet/latest/function.html#ceiling)関数に置き換えられました。 引数以上の最小整数を返します。 引数: 単一の数値。 *タイプ*: 右辺値 #### `chomp` **非推奨:**この関数は、Puppet 6.0.0で、内蔵の[`chomp`](https://puppet.com/docs/puppet/latest/function.html#chomp)関数に置き換えられました。 文字列または複数文字列の配列の最後から、レコード分離文字を削除します。たとえば、'hello\n'は'hello'になります。 引数: 単一の文字または配列。 *タイプ*: 右辺値 #### `chop` **非推奨:**この関数は、Puppet 6.0.0で、内蔵の[`chop`](https://puppet.com/docs/puppet/latest/function.html#chop)関数に置き換えられました。 最後の文字を削除した新しい文字列を返します。文字列が'\r\n'で終わる場合は、両方の文字が削除されます。`chop`を空文字列に適用すると、空文字列が返されます。レコード分離文字のみを削除する場合は、`chomp`関数を使用してください。 引数: インプットとして、文字列または複数文字列の配列。 *タイプ*: 右辺値 #### `clamp` 整数値に基づく分類により、当該領域[Min、X、Max]内で値を維持します(パラメータの順序は関係ありません)。文字列が変換され、数字として比較されます。値の配列は、さらなる処理が可能なリストに平坦化されます。例: * `clamp('24', [575, 187])`は187を返します。 * `clamp(16, 88, 661)`は88を返します。 * `clamp([4, 3, '99'])`は4を返します。 引数: 文字列、配列、数字。 Puppet 6.0.0以降では、内蔵の関数を使用して同じ結果を得ることができます。 [$minval, $maxval, $value_to_clamp].sort[1] *タイプ*: 右辺値 #### `concat` 複数配列のコンテンツを、与えられた最初の配列に追加します。例: * `concat(['1','2','3'],'4')`は['1','2','3','4']を返します。 * `concat(['1','2','3'],'4',['5','6','7'])`は['1','2','3','4','5','6','7']を返します。 Puppet 4.0以降では、配列の連結とハッシュのマージのために`+`演算子を使い、`<<`演算子を使って追加することができます。 ['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]] *タイプ*: 右辺値 #### `convert_base` 与えられた整数または整数を表す10進数文字列を、指定した基数の文字列に変換します。例: * `convert_base(5, 2)`は'101'になります。 * `convert_base('254', '16')`は'fe'になります。 Puppet 4.5.0以降では、内蔵の[`String.new`](https://puppet.com/docs/puppet/latest/function.html#integer-to-string)関数を使って、さまざまな形式のオプションでこれを行うことができます。 $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` 配列を最初の引数とオプションの2番目の引数と解釈します。 2番目の引数に等しい配列内の要素の数をカウントします。 配列のみで呼び出された場合は、nil/undef/empty-string以外の要素の数をカウントします。 > **注意**: 等値はRubyメソッドでテストされます。これはRubyが 等値とみなす対象になります。文字列の場合、等値は大文字と小文字を区別します。 Puppetコアでは、 内蔵の [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) (Puppet 4.0.0以降)および [`length`](https://puppet.com/docs/puppet/latest/function.html#length) (Puppet 5.5.0以降、それ以前ではstdlib)の各関数の組み合わせを使用してカウントが行われます。 この例では、`undef`でない値のカウントを行う方法を示しています。 notice([42, "hello", undef].filter |$x| { $x =~ NotUndef }.length) 2を通知します。 *タイプ*: 右辺値 #### `deep_merge` 2つ以上のハッシュを再帰的に統合し、その結果得られたハッシュを返します。 ```puppet $hash1 = {'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } } $hash2 = {'two' => 'dos', 'three' => { 'five' => 5 } } $merged_hash = deep_merge($hash1, $hash2) ``` 得られるハッシュは、以下に相当します。 ```puppet $merged_hash = { 'one' => 1, 'two' => 'dos', 'three' => { 'four' => 4, 'five' => 5 } } ``` ハッシュである重複キーが存在する場合は、そうした重複キーが再帰的に統合されます。ハッシュではない重複キーが存在する場合は、最右のハッシュのキーが上位になります。 *タイプ*: 右辺値 #### `defined_with_params` 属性のリソースリファレンスとオプションでハッシュを取得します。特定の属性を持つリソースがすでにカタログに追加されている場合は`true`を返します。そうでない場合は`false`を返します。 ```puppet user { 'dan': ensure => present, } if ! defined_with_params(User[dan], {'ensure' => 'present' }) { user { 'dan': ensure => present, } } ``` *タイプ*: 右辺値 #### `delete` 配列から任意の要素のインスタンスを、文字列からサブストリングを、またはハッシュからキーをすべて削除します。 例:  * `delete(['a','b','c','b'], 'b')`は['a','c']を返します。 * `delete('abracadabra', 'bra')`は'acada'を返します。 * `delete({'a' => 1,'b' => 2,'c' => 3},['b','c'])`は{'a'=> 1}を返します。 * `delete(['ab', 'b'], 'b')`は['ab']を返します。 Puppet 4.0.0以降では、マイナス(`-`)演算子によって、配列から値を削除し、ハッシュからキーを削除します。 ['a', 'b', 'c', 'b'] - 'b' # would return ['a', 'c'] {'a'=>1,'b'=>2,'c'=>3} - ['b','c']) # would return {'a' => '1'} 内蔵の [`regsubst`](https://puppet.com/docs/puppet/latest/function.html#regsubst)関数で、文字列からグローバル削除を実行できます。 'abracadabra'.regsubst(/bra/, '', 'G') #は、'acada'を返します。 通常、内蔵の [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) 関数によって、キーと値との組み合わせに基づき、配列とハッシュからエントリをフィルタリングできます。 *タイプ*: 右辺値 #### `delete_at` 決められたインデックス付き値を配列から削除します。 例: `delete_at(['a','b','c'], 1)`は['a','c']を返します。 Puppet 4以降では、内蔵の [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)関数を使って、これを行うことができます。 ['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 } # returns ['a', 'c'] ['a', 'b', 'c', 'd'].filter |$pos, $val | { $pos % 2 != 0 } # returns ['b', 'd'] あるいは、配列の最初もしくは最後から、または両端から同時に削除したい場合は、スライス演算子`[ ]`を使用します。 $array[0, -1] # すべての値と同じ $array[2, -1] # 最初の2つの要素を除くすべて $array[0, -3] # 最後の2つの要素を除くすべて $array[1, -2] # 最初と最後の要素を除くすべて *タイプ*: 右辺値 #### `delete_regex` 提示された正規表現にマッチする任意の要素のインスタンスを、配列またはハッシュからすべて削除します。文字列は1アイテム配列として処理されます。 *注:* この関数はRubyクラスの実装にあたり、UTF8との互換性がない可能性があります。互換性を確保するには、Ruby 2.4.0以降でこの関数を使用してください。 例 * `delete_regex(['a','b','c','b'], 'b')`は['a','c']を返します。 * `delete_regex({'a' => 1,'b' => 2,'c' => 3},['b','c'])`は{'a'=> 1}を返します。 * `delete_regex(['abf', 'ab', 'ac'], '^ab.*')`は['ac']を返します。 * `delete_regex(['ab', 'b'], 'b')`は['ab']を返します。 Puppet 4.0.0以降では、内蔵の[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)関数で同等の処理を行います。 ["aaa", "aba", "aca"].filter |$val| { $val !~ /b/ } # ['aaa', 'aca']を返します *タイプ*: 右辺値 #### `delete_values` 任意の値のインスタンスをハッシュからすべて削除します。 例:  * `delete_values({'a'=>'A','b'=>'B','c'=>'C','B'=>'D'}, 'B')`は{'a'=>'A','c'=>'C','B'=>'D'}を返します。 Puppet 4.0.0以降では、内蔵の[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)関数で同等の処理を行います。 $array.filter |$val| { $val != 'B' } $hash.filter |$key, $val| { $val != 'B' } *タイプ*: 右辺値 #### `delete_undef_values` `undef`値のインスタンスをアレイまたはハッシュからすべて削除します。 例:  * `$hash = delete_undef_values({a=>'A', b=>'', c=>`undef`, d => false})`は{a => 'A', b => '', d => false}を返します。 Puppet 4.0.0以降では、内蔵の[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)関数で同等の処理を行います。 $array.filter |$val| { $val =~ NotUndef } $hash.filter |$key, $val| { $val =~ NotUndef } *タイプ*: 右辺値 #### `deprecation` 非推奨警告をプリントし、任意のキーについて警告を一度記録します: ```puppet deprecation(key, message) ``` 引数: * キーを指定する文字列: Puppetプロセスの継続期間中にメッセージの数を少なく抑えるために、1つのキーにつき1つのメッセージのみを記録します。 * メッセージを指定する文字列: 記録されるテキスト。 *タイプ*: ステートメント **`deprecation`に影響を与える設定** Puppetの他の設定は、stdlibの`deprecation`関数に影響を与えます。 * [`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`: 非推奨メッセージにより、ただちに機能しなくなります。 * `off`: メッセージがアウトプットされません。 * `warning`: すべての警告を記録します。これがデフォルト設定です。 * 環境変数`STDLIB_LOG_DEPRECATIONS` 非推奨警告を記録するかどうかを指定します。これは特に、自動テストの際、移行の準備ができる前にログに情報が氾濫するのを避けるうえで役立ちます。 この変数はブーリアンで、以下の効果があります: * `true`: 警告を記録します。 * `false`: 警告は記録されません。 * 値を設定しない場合: Puppet 4は警告を出しますが、Puppet 3は出しません。 #### `difference` 2つの配列の間の差異を返します。返される配列はオリジナル配列のコピーで、第2の配列にも見られるアイテムがあれば、それが取り除かれます。 例:  * `difference(["a","b","c"],["b","c","d"])`は["a"]を返します。 Puppet 4以降では、Puppet言語のマイナス(`-`)演算子は同じことを行います。 ['a', 'b', 'c'] - ['b', 'c', 'd'] # ['a']を返します *タイプ*: 右辺値 #### `dig` **非推奨:**この関数は、Puppet 4.5.0で、内蔵の[`dig`](https://puppet.com/docs/puppet/latest/function.html#dig)関数に置き換えられました。下位互換性を得るには、[`dig44()`](#dig44)を使用するか、新しいバージョンを使用してください。 パスを含むキー配列を通じて、複数レイヤーのハッシュおよびアレイ内の値を探します。この関数は各パスコンポーネントにより構造内を移動し、パスの最後で値を返すよう試みます。 この関数では、必要とされるパス引数に加え、デフォルトの引数を使用できます。パスが正しくない場合や、値が見つからない場合、その他のエラーが生じた場合は、デフォルトの引数を返します。 ```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** 取り扱うデータ構造。 2. **['a', 'b', 2]** パス配列。 3. **'not_found'** デフォルト値。何も見つからない場合に返されます。 デフォルト値: `undef`。 *タイプ*: 右辺値 #### `dig44` パスを含むキー配列を通じて、複数レイヤーのハッシュおよびアレイ内の値を探します。この関数は各パスコンポーネントにより構造内を移動し、パスの最後で値を返すよう試みます。 この関数では、必要とされるパス引数に加え、デフォルトの引数を使用できます。パスが正しくない場合や、値が見つからない場合、その他のエラーが生じた場合は、デフォルトの引数を返します。 ```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' ``` *タイプ*: 右辺値 1. **$data** 取り扱うデータ構造。 2. **['a', 'b', 2]** パス配列。 3. **'not_found'** デフォルト値。何も見つからない場合に返されます。 (オプション、デフォルトは`undef`) #### `dirname` パスの`dirname`を返します。たとえば、`dirname('/path/to/a/file.ext')`は'/path/to/a'を返します。 *タイプ*: 右辺値 #### `dos2unix` 与えられた文字列のUnixバージョンを返します。クロスプラットフォームテンプレートでファイルリソースを使用する場合に非常に役立ちます。 ```puppet file { $config_file: ensure => file, content => dos2unix(template('my_module/settings.conf.erb')), } ``` [unix2dos](#unix2dos)も参照してください。 *タイプ*: 右辺値 #### `downcase` **非推奨:**この関数は、Puppet 5.5.0で、内蔵の[`downcase`](https://puppet.com/docs/puppet/latest/function.html#downcase)関数に置き換えられました。 配列内の1つの文字列またはすべての文字列の大文字と小文字の別を、小文字に変換します。 *注:* この関数はRubyクラスの実装にあたり、UTF8との互換性がない可能性があります。互換性を確保するには、Ruby 2.4.0以降でこの関数を使用してください。 *タイプ*: 右辺値 #### `empty` **非推奨:**この関数は、Puppet 5.5.0で、内蔵の[`empty`](https://puppet.com/docs/puppet/latest/function.html#empty)関数に置き換えられました。 引数が要素を含まない配列かハッシュ、または空文字列である場合に、`true`を返します。引数が数値の場合に`false`を返します。 *タイプ*: 右辺値 #### `enclose_ipv6` IPアドレスの配列を取得し、ipv6アドレスを大括弧でくくります。 *タイプ*: 右辺値 #### `ensure_packages` 配列またはハッシュ内のパッケージのリストを取得し、すでに存在しない場合にのみ、それらをインストールします。オプションで、ハッシュを第2のパラメータとして取得し、第3の引数として`ensure_resource()`または `ensure_resources()`関数に渡します。 *タイプ*: ステートメント 配列の場合: ```puppet ensure_packages(['ksh','openssl'], {'ensure' => 'present'}) ``` ハッシュの場合: ```puppet ensure_packages({'ksh' => { ensure => '20120801-1' } , 'mypackage' => { source => '/tmp/myrpm-1.0.0.x86_64.rpm', provider => "rpm" }}, {'ensure' => 'present'}) ``` #### `ensure_resource` リソースタイプ、タイトル、リソースを記述する属性のハッシュを取得します。 ``` user { 'dan': ensure => present, } ``` この例では、すでに存在しない場合にのみリソースが作成されます: `ensure_resource('user', 'dan', {'ensure' => 'present' })` リソースがすでに存在しているものの、指定されたパラメータとマッチしない場合は、リソースの再作成が試みられ、重複リソース定義エラーにつながります。 リソースの配列を提示することも可能です。それぞれのリソースは、すでに存在しない場合に、指定のタイプおよびパラメータにより作成されます。 `ensure_resource('user', ['dan','alex'], {'ensure' => 'present'})` *タイプ*: ステートメント #### `ensure_resources` ハッシュからリソース宣言を作成しますが、すでに宣言されているリソースとは対立しません。 リソースタイプ、タイトル、リソースを記述する属性のハッシュを指定します。 ```puppet user { 'dan': gid => 'mygroup', ensure => present, } ensure_resources($user) ``` リソースのハッシュを提示します。リストにあるリソースは、すでに存在しない場合に、指定のタイプおよびパラメータにより作成されます。 ensure_resources('user', {'dan' => { gid => 'mygroup', uid => '600' } , 'alex' => { gid => 'mygroup' }}, {'ensure' => 'present'}) Hieraバックエンドから: ```yaml userlist: dan: gid: 'mygroup' uid: '600' alex: gid: 'mygroup' ``` ```puppet ensure_resources('user', hiera_hash('userlist'), {'ensure' => 'present'}) ``` #### `fact` 指定されたfactの値を返します。構造化されたfactを参照する場合にドット表記を使用することができます。指定されたfactが存在しない場合は、Undefを返します。 使用例: ```puppet fact('kernel') fact('osfamily') fact('os.architecture') ``` 配列のインデックス: ```puppet $first_processor = fact('processors.models.0') $second_processor = fact('processors.models.1') ``` 名前に「.」を含むfact: ```puppet fact('vmware."VRA.version"') ``` #### `flatten` **非推奨:**この関数は、Puppet 5.5.0で、内蔵の[`flatten`](https://puppet.com/docs/puppet/latest/function.html#flatten)関数に置き換えられました。 ネストの深いアレイを平坦化し、結果として単一のフラット配列を返します。 たとえば、`flatten(['a', ['b', ['c']]])`は['a','b','c']を返します。 *タイプ*: 右辺値 #### `floor` **非推奨:**この関数は、Puppet 5.5.0で、内蔵の[`floor`](https://puppet.com/docs/puppet/latest/function.html#floor)関数に置き換えられました。 引数以下の最大整数を返します。 引数: 単一の数値。 *タイプ*: 右辺値 #### `fqdn_rand_string` ランダムな英数字文字列を生成します。`$fqdn` factとオプションのシードを組み合わせると、反復的な無作為抽出が可能です。オプションで、この関数に使用する文字セットを指定することもできます(デフォルトは英数字)。 *使用例:* ```puppet fqdn_rand_string(LENGTH, [CHARSET], [SEED]) ``` *例:* ```puppet fqdn_rand_string(10) fqdn_rand_string(10, 'ABCDEF!@#$%^') fqdn_rand_string(10, '', 'custom seed') ``` 引数: * 整数、得られる文字列の長さを指定。 * オプションで、文字セットを指定する文字列。 * オプションで、反復的な無作為抽出を可能にするシードを指定する文字列。 *タイプ*: 右辺値 #### `fqdn_rotate` 配列と文字列をランダムな回数で回転させます。`$fqdn` factとオプションのシードを組み合わせると、反復的な無作為抽出が可能です。 *使用例:* ```puppet fqdn_rotate(VALUE, [SEED]) ``` *例:* ```puppet fqdn_rotate(['a', 'b', 'c', 'd']) fqdn_rotate('abcd') fqdn_rotate([1, 2, 3], 'custom seed') ``` *タイプ*: 右辺値 #### `fqdn_uuid` DNSネームスペースのFQDN文字列をもとに、[RFC 4122](https://tools.ietf.org/html/rfc4122)有効バージョン5 UUIDを返します: * fqdn_uuid('puppetlabs.com')は'9c70320f-6815-5fc5-ab0f-debe68bf764c'を返します。 * fqdn_uuid('google.com')は'64ee70a4-8cc1-5d25-abf2-dea6c79a09c8'を返します。 *タイプ*: 右辺値 #### `get_module_path` 現在の環境について、指定されたモジュールの絶対パスを返します。 ```puppet $module_path = get_module_path('stdlib') ``` Puppet 5.4.0以降では、内蔵の [`module_directory`](https://puppet.com/docs/puppet/latest/function.html#module_directory)関数は同じことを行い、複数の値または配列が与えられている場合、最初に見つかったモジュールへのパスを返します。 *タイプ*: 右辺値 #### `getparam` リソースのパラメータの値を返します。 引数: リソースリファレンスおよびパラメータの名前。 > 注意: ユーザ定義のリソースタイプは遅れて評価されます。 *例:* ```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': } ``` 'この例で取得している値'を通知します Puppet 4.0.0以降では、データタイプ と[ ]演算子を使用してパラメータ値を取得できます。次の例は、getparam()の呼び出しと同じです。 ```puppet Example_resource['example_resource_instance']['param'] ``` #### `getvar` **非推奨:** この関数は、Puppet 6.0.0で、内蔵の[`getvar`](https://puppet.com/docs/puppet/latest/function.html#getvar) 関数に置き換えられました。新しいバージョンでも、構造化された値への掘り下げがサポートされます。 リモートネームスペースの変数を調べます。 例:  ```puppet $foo = getvar('site::data::foo') # $foo = $site::data::fooと同等 ``` この関数は、ネームスペースそのものが文字列に保存されている場合に役立ちます: ```puppet $datalocation = 'site::data' $bar = getvar("${datalocation}::bar") # Equivalent to $bar = $site::data::bar ``` *タイプ*: 右辺値 #### `glob` パスパターンに一致するパスの文字列配列を返します。 引数: パスパターンを指定する文字列または文字列配列。 ```puppet $confs = glob(['/etc/**/*.conf', '/opt/**/*.conf']) ``` *タイプ*: 右辺値 #### `grep` 配列内を検索し、提示された正規表現に一致する要素を返します。 たとえば、`grep(['aaa','bbb','ccc','aaaddd'], 'aaa')`は['aaa','aaaddd']を返します。 Puppet 4.0.0以降では、内蔵の[`filter`](https://puppet.com/docs/puppet/latest/function.html#filter)関数は同じことを行います。正規表現とは対照的に、どのロジックでもフィルタリングに使用できます。 ['aaa', 'bbb', 'ccc', 'aaaddd']. filter |$x| { $x =~ 'aaa' } *タイプ*: 右辺値 #### `has_interface_with` 種類および値に基づきブーリアンを返します: * macaddress * netmask * ipaddress * network *例:* ```puppet has_interface_with("macaddress", "x:x:x:x:x:x") has_interface_with("ipaddress", "127.0.0.1") => true ``` 種類が提示されていない場合は、インターフェースの有無が確認されます: ```puppet has_interface_with("lo") => true ``` *タイプ*: 右辺値 #### `has_ip_address` 一部のインターフェース上で、リクエストされたIPアドレスがクライアントに存在する場合は`true`を返します。この関数は`interfaces` factで反復され、`ipaddress_IFACE` factsをチェックし、簡単な文字列比較を実行します。 引数: IPアドレスを指定する文字列。 *タイプ*: 右辺値 #### `has_ip_network` リクエストされたネットワーク内でIPアドレスがクライアントに存在する場合は`true`を返します。この関数は`interfaces` factで反復され、 `network_IFACE` factsをチェックし、簡単な文字列比較を実行します。 引数: IPアドレスを指定する文字列。 *タイプ*: 右辺値 #### `has_key` **非推奨:** この関数は、内蔵の`in`演算子に置き換えられました。 ハッシュに特定のキー値があるかどうかを判定します。 *例*: ``` $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') } ``` Puppet 4.0.0以降では、これは、Puppet言語において、次の同等の式を用いて実現できます。 $my_hash = {'key_one' => 'value_one'} if 'key_one' in $my_hash { notice('this will be printed') } *タイプ*: 右辺値 #### `hash` **非推奨:** この関数は、ほとんどすべてのデータタイプの新しい値を作成する内蔵の機能に置き換えられました。 Puppetに内蔵の[`Hash.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-hash-and-struct)関数を参照してください。 配列をハッシュに変換します。 例えば(非推奨)、`hash(['a',1,'b',2,'c',3])`は、 {'a'=>1,'b'=>2,'c'=>3}を返します。 例えば(内蔵)、`Hash(['a',1,'b',2,'c',3])`は、{'a'=>1,'b'=>2,'c'=>3}を返します。 *タイプ*: 右辺値 #### `intersection` 2つの共通部分の配列を返します。 たとえば、`intersection(["a","b","c"],["b","c","d"])`は["b","c"]を返します。 *タイプ*: 右辺値 #### `is_a` ブーリアンチェックにより、変数が任意のデータタイプのものかどうかを判定します。これは`=~`タイプチェックに相当します。この関数はPuppet 4と、"future"パーサーを備えたPuppet 3でのみ使用できます。 ``` 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!': } } ``` * タイプに関する詳細は、[Puppetタイプシステム](https://puppet.com/docs/puppet/latest/lang_data.html)を参照してください。 * 値のタイプを特定する各種の方法については、[`assert_type()`](https://puppet.com/docs/puppet/latest/function.html#asserttype)関数を参照してください。 #### `is_absolute_path` **非推奨:**今後のバージョンのstdlibでは削除されます。[`validate_legacy`](#validate_legacy)を参照してください。 与えられたパスが絶対パスである場合に`true`を返します。 *タイプ*: 右辺値 #### `is_array` **非推奨:**今後のバージョンのstdlibでは削除されます。[`validate_legacy`](#validate_legacy)を参照してください。 この関数に渡された変数が配列である場合に`true`を返します。 *タイプ*: 右辺値 #### `is_bool` **非推奨:**今後のバージョンのstdlibでは削除されます。[`validate_legacy`](#validate_legacy)を参照してください。 この関数に渡された変数がブーリアンである場合に`true`を返します。 *タイプ*: 右辺値 #### `is_domain_name` **非推奨:**今後のバージョンのstdlibでは削除されます。[`validate_legacy`](#validate_legacy)を参照してください。 この関数に渡された文字列が構文的に正しいドメイン名である場合に`true`を返します。 *タイプ*: 右辺値 #### `is_email_address` この関数に渡された文字列が有効なメールアドレスである場合にtrueを返します。 *タイプ*: 右辺値 #### `is_float` **非推奨:**今後のバージョンのstdlibでは削除されます。[`validate_legacy`](#validate_legacy)を参照してください。 この関数に渡された変数がフロート型である場合に`true`を返します。 *タイプ*: 右辺値 #### `is_function_available` **非推奨:**今後のバージョンのstdlibでは削除されます。[`validate_legacy`](#validate_legacy)を参照してください。 文字列を引数として受け入れ、Puppetランタイムがその名前を用いて関数にアクセスできるかどうかを判定します。関数が存在する場合は`true`、存在しない場合は`false`を返します。 *タイプ*: 右辺値 #### `is_hash` **非推奨:**今後のバージョンのstdlibでは削除されます。[`validate_legacy`](#validate_legacy)を参照してください。 この関数に渡された変数がハッシュである場合に`true`を返します。 *タイプ*: 右辺値 #### `is_integer` **非推奨:**今後のバージョンのstdlibでは削除されます。[`validate_legacy`](#validate_legacy)を参照してください。 この文字列に返された変数が整数である場合に`true`を返します。 *タイプ*: 右辺値 #### `is_ip_address` **非推奨:**今後のバージョンのstdlibでは削除されます。[`validate_legacy`](#validate_legacy)を参照してください。 この関数に渡された文字列が有効なIPアドレスである場合に`true`を返します。 *タイプ*: 右辺値 #### `is_ipv6_address` **非推奨:**今後のバージョンのstdlibでは削除されます。[`validate_legacy`](#validate_legacy)を参照してください。 この関数に渡された文字列が有効なIPv6アドレスである場合に`true`を返します。 *タイプ*: 右辺値 #### `is_ipv4_address` **非推奨:**今後のバージョンのstdlibでは削除されます。[`validate_legacy`](#validate_legacy)を参照してください。 この関数に渡された文字列が有効なIPv4アドレスである場合に`true`を返します。 *タイプ*: 右辺値 #### `is_mac_address` この関数に渡された文字列が有効なMACアドレスである場合に`true`を返します。 *タイプ*: 右辺値 #### `is_numeric` **非推奨:**今後のバージョンのstdlibでは削除されます。[`validate_legacy`](#validate_legacy)を参照してください。 この関数に渡された変数が数字である場合に`true`を返します。 *タイプ*: 右辺値 #### `is_string` **非推奨:**今後のバージョンのstdlibでは削除されます。[`validate_legacy`](#validate_legacy)を参照してください。 この関数に渡された変数が文字列である場合に`true`を返します。 *タイプ*: 右辺値 #### `join` **非推奨:** この関数は、Puppet 5.5.0で、内蔵の[`join`](https://puppet.com/docs/puppet/latest/function.html#join)関数に置き換えられました。 区切り文字を用いて、配列を文字列に結合します。たとえば、`join(['a','b','c'], ",")`は"a,b,c"になります。 *タイプ*: 右辺値 #### `join_keys_to_values` 区切り文字を用いて、ハッシュの各キーをそのキーに対応する値と結合し、結果を文字列として返します。 値が配列の場合は、キーは各要素の前に置かれます。返される値は、平坦化した配列になります。 たとえば、`join_keys_to_values({'a'=>1,'b'=>[2,3]}, " is ")`は["a is 1","b is 2","b is 3"]になります。 Puppet 5.0.0以降では、書式の制御が強化されています(インデントや改行、配列とハッシュエントリ、ハッシュエントリのキー/値の間の区切り、配列における値の個々の 書式など)。内蔵の[`String.new`](https://docs.puppet.com/puppet/latest/function.html#conversion-to-string)関数、および`配列`と`ハッシュ`の書式設定オプションを参照してください。 *タイプ*: 右辺値 #### `keys` **非推奨:** この関数は、Puppet 5.5.0で、内蔵の[`keys`](https://puppet.com/docs/puppet/latest/function.html#keys)関数に置き換えられました。 ハッシュのキーを配列として返します。 *タイプ*: 右辺値 #### `length` **非推奨:** この関数は、Puppet 5.5.0で、内蔵の[`length`](https://puppet.com/docs/puppet/latest/function.html#length)関数に置き換えられました。 与えられた文字列、配列、ハッシュの長さを返します。廃止された`size()`関数に代わるものです。 *タイプ*: 右辺値 #### `loadyaml` 配列、文字列、ハッシュを含むYAMLファイルをロードし、対応するネイティブデータタイプでデータを返します。 例:  ```puppet $myhash = loadyaml('/etc/puppet/data/myhash.yaml') ``` 第2のパラメータは、ファイルが見つからなかった場合、または構文解析できなかった場合に返されます。 例:  ```puppet $myhash = loadyaml('no-file.yaml', {'default'=>'value'}) ``` *タイプ*: 右辺値 #### `loadjson` 配列、文字列、ハッシュを含むJSONファイルをロードし、対応するネイティブデータタイプでデータを返します。 例:  最初のパラメータは、絶対ファイルパスまたはURLです。 ```puppet $myhash = loadjson('/etc/puppet/data/myhash.json') ``` 第2のパラメータは、ファイルが見つからなかった場合、または構文解析できなかった場合に返されます。 例:  ```puppet $myhash = loadjson('no-file.json', {'default'=>'value'}) ``` *タイプ*: 右辺値 #### `load_module_metadata` ターゲットモジュールのmetadata.jsonをロードします。モジュールのバージョンや、モジュールの動的サポートに関するオーサーシップの判定に使用できます。 ```puppet $metadata = load_module_metadata('archive') notify { $metadata['author']: } ``` モジュールのメタデータファイルが存在しない場合、カタログコンパイルに失敗します。これを避ける方法は、以下のとおりです: ``` $metadata = load_module_metadata('mysql', true) if empty($metadata) { notify { "このモジュールにはmetadata.jsonファイルがありません。": } } ``` *タイプ*: 右辺値 #### `lstrip` **非推奨:** この関数は、Puppet 6.0.0で、内蔵の[`lstrip`](https://puppet.com/docs/puppet/latest/function.html#lstrip) 関数に置き換えられました。 文字列の左側のスペースを取り除きます。 *タイプ*: 右辺値 #### `max` **非推奨:** この関数は、Puppet 6.0.0で、内蔵の[`max`](https://puppet.com/docs/puppet/latest/function.html#max) 関数に置き換えられました。 すべての引数の最大値を返します。少なくとも1つの引数が必要です。 引数: 数字または数字を表す文字列。 *タイプ*: 右辺値 #### `member` 変数が配列の構成要素かどうかを判定します。変数には文字列、配列、fixnumが使用できます。 たとえば、`member(['a','b'], 'b')`および`member(['a','b','c'], ['b','c'])`は`true`を返し、`member(['a','b'], 'c')`および`member(['a','b','c'], ['c','d'])`は`false`を返します。 *注*: この関数は、ネスト化した配列には対応していません。最初の引数にネスト化した配列が含まれている場合は、再帰的処理は行われません。 Puppet 4.0.0以降では、Puppet言語において同じことを実行できます。値が単一の場合には、 `in`演算子を使用します。 'a' in ['a', 'b'] # true また、配列の場合には、`-`演算子を使用してdiffを計算します。 ['d', 'b'] - ['a', 'b', 'c'] == [] # 'd'が減算されないため、false ['a', 'b'] - ['a', 'b', 'c'] == [] # 'a'と'b'の両方が減算されるため、true また、Puppet 5.2.0以降では、配列やハッシュの内容をテストする一般的な形式は、内蔵されている[`any`](https://puppet.com/docs/puppet/latest/function.html#any)および[`all`](https://puppet.com/docs/puppet/latest/function.html#all)の各関数を使用することです。 *タイプ*: 右辺値 #### `merge` 2つ以上のハッシュを統合し、その結果得られたハッシュを返します。 *例*: ```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'} ``` 重複キーが存在する場合は、最右のハッシュのキーが上位になります。 Puppet 4.0.0以降では、+ 演算子を使用して同じマージを実行することができます。 $merged_hash = $hash1 + $hash2 *タイプ*: 右辺値 #### `min` **非推奨:** この関数は、Puppet 6.0.0で、内蔵の[`min`](https://puppet.com/docs/puppet/latest/function.html#min)関数に置き換えられました。 すべての引数の最小値を返します。少なくとも1つの引数が必要です。 引数: 数字または数字を表す文字列。 *タイプ*: 右辺値 #### `num2bool` 数字または数字の文字列表現を正当なブーリアンに変換します。0または非数字は`false`になります。0より大きい数字は`true`になります。 Puppet 5.0.0以降では、タイプシステムを使用して同じことが行えます。 利用可能な多くのタイプ変換については、Puppetの[`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean) 関数を参照してください。 Boolean(0) # false Boolean(1) # true *タイプ*: 右辺値 #### `parsejson` JSONの文字列を正確なPuppet構造に変換します(ハッシュ、配列、文字列、整数、またはそれらの組み合わせとして)。 引数: * 第1の引数として、変換されるJSON文字列。 * オプションで、第2のエラーとして、変換に失敗した場合に返される結果。 *タイプ*: 右辺値 #### `parseyaml` YAMLの文字列を正確なPuppet構造に変換します。 引数: * 第1の引数として、変換されるYAML文字列。 * オプションで、第2のエラーとして、変換に失敗した場合に返される結果。 *タイプ*: 右辺値 #### `pick` 値のリストから、未定義または空文字列ではない最初の値を返します。引数から任意の数字をとり、すべての値が未定義または空の場合はエラーが生じます。 ```puppet $real_jenkins_version = pick($::jenkins_version, '1.449') ``` *タイプ*: 右辺値 #### `pick_default` 値のリストにある最初の値を返します。`pick()`関数とは異なり、`pick_default()`は、すべての引数が空の場合も失敗にはなりません。そのため、デフォルトとして空の値を使用できます。 *タイプ*: 右辺値 #### `prefix` 配列のすべての要素、またはハッシュのキーに接頭辞を適用します。 例:  * `prefix(['a','b','c'], 'p')`は['pa','pb','pc']を返します。 * `prefix({'a'=>'b','b'=>'c','c'=>'d'}, 'p')`は{'pa'=>'b','pb'=>'c','pc'=>'d'}を返します。 Puppet 4.0.0以降では、内蔵の[`map`](https://docs.puppet.com/puppet/latest/function.html#map)関数を使用して配列の値を変更します。 この例は、上記の最初の例と同じです。 ['a', 'b', 'c'].map |$x| { "p${x}" } *タイプ*: 右辺値 #### `pry` 現在のスコープオブジェクトでpryデバッグセッションを起動します。コンパイル中の特定ポイントにおけるマニフェストコードのデバッグに役立ちます。`puppet apply`の実行中またはフォアグラウンドでPuppet serverを実行しているときにのみ使用する必要があります。PuppetのRubyGemsに`pry` gemがインストールされている必要があります。 *例:* ```puppet pry() ``` pryセッションで役立つコマンドは以下のとおりです: * `catalog`を実行すると、現在カタログをコンパイルしているコンテンツを見られます。 * `cd catalog`および`ls`を実行すると、カタログメソッドおよびインスタンス変数を見られます。 * `@resource_table`を実行すると、現在のカタログリソーステーブルを見られます。 #### `pw_hash` crypt関数を用いてパスワードをハッシュします。ほとんどのPOSIXシステムで使えるハッシュを提供します。 この関数の最初の引数は、ハッシュするパスワードです。`undef`または空文字列の場合は、この関数により`undef`が返されます。 この関数の第2の引数は、使用するハッシュのタイプです。適切なcrypt(3)ハッシュ指定子に変換されます。有効なハッシュタイプは以下のとおりです: |ハッシュタイプ |指定子| |---------------------|---------| |MD5 |1 | |SHA-256 |5 | |SHA-512 (推奨)|6 | この関数の第3の引数は、使用するソルトです。 この関数は、Puppet serverのcrypt(3)実装を使用しています。お使いの環境に複数の異なるオペレーティングシステムが含まれている場合は、この関数を使用する前に、互換性があることを確認してください。 *タイプ*: 右辺値 *注:* この関数はRubyクラスの実装にあたり、UTF8との互換性がない可能性があります。互換性を確保するには、Ruby 2.4.0以降でこの関数を使用してください。 #### `range` '(start, stop)'の形式で与えられた場合に、領域を配列として外挿します。たとえば、`range("0", "9")`は[0,1,2,3,4,5,6,7,8,9]を返します。ゼロパディングされた文字列は、自動的に整数に変換されます。したがって、`range("00", "09")`は[0,1,2,3,4,5,6,7,8,9]を返します。 非整数文字列を使用できます: * `range("a", "c")`は、["a","b","c"]を返します。 * `range("host01", "host10")`は、["host01", "host02", ..., "host09", "host10"]を返します。 末尾のゼロを明示的に含める必要があります。そうでないと、下層のRuby関数が適切に機能しません。 第3の引数を渡すと、生成された領域がその間隔で刻まれます。例: * `range("0", "9", "2")`は["0","2","4","6","8"]を返します。 > 注意: Puppet言語では、タイプシステムを使用して、`整数`と`フロート`の範囲をサポートしています。これらは、指定された回数の反復に適しています。 値のスキップについては、Puppetに内蔵の[`step`](https://docs.puppet.com/puppet/latest/function.html#step)関数を参照してください。 整数[0, 9]。それぞれの|$x| { notice($x) } #は、0, 1, 2, ... 9を通知します。 *タイプ*: 右辺値 #### `regexpescape` 文字列または文字列の配列を正規表現エスケープします。インプットとして、単一の文字列または配列のいずれかが必要です。 *タイプ*: 右辺値 #### `reject` 配列を検索し、提示された正規表現に一致する要素をすべてリジェクトします。 たとえば、`reject(['aaa','bbb','ccc','aaaddd'], 'aaa')`は['bbb','ccc']を返します。 Puppet 4.0.0以降では、Puppetに内蔵の[`filter`](https://docs.puppet.com/puppet/latest/function.html#filter)関数にも同じことが当てはまります。 stdlibの`reject`関数に相当します。 ['aaa','bbb','ccc','aaaddd'].filter |$x| { $x !~ /aaa/ } *タイプ*: 右辺値 #### `reverse` 文字列または配列の順序を逆転します。 > *注意*: Puppetでは、内蔵の[`reverse_each`](https://docs.puppet.com/puppet/latest/function.html#reverse_each)関数を使って同じことが行えます。 #### `round` **非推奨:**この関数は、Puppet 5.5.0で、内蔵の[`round`](https://puppet.com/docs/puppet/latest/function.html#round)関数に置き換えられました。 数値を最も近い整数に丸めます。 *タイプ*: 右辺値 #### `rstrip` **非推奨:**この関数は、Puppet 5.5.0で、内蔵の[`rstrip`](https://puppet.com/docs/puppet/latest/function.html#`rstrip`)関数に置き換えられました。 文字列の右側のスペースを取り除きます。 *タイプ*: 右辺値 #### `seeded_rand` 整数の最大値と文字列のシード値を取り、最大値よりも小さい反復可能かつランダムな整数を返します。`fqdn_rand`と同様ですが、シードにノード固有のデータが追加されません。 *タイプ*: 右辺値 #### `seeded_rand_string` (シード値に基づいて)一貫性のあるランダムな文字列を生成します。異なるホストに一致するパスワードを生成する場合に便利です。 #### `shell_escape` 文字列をエスケープし、Bourneシェルコマンドラインで安全に使用できるようにします。得られる文字列はクォートなしで使用する必要があり、ダブルクォートまたはシングルクォートでの使用は意図されていません。この関数は、Rubyの`Shellwords.shellescape()`関数と同様に挙動します。[Rubyドキュメント](http://ruby-doc.org/stdlib-2.3.0/libdoc/shellwords/rdoc/Shellwords.html#method-c-shellescape)を参照してください。 例:  ```puppet shell_escape('foo b"ar') => 'foo\ b\"ar' ``` *タイプ*: 右辺値 #### `shell_join` 与えられた文字列の配列からコマンドライン文字列を構築します。各配列アイテムが、Bourneシェルで使用できるようにエスケープされます。その後、すべてのアイテムがまとめられ、間にシングルスペースが配されます。この関数は、Rubyの`Shellwords.shelljoin()`関数と同様に挙動します。[Rubyドキュメント](http://ruby-doc.org/stdlib-2.3.0/libdoc/shellwords/rdoc/Shellwords.html#method-c-shelljoin)を参照してください。 例:  ```puppet shell_join(['foo bar', 'ba"z']) => 'foo\ bar ba\"z' ``` *タイプ*: 右辺値 #### `shell_split` 文字列をトークンの配列に分割します。この関数は、Rubyの`Shellwords.shellsplit()`関数と同様に挙動します。[Rubyドキュメント](http://ruby-doc.org/stdlib-2.3.0/libdoc/shellwords/rdoc/Shellwords.html#method-c-shellsplit)を参照してください。 *例:* ```puppet shell_split('foo\ bar ba\"z') => ['foo bar', 'ba"z'] ``` *タイプ*: 右辺値 #### `shuffle` 文字列または配列の順序をランダム化します。 *タイプ*: 右辺値 #### `size` **非推奨:** この関数は、Puppet 6.0.0で、内蔵の[`size`](https://puppet.com/docs/puppet/latest/function.html#size) 関数に置き換えられました(`サイズ`は、`長さ`のエイリアスです)。 文字列、配列、ハッシュの要素数を返します。この関数は、今後のリリースでは廃止されます。Puppet 4では、`length`関数を使用してください。 *タイプ*: 右辺値 #### `sprintf_hash` **非推奨:** Puppet 4.10.10および5.3.4では、内蔵の[`sprintf`](https://docs.puppet.com/puppet/latest/function.html#sprintf)関数を使って同じ機能を達成できます。この関数は、今後のリリースでは削除されます。 名前が指定されたテキストのリファレンスでprintfスタイルのフォーマットを実行します。 最初のパラメータは、ハッシュ内での残りのパラメータのフォーマット方法を記述するフォーマット文字列です。詳細については、Rubyの[`Kernel::sprintf`](https://ruby-doc.org/core-2.4.2/Kernel.html#method-i-sprintf)機能のマニュアルを参照してください。 例:  ```puppet $output = sprintf_hash('String: %s / number converted to binary: %b', { 'foo' => 'a string', 'number' => 5 }) # $output = 'String: a string / number converted to binary: 101' ``` *Type*: rvalue #### `sort` **非推奨:**この関数は、Puppet 5.5.0で、内蔵の[`sort`](https://puppet.com/docs/puppet/latest/function.html#sort)関数に置き換えられました。 文字列と配列を語彙的に分類します。 *タイプ*: 右辺値 >*注:* この関数はRubyクラスの実装にあたり、UTF8との互換性がない可能性があります。互換性を確保するには、Ruby 2.4.0以降でこの関数を使用してください。 #### `squeeze` 文字列内の連続した繰り返し('aaaa'など)を単一文字に置き換え、新たな文字列を返します。 *タイプ*: 右辺値 #### `str2bool` 特定の文字列をブーリアンに変換します。値'1'、'true'、't'、'y'、'yes'を含む文字列は`true`に変換されます。値'0'、'false'、'f'、'n'、'no'を含む文字列、および空文字列または未定義文字列は`false`に変換されます。その他の値の場合、エラーが生じます。このチェックでは、大文字と小文字は区別されません。 Puppet 5.0.0以降では、タイプシステムを使用して同じことが行えます。 利用可能な多くのタイプ変換については、Puppetの[`Boolean.new`](https://puppet.com/docs/puppet/latest/function.html#conversion-to-boolean) 関数を参照してください。 Boolean('false'), Boolean('n'), Boolean('no') # すべてfalse Boolean('true'), Boolean('y'), Boolean('yes') # すべてtrue *タイプ*: 右辺値 #### `str2saltedsha512` OS Xバージョン10.7以上で使用されるソルト付きSHA512パスワードハッシュに文字列を変換します。hexバージョンのソルト付きSHA512パスワードハッシュを返します。これは、有効なパスワード属性としてPuppetマニフェストに挿入することができます。 *タイプ*: 右辺値 >*注:* この関数はRubyクラスの実装にあたり、UTF8との互換性がない可能性があります。互換性を確保するには、Ruby 2.4.0以降でこの関数を使用してください。 #### `strftime` **非推奨:**この関数は、Puppet 5.5.0で、内蔵の[`strftime`](https://puppet.com/docs/puppet/latest/function.html#`strftime`)関数に置き換えられました。 フォーマットされた時刻を返します。 たとえば、`strftime("%s")`はUnixエポックからの経過時間を返し、`strftime("%Y-%m-%d")`は日付を返します。 引数: `strftime`フォーマットで時間を指定する文字列。詳細については、Ruby [strftime](https://ruby-doc.org/core-2.1.9/Time.html#method-i-strftime)ドキュメントを参照してください。 *タイプ*: 右辺値 >*注:* この関数はRubyクラスの実装にあたり、UTF8との互換性がない可能性があります。互換性を確保するには、Ruby 2.4.0以降でこの関数を使用してください。 *フォーマット:* * `%a`: 曜日の名称の短縮形('Sun') * `%A`: 曜日の完全な名称('Sunday') * `%b`: 月の名称の短縮形('Jan') * `%B`: 月の完全な名称('January') * `%c`: 推奨される地域の日付および時刻の表現 * `%C`: 世紀(2009年であれば20) * `%d`: その月の日(01..31) * `%D`: 日付(%m/%d/%y) * `%e`: その月の日、1桁の場合は半角空白で埋める( 1..31) * `%F`: %Y-%m-%d(ISO 8601の日付フォーマット)と同等 * `%h`: %bと同等 * `%H`: 24時間制の時(00..23) * `%I`: 12時間制の時(01..12) * `%j`: 年中の通算日(001..366) * `%k`: 24時間制の時、1桁の場合は半角空白で埋める( 0..23) * `%l`: 12時間制の時、1桁の場合は半角空白で埋める( 0..12) * `%L`: ミリ秒(000..999) * `%m`: その年の月(01..12) * `%M`: 分(00..59) * `%n`: 改行(\n) * `%N`: 秒の小数点以下の桁、デフォルトは9桁(ナノ秒) * `%3N`: ミリ秒(3桁) * `%6N`: マイクロ秒(6桁) * `%9N`: ナノ秒(9桁) * `%p`: 午前または午後('AM'または'PM') * `%P`: 午前または午後('am'または'pm') * `%r`: 12時間制の時刻(%I:%M:%S %pと同等) * `%R`: 24時間制の時刻(%H:%M) * `%s`: Unixエポック、1970-01-01 00:00:00 UTCからの経過秒 * `%S`: 秒(00..60) * `%t`: タブ文字( ) * `%T`: 24時間制の時刻(%H:%M:%S) * `%u`: 月曜日を1とした、曜日の数値表現(1..7) * `%U`: 最初の日曜日を第1週の始まりとした、現在の週を表す数(00..53) * `%v`: VMS形式の日付(%e-%b-%Y) * `%V`: ISO 8601形式の暦週(01..53) * `%W`: 最初の月曜日を第1週の始まりとした、現在の週を表す数(00..53) * `%w`: 曜日(日曜が0、0..6) * `%x`: 推奨される日付のみの表現、時刻はなし * `%X`: 推奨される時刻のみの表現、日付はなし * `%y`: 世紀なしの年(00..99) * `%Y`: 世紀ありの年 * `%z`: タイムゾーン、UTCからのオフセット(+0900など) * `%Z`: タイムゾーンの名称 * `%%`: '%'文字 #### `strip` **非推奨:**この関数は、Puppet 5.5.0で、内蔵の[`strip`](https://puppet.com/docs/puppet/latest/function.html#`strip`)関数に置き換えられました。 1つの文字列、または配列内のすべての文字列から、冒頭および末尾の空白を削除します。たとえば、`strip(" aaa ")`は"aaa"になります。 *タイプ*: 右辺値 #### `suffix` 配列のすべての要素、またはハッシュのすべてのキーに接尾辞を適用します。 例:  * `suffix(['a','b','c'], 'p')`は['ap','bp','cp']を返します。 * `suffix({'a'=>'b','b'=>'c','c'=>'d'}, 'p')`は{'ap'=>'b','bp'=>'c','cp'=>'d'}を返します。 Puppet 4.0.0以降では、内蔵の[`map`](https://docs.puppet.com/puppet/latest/function.html#map)関数を使用して配列の値を変更します。この例は、上記の最初の例と同じです。 ['a', 'b', 'c'].map |$x| { "${x}p" } *タイプ*: 右辺値 #### `swapcase` 文字列の現在の大文字と小文字を入れ替えます。たとえば、`swapcase("aBcD")`は"AbCd"になります。 *タイプ*: 右辺値 >*注:* この関数はRubyクラスの実装にあたり、UTF8との互換性がない可能性があります。互換性を確保するには、Ruby 2.4.0以降でこの関数を使用してください。 #### `time` 現在のUnixエポック時刻を整数として返します。 たとえば、`time()`は'1311972653'などを返します。 Puppet 4.8.0以降、Puppet言語には、``Timestamp` (時点)と`Timespan` (期間)の各データタイプがあります。次の例は、引数なしで`time()`を呼び出すのと同じです。 タイムスタンプ() *タイプ*: 右辺値 #### `to_bytes` 引数をバイトに変換します。 たとえば、"4 kB"は"4096"になります。 引数: 単一の文字列。 *タイプ*: 右辺値 #### `to_json` 入力値をJSON形式の文字列に変換します。 例えば、`{ "key" => "value" }`は`{"key":"value"}`になります。 *タイプ*: 右辺値 #### `to_json_pretty` 入力値を整形されたJSON形式の文字列に変換します。 例えば、`{ "key" => "value" }`は`{\n \"key\": \"value\"\n}`になります。 *タイプ*: 右辺値 #### `to_yaml` 入力値をYAML形式の文字列に変換します。 例えば、`{ "key" => "value" }`は`"---\nkey: value\n"`になります。 *タイプ*: 右辺値 #### `try_get_value` **非推奨:** `dig()`に置き換えられました。 ハッシュおよび配列の複数レイヤー内の値を取得します。 引数: * 第1の引数として、パスを含む文字列。この引数は、ゼロではじまり、パス区切り文字(デフォルトは"/")で区切ったハッシュキーまたは配列インデックスの文字列として提示してください。この関数は各パスコンポーネントにより構造内を移動し、パスの最後で値を返すよう試みます。 * デフォルトの第2の引数。パスが正しくない場合や、値が見つからない場合、その他のエラーが生じた場合は、この引数が返されます。 * 最後の引数として、パス区切り文字。 ```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** 取り扱うデータ構造。 2. **'a/b/2'** パス文字列。 3. **'not_found'** デフォルト値。何も見つからない場合に返されます。 (オプション、デフォルトは`undef`) 4. **'/'** パス区切り文字。 (オプション、デフォルトは*'/'*) *タイプ*: 右辺値 #### `type3x` **非推奨:**この関数は、今後のリリースで廃止されます。 与えられた値のタイプを説明する文字列を返します。タイプとしては、文字列、配列、ハッシュ、フロート、整数、ブーリアンが可能です。Puppet 4では、この代わりに新しいタイプシステムを使用してください。 引数: * 文字列 * 配列 * ハッシュ * フロート * 整数 * ブーリアン *タイプ*: 右辺値 #### `type_of` この関数は下位互換性を得るために提供されていますが、Puppetで提供されている内蔵の[type()関数](https://puppet.com/docs/puppet/latest/function.html#type)の使用を推奨します。 与えられた値のリテラル型を返します。Puppet 4が必要です。`if type_of($some_value) <= Array[String] { ... }`のように(これは`if $some_value =~ Array[String] { ... }`に相当します)、`<=`を用いたタイプの比較に役立ちます。 *タイプ*: 右辺値 #### `union` 2つ以上の配列を重複なしで結合したものを返します。 たとえば、`union(["a","b","c"],["b","c","d"])`は["a","b","c","d"]を返します。 *タイプ*: 右辺値 #### `unique` 文字列および配列から重複を削除します。 たとえば、`unique("aabbcc")`は'abc'を、`unique(["a","a","b","b","c","c"])`は["a","b","c"]を返します。 *タイプ*: 右辺値 #### `unix2dos` 与えられた文字列のDOSバージョンを返します。クロスプラットフォームテンプレートでファイルリソースを使用する場合に役立ちます。 *タイプ*: 右辺値 ```puppet file { $config_file: ensure => file, content => unix2dos(template('my_module/settings.conf.erb')), } ``` [dos2unix](#dos2unix)も参照してください。 #### `upcase` **非推奨:**この関数は、Puppet 5.5.0で、内蔵の[`upcase`](https://puppet.com/docs/puppet/latest/function.html#upcase)関数に置き換えられました。 オブジェクト、配列、オブジェクトのハッシュを大文字に変換します。変換されるオブジェクトは、大文字化に対応するものでなければなりません。 たとえば、`upcase('abcd')`は'ABCD'を返します。 *タイプ*: 右辺値 *注:* この関数はRubyクラスの実装にあたり、UTF8との互換性がない可能性があります。互換性を確保するには、Ruby 2.4.0以降でこの関数を使用してください。 #### `uriescape` 文字列または文字列の配列をURLエンコードします。 引数: 単一の文字列または文字列の配列。 *タイプ*: 右辺値 >*注:* この関数はRubyクラスの実装にあたり、UTF8との互換性がない可能性があります。互換性を確保するには、Ruby 2.4.0以降でこの関数を使用してください。 #### `validate_absolute_path` ファイルシステムの絶対パスを表す任意の文字列の有効性を確認します。WindowsおよびUnix形式のパスで機能します。 以下の値が渡されます: ```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) ``` 以下の値は失敗になり、コンパイルが中止されます: ```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) ``` *タイプ*: ステートメント #### `validate_array` **非推奨:**今後のバージョンのstdlibでは削除されます。[`validate_legacy`](#validate_legacy)を参照してください。 渡されたすべての値が配列データ構造であることを確認します。このチェックで不合格となった値がある場合は、カタログコンパイルが中止されます。 以下の値が渡されます: ```puppet $my_array = [ 'one', 'two' ] validate_array($my_array) ``` 以下の値は失敗になり、コンパイルが中止されます: ```puppet validate_array(true) validate_array('some_string') $undefined = `undef` validate_array($undefined) ``` *タイプ*: ステートメント #### `validate_augeas` Augeasレンズを用いて文字列を確認します。 引数: * 第1の引数として、テストする文字列。 * 第2の引数として、使用するAugeasレンズの名前。 * オプションの第3の文字列として、ファイル内で見つかるべき**ではない**パスのリスト。 * オプションの第4の引数として、ユーザに表示するエラーメッセージ。 Augeasがレンズによる文字列の構文解析に失敗した場合は、構文エラーによりコンパイルが中止されます。 `$file`変数は、Augeasツリーでテストされる一時ファイルのロケーションを示します。 たとえば、$passwdcontentにユーザの`foo`が含まれないようにするには、第3の引数を以下のようにします: ```puppet validate_augeas($passwdcontent, 'Passwd.lns', ['$file/foo']) ``` エラーメッセージを生成して表示するには、第4の引数を以下のようにします: ```puppet validate_augeas($sudoerscontent, 'Sudoers.lns', [], 'Failed to validate sudoers content with Augeas') ``` *タイプ*: ステートメント #### `validate_bool` **非推奨:**今後のバージョンのstdlibでは削除されます。[`validate_legacy`](#validate_legacy)を参照してください。 渡されたすべての値が`true`または`false`であることを確認します。このチェックで不合格となった値がある場合は、カタログコンパイルが中止されます。 以下の値が渡されます: ```puppet $iamtrue = true validate_bool(true) validate_bool(true, true, false, $iamtrue) ``` 以下の値は失敗になり、コンパイルが中止されます: ```puppet $some_array = [ true ] validate_bool("false") validate_bool("true") validate_bool($some_array) ``` *タイプ*: ステートメント #### `validate_cmd` 外部コマンドにより文字列を確認します。 引数: * 第1の引数として、テストする文字列。 * 第2の引数として、テストコマンドのパス。この引数は、ファイルパスのプレースホルダ―として%をとります(%プレースホルダーが与えられていない場合、デフォルトはコマンド末尾)。パスした文字列を含む一時ファイルに対してコマンドが起動した場合や、ゼロではない値が返された場合は、構文エラーによりコンパイルが中止されます。 * オプションの第3の引数として、ユーザに表示するエラーメッセージ。 ```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') ``` *タイプ*: ステートメント #### `validate_domain_name` **非推奨:**今後のバージョンのstdlibでは削除されます。[`validate_legacy`](#validate_legacy)を参照してください。 渡されたすべての値が構文的に正しいドメイン名であることを確認します。このチェックで不合格となった値がある場合は、カタログコンパイルが中止されます。 以下の値が渡されます: ~~~ $my_domain_name = 'server.domain.tld' validate_domain_name($my_domain_name) validate_domain_name('domain.tld', 'puppet.com', $my_domain_name) ~~~ 以下の値が不合格となり、コンパイルが中止されます: ~~~ 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_email_address` 渡されたすべての値が有効なメールアドレスであることを確認します。このチェックで不合格となった値がある場合、コンパイルが失敗します。 以下の値が渡されます: ~~~ $my_email = "waldo@gmail.com" validate_email_address($my_email) validate_email_address("bob@gmail.com", "alice@gmail.com", $my_email) ~~~ 以下の値が不合格となり、コンパイルが中止されます: ~~~ $some_array = [ 'bad_email@/d/efdf.com' ] validate_email_address($some_array) ~~~ *タイプ*: ステートメント #### `validate_hash` **非推奨:**今後のバージョンのstdlibでは削除されます。[`validate_legacy`](#validate_legacy)を参照してください。 渡されたすべての値がハッシュデータ構造であることを確認します。このチェックで不合格となった値がある場合は、カタログコンパイルが中止されます。 以下の値が渡されます: ```puppet $my_hash = { 'one' => 'two' } validate_hash($my_hash) ``` 以下の値は失敗になり、コンパイルが中止されます: ```puppet validate_hash(true) validate_hash('some_string') $undefined = `undef` validate_hash($undefined) ``` *タイプ*: ステートメント #### `validate_integer` **非推奨:**今後のバージョンのstdlibでは削除されます。[`validate_legacy`](#validate_legacy)を参照してください。 整数または整数の配列を確認します。いずれかがチェックで不合格になった場合には、カタログコンパイルが中止されます。 引数: * 第1の引数として、整数または整数の配列。 * オプションの第2の引数として、最大値。第1の引数(のすべての要素)は、この最大値以下でなければなりません。 * オプションの第3の引数として、最小値。第1の引数(のすべての要素)は、この最大値以上でなければなりません。 第1の引数が整数または整数の配列でない場合や、第2または第3の引数が整数に変換できない場合は、この関数は失敗になります。ただし、最小値が与えられている場合は(この場合に限られます)、第2の引数を空文字列または`undef`にすることが可能です。これは、最小チェックを確実に行うためのプレースホルダーとして機能します。 以下の値が渡されます: ```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) ``` * 加えて、上述のすべて。ただし、文字列として渡された値を任意に組み合わせたもの('1'または"1")。 * 加えて、上述のすべて。ただし、負の整数値を(適切に)組み合わせたもの。 以下の値は失敗になり、コンパイルが中止されます: ```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) ``` * 加えて、上述のすべて。ただし、文字列として渡された値を任意に組み合わせたもの (`false`、または"false")。 * 加えて、上述のすべて。ただし、負の整数値を不適切に組み合わせたもの。 * 加えて、上述のすべて。ただし、配列内の非整数アイテムまたは最大/最小引数を用いたもの。 *タイプ*: ステートメント #### `validate_ip_address` **非推奨:**今後のバージョンのstdlibでは削除されます。[`validate_legacy`](#validate_legacy)を参照してください。 IPv4アドレスかIPv6アドレスかにかかわらず、引数がIPアドレスであることを確認します。また、ネットマスクによりIPアドレスを確認します。 引数: IPアドレスを指定する文字列。 以下の値が渡されます: ```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') ``` 以下の値は失敗になり、コンパイルが中止されます: ```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` 指定したタイプおよび非推奨の確認関数の両方に照らして値を確認します。両方にパスした場合はそのままパスし、片方の確認のみにパスした場合はエラーが生じ、両方の確認でfalseが返された場合は失敗になります。 引数: * 値のチェックに用いるタイプ。 * 過去の確認関数のフルネーム。 * チェックする値。 * 過去の確認関数に必要な引数の不特定数。 例: ```puppet validate_legacy('Optional[String]', 'validate_re', 'Value to be validated', ["."]) ``` この関数は、Puppet 3形式の引数確認(stdlibの`validate_*`関数を使用)からPuppet 4データタイプへのモジュールのアップデートに対応しており、Puppet 3形式の確認に頼っている場合も機能性が中断することはありません。 > 注: この関数は、Puppet 4.4.0 (PE 2016.1)以降にのみ対応しています。 ##### モジュールユーザへ Puppet 4を使用している場合、`validate_legacy`関数を使えば、非推奨のPuppet 3の`validate_*`関数を探し、分離することができます。これらの関数は、stdlibバージョン4.13時点で非推奨になっており、今後のstdlibバージョンでは削除されます。 Puppet 4では、[データタイプ](https://puppet.com/docs/puppet/latest/lang_data.html)を用いた改良版のユーザ定義タイプのチェックが可能です。データタイプでは、Puppet 3の`validate_*`関数で見られた、不整合につながるいくつかの問題を回避できます。例えば、[validate_numeric](#validate_numeric)では、数字だけでなく、数字の配列や数字のように見える文字列も意図に反して許可されていました。 Puppet 4とともに、非推奨の `validate_*`関数を用いたモジュールを使用している場合は、非推奨メッセージが表示されることがあります。`validate_legacy`関数を使えば、そうした差異を可視化し、より明快なPuppet 4構文に簡単に移行することができます。 表示される非推奨メッセージは、使用しているモジュールやデータによって異なることがあります。以下の非推奨メッセージは、Puppet 4でのみデフォルトで表示されます: * `Notice: Accepting previously invalid value for target type ''`: このメッセージは、情報提供の目的のみで表示されるものです。使用している値は、新形式で許可されていますが、旧確認関数では無効となります。 * `Warning: This method is deprecated, please use the stdlib validate_legacy function`: モジュールがまだ`validate_legacy`にアップグレードされていません。[deprecation](#deprecation)オプションを使用してさしあたり警告を解除するか、モジュールの開発者に修正版を提出させてください。この問題の解決方法については、以下の[モジュール開発者へ](#モジュール開発者へ)を参照してください。 * `Warning: validate_legacy() expected value, got _`: コードが渡す値は、Puppet 3形式の確認では認められますが、次バージョンのモジュールでは認められません。ほとんどの場合、数字またはブーリアンからクォートを削除すれば、この問題を解決することができます。 * `Error: Evaluation Error: Error while evaluating a Resource Statement, Evaluation Error: Error while evaluating a Function Call, validate_legacy() expected value, got `: コードの渡す値は、新形式の確認でも旧形式の確認でも認められません。 ##### モジュール開発者へ `validate_legacy`関数は、モジュールユーザの使用している機能を中断させずに、 Puppet 3形式の確認からPuppet 4形式の確認に移行するのに役立ちます。 Puppet 4形式の確認に移行すれば、[データタイプ](https://puppet.com/docs/puppet/latest/lang_data.html)を用いた、より明確なユーザ定義タイプのチェックが可能になります。Puppet 3の`validate_*` 関数の多くは、確認という点で驚くほど多くの穴があります。例えば、[validate_numeric](#validate_numeric)では、細部をコントロールできないため、数字だけでなく、数字の配列や数字のように見える文字列も許可されます。 クラスおよび定義タイプの各パラメータについて、使用する新しいPuppet 4データタイプを選択してください。たいていの場合、新しいデータタイプにより、元の`validate_*`関数とは異なる値のセットを使用できるようになります。以下のような状況になります: | | `validate_` pass | `validate_` fail | | ------------ | ---------------- | ---------------- | | タイプに一致します | 成功 | 成功、通知 | | タイプの失敗 | 成功、廃止予定 | 失敗 | 現在のところ、確認後のコードでも、すべての可能な値に対処する必要がありますが、新形式にマッチする値のみを渡すように、コードのユーザがマニフェストを変更することができます。 stdlibの`validate_*`関数それぞれについて、マッチする`Stdlib::Compat::*`タイプがあり、適切な値のセットが許可されます。注意事項については、stdlibソースコードの `types/`ディレクトリにあるドキュメントを参照してください。 たとえば、数字のみが許可されるクラスを与えると、以下のようになります: ```puppet class example($value) { validate_numeric($value) ``` 得られる確認コードは、以下のようになります: ```puppet クラスの例( Variant[Stdlib::Compat::Numeric, Numeric] $value ) { validate_legacy(Numeric, 'validate_numeric', $value) ``` ここでは、`$value`のタイプが`Variant[Stdlib::Compat::Numeric, Numeric]`と定義されています。これにより、任意の`Numeric` (新形式)のほか、`validate_numeric`で(`Stdlib::Compat::Numeric`を通じて)これまで許可されていたすべての値を使用できます。 `validate_legacy`を呼び出すと、適切なログまたは失敗メッセージのトリガーが処理されます。これには、新形式、以前の確認関数の名称、およびその関数のすべての引数が必要です。 お使いのモジュールがまだPuppet 3をサポートしている場合は、これは互換性を破る変更になります。`metadata.json`要件セクションをアップデートしてモジュールがもうPuppet 3をサポートしていないことを示し、モジュールのメジャーバージョンを放棄してください。この変更を加えても、モジュールに関する既存のすべてのテストにパスするはずです。新たに可能になった値について、追加のテストを作成してください。 これは互換性を破る変更であることから、取り除きたいすべてのパラメータについて [`deprecation`](#deprecation)をコールしたり、パラメータにさらなる制約を追加したりする良い機会でもあります。 このバージョンのリリース後、互換性を破る変更を加えた別のリリースを公開し、すべての互換性タイプおよび `validate_legacy`のコールを削除することができます。その時点で、コードを実行し、過去に可能だった値に関する残余要素を取り除くこともできます。 そうした変更については、必ずCHANGELOGおよびREADMEで通告してください。 #### `validate_numeric` **非推奨:**今後のバージョンのstdlibでは削除されます。[`validate_legacy`](#validate_legacy)を参照してください。 数値または数値の配列や文字列を確認します。いずれかがチェックに失敗した場合には、カタログコンパイルが中止されます。 引数: * 数値、または数値の配列か文字列。 * オプションで、最大値。第1の引数(のすべての要素) は、この最大値以下でなければなりません。 * オプションで、最小値。第1の引数(のすべての要素)は、この最小値以上でなければなりません。 第1の引数が数値(整数またはフロート)または数値の配列が文字列でない場合や、第2および第3の引数が数値に変換できない場合は、この関数は失敗になります。最小値が与えられている場合は(この場合に限られます)、第2の引数を空文字列または`undef`にすることが可能です。これは、最小チェックを確実に行うためのプレースホルダーとして機能します。 パスおよび失敗の使用については、[`validate_integer`](#validate-integer)を参照してください。同じ値がパスおよび失敗します。ただし、`validate_numeric`では、浮動小数点値も許可されます。 *タイプ*: ステートメント #### `validate_re` **非推奨:**今後のバージョンのstdlibでは削除されます。[`validate_legacy`](#validate_legacy)を参照してください。 1つまたは複数の正規表現に照らして、文字列の簡単な確認を行います。 引数: * 第1の引数として、テストする文字列。この引数が文字列でない場合、コンパイルが中止されます。クォートを用いて強制的に文字列化してください。 * 第2の引数として、文字列化した正規表現(区切り文字//なし)または正規表現の配列。 * オプションの第3の引数として、ユーザに表示するエラーメッセージ。 第2の引数の正規表現が第1の引数で渡した文字列にマッチしない場合は、構文エラーによりコンパイルが中止されます。 以下の文字列により、正規表現に照らして確認が行われます: ```puppet validate_re('one', '^one$') validate_re('one', [ '^one', '^two' ]) ``` 以下の文字列では、確認に失敗し、コンパイルが中止されます: ```puppet validate_re('one', [ '^two', '^three' ]) ``` エラーメッセージの設定方法: ```puppet validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7') ``` 強制的に文字列化するには、クォートを使用してください: ``` validate_re("${::operatingsystemmajrelease}", '^[57]$') ``` *タイプ*: ステートメント #### `validate_slength` **非推奨:**今後のバージョンのstdlibでは削除されます。[`validate_legacy`](#validate_legacy)を参照してください。 文字列(または文字列の配列)が指定した長さ以下であることを確認します。 引数: * 第1の引数として、文字列または文字列の配列。 * 第2の引数として、長さの最大値を示す数値。 * オプションの第3の引数として、長さの最小値を示す数値。 以下の値が渡されます: ```puppet validate_slength("discombobulate",17) validate_slength(["discombobulate","moo"],17) validate_slength(["discombobulate","moo"],17,3) ``` 以下の値は失敗になります: ```puppet validate_slength("discombobulate",1) validate_slength(["discombobulate","thermometer"],5) validate_slength(["discombobulate","moo"],17,10) ``` *タイプ*: ステートメント #### `validate_string` **非推奨:**今後のバージョンのstdlibでは削除されます。[`validate_legacy`](#validate_legacy)を参照してください。 渡したすべての値が文字列データ構造であることを確認します。このチェックに失敗した値がある場合は、カタログコンパイルが中止されます。 以下の値が渡されます: ```puppet $my_string = "one two" validate_string($my_string, 'three') ``` 以下の値は失敗になり、コンパイルが中止されます: ```puppet validate_string(true) validate_string([ 'some', 'array' ]) ``` 注:* validate_string(`undef`)は、このバージョンの関数APIでは失敗しません。 代わりに、以下を使用してください: ``` if $var == `undef` { fail('...') } ``` *タイプ*: ステートメント #### `validate_x509_rsa_key_pair` OpenSSLにより、PEMフォーマットされたX.509認証および秘密鍵を確認します。認証の署名が提供された鍵から作成されたものであることを確認します。 このチェックに失敗した値がある場合は、カタログコンパイルが中止されます。 引数: * 第1の引数として、X.509認証。 * 第2の引数として、RSAプライベートキー。 ```puppet validate_x509_rsa_key_pair($cert, $key) ``` *タイプ*: ステートメント #### `values` **非推奨:**この関数は、Puppet 5.5.0で、内蔵の[`values`](https://puppet.com/docs/puppet/latest/function.html#values)関数に置き換えられました。 与えられたハッシュの値を返します。 たとえば、`$hash = {'a'=1, 'b'=2, 'c'=3} values($hash)`を与えると、[1,2,3]を返します。 *タイプ*: 右辺値 #### `values_at` ロケーションをもとに、配列内の値を探します。 引数: * 第1の引数として、解析したい配列。 * 第2の引数として、以下の値の任意の組み合わせ: * 単一の数値インデックス。 * 'start-stop'の形式での範囲(4-9など)。 * 上記を組み合わせた配列。 例:  * `values_at(['a','b','c'], 2)`は['c']を返します。 * `values_at(['a','b','c'], ["0-1"])`は['a','b']を返します。 * `values_at(['a','b','c','d','e'], [0, "2-3"])`は['a','c','d']を返します。 Puppet 4.0.0以降では、インデックスで配列をスライスし、言語で直接カウントすることができます。 負の値は、配列の"最後から"と解釈されます。例えば、次のようになります。 ```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'] ``` *タイプ*: 右辺値 #### `zip` 与えられた第1の配列から1つの要素をとり、与えられた第2の配列の対応する要素と結合します。これにより、n-要素配列のシーケンスが生成されます。*n*は、引数の数より1大きくなります。たとえば、`zip(['1','2','3'],['4','5','6'])`は["1", "4"], ["2", "5"], ["3", "6"]を返します。*タイプ*: 右辺値。 ## 制約事項 Puppet Enterprise 3.7では、stdlibモジュールがPEに含まれていません。PEユーザは、Puppetと互換性のあるstdlibの最新リリースをインストールする必要があります。 サポートされているオペレーティングシステムの一覧については、[metadata.json](https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/metadata.json)を参照してください。 ### バージョン互換性 バージョン | Puppet 2.6 | Puppet 2.7 | Puppet 3.x | Puppet 4.x | :---------------|:-----:|:---:|:---:|:----: **stdlib 2.x** | **yes** | **yes** | いいえ | いいえ **stdlib 3.x** | いいえ | **yes** | **yes** | いいえ **stdlib 4.x** | いいえ | **yes** | **yes** | いいえ **stdlib 4.6+** | いいえ | **yes** | **yes** | **yes** **stdlib 5.x** | いいえ | いいえ | **yes** | **yes** **stdlib 5.x**: stdlib 5.xのリリース時には、Puppet 2.7.xのサポートが廃止されます。[この説明](https://github.com/puppetlabs/puppetlabs-stdlib/pull/176#issuecomment-30251414)を参照してください。 ## 開発 Puppet ForgeのPuppet Labsモジュールはオープンプロジェクトで、良い状態に保つためには、コミュニティの貢献が必要不可欠です。Puppetが役に立つはずでありながら、私たちがアクセスできないプラットフォームやハードウェア、ソフトウェア、デプロイ構成は無数にあります。私たちの目標は、できる限り簡単に変更に貢献し、みなさまの環境で私たちのモジュールが機能できるようにすることにあります。最高の状態を維持できるようにするために、コントリビュータが従う必要のあるいくつかのガイドラインが存在します。詳細については、[モジュールコントリビューションガイド](https://docs.puppetlabs.com/forge/contributing.html)を参照してください。 このモジュールの一部に関するバグの報告または調査は、 [https://github.com/puppetlabs/puppetlabs-stdlib/issues](https://github.com/puppetlabs/puppetlabs-stdlib/issues)からお願いします。 ## コントリビュータ コントリビュータのリストは、[https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors](https://github.com/puppetlabs/puppetlabs-stdlib/graphs/contributors)で見ることができます。 puppetlabs-stdlib-9.4.1/types0040755000000000000000000000000014523206607013207 5ustar00puppetlabs-stdlib-9.4.1/types/absolutepath.pp0100644000175100001770000000016114523206606016351 0ustar00# @summary A strict absolutepath type type Stdlib::Absolutepath = Variant[Stdlib::Windowspath, Stdlib::Unixpath] puppetlabs-stdlib-9.4.1/types/base32.pp0100644000175100001770000000016114523206606014735 0ustar00# @summary Type to match base32 String type Stdlib::Base32 = Pattern[/\A[a-z2-7]+={,6}\z/, /\A[A-Z2-7]+={,6}\z/] puppetlabs-stdlib-9.4.1/types/base64.pp0100644000175100001770000000014214523206606014741 0ustar00# @summary Type to match base64 String type Stdlib::Base64 = Pattern[/\A[a-zA-Z0-9\/\+]+={,2}\z/] puppetlabs-stdlib-9.4.1/types/createresources.pp0100644000175100001770000000100614523206606017053 0ustar00# @summary A type description used for the create_resources function # # @example As a class parameter # class myclass ( # Stdlib::CreateResources $myresources = {}, # ) { # # Using create_resources # create_resources('myresource', $myresources) # # # Using iteration # $myresources.each |$myresource_name, $myresource_attrs| { # myresource { $myresource_name: # * => $myresource_attrs, # } # } # } type Stdlib::CreateResources = Hash[String[1], Hash[String[1], Any]] puppetlabs-stdlib-9.4.1/types/datasize.pp0100644000175100001770000000013514523206606015463 0ustar00# @summary Validate the size of data type Stdlib::Datasize = Pattern[/^\d+(?i:[kmgt]b?|b)$/] puppetlabs-stdlib-9.4.1/types/dns0040755000000000000000000000000014523206607013773 5ustar00puppetlabs-stdlib-9.4.1/types/dns/zone.pp0100644000175100001770000000021014523206606015410 0ustar00# @summary Validate a DNS zone name type Stdlib::Dns::Zone = Pattern[/\A((([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])\.)+|\.)\z/] puppetlabs-stdlib-9.4.1/types/email.pp0100644000175100001770000000047714523206606014757 0ustar00# @summary Validate an e-mail address # https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address # lint:ignore:140chars type Stdlib::Email = 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/] # lint:endignore puppetlabs-stdlib-9.4.1/types/ensure0040755000000000000000000000000014523206607014510 5ustar00puppetlabs-stdlib-9.4.1/types/ensure/file0040755000000000000000000000000014523206607015427 5ustar00puppetlabs-stdlib-9.4.1/types/ensure/file/directory.pp0100644000175100001770000000020214523206606020076 0ustar00# Validate the ensure parameter of a "directory" file resource type Stdlib::Ensure::File::Directory = Enum['directory', 'absent'] puppetlabs-stdlib-9.4.1/types/ensure/file/file.pp0100644000175100001770000000016314523206606017017 0ustar00# Validate the ensure parameter of a "file" file resource type Stdlib::Ensure::File::File = Enum['file', 'absent'] puppetlabs-stdlib-9.4.1/types/ensure/file/link.pp0100644000175100001770000000016314523206606017035 0ustar00# Validate the ensure parameter of a "link" file resource type Stdlib::Ensure::File::Link = Enum['link', 'absent'] puppetlabs-stdlib-9.4.1/types/ensure/file.pp0100644000175100001770000000022414523206606016076 0ustar00# @summary Validate the value of the ensure parameter for a file type Stdlib::Ensure::File = Enum['present', 'file', 'directory', 'link', 'absent'] puppetlabs-stdlib-9.4.1/types/ensure/package.pp0100644000175100001770000000027614523206606016561 0ustar00# @summary Validate the value of the ensure parameter for a package type Stdlib::Ensure::Package = Variant[Enum['present', 'absent', 'purged', 'disabled', 'installed', 'latest'], String[1]] puppetlabs-stdlib-9.4.1/types/ensure/service.pp0100644000175100001770000000020614523206606016617 0ustar00# @summary Validate the value of the ensure parameter of a service resource type Stdlib::Ensure::Service = Enum['stopped', 'running'] puppetlabs-stdlib-9.4.1/types/filemode.pp0100644000175100001770000000044214523206606015444 0ustar00# @summary Validate a file mode # See `man chmod.1` for the regular expression for symbolic mode # lint:ignore:140chars type Stdlib::Filemode = Pattern[/\A(([0-7]{1,4})|(([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+)(,([ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+))*))\z/] # lint:endignore puppetlabs-stdlib-9.4.1/types/filesource.pp0100644000175100001770000000037214523206606016022 0ustar00# @summary Validate the source parameter on file types type Stdlib::Filesource = Variant[ Stdlib::Absolutepath, Stdlib::HTTPUrl, Pattern[ /\Afile:\/\/\/([^\n\/\0]+(\/)?)+\z/, /\Apuppet:\/\/(([\w-]+\.?)+)?\/([^\n\/\0]+(\/)?)+\z/, ], ] puppetlabs-stdlib-9.4.1/types/fqdn.pp0100644000175100001770000000027714523206606014616 0ustar00# @summary Validate a Fully Qualified Domain Name type Stdlib::Fqdn = 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/] puppetlabs-stdlib-9.4.1/types/host.pp0100644000175100001770000000015714523206606014640 0ustar00# @summary Validate a host (FQDN or IP address) type Stdlib::Host = Variant[Stdlib::Fqdn, Stdlib::IP::Address] puppetlabs-stdlib-9.4.1/types/http0040755000000000000000000000000014523206607014166 5ustar00puppetlabs-stdlib-9.4.1/types/http/method.pp0100644000175100001770000000121014523206606016111 0ustar00# @summary Valid HTTP method verbs # @see https://www.iana.org/assignments/http-methods/http-methods.xhtml type Stdlib::Http::Method = Enum[ 'ACL', 'BASELINE-CONTROL', 'BIND', 'CHECKIN', 'CHECKOUT', 'CONNECT', 'COPY', 'DELETE', 'GET', 'HEAD', 'LABEL', 'LINK', 'LOCK', 'MERGE', 'MKACTIVITY', 'MKCALENDAR', 'MKCOL', 'MKREDIRECTREF', 'MKWORKSPACE', 'MOVE', 'OPTIONS', 'ORDERPATCH', 'PATCH', 'POST', 'PRI', 'PROPFIND', 'PROPPATCH', 'PUT', 'REBIND', 'REPORT', 'SEARCH', 'TRACE', 'UNBIND', 'UNCHECKOUT', 'UNLINK', 'UNLOCK', 'UPDATE', 'UPDATEREDIRECTREF', 'VERSION-CONTROL', ] puppetlabs-stdlib-9.4.1/types/http/status.pp0100644000175100001770000000024414523206606016162 0ustar00# @summary A valid HTTP status code per RFC9110 # @see https://httpwg.org/specs/rfc9110.html#overview.of.status.codes type Stdlib::Http::Status = Integer[100, 599] puppetlabs-stdlib-9.4.1/types/httpstatus.pp0100644000175100001770000000023114523206606016077 0ustar00# @summary Validate a HTTP status code # @deprecated Use Stdlib::Http::Status # @see Stdlib::Http::Status type Stdlib::HttpStatus = Stdlib::Http::Status puppetlabs-stdlib-9.4.1/types/httpsurl.pp0100644000175100001770000000013114523206606015540 0ustar00# @summary Validate a HTTPS URL type Stdlib::HTTPSUrl = Pattern[/(?i:\Ahttps:\/\/.*\z)/] puppetlabs-stdlib-9.4.1/types/httpurl.pp0100644000175100001770000000013314523206606015357 0ustar00# @summary Validate a HTTP(S) URL type Stdlib::HTTPUrl = Pattern[/(?i:\Ahttps?:\/\/.*\z)/] puppetlabs-stdlib-9.4.1/types/ip0040755000000000000000000000000014523206607013617 5ustar00puppetlabs-stdlib-9.4.1/types/ip/address0040755000000000000000000000000014523206607015244 5ustar00puppetlabs-stdlib-9.4.1/types/ip/address/cidr.pp0100644000175100001770000000022314523206606016633 0ustar00# Validate an IP address with subnet type Stdlib::IP::Address::CIDR = Variant[ Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V6::CIDR, ] puppetlabs-stdlib-9.4.1/types/ip/address/nosubnet.pp0100644000175100001770000000024214523206606017550 0ustar00# Validate an IP address without subnet type Stdlib::IP::Address::Nosubnet = Variant[ Stdlib::IP::Address::V4::Nosubnet, Stdlib::IP::Address::V6::Nosubnet, ] puppetlabs-stdlib-9.4.1/types/ip/address/v40040755000000000000000000000000014523206607015575 5ustar00puppetlabs-stdlib-9.4.1/types/ip/address/v4/cidr.pp0100644000175100001770000000033614523206606017171 0ustar00# lint:ignore:140chars type Stdlib::IP::Address::V4::CIDR = 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/] # lint:endignore puppetlabs-stdlib-9.4.1/types/ip/address/v4/nosubnet.pp0100644000175100001770000000031014523206606020075 0ustar00# lint:ignore:140chars type Stdlib::IP::Address::V4::Nosubnet = 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/] # lint:endignore puppetlabs-stdlib-9.4.1/types/ip/address/v4.pp0100644000175100001770000000021314523206606016242 0ustar00# Validate an IPv4 address type Stdlib::IP::Address::V4 = Variant[ Stdlib::IP::Address::V4::CIDR, Stdlib::IP::Address::V4::Nosubnet, ] puppetlabs-stdlib-9.4.1/types/ip/address/v60040755000000000000000000000000014523206607015577 5ustar00puppetlabs-stdlib-9.4.1/types/ip/address/v6/alternative.pp0100644000175100001770000000266114523206606020573 0ustar00# lint:ignore:140chars type Stdlib::IP::Address::V6::Alternative = 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/, ] # lint:endignore puppetlabs-stdlib-9.4.1/types/ip/address/v6/cidr.pp0100644000175100001770000000217014523206606017171 0ustar00# lint:ignore:140chars type Stdlib::IP::Address::V6::CIDR = 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/] # lint:endignore puppetlabs-stdlib-9.4.1/types/ip/address/v6/compressed.pp0100644000175100001770000000156114523206606020417 0ustar00# Validate a compressed IPv6 address type Stdlib::IP::Address::V6::Compressed = 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/, ] puppetlabs-stdlib-9.4.1/types/ip/address/v6/full.pp0100644000175100001770000000024714523206606017215 0ustar00# Validate a full IPv6 address type Stdlib::IP::Address::V6::Full = Pattern[/\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}(\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9]))?\z/] puppetlabs-stdlib-9.4.1/types/ip/address/v6/nosubnet0040755000000000000000000000000014523206607017434 5ustar00puppetlabs-stdlib-9.4.1/types/ip/address/v6/nosubnet/alternative.pp0100644000175100001770000000221614523206606022424 0ustar00# lint:ignore:140chars type Stdlib::IP::Address::V6::Nosubnet::Alternative = 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/, ] # lint:endignore puppetlabs-stdlib-9.4.1/types/ip/address/v6/nosubnet/compressed.pp0100644000175100001770000000106014523206606022246 0ustar00# Validate compressed IPv6 address without subnet type Stdlib::IP::Address::V6::Nosubnet::Compressed = 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/, ] puppetlabs-stdlib-9.4.1/types/ip/address/v6/nosubnet/full.pp0100644000175100001770000000022314523206606021044 0ustar00# Validate full IPv6 address without subnet type Stdlib::IP::Address::V6::Nosubnet::Full = Pattern[/\A[[:xdigit:]]{1,4}(:[[:xdigit:]]{1,4}){7}\z/] puppetlabs-stdlib-9.4.1/types/ip/address/v6/nosubnet.pp0100644000175100001770000000035414523206606020107 0ustar00# Validate an IPv6 address without subnet type Stdlib::IP::Address::V6::Nosubnet = Variant[ Stdlib::IP::Address::V6::Nosubnet::Full, Stdlib::IP::Address::V6::Nosubnet::Compressed, Stdlib::IP::Address::V6::Nosubnet::Alternative, ] puppetlabs-stdlib-9.4.1/types/ip/address/v6.pp0100644000175100001770000000033214523206606016246 0ustar00# Validate an IPv6 address type Stdlib::IP::Address::V6 = Variant[ Stdlib::IP::Address::V6::Full, Stdlib::IP::Address::V6::Compressed, Stdlib::IP::Address::V6::Alternative, Stdlib::IP::Address::V6::Nosubnet, ] puppetlabs-stdlib-9.4.1/types/ip/address.pp0100644000175100001770000000017614523206606015721 0ustar00# @summary Validate an IP address type Stdlib::IP::Address = Variant[ Stdlib::IP::Address::V4, Stdlib::IP::Address::V6, ] puppetlabs-stdlib-9.4.1/types/mac.pp0100644000175100001770000000024514523206606014421 0ustar00# @summary A type for a MAC address type Stdlib::MAC = 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/, ] puppetlabs-stdlib-9.4.1/types/objectstore0040755000000000000000000000000014523206607015532 5ustar00puppetlabs-stdlib-9.4.1/types/objectstore/gsuri.pp0100644000175100001770000000015714523206606017337 0ustar00# @summary Validate a Google Cloud object store URI type Stdlib::ObjectStore::GSUri = Pattern[/\Ags:\/\/.*\z/] puppetlabs-stdlib-9.4.1/types/objectstore/s3uri.pp0100644000175100001770000000017214523206606017250 0ustar00# @summary Validate an Amazon Web Services S3 object store URI type Stdlib::ObjectStore::S3Uri = Pattern[/\As3:\/\/.*\z/] puppetlabs-stdlib-9.4.1/types/objectstore.pp0100644000175100001770000000020514523206606016200 0ustar00# @summary Validate an ObjectStore type Stdlib::ObjectStore = Variant[ Stdlib::ObjectStore::GSUri, Stdlib::ObjectStore::S3Uri, ] puppetlabs-stdlib-9.4.1/types/port0040755000000000000000000000000014523206607014173 5ustar00puppetlabs-stdlib-9.4.1/types/port/dynamic.pp0100644000175100001770000000013514523206606016267 0ustar00# @summary Validate a dynamic port number type Stdlib::Port::Dynamic = Integer[49152, 65535] puppetlabs-stdlib-9.4.1/types/port/ephemeral.pp0100644000175100001770000000014214523206606016603 0ustar00# @summary Validate an ephemeral port number type Stdlib::Port::Ephemeral = Stdlib::Port::Dynamic puppetlabs-stdlib-9.4.1/types/port/privileged.pp0100644000175100001770000000013614523206606016776 0ustar00# @summary Validate a priviliged port number type Stdlib::Port::Privileged = Integer[1, 1023] puppetlabs-stdlib-9.4.1/types/port/registered.pp0100644000175100001770000000014014523206606016774 0ustar00# @summary Validate a registered port number type Stdlib::Port::Registered = Stdlib::Port::User puppetlabs-stdlib-9.4.1/types/port/unprivileged.pp0100644000175100001770000000014714523206606017343 0ustar00# @summary Validate an unprivileged port number type Stdlib::Port::Unprivileged = Integer[1024, 65535] puppetlabs-stdlib-9.4.1/types/port/user.pp0100644000175100001770000000014214523206606015617 0ustar00# @summary Validate a port number usable by a user type Stdlib::Port::User = Integer[1024, 49151] puppetlabs-stdlib-9.4.1/types/port.pp0100644000175100001770000000011014523206606014634 0ustar00# @summary Validate a port number type Stdlib::Port = Integer[0, 65535] puppetlabs-stdlib-9.4.1/types/syslogfacility.pp0100644000175100001770000000054014523206606016724 0ustar00# @summary Validate a syslog facility type Stdlib::Syslogfacility = 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', ] puppetlabs-stdlib-9.4.1/types/unixpath.pp0100644000175100001770000000025114523206606015516 0ustar00# @summary Validate a UNIX path # this regex rejects any path component that does not start with "/" or is NUL type Stdlib::Unixpath = Pattern[/\A\/([^\n\/\0]+\/*)*\z/] puppetlabs-stdlib-9.4.1/types/windowspath.pp0100644000175100001770000000024714523206606016232 0ustar00# @summary Validate a Windows path type Stdlib::Windowspath = Pattern[/\A(([a-zA-Z]:[\\\/])|([\\\/][\\\/][^\\\/]+[\\\/][^\\\/]+)|([\\\/][\\\/]\?[\\\/][^\\\/]+)).*\z/] puppetlabs-stdlib-9.4.1/types/yes_no.pp0100644000175100001770000000013014523206606015146 0ustar00# @summary Validate a yes / no value type Stdlib::Yes_no = Pattern[/\A(?i:(yes|no))\z/]